是不是常常有企業在和一些大數據集的客戶合作的時候,我們的BI伙伴經常會面臨這么一個挑戰:我們是否有比較有效的的方法減少和降低內存的消耗,同時仍然可以看到應有的指標。
01接受挑戰!
事實上,我們已經采取過多種優化措施:減少基數,刪除不需要的列,並確保所需的數據加載到數據集中等。但即使我們這樣做了,我們的數據集大小仍在Azure Analysis Services中消耗90GB的內存,所以並沒有太大起色。
那還有沒有更好的辦法呢?下面跟大家分享一個技巧,我們可以通過以下步驟將數據集的大小縮減到37GB!
02原始數據集大小
如圖所示,我們原來的PBIX原始大小為5.01MB。
當運行這個數據集時,它消耗了大約20MB的內存。
03使用十進制減少數據集大小
我們通過閱讀有關數據類型的文檔時,可以將數據類型從“十進制數”更改為“固定十進制數”,這樣可以節省數據集的大小。
我們把數據類型變為固定小數,保留4位小數。
我們確保如果將列中的值更改為僅保留小數點后4位,總數將保持不變。
如下所示,將列SalesAmount_EUR的數據類型設置為“十進制數”。
接下來,我們保留4位小數的值,如下所示。
現在,當我們保存PBIX時,它從5.01MB變為4.18MB。
這樣可以節省大約16%,最初我們認為這也還不錯。
但是我們覺得應該還有辦法能讓數據集內存優化到更小,是什么呢?我們繼續看下文。
04使用整數使數據集真正小而有效
有這么一個想法:如果現在可以將SalesAmount_EUR拆分到單獨的列中怎么辦?
那意味着我們可以兩列整數。不僅如此,十進制值的基數也會大大減少。
我們立即開始嘗試,並使用TSQL(你可以再次使用Power Query)將列拆為2列。但現在有個問題要解決的是:當我有一個負值時,要保證我的拆分列也為負!
拆分數據后,要確保拆分列的數據類型都設置為“整數”。
做到這一步,真心希望這可以滿足我們的需求:大大節省數據集和內存大小。
當我保存文件時,它已降至1.75MB。
下面我們通過一個Power BI視覺文件,來測試對比看看我們到底可以節省了多少內存資源。
如上所示,數據集的大小減少了65%。
內存大小也從19MB減少到2.1MB。
現在,我需要在DAX度量中添加一些其他邏輯以將這兩列組合在一起以表示相同的值。
我們也對此進行了測試,並且由於數據集的大小要小得多,因此結果是數據集的大小,數據的大小和列的層次結構的大小都變小,這意味着超快速的SSAS引擎可以更快地處理數據。
這是我們如何一次將這些值重新組合在一起
1 2 3 |
Sales Amount EUR = SUM ( Data[SalesAmount_EUR] ) + ( DIVIDE ( SUM ( 'Data'[SalesAmount_EUR_Cents] ), 10000 ) ) |
05結論
正如我們所展示的,有時可以使用一些非常有創意的方法來減少數據集的大小,你們覺得呢?
技術交流
1.Power BI免費下載:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下載地址
2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。
Power Data技術交流群:702966126 (驗證注明:博客園Power BI)
更多精彩內容請關注微信公眾號:悅策PowerBI
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,作者博客:https://www.cnblogs.com/yeacer/