Datasets - Execute Dax Queries
指定されたデータセットに対してデータ分析式 (DAX) クエリを実行します。 データセットは マイ ワークスペースに存在する必要があります。 応答は Apache Arrow 形式で返されます。
アクセス許可またはクエリ エラーの結果は次のようになります。
-
XMLA endpoint feature is disabled. Turn on the tenant setting 'Allow XMLA endpoints and Analyze in Excel with on-premises semantic models' to enable this feature.などの応答エラー。 - エラーの詳細を含むレコード バッチを含む成功した HTTP 状態コード (200)。
Permissions
統合設定の下にあるテナント設定データセット実行クエリ REST API を有効にする必要があります。
ユーザーには、データセットの読み取りとビルドのアクセス許可が必要です。 詳細については、「 データセットアクセス許可の管理」を参照してください。
必要なスコープ
Dataset.ReadWrite.All または Dataset.Read.All
Limitations
- この API は、容量でホストされているデータセットでのみ使用できます。
- Azure Analysis Services でホストされているデータセット、またはオンプレミスの Azure Analysis Services モデルへのライブ接続を持つデータセットはサポートされていません。
- API 呼び出しごとに 1 つのクエリが、クエリに複数の evaluate ステートメントを含めることができます。
- クエリを実行するデータセットに関係なく、ユーザーごとに 1 分あたり 120 クエリ要求の制限があります。
- サービス プリンシパルを使用するには、[開発者設定] の [サービス プリンシパルによる Power BI API の使用をサービス プリンシパルに許可する] 設定が有効になっていることを確認します。 RLS を使用したセマンティック モデルの詳細については、 RLS の制限事項を参照してください。
- 現時点では、DAX クエリと INFO 関数のみがサポートされています。 MDX クエリと DMV クエリはサポートされていません。
応答形式
応答本文には、1 つ以上の連結された Apache Arrow IPC ストリームが含まれています。 各ストリームは、独自のスキーマとレコード バッチで自己完結型です。 応答を処理するには、 Apache Arrow クライアント ライブラリを使用します。
応答には、スキーマ レベルのメタデータ (方向スキーマのキーと値のペア) によって識別される、次の行セット型が含まれる場合があります。
- データ行セット: クエリ結果が含まれます。 特別なメタデータ キーはありません。 列名と型は、DAX クエリによって決まります。
-
エラー行セット: スキーマ メタデータ内の
IsError=trueによって識別されます。ErrorCode、ErrorMessage、ErrorDescription、ソースの場所の各フィールドの列が含まれます。 スキーマ メタデータには、FaultCode(16 進数のエラー コード) とFaultString(エラー メッセージ) も含まれます。
応答でバッチを記録する場合は、圧縮LZ4_FRAME使用します。 pyarrow ライブラリはこれを自動的に処理します。 .NETの場合は、Apache.Arrow.Compression NuGet パッケージをインストールします。
Important
クエリ エラーでは、HTTP 200 が返され、方向ストリームにエラー行セットが表示されます。 成功した HTTP 状態コードでも、 IsError のスキーマ メタデータを常に確認してください。
次のPython例は、pyarrow を使用してデータを読み取り、エラーを確認する方法を示しています。
import io
import pyarrow as pa
# response = requests.post(url, headers=headers, json=request_body)
stream = io.BytesIO(response.content)
results = []
while stream.tell() < len(response.content):
try:
reader = pa.ipc.open_stream(stream)
table = reader.read_all()
metadata = {
k.decode(): v.decode()
for k, v in (reader.schema.metadata or {}).items()
}
if metadata.get("IsError") == "true":
raise RuntimeError(
f"Query error [{metadata.get('FaultCode')}]: "
f"{metadata.get('FaultString')}"
)
else:
results.append(table)
except pa.ArrowInvalid:
break
print(results[0].to_pandas())
.NETの場合は、ストリーム解析、エラー検出、LZ4 展開を処理するこの SDK の DaxQueryArrowResponseReader クラスを使用します。
POST https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/executeDaxQueries
URI パラメーター
| 名前 | / | 必須 | 型 | 説明 |
|---|---|---|---|---|
|
dataset
|
path | True |
string (uuid) |
データセット ID |
要求本文
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| query | True |
string |
クエリ テキスト。 |
| applicationContext |
string |
操作に関する追加情報を含む JSON 構造体。 |
|
| culture |
string |
|
|
| customData |
string |
動的 RLS で使用するカスタム データ。 たとえば、 |
|
| effectiveUsername |
string |
クエリの有効なユーザー名。 |
|
| memoryLimit |
integer (int64) |
クエリのメモリ制限 (KB 単位)。 |
|
| queryTimeout |
integer |
クエリのタイムアウト (秒単位)。 |
|
| resultSetRowCountLimit |
integer |
返される行の最大数。 既定値は 1,000,000 行です。 |
|
| roles |
string[] |
ユーザーに割り当てられたロール。 |
|
| schemaOnly |
boolean |
クエリがスキーマのみを返す必要があるかどうか。 |
応答
| 名前 | 型 | 説明 |
|---|---|---|
| 200 OK |
string |
クエリが正常に実行されました。 Apache Arrow 形式のバイナリ データを返します。 Media Types: "application/vnd.apache.arrow.stream" |
例
| Execute query with culture |
| Execute query with custom data |
| Execute query with effective username |
| Execute simple DAX query |
Execute query with culture
要求のサンプル
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE ROW(\"Formatted Date\", FORMAT(DATE(2024, 12, 31), \"Long Date\"))",
"culture": "en-US"
}
応答のサンプル
Execute query with custom data
要求のサンプル
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE FILTER('Sales', 'Sales'[Region] = CUSTOMDATA())",
"customData": "North America"
}
応答のサンプル
Execute query with effective username
要求のサンプル
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE SUMMARIZECOLUMNS('Sales'[Region], \"Total\", SUM('Sales'[Amount]))",
"effectiveUsername": "user@contoso.com",
"roles": [
"SalesRole"
],
"queryTimeout": 300
}
応答のサンプル
Execute simple DAX query
要求のサンプル
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE VALUES('Product'[Category])",
"queryTimeout": 600,
"schemaOnly": false,
"resultSetRowCountLimit": 100000
}
応答のサンプル
定義
DatasetExecuteDaxQueriesRequest
データセットに対してクエリを実行する要求
| 名前 | 型 | 説明 |
|---|---|---|
| applicationContext |
string |
操作に関する追加情報を含む JSON 構造体。 |
| culture |
string |
|
| customData |
string |
動的 RLS で使用するカスタム データ。 たとえば、 |
| effectiveUsername |
string |
クエリの有効なユーザー名。 |
| memoryLimit |
integer (int64) |
クエリのメモリ制限 (KB 単位)。 |
| query |
string |
クエリ テキスト。 |
| queryTimeout |
integer |
クエリのタイムアウト (秒単位)。 |
| resultSetRowCountLimit |
integer |
返される行の最大数。 既定値は 1,000,000 行です。 |
| roles |
string[] |
ユーザーに割り当てられたロール。 |
| schemaOnly |
boolean |
クエリがスキーマのみを返す必要があるかどうか。 |