はじめに
SNS界隈で、「新しいDAX関数が使えるようになった」とざわざわしていたので実際に試してみました。参考にした記事は下記です。Microsoftの中の人。
その名も…EVALUATEANDLOG関数
現時点(2022/08/27)で公式ドキュメントはありません。
Power BI Desktop 2022年8月version 以降でないと動きません。
Power BI Serviceでは評価されません。
関数名はEVALUATEANDLOG。
EVALUATE
AND
LOG
ということで、なにやら実行してログを出してくれるような関数らしい。
使ってみる
構文は下記。
EVALUATEANDLOG(<scalar or table expression>[,<label>[,<max rows>]])
使い方はいたって簡単、既存のDAX関数を
Profit = SUMX(Sales,[SalesAmount]) - SUMX('Sales','Sales'[Unit Cost])
ログを出したい部分をEVALUATEANDLOG()
で囲むだけ。
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
ツールをインストール
ログを出力する前に、ツールをインストールします。SQL Server Profilerで見ることもできますが、表示項目をいじったりしないといけないため、より簡単にみるためのツールを開発してくれています。
DAX Debug Output
Power BI Desktop に接続
左上のConnectボタンを押して、接続します。
Logを出力してみる
DAX Debug OutputをPower BI Desktopに接続した状態で、先程のDAXをビジュアルにセットしてqueryを走らせます。
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
ビジュアルにセットすると、ツールの画面上にログが出力されます。
DAXEvaluationLogというイベント名の部分がDAX実行時のLogになります。
出力されたLogをみてみよう🎈
まず最初にSUMX('Sales','Sales'[Unit Cost])
の部分が計算されています。ブランド名ごとにコストが合計されています。
次はSUMX(Sales,[SalesAmount])
の部分。ブランドごとの売上が計算されていることがわかります。
そのあと2つのログは合計行を計算しているログになります。
という感じで、DAXの計算がどのように行われているのか、ログとビジュアライズされたテーブルを見ながら流れを追うことができます。
今回は下記のDAXを実行し、Logを出力しましたが、
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount])) - EVALUATEANDLOG(SUMX('Sales','Sales'[Unit Cost]))
下記のように全体をひとまとめにくくると、最終的に引き算をしているLogも確認することができます。
Log_Profit = EVALUATEANDLOG(SUMX(Sales,[SalesAmount]) - SUMX('Sales','Sales'[Unit Cost]))
注意事項
いくつか注意があり、冒頭に紹介したブログの中でも言及されていますが、通常DAXが処理される場合は合計行のみ別に計算するわけではないので、この処理はEVALUATEANDLOG()
で囲ったときだけの特別な流れなります。Power BI Serviceはこの新関数に対応しておらず、評価しないことになっているのですが、本番環境にこの関数を残したままにしておくと、いらぬ処理が増えてレポートが重くなってしまう可能性もあります。
ドキュメントも整備されておらず、まだプレビュー中なので、テスト環境でのみご使用ください。
まとめ
現状でもDAX StudioやTabular Editorを使用してDAXの処理の流れを追っていくことはできます。やっていることは一緒でも、それぞれのツールで見え方、捉え方が違うので、いろいろなツールで試していくと、少しDAXと仲良くなれる気がしますよ😁