[Power BI] 新DAX関数 EVALUATEANDLOG を試してみる🎉

# はじめに

SNS界隈で、「新しいDAX関数が使えるようになった」とざわざわしていたので実際に試してみました。参考にした記事は下記です。Microsoftの中の人。

https://pbidax.wordpress.com/2022/08/16/introduce-the-dax-evaluateandlog-function/

# その名も…EVALUATEANDLOG関数

:::note warn
現時点（2022/08/27）で公式ドキュメントはありません。
Power BI Desktop 2022年8月version 以降でないと動きません。
Power BI Serviceでは評価されません。
:::

関数名は**EVALUATEANDLOG**。

EVALUATE

AND

LOG

ということで、なにやら実行してログを出してくれるような関数らしい。

# 使ってみる

構文は下記。

```dax
EVALUATEANDLOG(<scalar or table expression>[,<label>[,<max rows>]])
```

使い方はいたって簡単、既存のDAX関数を

```既存のDAX.dax
Profit = SUMX(Sales,[SalesAmount]) - SUMX('Sales','Sales'[Unit Cost])
```

ログを出したい部分を`EVALUATEANDLOG()`で囲むだけ。

```EVALUATEANDLOG().dax
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
```

# ツールをインストール

ログを出力する前に、ツールをインストールします。SQL Server Profilerで見ることもできますが、表示項目をいじったりしないといけないため、より簡単にみるためのツールを開発してくれています。

**DAX Debug Output**

https://github.com/pbidax/DAXDebugOutput/releases/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ad01e769-3b10-f296-5039-ab774b1603b7.png)

## Power BI Desktop に接続

左上のConnectボタンを押して、接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/6f9155a4-1451-221f-9fe7-1880d5ca2e89.png)

# Logを出力してみる

**DAX Debug Output**をPower BI Desktopに接続した状態で、先程のDAXをビジュアルにセットしてqueryを走らせます。

```EVALUATEANDLOG().dax
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
```

ビジュアルにセットすると、ツールの画面上にログが出力されます。
**DAXEvaluationLog**というイベント名の部分がDAX実行時のLogになります。

![2022-08-27_22-24-20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/96acc90a-c734-ccc4-ccb5-3771b7611a44.gif)

# 出力されたLogをみてみよう🎈

まず最初に`SUMX('Sales','Sales'[Unit Cost])`の部分が計算されています。ブランド名ごとにコストが合計されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/6d0c357e-e1e6-7f5d-cdce-d461ec7f8b59.png)

次は`SUMX(Sales,[SalesAmount])`の部分。ブランドごとの売上が計算されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/768f51c2-4f31-903c-2fc6-f5a27c094e54.png)

そのあと2つのログは合計行を計算しているログになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/04c3c4ef-21a5-d2e0-b985-b7c5c9775593.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/1df0cc83-a6d0-c788-94f9-476d07a568c5.png)

という感じで、DAXの計算がどのように行われているのか、ログとビジュアライズされたテーブルを見ながら流れを追うことができます。

今回は下記のDAXを実行し、Logを出力しましたが、

```EVALUATEANDLOG().dax
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
```

下記のように全体をひとまとめにくくると、最終的に引き算をしているLogも確認することができます。

```EVALUATEANDLOG()改.dax
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount]) - SUMX('Sales','Sales'[Unit Cost]))
```

# 注意事項

いくつか注意があり、冒頭に紹介したブログの中でも言及されていますが、通常DAXが処理される場合は合計行のみ別に計算するわけではないので、この処理は`EVALUATEANDLOG()`で囲ったときだけの特別な流れなります。Power BI Serviceはこの新関数に対応しておらず、評価しないことになっているのですが、本番環境にこの関数を残したままにしておくと、いらぬ処理が増えてレポートが重くなってしまう可能性もあります。
ドキュメントも整備されておらず、まだプレビュー中なので、テスト環境でのみご使用ください。

# まとめ

現状でもDAX StudioやTabular Editorを使用してDAXの処理の流れを追っていくことはできます。やっていることは一緒でも、それぞれのツールで見え方、捉え方が違うので、いろいろなツールで試していくと、少しDAXと仲良くなれる気がしますよ😁