OData $apply オプションを使用して、Microsoft Dataverse でデータを集計およびグループ化します。 このクエリ オプションを使用すると、最大 50,000 個のレコードのコレクションに対して、合計、カウント、平均、グループ化操作などの計算を実行できます。
集計関数は、最大 50,000 個のレコードのコレクションで動作します。 Dataverse で集計機能を使用する方法の詳細については、「 FetchXml を使用したデータの集計」を参照してください。
OData データ集計の詳細については、 データ集計バージョン 4.0 の OData 拡張機能を参照してください。 Dataverse は、これらの集計方法のサブセットのみに対応しています。
注意
groupbyと datetime 値の使用はサポートされていません。$orderby集計値を使用した場合はサポートされていません。 この制限により、エラーThe query node SingleValueOpenPropertyAccess is not supportedが返されます。
使用例
次の例は、集計関数の使用方法を示しています。
- クエリ内の一意のステータスのリスト
- 状態の値ごとの件数
- 合計売上を集計する
- 状態に基づく平均売上
- 状態に基づく合計売上
- 主要担当者名別のアカウント合計収益
- 「WA」所在のアカウントの主要連絡先名
- 最後に作成されたレコードの日時
- 最初に作成されたレコードの日時
これらのサンプルは、簡潔にするために完全な要求と応答を示していません。
クエリ内の一意のステータスのリスト
GET accounts?$apply=groupby((statuscode))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2
}
]
}
ステータス値ごとの件数
GET accounts?$apply=groupby((statuscode),aggregate($count as count))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"count@OData.Community.Display.V1.FormattedValue": "8",
"count": 8
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"count@OData.Community.Display.V1.FormattedValue": "1",
"count": 1
}
]
}
合計売上を集計する
GET accounts?$apply=aggregate(revenue with sum as total)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"total@OData.Community.Display.V1.FormattedValue": "$440,000.00",
"total": 440000.000000000
}
]
}
状態に基づく平均売上
GET accounts?$apply=groupby((statuscode),aggregate(revenue with average as averagevalue))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
レスポンスボディ
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"averagevalue@OData.Community.Display.V1.FormattedValue": "$53,750.00",
"averagevalue": 53750.000000000
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"averagevalue@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"averagevalue": 10000.000000000
}
]
}
状態に基づく合計売上
GET accounts?$apply=groupby((statuscode),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"total@OData.Community.Display.V1.FormattedValue": "$430,000.00",
"total": 430000.000000000
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"total@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"total": 10000.000000000
}
]
}
主連絡担当者名ごとの総アカウント売上
GET accounts?$apply=groupby((primarycontactid/fullname),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"total@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"total": 10000.000000000,
"contact_fullname": "Jim Glynn (sample)"
},
{
"total@OData.Community.Display.V1.FormattedValue": "$80,000.00",
"total": 80000.000000000,
"contact_fullname": "Maria Campbell (sample)"
},
... <truncated for brevity>
]
}
「WA」 の主要取引先担当者名
GET accounts?$apply=filter(address1_stateorprovince eq 'WA')/groupby((primarycontactid/fullname))
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"contact_fullname": "Rene Valdes (sample)"
},
{
"contact_fullname": "Robert Lyon (sample)"
},
{
"contact_fullname": "Scott Konersmann (sample)"
}
]
}
最後に作成されたレコードの日時
GET accounts?$apply=aggregate(createdon with max as lastCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"lastCreate@OData.Community.Display.V1.FormattedValue": "3/25/2023 10:42 AM",
"lastCreate": "2023-03-25T17:42:47Z"
}
]
}
作成初期のレコードの日付と時刻
GET accounts?$apply=aggregate(createdon with min as firstCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答本文
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"firstCreate@OData.Community.Display.V1.FormattedValue": "3/25/2023 10:42 AM",
"firstCreate": "2023-03-25T17:42:46Z"
}
]
}
異なる列の値
OData には、結果を一意な値に制限する $distinct クエリ オプションはありません。 代わりに、$apply 変換で groupby システムクエリ オプションを使用します。 このメソッドは、各プロパティの個別の値を返します。
要求:
GET [Organization URI]/api/data/v9.2/accounts?$apply=groupby((statecode,statuscode,accountcategorycode))
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
応答:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode": 1,
"statecode": 0
},
{
"statuscode": 1,
"statecode": 0,
"accountcategorycode": 1
},
{
"statuscode": 1,
"statecode": 0,
"accountcategorycode": 2
},
{
"statuscode": 2,
"statecode": 1
}
]
}
OData 集計の制限事項
このセクションでは、OData を使用して現在使用できない FetchXml での集計を使用して使用できる機能について説明します。
CountColumn で一意の数値を取得する
OData で CountColumn を使用して個別の数の値を取得することはできません。 FetchXml を使用した個別の列値について説明します。
日付でグループ化する場合のタイム ゾーン
日付の一部でグループ化すると、常に UTC 時刻が使用され、代わりにユーザーのタイム ゾーンを使用するように指定する方法はありません。 FetchXml の日付の一部によるグループ化について説明します。
行の集計
表に 階層関係が定義されている場合、階層関係の参照列で行集計を返すことはできません。 FetchXml を使用した行集計について説明します。
クエリごとの制限
構成可能な集計制限を指定することはできません。 FetchXml を使用したクエリごとの制限について説明します。
制限事項
返される集計値が 50,000 レコードに限定されたクエリ。 この最大値で、システムの動作および信頼性を保持することができます。 クエリ内のフィルター条件に 50,000 を超えるレコードが含まれる場合は次のエラーが表示されます:
番号:
-2147164125
コード:8004E023
メッセージ:AggregateQueryRecordLimit exceeded. Cannot perform this operation.
クライアント エラー メッセージ: 最大レコード制限を超えています。 レコード数を減らしてください。
このエラーを回避するには、適切なフィルターをクエリに追加して、50,000 超のレコードを評価する必要がないことを確認します。 その後、クエリを何度か実行して結果をまとめます。 適切なフィルターはデータの性質によって異なりますが、日付範囲または選択列の値のサブセットである可能性があります。
次の手順
行を数える方法を学びましょう。