値を集計するためのロールアップ フィールドを作成する
このトピックは、Dynamics 365 Customer Engagement (on-premises) に適用されます。 このトピックの Power Apps バージョンについては、以下を参照してください。 Power Apps でロールアップ フィールドを定義する
ロールアップ フィールドは、主要なビジネス指標を監視することによって、ユーザーがデータを把握するのに役立つように設計されています。 ロールアップ フィールドには、取引先企業のオープンしている営業案件など、指定したレコードに関連するレコードに対して計算された集計値が含まれています。 メール、予定などのレコードに直接関連する活動から、また活動関係者エンティティを通してレコードに間接的に関連している活動から、データを集計することもできます。 間接的に関連する活動を含めることを選択した場合、参加タイプに関係なく、関連するすべての活動が考慮されます。 たとえば、取引先企業レコードは、電子メール活動の [宛先]、[差出人]、または [CC] フィールドに表示されます。 ただし、このレコードでは、他の関連エンティティの関連活動は考慮されません。 たとえば、営業案件が取引先企業の関連エンティティである場合、活動を集計する取引先企業エンティティのロールアップ フィールドには、営業案件エンティティに関連する活動は含まれません。 より複雑なシナリオでは、レコードの階層にわたるデータを集計できます。 管理者またはカスタマイザーの場合は、機能を使用して、ロールアップ フィールドを定義できます。開発者がコードを記述する必要はありません。
ロールアップ フィールドの利点と機能
ロールアップ フィールドの利点と機能には次のものがあります。
ビジュアル編集が簡単です。 通常のフィールドを作成する場合とまったく同じように、フィールド エディターを使用して、ロールアップ フィールドを作成できます。
幅広い種類の集計機能。
SUM
、COUNT
、MIN
、MAX
、およびAVG
の関数を使用してデータを集計できます。集計に対応した十分なフィルターサポート。 複数の条件を設定すると同時に、ソース エンティティまたは関連エンティティに対して各種フィルターを設定できます。
ユーザー インターフェイスとのシームレスな統合。 ロールアップ フィールドをフォーム、ビュー、グラフ、レポートに組み込むことができます。
ロールアップ フィールドはソリューション コンポーネントです。 ロールアップ フィールドはコンポーネントとして組織間を簡単に移送することができるし、またソリューションに入れて分配することができます。
ロールアップ フィールドと計算フィールドは相互補完的です。 ロールアップ フィールドを計算フィールドの一部として、逆に、計算フィールドをロールアップ フィールドの一部として使用できます。
ロールアップ フィールドの一部の例として、以下のものがあります。
取引先企業のオープンしている営業案件の合計売上見込み
1 つの階層内のすべての取引先企業に関してオープンしている営業案件の合計売上見込み
下位の営業案件を含む営業案件の合計売上見込み
キャンペーンによって発生した見込みのある潜在顧客の合計売上見込み
1 つの階層内のすべての取引先企業に関して高優先度のオープンしているサポート案件の数
1つの取引先企業に関して高優先度のすべてのオープンしているサポート案件がもっとも早く作成された時期
各ロールアップ フィールドには、<fieldname
>_date と <fieldname>
_state の接尾語のパターンを持つ 2 つの付属フィールドが作成されます。 _date フィールドは日時データ型で、_state フィールドは整数データ型です。
_date フィールドはシステムによって作成されたフィールドで、ロールアップ フィールドの値が計算された最後の日時を保存するために使用されます。
_state フィールドには以下の値が入ります。
状態 | Description |
---|---|
0 => NotCalculated | このフィールド値はまだ計算されていません。 |
1 => Calculated | このフィールド値は、_date フィールドの最新の更新時間ごとに計算されます。 |
2 => OverflowError | このフィールド値の計算によってオーバフロー エラーが発生しました。 |
3 => OtherError | このフィールド値の計算は内部エラーによって失敗しました。 計算ジョブの次の実行によって、これを修復することができるようです。 |
4 => RetryLimitExceeded | 並行処理の多さと競合のロックが原因で、値の計算の再試行の最大数を超過し、フィールド値の計算に失敗しました。 |
5 => HierarchicalRecursionLimitReached | 最大限度の階層の深さに計算が到達したことが原因で、フィールド値の計算に失敗しました。 |
6 => LoopDetected | レコードの階層で再帰的ループが検出されたことが原因で、フィールド値の計算に失敗しました。 |
ロールアップ計算
ロールアップは、バックグラウンドで非同期に実行される、スケジュールされたシステム ジョブによって計算されます。 ロールアップ ジョブを表示および管理する管理者になる必要があります。 ロールアップ ジョブを表示するには、設定>システム ジョブ>ビュー>定期的なシステム ジョブ の順に移動します。 関連するジョブをすばやく見つけるには、システム ジョブの種類のロールアップ フィールドの一括計算またはロールアップ フィールドの計算によってフィルター処理できます。
ロールアップ フィールドの一括計算は、ロールアップ フィールドごとに作成された定期的ジョブです。 このジョブは、ロールアップ フィールドを作成または更新した後に 1 回実行されます。 このジョブは、このフィールドが含まれるすべての既存のレコードの指定されたロールアップ フィールドの値を再計算します。 既定では、このジョブは、フィールドの作成または更新から12時間後に実行されます。 ジョブが完了すると、このジョブは、遠い将来、約 10 年後に実行されるように自動的にスケジュールされます。 フィールドが変更されると、ジョブは更新から 12 時間後に再度実行されるように再設定されます。 ロールアップ フィールドの一括計算が組織の非稼動時間に確実に実行されるようにするには、12 時間の遅延が必要です。 ロールアップ フィールドの作成後または変更後に、ロールアップ フィールドの一括計算が非稼働時間に実行されるように、その開始時間を管理者が調整することをお勧めします。 たとえば、ロールアップ フィールドの効率的な処理を保証するために、ジョブ実行の適切な時間は午前零時です。
ロールアップ フィールドの計算は、指定されたエンティティの既存レコードのすべてのロールアップ フィールドの逐次計算を実行する定期的なジョブです。 各エンティティについてロールアップ フィールド計算のジョブは 1 つだけです。 逐次計算とは、最後の ロールアップ フィールドの一括計算 ジョブの実行の終了後に、作成、更新、または削除されたレコードを、 ロールアップ フィールドの計算 ジョブが処理することを意味します。 既定の最大反復設定は 1 時間です。 エンティティの最初のロールアップ フィールドが作成されるときにジョブが自動的に作成され、最後のロールアップ フィールドが削除されるときにジョブが削除されます。
オンライン再計算オプション。 下記に示されるように、フォームのロールアップ フィールドにマウス ポインタを重ねると、最後のロールアップの時間を表示できます。また、そのフィールドの横にある 更新 アイコンを選択して、ロールアップ値を更新できます。
オンライン再計算オプション (フォーム上の手動更新) を使用するとき、留意すべきいくつかの考慮事項があります。
エンティティに対する書き込み特権と、更新の対象となるソース レコードに対する読み取りアクセス権が必要です。 たとえば、取引先企業のオープンしている営業案件から売上見込みを計算するとき、書き込み特権は営業案件エンティティに対しては必要はありませんが、取引先企業エンティティに対してのみ必要です。
このオプションは、オンライン モードでのみ使用できます。 オフライン作業中は、ロールアップ フィールドは使用できません。
ロールアップ更新時の最大レコード数は 50,000 レコードに制限されます。 階層ロールアップ時には、その階層全体の関連レコードに適用されます。 限界を超えた場合、エラー メッセージが表示されます: "関連レコードの計算の限界数量の 50,000 に到達したので計算をオンラインで実行することができません。" ロールアップがシステム ジョブによって自動的に再計算されるときは、この上限は適用されません。
ソースレコードの最大の階層の深さの限界は 10 です。 限界を超えた場合、エラー メッセージが表示されます: "ソース レコードの階層の深さの限界の 10 に到達したので計算をオンラインで実行することができません。" ロールアップがシステム ジョブによって自動的に再計算されるときは、この上限は適用されません。
システム管理者は、ロールアップ ジョブの繰り返し実行のパターンを変更できます。また、ロールアップ ジョブを延期、一時停止、再開することができます。 ただし、ロールアップ ジョブを取り消し、または削除することはできません。 定期的なアイテムのパターンを一時停止、延期、再開、または修正するには、設定>システム ジョブ の順に移動します。 ビューで、[定期的なシステム ジョブ] を選択します。 ナビゲーション バーで、アクションを選択し、目的のアクションを選択します。 ロールアップ フィールド一括計算ジョブの場合に使用できる選択肢: 再開、延期、および一時停止。 ロールアップ フィールド計算ジョブの場合に使用できる選択肢: 反復の変更、再開、延期、および一時停止。
ロールアップ フィールドのビジネス シナリオ
いくつかのロールアップ フィールドのシナリオを見てみましょう。 レコードのデータを、階層を使用して、また階層を使用せずに、関連レコードから集計します。 関連する活動から、また活動関係者エンティティ経由でレコードに間接的に関連する活動から、レコードのデータを集計することもできます。 各サンプルでは、フィールド エディターを使用して、ロールアップ フィールドを定義します。 フィールド エディターを開くには、ソリューション エクスプローラーを開き、コンポーネント>エンティティを展開します。 必要なエンティティを選択し、フィールドを選択します。 新規を選択します。 エディターで、フィールドの種類およびデータの種類を含む必要な情報をフィールドに設定します。 データの種類の選択が終わったら、フィールドの種類でロールアップを選択します。 データ型には、小数、整数、通貨、および日時があります。 フィールドの種類の隣の編集ボタンを選択します。 これによって、ロールアップ フィールド定義エディターが表示されます。 ロールアップ フィールド定義は、ソース エンティティ、**関連エンティティ、集計の 3 つのセクションから構成されます。
ソース エンティティセクションで、ロールアップ フィールドが定義されるエンティティを指定し、1 つの階層全体の集計を行うかどうかを指定します。 ロールアップの対象として使用する階層内のレコードを指定する、複数の条件を設定したフィルタを追加できます。
関連エンティティで、集計の対象とするエンティティを指定します。 ソース エンティティの階層でのロールアップを選択したとき、このセクションはオプションです。 計算で使用する関連レコードを指定する、複数の条件を設定したフィルタを追加できます。 たとえば、年間売り上げが $1000 を超える、オープンしている営業案件の売り上げを含めます。
集計セクションで、計算の対象となるマトリックスを指定します。 SUM、COUNT、MIN、MAX または AVG などの使用できる集計関数を選択できます。
関連レコードからレコードのデータを集計する
この例では、階層は使用されません。 取引先企業の合計売上見込みが、関連付けられたオープンしている営業案件から計算されます。
レコードのデータを階層の全域の子レコードから集計する
この例では、階層全域の、子営業案件を含む営業案件の合計売上見込みを計算します。
レコードのデータを階層の全域の関連レコードから集計する
この例では、階層全域の全取引先企業のオープンしている営業案件の合計売上見込みを計算します。
すべての関連する活動からレコードのデータを集計する
この例では、費やされて請求の対象となる合計の時間を、取引先企業と関連するすべての活動から計算します。 これには、電話、予定、またはユーザー定義の活動に費やした時間を含めることができます。
以前のリリースでは、電話、FAX、予定などの個別の活動について、ロールアップ フィールドを定義できました。 しかし、ここに示す例の結果を得るには、計算フィールドを使用してデータの集計をする必要がありました。 現在は、活動エンティティに対して 1 つのロールアップ フィールドを定義することによって、ワンステップでそれを行うことができます。
すべての関連する活動から、また活動関係者エンティティ経由でレコードに間接的に関連する活動からレコードのデータを集計する
この例では、取引先企業に送信された電子メールの総数を計算します。この場合、取引先企業は電子メールの "宛先" 行または "CC 宛先" 行に記載されています。 これは、ロールアップ フィールド定義の定義活動関係者エンティティに対して、フィルターで参加の種類を指定して行います。 フィルターを使用しない場合、活動に対する使用可能なすべての参加の種類が計算に使用されます。 特定の活動に対して使用可能な活動関係者エンティティと参加の種類の詳細については、「ActivityParty エンティティ」を参照してください。
AVG 演算子を使用して、関連レコードからレコードのデータを集計する
この例では、取引先企業と関連するすべての営業案件から平均売上見込みを計算します。
次の例は、取引先企業の階層にわたる関連する営業案件から、平均の売り上げ見込みを計算する方法を示しています。 平均の売り上げ見込みを階層の各レベルで表示できます。
為替ロールアップ フィールド計算
通貨ロールアップ フィールドの値は、次の数式に基づいて計算されます。
Sum Rollup Field's Value on SourceEntity = (Sum of CurrencyBaseFieldValues on RelatedEntity) * (ExchangeRate on SourceEntity)
ここで ExchangeRate は、レコードが作成された時点、またはレコードの通貨フィールドが更新された時点のレコードレベルの為替レートを示します。
ロールアップ フィールドの考慮事項
ロールアップ フィールドを使用するときは、次の特定の条件と制約に注意ください。
組織については最大 100 のロールアップ フィールドを、各エンティティについては最大 10 のロールアップ フィールドを定義できます。
ワークフローをロールアップ フィールドの更新によって起動することはできません。
ワークフローの待機条件にロールアップ フィールドを使用することはできません。
ロールアップ フィールドに対するロールアップはサポートされません。
ロールアップは、他の計算フィールドのすべてのフィールドが現在のエンティティにある場合も、他の計算フィールドを使用する計算フィールドを参照できません。
ロールアップ フィールドは、
NOW()
、UTCNOW()
、ISUTCTODAY()
、またはUTCTODAY()
のような時間拘束関数に依存する数式フィールドを使用している場合、自動的に更新されません。 オンライン再計算オプション (フォームの手動更新) または 再計算 最新のロールアップ フィールド値を計算するには、ボタンを使用する必要があります。ロールアップはフィルタを、ソース エンティティまたは関連エンティティ、単純なフィールドまたは複雑でない計算フィールドに追加できません。
ロールアップは、1:N の関連付けを持つ関連エンティティに対してのみ実行できます。 ロールアップは、N:N の関連付けに対しては実行できません。
ロールアップは、活動エンティティや活動関係者エンティティの 1:N の関連付けに対しては実行できません。
業務ルール、ワークフロー、または計算フィールドは、ロールアップ フィールドの最終の計算された値を使用します。
ロールアップ フィールドは、システム ユーザーのコンテキストで集計されます。 すべてのユーザーに同じロールアップ フィールドの値を表示できます。 ロールアップ フィールドの表示を、フィールド レベル セキュリティ (FLS) を使用してロールアップ フィールドにアクセスできる者を制限することによって制御できます。 詳細: フィールド レベル セキュリティ
集計フィールドの小数点以下の桁数がロールアップ フィールドの小数点以下の桁数より多い場合、集計を実行する前に集計フィールドの桁数はロールアップの桁数に丸められます。 この動作を説明するために、特定の例を見てみましょう。 関連する営業案件の売上を予測している取引先企業エンティティのロールアップ フィールドには、小数点以下に 2 桁あると仮定しています。 推定 営業案件エンティティの売上見込みフィールドは、小数点以下の 4 桁の集計フィールドです。 この例では、取引先企業に 2 つの関連する営業案件が存在しています。 売上見込みの集計は次のとおりに計算されます:
推定 最初の営業案件の売上見込み: $1000.0041
推定 2番目の営業案件の売上見込み: $2000.0044
売り上げ見込みの集計 売上: $1000.00 + $2000.00 = $3000.00
このように、集計が実施される前に集計フィールドに小数点以下は 2 桁に丸められます。
取引先企業や取引先担当者など一部のエンティティ フォームには、標準で、関連するグリッドが含まれています。 たとえば、取引先企業フォームには取引先担当者、サポート案件、営業案件、他のグリッドが含まれます。 取引先企業フォーム グリッドに表示されているレコードの一部は、直接的に取引先企業レコードに関連付けられます。他は、他のレコードと関連付けによって、間接に関連付けられます。 対照的に、ロールアップ フィールド集計は、ロールアップ フィールド定義で明示的に定義されている直接的な関連付けのみが使用されます。 他の関係は考慮されません。 動作の違いを説明するために、次の例を見てみましょう。
取引先企業 A1 には取引先責任者 P1 がいます。 サポート案件 C1 は取引先企業 A1 に関連付けられ (C1 顧客フィールド = A1)、サポート案件 C2 は取引先担当者の P1 に関連付けられています (C2 顧客フィールド = P1)。
A1 レコードの取引先企業フォームのサポート案件は、2 つのサポート案件、C1 と C2 を表示します。
サポート案件の合計数という取引先企業エンティティのロールアップ フィールドは、取引先企業に関連付けられたサポート案件に使用されます。
取引先企業ロールアップ フィールド定義で、取引先企業と顧客間関係があるサポート案件を指定します。 集計後、サポート案件の合計数は 1 になります。(サポート案件 C1) サポート案件 C2 は、取引先企業ではなく取引先担当者と直接関連付けられており、取引先企業ロールアップ フィールド定義で明示的に定義できないため、合計に含まれません。 そのため、ロールアップの操作から戻されるサポート案件の合計数は、サポート案件グリッドで示されるサポート案件の件数と一致しません。