日本初レビュー⁉ DAX Optimizerをさわってみたよ～😎

# はじめに

Power BIユーザーおなじみのSQLBIを運営しているMarco Russoさんが、6月22日にポストしたDax Optimizerのウェイトリスト。ポストを見つけてすぐに申し込み、8月20日頃にようやく利用可能通知がありました。早速さわってみましょ～👍


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/2168ad38-82c9-1e52-ef70-8e6eee8f2a27.png)

https://twitter.com/marcorus/status/1671890469662650368

## Dax Optimizer ホームページ

ウェイトリストへの登録はこちらから。

https://www.daxoptimizer.com/

## Dax Optimizer Blog
https://www.daxoptimizer.com/blog/

# Dax Optimizer ってなに？

https://www.daxoptimizer.com/blog/introducing-dax-optimizer/

- **DAX Optimizerとは**：DAX Optimizerは、DAXコードの性能やボトルネックを診断し、解決策を提案し、優先順位を付けるツールです。Power BIやAnalysis Servicesのモデルの最適化を目指します。
- **DAX Optimizerのメリット**：DAX Optimizerは、静的解析によってDAXコードの問題点を検出し、ベストプラクティスに従った改善案を示します。また、最も影響の大きい変更に集中できるように、問題点を重要度順にランク付けします。
- **DAX Optimizerの学習効果**：DAX Optimizerは、アンチパターンを強調し、より良いコーディング技術について洞察を与えることで、チームのDAX学習を促進します。また、ベンダーに対して高いコーディング基準を守るように品質チェックポイントとして機能します。

# ライセンス

:::note
2023年10月15日までは30％オフ。
:::

割引期間中は、起動ごとに課金されるプランは1回ごとに月額約30＄だから大体4500円ほど。ただしこれは年払いの場合。1日20回まで起動できるプランは、デスクトップのモデルにのみ使えるのが月額 約48＄（約7,000円）、Power BI Serviceのモデルにも使えるほうが月額 約70＄（約10,000円）。すべて年払いになるので、Service版を使用すると、年間10万円程度はかかる。

割引期間が終わるとServiceモデルは月額99＄になるから、約15,000円。年額18万円ほど。

※月払いにするともう少し高くなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/1f9bc4ea-12cd-a695-2cdb-065311ba4ce0.png)

# さわってみる

ライセンスコードの登録を終えると、データの置き場所を決める必要がある。

- West Europe
- East US
- Australia East

現在は上記３つ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/2cff66a3-a128-6173-0c29-6877bd29228c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/5b19925c-d0c9-847a-7728-364ac54f988b.png)

1. [Dax Studio](https://daxstudio.org/)
1. [Bravo](https://bravo.bi/)
1. [Tabular Editor 3](https://tabulareditor.com/)

モデルを読み込むためには上記３ついずれかの外部ツールが必要です。
今回はDax Studioを使用してVPAXファイルをエクスポートします。

モデルを読み込んでから、エクスポートをします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/743b02cf-5ade-6f73-c61e-31a50bdf76b9.png)

VPAXファイルを保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/256026e7-a864-b363-7e54-6ed24736af48.png)

このファイルをアップロードして分析を進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/678632ef-0397-bc42-e739-a4f4a51dffbc.png)

読み込むと、モデルの容量や、メジャーの数、テーブルの数などが表示されます。分析しますか？とボタンが表示されるので、ここで **「Analyze」** をクリックすると分析が開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/46badee4-53d9-0887-fa55-3428b3965bf6.png)

少し待つと、1日20回のチケットが1つ減っていることがわかると思います。
そして、8個の問題を抱えていることが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e06987b6-2498-e323-1987-109b8e4d7ee8.png)

イシューは以下の通り、今回は優先度Lowが6個表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/99c8ba77-047a-10d7-56d7-1da671b649c3.png)

そのうち一つをクリックしてみます。
問題のあるメジャーが表示され、具体的にどこに問題があるのか赤くなっています。
また、上部には、何が問題なのか詳しく書いてあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/c092bb54-1687-afba-9626-551b07017130.png)

このメジャーに対する指摘事項はこれ↓

**Function result invariant to current iterator**

The function within an expression argument of an iterator function does not use the iterator's row context and can therefore be optimized using a variable.
The part of an expression executed in a row context that do not depend on the row context might require redundant evaluations of the formula engine, resulting in additional CPU cost. In this case, the function call is identified as part of such redundant expression.

A possible optimization is to store the result of the function call in a variable, and then reference the variable. It is important to assign the variable only when the execution scope guarantees that the variable is used at least once, otherwise the result could be counterproductive and slow down the execution time instead of improving it.

**日本語訳**

**現在のイテレータに対して不変な関数結果**


イテレータ関数の式引数内の関数は、イテレータの行コンテキストを使用しないため、変数を使用して最適化することができます。

行コンテキストで実行される式のうち、行コンテキストに依存しない部分は、数式エンジンの冗長な評価を必要とする可能性があり、その結果、追加の CPU コストが発生します。この場合、関数呼び出しはそのような冗長な式の一部として識別されます。

可能な最適化は、関数呼び出しの結果を変数に格納し、その変数を参照することです。実行スコープが、その変数が少なくとも一度は使用されることを保証している場合にのみ、その変数を代入することが重要である。


**Example** を押すと例も出してくれます。直接修正してくれるわけではないっていうのは抑えておいた方がいいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/a8a1049e-3c4f-ca38-1751-bf3ee0a06a04.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/bb940e83-1c06-18ee-ecca-fa7c5fa53345.png)

#### なるほどっ🤔

    FILTER (
        ALL ( 'Date'[Date] ),
        VAR _start = MIN ( highlight_calender[Date] )
        VAR _end = MAX ( highlight_calender[Date] )
        RETURN 'Date'[Date] >= _start && 'Date'[Date] <= _end
    )

FILTER関数の中で、定数を定義しているため、これがFILTER関数の実行時（イテレーター処理）に毎回計算されている。だけど、定数なんだからFILERの外にだして最初に定義しておけばいいよねってことか。

#### 修正してみる

Tabular Editor 3 を開いて

このメジャーを、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/c96110c5-d1e5-b11b-091b-24d5eaaa7753.png)

こう修正してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7dbe6664-d794-4d92-943c-a6a2ff70129e.png)

#### Tabular Editor 3 でエクスポート

VPAXファイルはTabular Editor 3でもエクスポートできます。下のタブの**Vertipaq Analyzer**から。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/c65e6bd7-3d3b-331d-ac14-0faa7d8968aa.png)

## 再度アップロードする

Versionというボタンがあるので、そこからアップロード。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/9e6440be-91cd-52a0-b9b6-1210ce71a651.png)

## 比較する

修正前、修正後のメジャーを比較すると、CPU COSTという項目が大幅に下がっているのがわかるかと思います！たった数行の違いだけなのに、こんなに大きく変わるとは思ってもみなかった…！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/68082d3f-2690-ed1b-b848-8ffdb4b61a14.png)


# まとめ

まず、今はやりのＡＩを使用して、**自動的に** DAXを最適化してくれるツールではないことはおさえておかないといけません。名前だけみて勘違いしている人もいるのでは。私もそうでした笑

金額もそれなりにするし、推奨事項を読み取って自分で修正をいれていかないといけないことから、初心者が使って効果のあるツールではない印象。

ただ、開発者にとっては、どんどん増えていくメジャーを、ひとつひとつを最適化しておくことはパフォーマンスを担保するためにはとても大事なことなので、とても有用なのではと感じました👌あとはコストとメリットの天秤ですね。

まだまだプレビュー中のService、今のところ無料版はなさそうなので試すのはハードル高いですが、BlogやXを通して発信される内容を今後も要チェックが必要なサービスだなと感じました！