PowerBI 多種增量刷新方案最大支持100T數據存儲及單個模型50G+

什么是增量刷新

所謂增量刷新,是指增量刷新數據。一般情況下,在PowerBI或PowerBI Desktop中點擊【刷新】按鈕,會將數據源的數據全部刷新一遍,如果數據源數據很多,而每次變化的很少,例如只有最近一日發生變化,那這種不問青紅皂白就直接全部刷新的方法顯然會耗時耗力。很可惜在默認情況下,PowerBI就只支持這種數據刷新方式。

隨著2018年5月PowerBI的升級,Premium開始支持真增量刷新,本文來說明目前可以用來在PowerBI中實現增量數據刷新的技巧。

在PowerBI中實現增量刷新,目前有三種方法:

  • 用 PowerQuery M 實現增量刷新,該方法有一定限制,屬于假增量刷新。
  • 用 DAX 實現增量刷新,該方法也有一定限制,屬于假增量刷新。
  • 用 Power BI Premium 實現增量刷新,該方法也有一定限制,但屬于真增量刷新

數據場景假設

假設這里有不斷在更新的訂單表,首先加載2011年到2013年數據,而每次數據刷新只刷新2014年數據,以下的方案應該如何實現呢。

用 PowerQuery M 實現增量刷新

用 PowerQuery M 實現增量刷新的核心技巧在于:查詢的縱向合并。這里可以節省的時間在于網絡傳輸的時間,方案如下:

  • 首先將遠程歷史數據通過任何查詢形式保存在本機。
  • 查詢本機歷史數據再縱向合并遠程的增量數據。

這樣一來,每次歷史數據的獲取只是讀取本機磁盤的時間,而不再產生網絡傳輸的時間消耗,進而在一定程度上緩解了數據刷新的時間瓶頸問題。

再使用PowerQuery M的縱向合并表查詢把幾個查詢合并成最終結果,完成增量刷新的效果。如下:

其中訂單是由其他的訂單數據合并而來,對應的PowerQuery M查詢如下:

訂單 = Table.Combine( { #"訂單2011", #"訂單2012", #"訂單2013", #"訂單2014" } )

可以把訂單2011~2013的數據置于本地服務器或PC,在刷新時,雖然會全部刷新,但由于數據可以預先置于本地,則可以有效降低數據的網絡傳輸時間。

另外,如果該模型發布到云端,顯然都會有網絡傳輸時間,但可以節省的是,數據在PQ中ETL的時間,可以預先將數據用PQ(或其他ETL工具)進行ETL后進行保存。在實際查詢時會節省ETL的時間。

當然,這種方法并不是真正意義上的增量刷新,屬于利用了PowerQuery或者說ETL可以緩沖數據存儲的思想。

用 DAX 實現增量刷新

由于使用PowerQuery的方式實現假增量刷新是數據進入數據模型前,所以仍然要刷新所有數據,因此并沒有降低模型對數據的吞吐量。在數據加載進入數據模型之后,我們也可以實現增量刷新的效果,使用DAX的UNION函數將多個表縱向合并即可。對此,我們設計的結構如下:

這里需要將訂單2011~2014全部加載進入模型,但可以設置只有訂單2014包含在報表刷新中,如下:

這樣每次刷新數據的時候,只有最后一組訂單數據(訂單2014)會被刷新,如下:

用DAX實現合并的函數表達式如下:

這里面最后一行的FILTER一定會讓人困惑不解。沒錯,不要這句也是沒問題的,但它是為了解決下面這個問題了準備的。

有伙伴問到:如果一開始訂單是正常加載的,那就無法被UNION了。沒錯,因為訂單這個表名已經存在,以后再想UNION是沒辦法的。這時候可以嘗試:

  • 將原有訂單拆分成增量加載形式。
  • 刪除加載的訂單,此時數據模型會出現大量報錯,因為沒有了訂單這個表。
  • 用UNION的方式合成新表并命名為訂單,并補足關系,理論上可以修復所有的錯誤。但在實際實踐中,可能并不能修復所有錯誤,仍然有大量錯誤存在,這視具體實際情況而定。

因此,這種刪除后重新用DAX計算表的方式彌補訂單存在風險,務必備份數據

一種未雨綢繆的做法是,在建模初期就預料到某些表會很大,可能需要增量加載,那可以直接使用計算表,但此時如果只有一個表怎么辦,也就是說,必須實現一個表的UNION作為占位符。由于DAX的UNION函數必須至少有兩個參數,且這兩個參數必須都是列數一樣的表,所以使用FILTER的這句技巧實際返回一個空表與前面的表合并,以起到占位符的作用,待有真正需要合并的表的時候,再做替換。

?? 提示
當然,在只有一個表的時候使用計算表可以不用UNION以更加簡單。

這樣,就使用DAX的UNION實現了增量刷新的效果,并且該效果確實起到了增量加載數據,但根據DAX引擎的原理,整個數據模型會重建,仍需花費時間,這里省去了數據加載的時間,但無法省去模型重建的時間。另外的一個缺陷是,同樣的數據在模型中保留了兩份。

經過實際測試,該方法確實可以顯著降低模型生成的時間,具體情況以實際為準。

用 Power BI Premium 實現增量刷新

Power BI 5月更新的預覽功能中,已經給出了Power BI正統實現增量刷新的方法,但就是在Power BI Desktop只是進行設置,實際到Power BI Service的Premium專有容量中再進行實際階段的增量加載,由于Power BI Premium允許單個數據模型可超過50G且數據存儲達到100T(參考:Microsoft Power BI Premium 白皮書),這個量級的數據在本地PC或Power BI Desktop是無法進行的,而Power BI Premium卻提供了這樣的能力。如果在Power BI Desktop設置好增量刷新,效果如下:

其含義為:

  • 將訂單表增量刷新
  • 存儲最后3年的數據行
  • 刷新最后1日的數據行
  • 在檢測到數據更改時觸發刷新動作

在Power BI Desktop設計好后,發布的時候會看到:

由于設置了增量刷新,必須發布到含有Premium容量的工作區,否則是無法發布的。

很多伙伴會問,在你自己設置增量刷新的時候,不會成功,會提示這樣的錯誤:

你會發現,無論你怎么設置參數都不對,這里有幾個非常重要的細節需要指出:

  • 必須在查詢編輯中設置參數,且參數的數據類型必須是【日期/時間】,日期型也是不對的。
  • 設置的參數必須起名為RangeStart和RangeEnd分別表示時間的開始和結束。參數名用別的也是不對的。
  • 對需要增量更新的表,如:訂單,讓訂單日期被上述的兩個參數所篩選。

如下:

只有滿足了以上設置,增量刷新才會乖乖出來給你用。

這種方法當然是真增量刷新,而且可以應對多達100T的數據存儲以及單個100G的數據模型,這個能力非常強大,當然,為此付出的代價就是必須購買5K美金/月起步(注意:是起步,實際以定價估算計算器為準)的Power BI Premium服務。

但如果仔細算一筆賬,其實這也并非絕不合理,5K美金/月大致為30000RMB/月,相當于一個IT工程師的月薪,而有了Premium,可以不再需要IT工程師來搭建和維護數據環境,這其實是相當的。而這個環境可以支撐多達100T的數據量級以及單個100G的數據模型,足以應付企業級數據分析需求。

總結

本文整體分析并實際演示了在Power BI中實現數據增量刷新的各種方法以及各自優缺點:

  • PQ M 方法:簡單且便于維護,但并非真正增量刷新,只能節省網絡傳輸和部分ETL的時間。
  • DAX 方法:可以在Power BI模型限制范圍內部分降低數據加載時間,但要注意在項目開始引入以便避免后期問題。
  • PowerBI Premium方法:終極的數據增量刷新方法,支持多達100T的數據存儲以及單個數據模型可以超過50G且每天可以刷新48次,但費用昂貴,屬于企業級解決方案。

【本案例包括案例示例文件以及視頻詳細說明,可訂閱獲取】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容