DAX Studio の LuckyTemplates 圧縮テクニック

このチュートリアルでは、レポートの最適化に役立つのさまざまな LuckyTemplates 圧縮手法について学習します。

LuckyTemplates Power Pivot およびSSASの Analysis Services によってデータがセグメントごとに読み込まれると、2 つのイベントが発生します。1 つ目は、RAM 全体のサイズを削減するために、さまざまなエンコード方式を使用して列を圧縮しようとすることです。2 つ目は、繰り返される値を一緒に配置する最適な並べ替え順序に資金を提供しようとすることです。この方法では圧縮率も向上するため、メモリへの負担も軽減されます。

Analysis Services ではさまざまな圧縮手法が使用されます。このチュートリアルでは、特に値エンコーディング、ランレングス エンコーディング、辞書エンコーディングという 3 つの方法について説明します。このチュートリアルの最後のセクションでは、Analysis Services で並べ替え順序を機能させる方法について説明します。

目次

LuckyTemplates 圧縮手法 #1: 値のエンコーディング

1 つ目は値エンコーディングと呼ばれます。

値エンコーディングは、列内の各値間の数学的関係を検索してメモリを削減します。Microsoft Excel の例を次に示します。

この列には値を格納するために 16,384 ビットが必要です。

DAX Studio の LuckyTemplates 圧縮テクニック

必要なビットを計算するには、まず Excel で MAX() 関数を使用して、列の最大値を取得します。この場合、9144 です。次に、POWER() 関数を使用して、必要なビットを計算します。引数 POWER(2, X) を使用します。ここで、X は MAX 値より大きい答えを返す任意の正の値です。この場合、X は必要なビットも表します。したがって、この例では、 X の値は 14 で、結果は16,384になります。したがって、列には 14 ビットのストレージが必要です。

値エンコーディングを使用して必要なビットを減らすために、VertiPaq は列内の MIN 値を検索し、それを各値から減算します。この場合、列の MIN 値は 9003 です。これを列から減算すると、次の値が返されます。

DAX Studio の LuckyTemplates 圧縮テクニック

同じ関数と引数を使用すると、新しい列の MAX 値が 141 であることがわかります。また、X の値として8を使用すると、結果は256になります。したがって、新しい列には 8 ビットだけが必要です。

最初の列と比較して 2 番目の列がどの程度圧縮されているかがわかります。

データが圧縮され、新しい列をクエリしようとすると、ストレージ エンジンまたは Vertipaq がこの列をスキャンします。単に列の新しい値を返すわけではありません。代わりに、結果をユーザーに返す前に、減算された値を加算します。

ただし、値エンコーディングは、整数または固定 10 進数の値を含む列に対してのみ機能します。

LuckyTemplates 圧縮手法 #2: ランレングス エンコーディング

2 番目のエンコーディング方法は、ランレングス エンコーディングと呼ばれます。

ランレングスエンコーディングは、個別の値、開始列、およびカウント列を含むデータ構造を作成します。

例を見てみましょう:

DAX Studio の LuckyTemplates 圧縮テクニック

この場合、最初の行で1 つのRed値が使用可能であることが識別されます。次に、 Black値が 2 行目から始まり、次の 4 つのセルで使用できることがわかります。3 番目の値Blueに進みます。これは 6 行目から始まり、次の 3 行で使用できます。これは、列の最後の値に到達するまで続きます。

そのため、列全体を保存するのではなく、特定の値の開始位置と終了位置、および重複の数に関する情報のみを含むデータ構造を作成します。

DAX Studio の LuckyTemplates 圧縮テクニック

同じ構造の列の場合、値を昇順または降順に並べることで、データをさらに圧縮できます。

DAX Studio の LuckyTemplates 圧縮テクニック

この適切にソートされた列により、ランレングス エンコーディング メソッドが 1 行少ないデータ構造を返すことがわかります。

DAX Studio の LuckyTemplates 圧縮テクニック

したがって、多数の個別の値を扱う場合は、可能な限り最適な方法で列を並べ替えることをお勧めします。これにより、行数が減り、占有される RAM が少なくなるデータ構造が得られます。

主キー列には一意の値のみが含まれるため、ランレングス エンコーディングを主キーに適用することはできません。したがって、値ごとに 1 行を保存するのではなく、列をそのまま保存します。

LuckyTemplates 圧縮手法 #3: 辞書エンコーディング

3 番目のエンコード方法は、辞書エンコードと呼ばれます。

辞書エンコーディングは、列の個別の値を含む辞書のような構造を作成します。また、その一意の値にインデックスも割り当てます。

前の例を使用して、辞書エンコーディングがどのように機能するかを見てみましょう。この場合、値 Red、Black、Blue にはそれぞれ 0、1、2 のインデックスが割り当てられます。

DAX Studio の LuckyTemplates 圧縮テクニック

次に、ランレングスエンコーディングと同様のデータ構造を作成します。ただし、Dictionary Encoding は実際の値を保存する代わりに、各値に割り当てられたインデックスを保存します。

DAX Studio の LuckyTemplates 圧縮テクニック

数値は文字列値よりも占有するスペースが少ないため、これにより消費される RAM がさらに削減されます。

ディクショナリ エンコーディングにより、表形式のデータ型も独立します。つまり、さまざまなデータ型で格納できる列があるかどうかに関係なく、データ構造にはインデックス値のみが格納されるため、問題にはなりません。

ただし、独立している場合でも、データ型は依然としてディクショナリのサイズに影響します。列の保存先として選択したデータ型に応じて、ディクショナリ (またはデータ構造) のサイズは変動します。ただし、列自体のサイズは変わりません。

したがって、選択するデータ型に応じて、ディクショナリ エンコーディングが列に適用されると、その後ランレングス エンコーディングを適用できます。

この場合、Analysis Services は 2 つのデータ構造を作成します。まず辞書を作成し、次にそれにランレングス エンコーディングを適用して列の圧縮をさらに強化します。

Analysis Services での並べ替え順序

このチュートリアルの最後の部分では、Analysis Services がデータを並べ替える最適な方法をどのように決定するかについて説明します。

例として、赤、青、黒、緑、ピンクの値を含む列を見てみましょう。1 から 5 までの番号も割り当てられています。これはコラムの辞書として機能します。

DAX Studio の LuckyTemplates 圧縮テクニック

次に、Excel の列全体にこれらの値を入力します。この引数を使用して、これらの値を含む列をランダムに生成します。

DAX Studio の LuckyTemplates 圧縮テクニック

数式を最後の行までドラッグします。「大規模操作」ポップアップウィンドウが表示されたら、「OK」をクリックします。これで次のようになります。

DAX Studio の LuckyTemplates 圧縮テクニック

次に、列全体をコピーし、Valueとして貼り付けます。

DAX Studio の LuckyTemplates 圧縮テクニック

Excel ドキュメントの [ファイル]オプションに移動して[情報]をクリックすると、その列が14.1MBを消費していることがわかります。

消費される RAM の量を減らすために、列を A から Z に並べ替えることができます。サイズを再度確認すると、 12.5 MBに減少していることがわかります。

1.9 MB の削減はそれほど多くないように思えるかもしれません。これは、この例では Excel の単一列を使用して説明したためです。Excel では 100 万行までしか制限されていません。ただし、LuckyTemplates では、データに数十億の行と列を含めることができます。使用されるスペースの削減は指数関数的に増加します。

結論

データが最適な方法で並べ替えられると、Analysis Services はデータ型に応じて 3 つの圧縮手法のいずれかを適用します。

そうすることでデータの圧縮率が高まり、デバイスで消費されるメモリの量が大幅に削減されます。これにより、レポートがより最適化され、実行と読み込みが容易になります。

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