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

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 クエリのパフォーマンスを向上させたい場合は、数式エンジンとストレージ エンジンをシームレスに連携させる方法をマスターすることが重要です。

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

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

ではごきげんよう、


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて