DAX Studio 中的 LuckyTemplates 壓縮技術

DAX Studio 中的 LuckyTemplates 壓縮技術

在本教程中,您將了解中有助於優化報表的不同 LuckyTemplates 壓縮技術。

在 LuckyTemplates Power Pivot 和SSAS中的 Analysis Services 逐段加載數據後,會發生兩個事件。第一個是他們嘗試使用不同的編碼方法來壓縮列以減少整體 RAM 大小。第二個是他們試圖資助將重複值放在一起的最佳排序順序。這種方法還增加了壓縮,進而減少了內存壓力。

Analysis Services 使用不同的壓縮技術。本教程具體介紹了三種方法,即值編碼、遊程編碼和字典編碼。在本教程的最後一部分,它將介紹如何在 Analysis Services 中排序。

目錄

LuckyTemplates 壓縮技術 #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。使用8作為 X 的值得到256。因此,新列只需要 8 位。

您可以看到第二列與第一列相比的壓縮程度。

一旦數據被壓縮並且您嘗試查詢新列,存儲引擎或 Vertipaq將掃描該列。他們不會簡單地返回列的新值。相反,他們在將結果返回給用戶之前添加減去的值。

但是,值編碼僅適用於包含整數或具有固定十進制數的值的列。

LuckyTemplates 壓縮技術 #2:運行長度編碼

第二種編碼方法稱為運行長度編碼。

運行長度編碼創建一個包含不同值、開始列和計數列的數據結構。

讓我們舉個例子:

DAX Studio 中的 LuckyTemplates 壓縮技術

在這種情況下,它標識第一行中有一個紅色值可用。然後它發現黑色值從第二行開始並且可用於接下來的四個單元格。它繼續到第三個值Blue,它從第六行開始並且可用於接下來的三行。這一直持續到它到達列中的最後一個值。

因此,它不是存儲整個列,而是創建一個數據結構,該數據結構僅包含有關特定值從何處開始和結束以及它有多少重複項的信息。

DAX Studio 中的 LuckyTemplates 壓縮技術

對於具有相同結構的列,可以通過按升序或降序排列值來進一步壓縮數據。

DAX Studio 中的 LuckyTemplates 壓縮技術

通過這個正確排序的列,您可以看到運行長度編碼方法現在返回一個少了一行的數據結構。

DAX Studio 中的 LuckyTemplates 壓縮技術

因此,如果您要處理許多不同的值,建議以盡可能最佳的方式對列進行排序。這將為您提供具有較少行的數據結構,從而佔用較少的 RAM。

運行長度編碼不能應用於主鍵,因為主鍵列僅包含唯一值。因此,它不會為每個值存儲一行,而是按原樣存儲該列。

LuckyTemplates 壓縮技術#3:字典編碼

第三種編碼方式稱為字典編碼。

字典編碼創建一個類似字典的結構,其中包含列的不同值。它還為該唯一值分配一個索引。

使用前面的例子,讓我們看看字典編碼是如何工作的。在這種情況下,值 Red、Black 和 Blue 分別指定了索引 0、1 和 2。

DAX Studio 中的 LuckyTemplates 壓縮技術

然後它創建一個類似於運行長度編碼的數據結構。但是,Dictionary Encoding 不是存儲實際值,而是存儲每個值的分配索引。

DAX Studio 中的 LuckyTemplates 壓縮技術

這進一步減少了 RAM 消耗,因為數字佔用的空間比字符串值少。

字典編碼還使表格數據類型獨立。也就是說,無論您是否有一個可以存儲在不同數據類型中的列,都沒有關係,因為數據結構只會存儲索引值。

然而,即使它是獨立的,數據類型仍然會對字典的大小產生影響。根據您選擇保存列的數據類型,字典(或數據結構)大小會波動。但列本身的大小將保持不變。

因此,根據您選擇的數據類型,一旦在列上應用了字典編碼,之後就可以應用遊程編碼。

在這種情況下,Analysis Services 將創建兩個數據結構。它會首先創建一個字典,然後對其應用運行長度編碼以進一步增加列的壓縮。

Analysis Services 中的排序順序

在本教程的最後一部分,我們將討論 Analysis Services 如何確定最佳的數據排序方式。

例如,讓我們看一下包含紅色、藍色、黑色、綠色和粉色值的列。數字 1 到 5 也已分配給它們。這充當我們專欄的字典。

DAX Studio 中的 LuckyTemplates 壓縮技術

現在,用這些值填充 Excel 中的一整列。使用此參數隨機生成包含這些值的列。

DAX Studio 中的 LuckyTemplates 壓縮技術

將公式拖到最後一行。如果出現大型操作彈出窗口,請單擊確定。這是現在的樣子:

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 就會根據數據類型應用三種壓縮技術中的一種。

這樣做會增加數據壓縮,從而大大減少設備中消耗的內存量。這使您的報告更加優化,使其更易於運行和加載。


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的