DAX CALCULATABLE と FILTER 関数の比較

DAX CALCULATABLE と FILTER 関数の比較

どちらも、DAX クエリでデータを操作および分析するための強力なツールですが、理解することが重要な重要な違いがいくつかあります。

このブログでは、 DAX Studio のCALCULAETABLE関数とそのクエリ プランについて説明し、 FILTER関数との違いを理解します。最後には、データ分析のニーズに適した関数を選択する方法をよりよく理解できるようになります。

デモのために、以下の DAX コードを使用します。

DAX CALCULATABLE と FILTER 関数の比較

このコードを実行すると、ブランドと色を示すテーブルが表示されます。

DAX CALCULATABLE と FILTER 関数の比較

[クエリ プラン]タブでは、数式エンジンCrossApply演算子に対応するコードを取得します。

DAX CALCULATABLE と FILTER 関数の比較

同時に、コードは [サーバー タイミング]タブで製品の色とブランドのみを取得していることがわかります。

DAX CALCULATABLE と FILTER 関数の比較

目次

CALCULATABLE の DAX Studio サーバーのタイミング結果

例として、製品の色をフィルタリングして、赤および/または黒のみを表示してみましょう。

これを行うには、FILTER 関数を使用します。これを実行すると、サーバー タイミングに FILTER 引数がxmSQL コードに適用されていないことが表示されます。

DAX CALCULATABLE と FILTER 関数の比較

ただし、CALCULAETABLE 関数を使用すると、[サーバー タイミング] タブのクエリで、結果が製品の色でフィルターされたことが表示されます。

DAX CALCULATABLE と FILTER 関数の比較

DAX Studio の CALCULATABLE クエリ プラン

各関数のクエリ プランを見てみましょう。

CALCULAETABLE は、コード内の最上位関数であり、要件に依存しないため、論理クエリ プランの最初の行にあります。

DAX CALCULATABLE と FILTER 関数の比較

CALCULAETABLE 関数のクエリ プランを読み取るときは、最初の引数から始めません。まず、使用されるフィルター コンテキストを理解する必要があります。それでは、5行目に行きましょう。

フィルターが適用されているため、VertiPaqオペレーターには製品の色の列が必要であることがわかります。次に、この列をスキャンし、Not IsEmpty フィルターの組み合わせを使用して、各行に対して製品の色をチェックします。

フィルター コンテキストが準備された後、引数が実行されます。

後から考えると、FILTER 関数を使用すると、別のクエリ プランが表示されるため、フィルター コンテキストを識別する前に CROSSJOIN 引数が実行されます。

DAX CALCULATABLE と FILTER 関数の比較

このアプローチの欠点は、フィルター条件がストレージ エンジンにプッシュされないことです。xmSQL 内でWHERE句を使用することはできないため、フォーミュラ エンジンに大きな負担がかかります。

また、複数のテーブルを操作している場合、CROSSJOIN 関数のフィルターの組み合わせは膨大になります。これにより、DAX コードのパフォーマンスが低下します。したがって、ほとんどの場合、CALCULAETABLE 関数を使用することをお勧めします。

したがって、数式エンジンですべての計算を実行する代わりに、XMSQL コードの WHERE クラス内にフィルター条件を挿入できます。

同様の DAX 関数のコンテキスト遷移

サーバーのタイミング

この概念は CALCULATE 関数にも当てはまります。例として以下の DAX コードを使用してみましょう。

DAX CALCULATABLE と FILTER 関数の比較

メジャーには自動的に CALCULATE 関数が追加されます。

このコードを実行すると、各色の総売上高を示す表が取得されます。

DAX CALCULATABLE と FILTER 関数の比較

[サーバー タイミング] タブでは、コードが 2 つのクエリを実行していることがわかります。最初のクエリは、Products テーブルに関する Sales テーブルからの Sales 金額の合計を計算します。

DAX CALCULATABLE と FILTER 関数の比較

一方、2 番目のクエリは Products テーブルから製品の色を再度取得します。これは、DAX コードの関数に対応します。

DAX CALCULATABLE と FILTER 関数の比較

Formula Engine は、2 つのクエリのデータ キャッシュを並べて配置します。まず 2 番目のデータ キャッシュから値を取得し、次に 1 番目のデータ キャッシュでルックアップを実行します。

クエリプラン

引数により論理クエリ プランが製品の色をスキャンします。

次に、VertiPaq は製品の色に応じて総売上高を合計します。製品のカラー値を同等のフィルター コンテキストに変換するコンテキスト遷移を実行します。

DAX CALCULATABLE と FILTER 関数の比較

コンテキスト遷移によって作成されたフィルターは、クエリ プランのdependOnColsプロパティに変換されます。VertiPaq は、総売上高の計算に必要な列をスキャンした後、売上数量に正味価格を乗算します。

その後、合計売上が通貨データ型の形式で結果として返されます。最後に、ADDCOLUMNS は、Color と Total Sales 金額を含む 2 つの列を含むテーブルを返します。

結論

クエリ プランが異なれば効率のレベルも異なる可能性があるため、クエリ プランはクエリのパフォーマンスに大きな影響を与える可能性があります。

DAX クエリで CALCULAETABLE 関数と FILTER 関数を使用する場合、クエリ プランは、特定のシナリオや、使用されている特定の数式やクエリ エンジンの機能などのさまざまな要因に応じて異なる場合があります。

一般に、特定のシナリオに対して最も効率的なアプローチを決定するために、さまざまなクエリ プランのパフォーマンスをテストして比較することをお勧めします。

ではごきげんよう、


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 を使用して数式内に仮想リレーションシップを作成する方法を説明します。