dax_request プラグイン

dax_request プラグインは、Power BIセマンティック モデルに対して Data Analysis Expressions (DAX) クエリを実行し、結果をテーブルとして返します。 標準の Kusto クエリ言語 (KQL) 演算子を使用して、返されたテーブルを処理します。 evaluate 演算子を使用してプラグインを呼び出します。

このプラグインでは、POWER BI DAX クエリの実行 API を使用します。これは、Apache Arrow 形式で結果を返します。 プラグインは、応答を KQL テーブルに変換するときに、サポートされている列の型を保持します。

Prerequisites

  • セマンティック モデルは、Fabricまたは Premium 容量に割り当てられているワークスペースPower BI必要があります。
  • データセット実行クエリ REST API、XMLA エンドポイントの許可、オンプレミスセマンティック モデルを使用したExcelでの分析のテナント設定を有効にする必要があります。
  • セマンティック モデルに対する ビルドと読み取りのアクセス許可 が必要です。
  • クラスター吹き出しポリシーでは、dax吹き出しのapi.powerbi.comを許可する必要があります。 このポリシーを変更するには、 AllDatabasesAdmin または Ops アクセス許可が必要です。

構文

evaluate dax_request ( ConnectionString,DaxQuery) [:OutputSchema]

構文規則の詳細については、 リファレンス ドキュメントの構文規則を参照してください。

Parameters

Name タイプ Required Description
コネクションストリング string Yes セマンティック モデルの URL の後に ;Impersonate。 サポートされている URL 形式については、「 接続文字列」を参照してください。
DaxQuery string Yes セマンティック モデルに対して実行する DAX クエリ。
OutputSchema - - 予想される出力列の名前と型。 構文 (ColumnName:ColumnType [, ...])を使用します。

![注] OutputSchema の指定をお勧めします。 これにより、Kusto は、スキーマ検出中に DAX クエリをPower BIに送信することなく、プラグインの出力列と型を決定できます。 代わりに、Power BI要求は、KQL クエリの残りの部分と共に、クエリ実行に遅延されます。 返されたスキーマが宣言されたスキーマと互換性がない場合、プラグインはエラーを返します。

接続文字列

接続文字列は、セマンティック モデルの URL と;Impersonate認証ディレクティブで構成されます。 次のいずれかの形式を使用します。

  • ワークスペース内のセマンティック モデル: https://api.powerbi.com/v1.0/myorg/groups/WorkspaceId/datasets/SemanticModelId;Impersonate

  • マイ ワークスペースのセマンティック モデル: https://api.powerbi.com/v1.0/myorg/datasets/SemanticModelId;Impersonate

myorg パス セグメントはリテラルです。 *WorkspaceId* および *SemanticModelId* はグローバル一意識別子 (GUID) である必要があります。 SemanticModelId の後にクエリ文字列、フラグメント、または末尾のパスを含めないでください。

認証と承認

プラグインは、Microsoft Entraの代理認証を使用します。 エンジンは要求するユーザーのトークンを取得し、そのユーザーのセキュリティ コンテキストで DAX クエリを送信します。 ユーザーには、セマンティック モデルに対する ビルドと読み取りのアクセス許可 が必要です。 ユーザーに対して構成された行レベルのセキュリティまたはオブジェクト レベルのセキュリティは、クエリに適用されます。

認証ディレクティブとして ;Impersonate を使用します。 マネージド ID、サービス プリンシパル、アプリケーション キー認証はサポートされていません。

Important

機密情報を含む 文字列には、難読化された文字列リテラル を使用します。 難読化された値は、Kusto トレースには表示されません。

構成と吹き出しポリシー

プラグインは、Power BIへの外部呼び出しを行います。 既定の吹き出しポリシーは吹き出しdaxブロックするため、クラスター管理者はPower BIエンドポイントを明示的に許可する必要があります。

次のコマンドは、制限の厳しい dax ルールを既存の クラスター吹き出しポリシーにマージします。

.alter-merge cluster policy callout @'[{
  "CalloutType": "dax",
  "CalloutUriRegex": "api\\.powerbi\\.com.*",
  "CanCall": true
}]'

ポリシーを確認します。

.show cluster policy callout

Returns

プラグインは、DAX クエリの結果を KQL テーブルとして返します。 サポートされている方向データ型が保持されます。 たとえば、矢印の int64、 double、 utf8、 date-time の値は、それぞれ Kusto long、 real、 string、および datetimeにマップされます。

Power BIは、[Category]などの角かっこで囲まれた列名を返します。 KQL では、['[Category]']などの['...']構文でこれらの名前を参照します。

Warning

プラグインは、POWER BI DAX クエリ実行 API (resultSetRowCountLimit) の既定の行制限を使用します。 DAX クエリでこの制限より多くの行が生成される場合、返されるテーブルはエラーなしで不完全になる可能性があります。 DAX クエリのデータをフィルター処理または集計して、結果を制限内に保持します。 後で KQL でフィルター処理または集計しても、省略された行は回復されません。

Examples

テーブルからすべての行を返す

次の例では、 Sales テーブルに対してクエリを実行します。 返される結果は、API の既定の行制限の対象になります。

evaluate dax_request(
  'https://api.powerbi.com/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
  'EVALUATE Sales')

Kusto を使用して DAX の結果を処理する

次の例では、DAX で 2 つの列を選択し、結果を KQL にまとめ、カテゴリ別にフィルター処理します。

evaluate dax_request(
  'https://api.powerbi.com/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
  'EVALUATE SELECTCOLUMNS(Sales, "Category", Sales[Category], "Amount", Sales[Amount])')
| summarize TotalAmount = sum(['[Amount]']) by ['[Category]']
| where ['[Category]'] == 'Electronics'

Tip

可能であれば DAX でデータをフィルター処理して集計し、Kusto に返されるデータの量を減らします。

出力スキーマを指定する

次の例では、Kusto がクエリ分析中にPower BIに接続せずにスキーマを特定できるように、想定される出力スキーマを宣言します。 宣言されたスキーマは、ライブ結果スキーマと一致している必要があります。

evaluate dax_request(
  'https://api.powerbi.com/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
  'EVALUATE ROW("cnt", COUNTROWS(Sales), "sumAmt", SUM(Sales[Amount]))')
  : (['[cnt]']:long, ['[sumAmt]']:real)

Troubleshooting

Error 原因と解決策
無効な接続文字列 URL でサポートされている形式が使用されていること、ワークスペースとセマンティック モデル ID が有効な GUID であり、文字列が ;Impersonateで終わることを確認します。
吹き出しは許可されていません api.powerbi.comへのdax呼び出しを許可するようにクラスター吹き出しポリシーを構成します。
認証または承認エラー 必要なテナント設定が有効であること、および要求するユーザーがセマンティック モデルに対するビルドおよび読み取りアクセス許可を持っていることを確認します。
HTTP 要求エラー 可用性Power BI サービス、エンドポイントのアクセシビリティ、およびセマンティック モデルの URL を確認します。