コードを使用した数式列、計算列、ロールアップ列

数式 列、計算 列、ロールアップ 列を使用すると、ユーザーは手動で計算を実行する必要がなくなり、作業に集中できます。 システム管理者は、開発者と作業をすることなく、多くの共通計算の値を含むフィールドを定義できます。 開発者は、コードではなく、プラットフォーム機能を活用してこれらの計算を実行することもできます。

この記事では、これらの列が列定義と API でどのように定義され、ロールアップ列と対話するかに焦点を当てます。 コードによる数式の定義はサポートされていません。 Power Apps を使用して、それぞれのタイプの列の数式を設定する必要があります。 方法を確認します:

共通の要素と特性

数式列、計算列、ロールアップ列には、次のような共通の要素と特性があります:

  • 読み取り専用です。
  • ユーザー固有ではありません。
    計算はシステム ユーザー アカウントを使用して実行されるため、その値は、フィールド レベルのセキュリティが有効な列など、ユーザーが表示する特権を持たないレコードに基づく場合があります。

AttributeMetadata を受け継ぐすべての列は SourceType プロパティを持ち、このプロパティには以下の表に示す値を格納することができます。

価値 Description
Null 数式列、計算列、またはロールアップ列として有効な列のタイプではありません。
12 単純な列。 この列は、数式列、計算列やロールアップ列として定義されていません。
6 計算列
2 ロールアップ列
3 数式列

数式列、計算列、ロールアップ列は、AttributeMetadata を引き継いだ既存の列タイプをベースにしています。 次の表は、使用可能な列タイプとサポートされているソース タイプを示しています:

タイプ 対応しているソース タイプ
BooleanAttributeMetadata 数式、計算、& ロールアップ
DateTimeAttributeMetadata 数式、計算、& ロールアップ
DecimalAttributeMetadata 数式、計算、& ロールアップ
StringAttributeMetadata 数式、計算、& ロールアップ
IntegerAttributeMetadata 計算 & ロールアップのみ
MoneyAttributeMetadata 計算 & ロールアップのみ
PicklistAttributeMetadata 計算 & ロールアップのみ

これらのタイプの列には、それぞれ数式、計算、ロールアップをサポートする以下のプロパティがあります。

Property Definition
FormulaDefinition 計算やロールアップの実行時に使用される数式の定義が含まれます。 数式列は YAML を使用して定義されます。 計算列およびロールアップ列は XAML を使用して定義されます。 この値を変更する唯一の方法は、Power Apps エディターを使用することです。
SourceTypeMask この読み取り専用のプロパティのビットマスク値には、列の数式で使用されるソースのタイプ、または列の数式が有効でない場合に使用されるソースのタイプが記述されます。

- 0: Undefined。 単純な列とロールアップ列の既定値です。
- 1: Simple。 数式列や計算列は、同じレコード内の列を参照します。
- 2: Related。 数式列や計算列は、関連するレコード内の列を参照します。
- 4: Logical。 数式列や計算列は、別のデータベース テーブルに格納されている同じレコードの列を参照します。 詳細情報: 論理列
- 8 Calculated 数式列や計算列は、別の数式列や計算列を参照します。
- 16: Rollup。 数式列や計算列は、ロールアップ列を参照します。
- 32: Invalid。 数式列、計算列、またはロールアップ列が無効です。
一般的には、すでに存在しない列を参照している場合、列は無効になります。

注意: これらの条件の 1 つ以上が計算またはロールアップ列にあてはまる場合があります。 これはビットマスク値であるため、ビットごとの操作を実行する際には SourceTypeMasks 列挙体 を使用すると便利な場合があります。

数式列と計算列

数式列や計算列は、、取得時にリアルタイムで計算されます。 数式列や計算列は、異なるデータ型を使用して構成できます。 たとえば、整数の計算列は、小数または通貨列から値を参照できます。

計算列値のみが、取得プラグイン パイプラインで使用できます。 テーブル レコードの更新または作成のポスト イメージには、ステージ 40 の計算列の値が含まれます。 詳細情報: イベント実行パイプラインエンティティ イメージ

制限

数式列と計算列には次の制限があります:

数式列

  • モバイル クライアントのユーザーがオフラインの場合、数式列には値がありません。
  • MaxValueMinValue の列定義プロパティは、数式列に設定することはできません。 詳細: ガイドラインと制限

計算列

同じテーブルの logical 値 上の計算列の値を使って、クエリで返されたデータを並べ替えることはできません。 クエリでは、計算列を使用して結果を並べるように指定することができますが、並べ替えの指定は無視され、エラーは発生しません。 計算列が同じレコード内の単純な値のみを参照する場合、並べ替えは正常に機能します。 計算列で使用されているソースを確認するには、列の定義に対して SourceTypeMask プロパティを使用します。

  • 計算列に使用できるのは、直接の親テーブルの列のみです。
  • 保存されたクエリ、グラフ、ビジュアル化には、固有の計算属性を最大 50 まで含めることができます。
  • 計算列は、その計算式の中で他の計算列を参照することができますが、自分自身を参照することはできません。
  • モバイル クライアントのユーザーがオフラインの場合、計算列には値がありません。
  • MaxValueMinValue 列に、列定義プロパティを設定することはできません

ロールアップ列

ロールアップ列はデータベースで保持されるため、通常の列と同様にフィルタリングや並べ替えに使用できます。 どの種類のプロセスやプラグインでも、列の直近の計算値を使用します。 システム ジョブは、ロールアップ列の値を非同期に計算します。 管理者がジョブを実行またはジョブを一時停止する時を設定します。 既定では、各列は毎時間更新されます。

ロールアップ列の作成または更新時に、ロールアップ フィールドの一括計算 ジョブは 12 時間以内に実行されるようにスケジュールされます。 12 時間の遅れは、リソースを大量に必要とするこの操作を、ユーザーへの影響が最も少ない時間帯に実行することを目的としています。 ジョブが完了すると、次回実行予定は 10 年後になります。 計算に問題がある場合は、問題がシステム ジョブで報告されます。 システム ジョブを検索して、ロールアップ フィールドのエラーを特定します。 システム ジョブを見つけるには、ロールアップ ジョブの表示を参照してください。

ヒント

展開環境のソリューションをテストする開発者の中には、12 時間も待ちたくない開発者もいます。 もっと早く実行すことも可能です。 システム ジョブ一覧で定期システム ジョブビューを使用して、一覧をフィルター処理し、ロールアップ フィールドの一括計算ジョブを見つけます。 ジョブを選択して、その他の操作 > 延期を使用して、もっと早い時間に設定します。

新しいロールアップ フィールドの一括計算ジョブの作成をプログラムでトリガーする場合は、RetrieveAttributeRequest を使ってロールアップ列の AttributeMetadata を取得し、UpdateAttributeRequest を使って実際の変更を行わずに列を更新します。

ロールアップ フィールドの一括計算 ジョブは、ロールアップ列を含むソリューションがインポートされるとすぐに実行されます。 これは、ユーザーに悪影響を与えない時間帯にのみソリューションをインストールする別の理由です。

テーブルの各ロールアップ列には、そのロールアップ列に対応する 2 つの列も含まれます。

  • <attribute SchemaName>_Date : DateTime – ロールアップが最後に計算された日時。
  • <attribute SchemaName> _State: Integer – ロールアップ計算の状態。 詳細: ロールアップ状態値

ロールアップ状態値

ロールアップ列の計算の状態は、対応する <attribute SchemaName>_State 列と CalculateRollupFieldResponse.FieldState で確認できます プロパティに設定します。 状態を示す値を次の表に示します。

状態値 内容
0 NotCalculated: 列の値はまだ計算されていません。
1 Calculated: 列の値は、<attribute SchemaName>_Date 列の最終更新時刻ごとに計算されます。
2 OverflowError: 列の値計算がオーバフロー エラーの原因になりました。
3 OtherError: 列の値計算は、内部エラーが原因で発生しました。次回の計算ジョブの実行で修正される可能性があります。
4 RetryLimitExceeded: 列の値の計算に失敗しました。これは、同時実行数とロックの競合が多いため、値の計算を再試行する最大数を超過しました。
5 HierarchicalRecursionLimitReached: 計算が最大限度の階層の深さに到達したため、属性値の計算に失敗しました。
6 LoopDetected: レコードの階層に再帰的なループが検出されたため、列の値の計算に失敗しました。

計算ロールアップ列の値をすぐに取得する

ロールアップ列は、開発者が必要に応じてロールアップカラムの値を計算するために使用できる CalculateRollupField メッセージに対応しています。 SDK の場合は、CalculateRollupFieldRequest クラス を使用し、Web API の場合は、 CalculateRollupField 関数 を使用します

このメッセージは、要求で指定した列のみの同期操作です。 そのレコードの値が他のロールアップ列の一部として含まれている場合、それらの列の値は、それらの計算を実行する定期的にスケジュールされた非同期ジョブが発生するまで、このメソッドの呼び出しによって発生する可能性のある値の変化を考慮しません。

制限

  • ロールアップ列は、ワークフロー イベントまたは待機状態として使用することはできません。 これらの列は、ワークフローをトリガーするイベントを発生させません。
  • ロールアップの列が更新されても、テーブルの ModifiedBy および ModifiedOn の列が更新されません。
  • ロールアップ列は最大 100 まで組織内で定義できます。 各テーブルには 10 未満のロールアップ列を設定できます。
  • ロールアップ列の式は、他のロールアップ列を参照できません。
  • ロールアップ列の式は、複雑な計算列や数式列を参照できません。 同じレコードの簡単な列を参照する計算列や数式列だけが、ロールアップで使用できます。
  • ロールアップ列の式には、多対多 (N: N) の関連付けのレコードを含めることはできません。 一対多 (1: N) の関連付けのレコードのみを含めることができます。
  • ロールアップ列の式では、 ActivityPointer または ActivityParty のテーブルとの一対多 (1:N) の関係を使用できません。

SourceTypeMasks リスト

計算列やロールアップ列をサポートしている列の SourceTypeMask プロパティには、ビットマスク値が含まれています。 値から関連情報を取得するには、ビットごとの操作を実行する際に、列挙体があると便利です。 SourceTypeMask プロパティ値を比較する際は、次の SourceTypeMasks 列挙体を使用します。

 public enum SourceTypeMasks  
{  
    /// <summary>  
    /// Undefined: 0 - The default value for simple and rollup columns.  
    /// </summary>  
    Undefined = 0,  
    /// <summary>  
    /// Simple: 1 - The calculated or formula column refers to a column in the same record.  
    /// </summary>  
    Simple = 1,  
    /// <summary>  
    /// Related: 2 - The calculated or formula column refers to a column in a related record.  
    /// </summary>  
    Related = 2,  
    /// <summary>  
    /// Logical: 4 - The calculated or formula column refers to a logical column.  
    /// </summary>  
    Logical = 4,  
    /// <summary>  
    /// Calculated: 8 - The calculated or formula column refers to another calculated column.  
    /// </summary>  
    Calculated = 8,  
    /// <summary>  
    /// Rollup: 16 - The calculated or formula column refers a rollup column.   
    /// </summary>  
    Rollup = 16,  
    /// <summary>  
    /// Invalid: 32 - The calculated,formula, or rollup column is invalid.  
    /// Typically this would be where a field refers to a column that no longer exists.   
    /// </summary>  
    Invalid = 32  
}  

参照

列の定義
数式列を使って作業する (プレビュー)
計算列を定義する
ロールアップ列を定義する
サンプル: 特定のレコードに関連付けられているロールアップ レコード

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。