[Tabular Editor 3] 外部ツール Tabular Editor 3 DAX debugger

# はじめに

本記事はTabular Editor 3の公式ドキュメントを日本語訳したものです。
Tabular Editor 3 の開発会社には連絡をし、Qiitaでの公開許可をもらっていますが、
最新情報は下記ドキュメントを必ずご確認ください。

情報更新必要であれば、**編集リクエスト** してもらえると嬉しいです。

https://docs.tabulareditor.com/te3/features/dax-debugger.html

https://tabulareditor.com/about-us

## Tabular Editor DAX debugger


2022-01-19
Daniel Otykier

Applies to: 
✔ Desktop Edition
✔ Business Edition
✔ Enterprise Edition

DAXが比較的複雑な言語であり、使いこなすのが難しいことは周知の事実です。ほとんどのデータモデル開発者は、DAXコードが期待通りの結果を返さないという状況を経験したことがあるでしょう。このような状況では、何が起こっているのかをよりよく理解するために、変数ごとに、また関数呼び出しごとにコードを分解することが役立ちます。

これまでは、コードの「分解」は面倒で時間のかかる作業でした。クライアントツールで実行されたDAXクエリをキャプチャし、それを分解してDAX StudioやSQL Server Management Studioでクエリの小片を実行するという作業がしばしば行われていました。

Tabular Editor 3にはDAXデバッガの概念が導入されており、モデルのDAXコードに踏み込むプロセスを非常に簡単にしてくれるツールです。概念的には、デバッガはC#アプリケーションを開発する際にVisual Studioで見られるような従来のIDEデバッガと似ています。

## 前提条件

DAXデバッガーは、モデル内のDAXコードを分析し、サブ式や行のコンテキストなどを評価するための適切なDAXクエリを生成し、インタラクティブにコードを確認することができます。

この機能を使用するには、Power BI DesktopやAnalysis Servicesの他のインスタンスからモデルのメタデータを直接読み込むときなど、Tabular Editor 3が接続モードまたはワークスペースモードで動作している必要があります。

## 開始方法

Tabular Editor 3がAnalysis Servicesのインスタンスに接続されている場合、デバッガーは2つの異なる方法のいずれかで起動できます。

- ピボット・グリッドから
- DAX クエリから

デバッガを起動すると、デバッグ対象のコードに関するコンテキスト情報を提供する多くの新しいビューや、現在デバッグされているコードの部分をハイライトするDAXスクリプト・ビューが表示されます。

:::note
ヒント
デバッグセッションを開始する前に、DAXコードをフォーマットして読みやすくすることを検討してください。
:::

## ピボット・グリッドでのデバッグ

1. 新しいピボット・グリッドを作成します (File > New > Pivot Grid)。

1. デバッグしたいメジャーをピボット・グリッドに追加します。次のいずれかを実行します。

- TOMエクスプローラからメジャーをドラッグする、または
- TOM エクスプローラでメジャーを右クリックして「Add to pivot grid」を選択する、
- またはピボット・グリッドのフィールド・リストからメジャーを選択します(Pivot Grid > Show fields)

1. (オプション) Filter領域、Columns領域、またはRow領域で、ピボット・グリッドに 1 つ以上の列を追加します。

1. ピボット・グリッド内の値のセルを右クリックし、 Debug this value を選択します。

![debug-from-pivot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/6f710fbb-dd1f-4d66-7f75-590024a24441.png)

## DAX クエリによるデバッグ

1. 新しい DAX クエリを作成します（File > New > DAX Query）。
2. DAX クエリを入力またはペーストします。これは通常、SUMMARIZECOLUMNS 呼び出しと 1 つ以上の（明示的な）メジャーで構成されるクエリで、Power BI のビジュアルで生成されるものなどがあります。

:::note
ヒント
Power BI Desktopのパフォーマンスアナライザを使用して、ビジュアルで生成されたクエリをキャプチャすることができます。
:::

1. F5を押して、Tabular Editor 3内でクエリを実行します。デバッグしたい値を探し、セルを右クリックして「Debug」を選択します。

![debug-from-query.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/97c4b384-0f2d-e521-d2c9-865f724ff06d.png)

## デバッグビュー
デバッガには以下のビューが用意されています（非表示になっている場合は、「Debug」→「Windows」メニューからアクセスできます）。

- ローカル
- ウォッチ
- 評価コンテクスト
- コールツリー

### ローカル

このビューでは、現在の実行範囲内にある列、メジャー、および変数が一覧表示され、その値が表示されます。また、デバッグ中の現在のサブ式の値も表示されます。このリストの値は、異なるサブ式にステップしたとき、または評価コンテキストが変更されたときに自動的に更新されます。ローカル値は、コールツリーの現在選択されている項目で常に評価されます。

### ウォッチ

このビューでは、任意のDAX式を入力することができ、現在の評価コンテキスト内で計算されます。スカラーおよびテーブル式を入力でき、利用可能なすべてのDAX関数を使用して、現在の評価範囲内の変数を参照することができます。ウォッチ値は、異なるサブ式にステップしたとき、または評価コンテキストが変更されたときに自動的に更新されます。ウォッチ値は常に、評価コンテキスト・スタックで現在選択されている項目のスコープで評価されます。

![watch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/706d107e-7429-8018-0ad7-e64f72276b3e.png)

「Value」列の「Zoom」ボタンをクリックすると、デバッガーは新しいDAXクエリードキュメントを開き、計算そのものだけでなく、計算のコンテキストを定義して、より詳細に結果を確認することができます。この機能は、以下のスクリーンショットに示されているように、ウォッチ式がテーブル式である場合に特に有効です。

![inspect-watch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/f92a0937-569b-dadd-8cf7-1426b1798399.png)

### 評価コンテキスト

このビューは、現在のサブ式の DAX 評価コンテキストに関する情報を提供します。たとえば、CALCULATE 式ではコンテキストの遷移を実行したり、評価コンテキストにフィルタを追加したり、SUMX イテレータでは行コンテキストを追加したりします。

![evaluation-context.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/9b9cb91c-c52c-07f4-e198-a152039ca99f.png)

「評価コンテキスト」のスタック内の項目をダブルクリックすると、その項目にフォーカスが当たります。これにより、すべての Watch 式が新しいコンテキストで再評価されます（つまり、スタックの一番下から現在フォーカスされている項目までのすべてのコンテキスト）。この様子は以下のアニメーションでご覧いただけます。また、アクティブなイテレーション内の行をページングすることで、アクティブな行コンテキスト内の個々の列の値を調べることができることにも注目してください。

![navigating-evaluation-context.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/fabfb15f-bddd-59e2-7c80-ed57d00d7cae.gif)

最後に、「行」列の「ズーム」ボタンをクリックすると、イテレータの最初の1000行を参照することができます。このとき、現在の行のコンテキストは、最初の1000行内の特定の行に設定されます。

![browse-row-contexts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d6d288be-bb9f-db7a-f8a0-ae91e447cc60.png)

### コールツリー

このビューでは、計算全体のアウトラインが表示され、ダブルクリックで簡単にサブ式間を移動することができます（ショートカットキーを使って移動することもできます）。ツリーには、コンテキストトランジション、イタレーション、行コンテキストに関する情報も表示されます。実行されないコードの分岐（IFやSWITCHの呼び出し、イテレータが空の場合など）は取り除かれます。

![call-tree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/9e4082d5-84b8-56a5-7a2e-5441865d20d8.png)

コールツリーのアイテム間を移動すると、デバッグDAXスクリプトはコールツリーのアイテムに対応するコードをハイライト表示し、同時にハイライト表示されたコードに到達するまでの経路をグレーの背景で示します（下図）。

![navigating-call-tree.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e8cbe8aa-ce85-8e74-6a77-e279e7bdaadf.gif)

ツリーをナビゲートすると、［ローカル］ビューの値が更新されることに注目してください。

## キーボード ショートカット

コールツリーをすばやく操作するには、以下のキーボードショートカットを使用します。

ステップイン (F11) - コールツリーの現在のアイテムの最初の子にステップインします。それ以上の子がない場合は、次の兄弟にジャンプします。
ステップアウト (Shift-F11) - コールツリー内の現在のアイテムの親にステップアウトします。
ステップオーバー (F10) - 次の関数パラメータ、算術演算の次の部分式にジャンプするか、現在の関数呼び出しにステップインします（それが自明でない関数の場合）。
ステップバック (Shift-F10) - 前の関数パラメータ、算術演算の前の部分式にジャンプします。また、現在の項目の前にパラメータまたは部分式がない場合は、現在の項目の親にステップアウトします。
次の行 (F9) - 最も内側にある反復の行コンテキストを、イテレータの次の行にシフトします。
前の行 (Shift-F9) - 最も内側にある反復の行コンテキストを、イテレータの前の行にシフトします。

## 制限事項と既知の問題

DAX デバッガーには現在、次のような制限があります。

- DAX クエリのデバッグでは、DAX テーブル式のサブセットのみがサポートされています (たとえば、SUMMARIZECOLUMNS に依存するクエリはデバッグできますが、その他のテーブル関数は現在サポートされていません)。Power BIで生成されたクエリ（Power BI Desktop Performance Analyzerでキャプチャ可能）は、一般的にサポートされています。

- 暗黙的なメジャーやクエリを対象とした計算を含むクエリは現在サポートされていません。

- フィルタリングされたテーブル式から生成されたイテレータの最初の1,000行を参照するときに、参照ウィンドウで選択された行が、評価コンテキストスタックの現在の行コンテキストと一致しないことがあります（現在の行コンテキストを調べるには、WatchウィンドウでCALCULATETABLE('<テーブル名>')と入力してください）。

- Watch式エディタのオートコンプリートにはまだいくつかの問題があります。たとえば、現在のスコープ内の変数やアクティブな行コンテキスト内の列は認識されません（ただし、このような式の評価は機能します）。

上記以外のデバッガーに関する問題が発生した場合は、TE3 Community Support GitHubサイトのissue trackerに投稿してください。

## ロードマップ

上記の問題に対処するため、DAXデバッガーに多くの機能を追加することを計画しており、ツールの機能をさらに向上させます。いつものように、フィードバックを歓迎します。機能追加のご要望や一般的なご意見は、「ディスカッション」エリアをご利用ください。

それでは、**楽しいデバッギング**を!