UNION DAX 関数とパワークエリの比較

UNION DAX 関数とパワークエリの比較

このチュートリアルでは、 UNION 関数を使用したDAX 最適化手法を学習します。このチュートリアルでは、UNION 関数のパフォーマンスと、Power Queryおよびテーブルを結合するその他の手法のパフォーマンスを比較します。

関数は、行を結合し、重複する行を削除することにより、2 つのテーブルを 1 つのテーブルに結合します。

このチュートリアルの例は、年ごとに 3 つのテーブル (2007、2008、2009) に分割された Sales テーブルです。

目次

DAX の UNION 関数

DAX Studioを開き、サーバー タイミングとクエリ プランを起動します。

UNION DAX 関数とパワークエリの比較

以下の DAX コードが例として使用されます。

UNION DAX 関数とパワークエリの比較

コードを実行した後、[サーバー タイミング]タブに移動します。コードの実行には合計 5.4 秒かかることがわかります。実行時間のほとんどはストレージ エンジンで費やされました。これら 3 つのクエリにはそれぞれ同じ操作が含まれていますが、年が異なります。

UNION DAX 関数とパワークエリの比較

これら 3 つのクエリがストレージ エンジンによって返された後、フォーミュラ エンジンはUNION を実行します。これは論理クエリ プランで確認できます。クエリ プランは、合計売上を計算するためにも実行します。

UNION DAX 関数とパワークエリの比較

物理クエリ プランでは、Sales テーブルで各年に実行された操作を含む 3 つのデータ キャッシュを確認できます。

UNION DAX 関数とパワークエリの比較

DAX パフォーマンスの比較

比較を構築するには、元の Sales テーブルを使用して Total Sales のメジャーを作成しましょう。

UNION DAX 関数とパワークエリの比較

このコードを実行して[サーバー タイミング]タブに移動すると、これが UNION 関数よりも大幅に効率的であることがわかります。

UNION 関数は 97.9 KB を消費しますが、新しいメジャーは 1 KB しか消費しません。

UNION DAX 関数とパワークエリの比較

UNION を使用すると、DAX エンジンは大量のデータ キャッシュを数式エンジンに返します。これにより、RAM に大きな負荷がかかります。

したがって、100 万行を超えるデータ モデルを扱っている場合は、UNION 関数を使用することはお勧めできません。

UNION DAX 関数の代替

この例では、UNION を使用する代わりに 3 つの SUMX 関数を使用できます。つまり、各年に 1 つの SUMX 関数です。

UNION DAX 関数とパワークエリの比較

このコードを実行して [サーバー タイミング] タブに移動すると、実行時間が大幅に短縮されていることがわかります。3 つの異なるクエリを実行しながら、所要時間は 5,400 ミリ秒から 33 ミリ秒に短縮されました。

UNION DAX 関数とパワークエリの比較

もう 1 つの方法は、Power Query またはデータ ソース自体にデータ モデル テーブルを追加することです。

ただし、最善のオプションは、これら 3 つのテーブルの結合を実行する計算テーブルを作成することです。しかし、このオプションには長所と短所があります。

計算テーブルを使用すると、Power Query で追加を実行するのとは対照的に、全体の処理時間を節約できます。ただし、これにより VertiPaq のデータベース サイズが増加します。

計算テーブルを使用すると、3 つのテーブルを結合した新しいテーブルが作成されます。ただし、これら 3 つの分割テーブルは引き続きデータベースに残ります。

UNION DAX 関数とパワークエリの比較

この例では、3 つのテーブルが合計 25 MB を消費します。計算テーブルを作成すると、RAM でさらに 25 MB が消費されます。

このような機密性の高いケースでは、取るべき最善の行動について十分な知識に基づいた決定を下す必要があります。

結論

DAX の UNION 関数は 2 つのテーブルを 1 つに結合し、データ分析を容易にします。これは、2 つのテーブルを入力として受け取り、両方の入力テーブルのすべての行を含む新しいテーブルを返すことによって機能します。ただし、この機能には独自の制限があります。

UNION 関数は、特に入力テーブルが大きい場合、データを結合する他の方法よりも遅くなる可能性があります。また、他の代替手段と比較して、ストレージ内でより多くのスペースを消費する可能性があります。

状況によってテーブルを結合する必要がある場合は、UNION 関数の使用を決定する前に、まずメリットとデメリットを比較検討することが重要です。代替手段には、SUMX 関数、データ モデル テーブル、または計算テーブルが含まれます。

ではごきげんよう、


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 ゲートウェイとは何ですか? 知っておくべきことすべて