DAX Studio を使用した LuckyTemplates 向けの DAX の最適化 – 数式エンジン

LuckyTemplates 用にデータ モデルと DAX を最適化するときは、数式エンジンストレージ エンジンという 2 つのエンジンがバックグラウンドで実行されていることを覚えておくと役立ちます。

これら 2 つのエンジンは連携して、必要な結果をユーザーに返します。結果セットはテーブルまたはスケール値の形式で提供されます。

目次

フォーミュラエンジンの役割

この記事では、フォーミュラ エンジンに焦点を当てます。

数式エンジンは、クエリのアーキテクチャ全体を管理するトップレベルのエンジンです。

クエリの実行中、または計算列や計算テーブルの作成中に何をしても、数式エンジンが起動します。

数式エンジンは、DAX だけでなく MDX で受信したクエリも理解します。たとえば、Excel を使用している場合、ピボット テーブルに基づいてピボット モデルを作成しますが、ピボット テーブルでは実際に MDX 言語が使用されます。

ここで数式エンジンが始まります。数式エンジンは DAX と MDX の両方を理解するため、別の LuckyTemplates モデルを使用できます。このデータ モデルから送信されるクエリは DAX を使用し、ピボット モデルから送信されるクエリは MDX を使用します。

フォーミュラエンジンの仕組み

MDX ソースまたは DAX ソースのいずれかから発生するクエリを理解することは、数式エンジンのパフォーマンスにおける 1 つの要素にすぎません。また、クエリの処理に役立つ他の手順も実行されます。

まず、ストレージ エンジンが理解できるクエリ プランを生成する必要があります。下位レベルのエンジンであるストレージ エンジンは、実際には Excel 内のピボット テーブルまたは LuckyTemplates 内のビジュアルのどちらがクエリを実行したかを知りません。

クエリ プランを作成する際、数式エンジンは最初に論理クエリ プランを構築し、次に物理クエリ プランを作成します。論理クエリ プランと物理クエリ プランは両方とも似ている必要があります。

物理的なクエリ プランが完了すると、ユーザーまたはクライアント ツールは結果セットを取得します。そこから、クライアント ツールは、結果またはデータ セットを使用して最終結果をユーザーに表示する方法を指示します。

フォーミュラ エンジンの主な制限事項

DAX Studio を使用して LuckyTemplates 用に DAX を最適化する場合、数式エンジンは大きな役割を果たします。ただし、いくつかの制限もあります。

まず、システムで使用可能な CPU コアの数に関係なく、フォーミュラ エンジンは常に単一のコアを使用して操作全体を管理します

タスク マネージャーを開くと、CPU に 6 つのコアがあることがわかります。

DAX Studio を使用した LuckyTemplates 向けの DAX の最適化 – 数式エンジン

この事実にもかかわらず、フォーミュラ エンジンは引き続き 6 つのコアのうち 1 つを選択して動作し、ストレージ エンジンは残りのコアを使用します。

次に、数式エンジンはデータベースに直接アクセスできません。この制限のため、データを内部メモリ内に保存するか、データベースに保存してそのデータベース上に DirectQuery を作成する必要があります。

また、ストレージ エンジンに依存して、データ キャッシュの形式でデータを取得します。その後、数式エンジンは、エンド ユーザーに結果を提供する前に、そのデータ キャッシュを反復処理して続行します。

数式エンジンが LuckyTemplates 向けに DAX を最適化する方法

LuckyTemplates 用にデータ モデルまたは DAX を最適化しようとすると、クエリの実行中にストレージ エンジンの速度が低下することに気づくことがあります。この場合、数式エンジンを使用して計算全体を完了し、プロセスを最適化できます。

数式エンジンが最終的にテーブル全体を独自に構築する場合、そのプロセスで作成された結果セットは、以前に実行されたクエリと類似している場合、クライアント ツールによって生成される後続のクエリでは使用されないことに注意してください。ただし、ストレージ エンジンがデータ キャッシュを提供する場合は、クライアント ツールからのリクエストを最適化できるように、その特定のデータ キャッシュをメモリ内に保持できます。

それはどのように機能しますか?

完全にストレージ エンジンによって実行されるが、一部の部分は式エンジンによって計算されるクエリを作成したとします。この場合、ストレージ エンジンはデータ キャッシュを数式エンジンに送り返し、そのデータ キャッシュ (単純なキャッシュの場合) をメモリ内に保持できます。

数秒後に同様のクエリが来た場合、データ モデル全体をもう一度スキャンする代わりに、フォーミュラ エンジンまたはストレージ エンジンがその特定のデータ キャッシュを使用するため、クエリ時間が短縮され、ユーザー エクスペリエンスが向上します。改善されました。

フォーミュラ エンジンの負荷を軽減する

繰り返しますが、数式エンジンは DAX および MDX コードを理解します。

などのタスクを使用する場合、数式エンジンは DAX 言語内で使用しているすべての関数を認識しており、すべてを独自に解決できます。ただし、特に数式エンジンは単一のコアを使用してすべてを実行しようとするため、これはクエリのパフォーマンスに影響を与える可能性があります。

このため、フォーミュラ エンジンの負荷を軽減し、ストレージ エンジンの負荷を増やすことにも留意する必要があります。

の使用です。

CROSSJOIN を使用すると、限られた量のデータのみがストレージ エンジンを通過します。残りの計算については、すべて数式エンジンによって実行されます。これに対して、SUMMARIZE を使用すると、ストレージ エンジン内でクエリ全体を実行することになります。

もちろん、これは SUMMARIZE の使用方法にも依存します。

SUMMARIZE が最も内側の関数として使用されている場合、それは確実にストレージ エンジンにプッシュダウンされます。ただし、場合によっては、SUMMARIZE が、数式エンジンの動作を必要とする別のコードと組み合わせて使用​​されます。この場合、フォーミュラ エンジンが介入して作業を実行します。

負荷がどこにかかるかを把握すると、特に使用可能なエンジンの容量と制限を念頭に置いている場合、クエリのパフォーマンスを最適化するのに役立ちます。

LuckyTemplates 向けに DAX を最適化するのに役立つツール

DAX の最適化を可能にするツールを最大限に活用すると、DAX の最適化がより簡単になります。DAX Studio はそれらのツールの 1 つです。

SUMMARIZE 関数の使用時に数式エンジンが計算を完了するための負荷全体を引き受ける前述の例を見てみましょう。DAX Studio は、SUMMARIZE をストレージ エンジンにプッシュする方法でコードを書き直し、数式エンジンの負荷を解放するのに役立ちます。これにより、データ モデルとクエリのパフォーマンスが向上する可能性があります。

もちろん、これは単純なクエリに対してシームレスに機能するはずです。さらに複雑なシナリオもあります。

たとえば、データ モデル自体内で 2 つのストレージ エンジンを使用する複合モデルを構築できます。1 つは Vertipaq 用で、もう 1 つは DirectQuery 用です。この場合、生成されるクエリがその特定のリレーショナル データ モデル用に構築されるようにデータベースを最適化する必要があります。

日付モデル内に Products テーブルと Sales テーブルという 2 つのテーブルがあるとします。Products テーブルは Vertipaq ストレージ内にありますが、Sales テーブルはより大きなテーブルであり、DirectQuery 接続を通じてデータベース内に直接保存されます。

また、Brand 列と、DirectQuery 接続内の Sales テーブルから取得された Total Sales メジャーをマトリックスにドラッグしていると仮定します。

この場合、フォーミュラ エンジンは両方のエンジンの間で操作を実行する必要があります。

まず、Products テーブルから Product Key 列と Brand 列を取得します。次に、Sales テーブルから正味価格、数量、およびプロダクト キーの列を取得します。Vertipaq と DirectQuery の両方からデータ キャッシュを取得したら、数式エンジンはデータ キャッシュを取得し、それらを結合してエンド ユーザーに結果を提供する必要があります。


DAX クエリ最適化のテクニックとレッスン
クエリのパフォーマンスと DAX Studio のセットアップ
DAX の最適化: 隠された DAX トラップを見つける場所

結論

DAX を使用する場合、数式エンジンは本当に大きな役割を果たします。ただし、作業を開始する前に、まず仕組みを理解することが重要です。特に DAX クエリのパフォーマンスを向上させたい場合は、数式エンジンとストレージ エンジンをシームレスに連携させる方法をマスターすることが重要です。

数式エンジンは分析サービス アーキテクチャ内のトップレベル エンジンとして、多くの操作を実行する必要があります。ただし、ストレージ エンジンの詳細も理解すると、どの操作をストレージ エンジンにプッシュし、どの操作をフォーミュラ エンジン内に残すかを判断できるようになります。

ストレージ エンジンについては、別のチュートリアルでさらに詳しく説明します。

ではごきげんよう、

Leave a Comment

Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。