DAX Studio の LuckyTemplates 圧縮テクニック

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 つの圧縮手法のいずれかを適用します。

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


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