"ビジュアルレベル キャッシュ"という用語は正式なものではないかもだが、それはレポート表示のパフォーマンスを向上させるための仕組みを指している。
ところで、この仕組みを理解しないままレポートのパフォーマンスを確認してはないだろうか?
データを投影するビジュアルは以下の流れで動作:
- ビジュアルごとにDAXクエリを生成(クエリは必ずしも一つだけではない)
- Power BI セマンティックモデル(データセット)に問い合わせ
- 得られたデータを投影
ビジュアルに適用されるフィルタが変更されるたびに、以下の流れで動作:
- ビジュアルごとにフィルタを含めたDAXクエリを生成(クエリは必ずしも一つだけではない)
- Power BI セマンティックモデル(データセット)に問い合わせ
- 得られたデータを投影
ただし、ビジュアルへの投影に使用したデータはキャッシュされ、再利用される。必要なときだけ Power BI セマンティックモデル(データセット)に問い合わせてその結果からビジュアルに投影するということだ。これは、同じ結果を得られる DAXクエリの評価を繰り返さない最適化戦略なのである。
動作を確認する
Power BI Desktop の Performance Analyzer で動作確認は充分だ。
ビジュアルにデータを投影するためセマンティック モデル(データセット)に問い合わせが行われる。
DAX クエリの結果が得られるまで 173ms を要し、そのうち DirectQuery による結果が得られるまで 170ms を要したという結果だ。
次にフィルタを適用した。フィルタが適用された結果を得るために DAX クエリ 188ms そのうち DirectQuery 187ms を要した。
次にフィルタの変更を適用した、ここでは適用されるフィルタがない状態に。
DAX クエリの評価はされなかったことを示している。DirectQueryも。
再び同じフィルタを適用した。
ここでも DAX クエリの評価はされなかったことを示している。DirectQueryも。
思ったこと🙄
レポートユーザから表示パフォーマンスの改善要求があったということはさ、思いのほか深刻な状態かもしれない。ビジュアルレベルのキャッシュは常に動作しているはずなのにね。
その他