24
7

More than 1 year has passed since last update.

[Power BI] DAX Debugger in Tabular Editor 3

Last updated at Posted at 2022-12-03

Tablular Editor 3 のデバッグ機能について、丁寧な説明の動画がありますが、ちょっとわかりにくいので記事にしてみました。

※ソース元

 Daniel Otykier (@DOtykier) は、デンマークを拠点とするコンサルティング会社 Kapacity A/S のプリンシパル・アーキテクトです。2016年に Tabular Editor の開発を始めました。

 Reid Havens (@HavensBI) は、Havens Consulting Inc.の創設者であり、MVP(Microsoft Most Valued Professional)です。組織開発とビジネス分析の修士号を取得し、ワシントン大学や他の大学でビジネスインテリジェンス、レポート作成、データビジュアライゼーションのコースを教え、世界中の企業向けのトレーニングカリキュラムの開発や大学レベルのカリキュラムの開発も行っています。

DAXのデバッグとは

  • DAXは2つの異なる方法で使用される関数型言語です

    • Analysis Service の tabular model のクエリ言語
    • Analysis Service の tabular model でビジネスロジックを定義するためのデータ定義言語(DDL)
  • DAXと従来のプログラミング言語との違い

    • エントリーポイントを示す特定のコードがありません
    • Analysis Serviceは「ランタイム」エンジンです
      • DAXクエリを入力し、データ結果の出力を得るブラックボックスです
    • 関数型言語であり、制御構造やアプリケーションの状態を持ちません
  • DAXをデバッグする方法

    • DAXパーサーを活用することでDAX式のツリーにステップダウンできます
    • DAXパーサーは、評価コンテキスト(行/フィルター)に関する情報を提供します
    • 途中で適切なDAXクエリを生成して評価し、変数と部分式の結果を取得します

Tabular EditorでDAXをデバッグ

DAXデバッガは2つの方法で呼び出すことができます

  1. ピボットグリッドのデータセルから呼び出す
     フィルターコンテキストは、ピボットグリッドに適用されている現在のフィルターと、行/列スライサーとして使用されるフィールドから推測されます。

  2. DAXクエリの結果セルから呼び出す(いくつかの制限が適用されます)
     フィルターコンテキストは、現在の結果行から決定可能である必要があります。

Tabular Editor 3の制限事項

  • DAXクエリでは、クエリスコープ/暗黙的なメジャーを使用できません
  • 特定のDAX関数は完全にサポートされていません
  • メジャー以外の計算テーブル/計算列/計算グループの式は現在サポートされていません

TE3 DAX デバッガ機能

  • コール・ツリー・ビュー(Call Tree view)

    • 評価対象のDAX式の階層ビューを表示します
    • 式ツリーを移動することができます
    • 関数呼び出し、行コンテキスト、およびコンテンツ繊維に関する情報を表示します
      image.png
  • 評価コンテキスト・ビュー(Evaluation Context)

    • 現在のフィルター/行コンテキストに関する情報を表示します
    • 行コンテキスト内の行間を移動できます
    • 「外部」フィルターを切り替えられます
      image.png
  • ウォッチ・ビュー(Watch view)

    • 現在の評価コンテキスト内で任意のDAX式を入力及び評価できます
    • 変数、行コンテキスト列、スカラー、テーブル式をサポート
      image.png
  • ローカル・ビュー(Locals view)

    • 変数、サブ式、および現在のノードの結果をセルツリービューに表示します
      image.png

Tabular Editor 3のDAXデバッグ

TE3 DAX デバッガは、セマンティック(意味的)デバッガです

  • Analysis Serviceエンジンは、DAXデバッガのようにコードを物理的に走査することはありません。実際には、さまざまな最適化が行われるため、多くの部分式がAnalysis Serviceによって評価されることはありません。
  • DAXデバッガは、複雑なDAXコードの理解と分解を容易にするために、中間的な結果に踏み込んで評価するためのツールに過ぎません。

やるべきこと、やってはいけないこと:

  • やるべきこと:DAXデバッガを不正確な計算結果や予期しない結果を調査するために使用すること
  • やるべきこと:DAXデバッガをDAXの概念を理解するための学習ツールとして使用すること
  • やってはいけないこと:DAXデバッガをDAXのパフォーマンスを最適化するために使用してはいけません
  • やってはいけないこと:DAXデバッガをAnalysis Serviceで生成された論理/物理クエリプランを推論するために使用してはいけません

DAXデバッガ・デモ 1

フィルターの理解:

DemoMeasures
2012 Sales v1 := CALCULATE([Sales Amount], FILTER(Calendar, Calendar[Year] = 2012))
2012 Sales v2 := CALCULATE([Sales Amount], Calendar[Year] = 2012)
2012 Sales v3 := CALCULATE([Sales Amount], KEPPFILTERS(Calendar[Year] = 2012))

 このメジャーは、以下のように働きます。
image.png
 Tablular Editor 3 でメジャーの動きを見てみます。まず、Power BI Desktopのパフォーマンスアナライザを使って、クエリを取り出します。
image.png
 Tabular Editor 3のDAX Queryに貼り付けて実行してみます。(実行はF5キーでもOK)
image.png
 アイコンを使う場合は、これです。
image.png
 表示されたテーブルの中のセルを選び、Debugを実行します。
image.png
 デバッグ画面として、DAX debugger, Locals, Watch, Evaluation Context, Call Treeのビューが表示されます。
image.png
 Evaluation Contextには、現在のコンテキスト情報が表示されており、チェックボックスのチェックを外す事ができます。
 Call Treeには、メジャーで実行される関数が細分されて表示されており、それぞれをクリックするとDAX debuggerの表示がハイライトされ、Localsに値が表示されます。また、変数を使っている場合は、それぞれの変数の値を表示することができます。
image.png
 以下のような操作を行うこともできます。
image.png
 Locals viewに表示されるテーブルタイプでカッコで囲まれている部分は、行と列の数です。以下は365行13列のテーブルを表しています。
image.png
このテーブルの値を見たい場合、Watch viewに使います。
image.png

 1つ新しくメジャーを作成してみます。
image.png
image.png
image.png
image.png
image.png

DAXデバッガ・デモ 2

日付型の動作:

Tablular Editor 3 で Pivot Grid を作成します。
image.png
image.png
image.png
 日付がどのように使われているかを確認するために、Watch viewに以下のようなExpressionを入力してみます。
image.png
 Tableタイプを確認したい場合は、Valueの虫眼鏡をクリックして表示させます。
image.png

DAXデバッガ・デモ 3

制御フローの検証:

IF(
    ISFILTERD('Measure Slicer'[Measure Selector]),
    SWITCH(
        SELECTEDVALUE( 'Measure Slicer'[Measure Selector] ),
        "Sales Amount", [Sales Amount],
        "Gross Amount", [Gross Amount],
        "Discount Amount", [Discount Amount],
        "Please select only one measure'
    ),
    "Please select a measure on [Measure Selector]"
)

image.png
 Step In (F11) を使って評価を進めると、除外されたコードには消し線が入ります。
image.png

DAXデバッガ・デモ 4

行コンテキストの働きを見ます。
以下のようなPivot Gridで、Cell phonesのSales Amount Totalを右クリックしてDebug this valueを選択します。
image.png
F11を何度か押して、以下の部分がマーカー表示になったとき、Evaluation ContextのウィンドウにRow contextの状態が表示されます。
image.png
Call Treeウィンドウには、以下のようにSalesがイテレータされていることが表示されています。
image.png
Rowの下の数字ををクリックすると、数字が入力できるようになります。その数字を変化させると、選択されている行が変わり、LocalあるいはWatchウインドウに表示されている値が変化します。
虫眼鏡マークをクリックすると現在のコンテキストで選択されているデータが表示されます。
image.png

以下のようなDAX Queryを実行し、値をデバッグします。
image.png
以下のようなコンテキストが発生していることがわかります。
image.png

24
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
7