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つの方法で呼び出すことができます
-
ピボットグリッドのデータセルから呼び出す
フィルターコンテキストは、ピボットグリッドに適用されている現在のフィルターと、行/列スライサーとして使用されるフィールドから推測されます。 -
DAXクエリの結果セルから呼び出す(いくつかの制限が適用されます)
フィルターコンテキストは、現在の結果行から決定可能である必要があります。
Tabular Editor 3の制限事項
- DAXクエリでは、クエリスコープ/暗黙的なメジャーを使用できません
- 特定のDAX関数は完全にサポートされていません
- メジャー以外の計算テーブル/計算列/計算グループの式は現在サポートされていません
TE3 DAX デバッガ機能
-
コール・ツリー・ビュー(Call Tree view)
-
評価コンテキスト・ビュー(Evaluation Context)
-
ウォッチ・ビュー(Watch view)
-
ローカル・ビュー(Locals view)
Tabular Editor 3のDAXデバッグ
TE3 DAX デバッガは、セマンティック(意味的)デバッガです
- Analysis Serviceエンジンは、DAXデバッガのようにコードを物理的に走査することはありません。実際には、さまざまな最適化が行われるため、多くの部分式がAnalysis Serviceによって評価されることはありません。
- DAXデバッガは、複雑なDAXコードの理解と分解を容易にするために、中間的な結果に踏み込んで評価するためのツールに過ぎません。
やるべきこと、やってはいけないこと:
- やるべきこと:DAXデバッガを不正確な計算結果や予期しない結果を調査するために使用すること
- やるべきこと:DAXデバッガをDAXの概念を理解するための学習ツールとして使用すること
- やってはいけないこと:DAXデバッガをDAXのパフォーマンスを最適化するために使用してはいけません
- やってはいけないこと:DAXデバッガをAnalysis Serviceで生成された論理/物理クエリプランを推論するために使用してはいけません
DAXデバッガ・デモ 1
フィルターの理解:
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))
このメジャーは、以下のように働きます。
Tablular Editor 3 でメジャーの動きを見てみます。まず、Power BI Desktopのパフォーマンスアナライザを使って、クエリを取り出します。
Tabular Editor 3のDAX Queryに貼り付けて実行してみます。(実行はF5キーでもOK)
アイコンを使う場合は、これです。
表示されたテーブルの中のセルを選び、Debugを実行します。
デバッグ画面として、DAX debugger, Locals, Watch, Evaluation Context, Call Treeのビューが表示されます。
Evaluation Contextには、現在のコンテキスト情報が表示されており、チェックボックスのチェックを外す事ができます。
Call Treeには、メジャーで実行される関数が細分されて表示されており、それぞれをクリックするとDAX debuggerの表示がハイライトされ、Localsに値が表示されます。また、変数を使っている場合は、それぞれの変数の値を表示することができます。
以下のような操作を行うこともできます。
Locals viewに表示されるテーブルタイプでカッコで囲まれている部分は、行と列の数です。以下は365行13列のテーブルを表しています。
このテーブルの値を見たい場合、Watch viewに使います。
DAXデバッガ・デモ 2
日付型の動作:
Tablular Editor 3 で Pivot Grid を作成します。
日付がどのように使われているかを確認するために、Watch viewに以下のようなExpressionを入力してみます。
Tableタイプを確認したい場合は、Valueの虫眼鏡をクリックして表示させます。
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]"
)
Step In (F11) を使って評価を進めると、除外されたコードには消し線が入ります。
DAXデバッガ・デモ 4
行コンテキストの働きを見ます。
以下のようなPivot Gridで、Cell phonesのSales Amount Totalを右クリックしてDebug this valueを選択します。
F11を何度か押して、以下の部分がマーカー表示になったとき、Evaluation ContextのウィンドウにRow contextの状態が表示されます。
Call Treeウィンドウには、以下のようにSalesがイテレータされていることが表示されています。
Rowの下の数字ををクリックすると、数字が入力できるようになります。その数字を変化させると、選択されている行が変わり、LocalあるいはWatchウインドウに表示されている値が変化します。
虫眼鏡マークをクリックすると現在のコンテキストで選択されているデータが表示されます。