PowerBI DAX 引擎重大更新,你看懂了嗎?

在2019年3月1日,在SqlBits大會(huì)上,微軟宣布DAX引入一項(xiàng)重大更新:Calculation Group(暫且不做翻譯)。這項(xiàng)更新將對(duì)PowerBI及SSAS均構(gòu)成重要影響。為此,微軟SSAS團(tuán)隊(duì)官方,SQLBI.com以及Chris Webb分別在各自博客記錄這一內(nèi)容。(后兩者為SSAS領(lǐng)域國(guó)際頂級(jí)專家博客)

按照 SSAS 團(tuán)隊(duì)官方的話說(shuō),這是一項(xiàng)DAX本該具有卻一致未有的能力。
按照 馬克·啰嗦 大師的說(shuō)法,之所以《DAX圣經(jīng) 第二版》一直未出版,就是在等微軟宣布這項(xiàng)DAX更新,這將寫入最后一章。
按照 Chris Webb 的觀點(diǎn),這項(xiàng)更新是DAX歷史上最重要的更新。

那么到底是什么功能(特性),另各位專家如此興奮不已呢,本文將結(jié)合三方博客來(lái)介紹這一特性。

問(wèn)題背景

簡(jiǎn)單直接地說(shuō),這個(gè)問(wèn)題來(lái)自于 DAX度量值 的復(fù)用問(wèn)題,舉例如下:
現(xiàn)有度量值:訂單銷售額,訂單利潤(rùn),訂單利潤(rùn)率等10個(gè)指標(biāo),它們的計(jì)算邏輯非常簡(jiǎn)單。不妨稱之為基礎(chǔ)度量值。
當(dāng)我們需要這些基礎(chǔ)度量值與一些條件關(guān)聯(lián)時(shí),就會(huì)產(chǎn)生新的度量值,如和時(shí)間有關(guān)的組合,包括:
MTD,QTD,YTD,PY,MTD PY,QTD PY,YTD PY,PY FY,MTD YOY%,QTD YOY%,YTD YOY%等很容易就超過(guò)10個(gè),因此,對(duì)于10個(gè)基礎(chǔ)度量值,每個(gè)基礎(chǔ)度量值都會(huì)與10個(gè)條件組合來(lái)派生度量值,迅速多達(dá)100個(gè)度量值。
而如果有50個(gè)度量值與20個(gè)條件來(lái)組合,就會(huì)達(dá)到1000個(gè)度量值,我們稱之為無(wú)法復(fù)用導(dǎo)致的度量值爆炸式增長(zhǎng)。

在微軟的產(chǎn)品中,其實(shí)有一條隱形的準(zhǔn)則,那就是:如果用戶在有規(guī)律地重復(fù)一項(xiàng)操作,那么有兩個(gè)可能:要么有一個(gè)一鍵解決的方法,只是你不知道;要么就是微軟缺乏了一項(xiàng)重要的特性。而99%的可能性是前者。 也就是用戶不知道這個(gè)一鍵搞定的方法,例如:數(shù)據(jù)模型自動(dòng)檢測(cè)是對(duì)N次VLOOKUP的一鍵解決方案。

順便提一句:VLOOKUP 在辦公中將兩個(gè)表合并為一個(gè)表,再透視基本是辦公階段Excel用法的鐵律,而在BI中,直接建立數(shù)據(jù)模型的方法直接將辦公的用法完全碾壓,辦公需要VLOOKUP,而BI卻是一鍵解決的,因此花費(fèi)大量精力去搞清楚VLOOKUP的十大技巧完全不必。

而在今天這里,卻是后者,確實(shí)是微軟缺失了一項(xiàng)在 DAX 中解決復(fù)用問(wèn)題的特性。再重復(fù)一次:如何在DAX中復(fù)用復(fù)雜邏輯,不需要編寫新的度量值,卻可以從基本度量值派生新的度量值。

Calculation Group

為了解決類似上述的問(wèn)題,現(xiàn)有的DAX是無(wú)法做到的(當(dāng)然,現(xiàn)在可以了)。微軟稱這項(xiàng)特性叫:Calculation Group。這一個(gè)只含有一列的表,列中的每個(gè)值定義了可復(fù)用的計(jì)算邏輯,稱這些值叫:calculation items。

這里不做中文翻譯,因?yàn)樵撎匦陨性陬A(yù)覽階段,以未來(lái)微軟提供的中文翻譯名字為準(zhǔn)。

calculation items 可以與度量值任意結(jié)合使用,達(dá)到改變度量值已有邏輯,更準(zhǔn)確講,是從已有邏輯派生新計(jì)算邏輯。

一個(gè)典型的案例就是將時(shí)間維度的邏輯進(jìn)行復(fù)用,形如:

image

時(shí)間維度案例

表名稱:Time Inteligence
列名稱:Time Calculation
優(yōu)先級(jí):20

對(duì)其中 calculation item 的定義如下:

可以看到,這里用到了 SELECTEDMEASURE 函數(shù),請(qǐng)仔細(xì)觀察上述的效果示意圖,可以看出:當(dāng) calculation item 與 度量值 在一起使用時(shí),它可以動(dòng)態(tài)的修改度量值。準(zhǔn)確地猜測(cè)(微軟尚未發(fā)布官方說(shuō)明),calculation item 將動(dòng)態(tài)地修改度量值進(jìn)行計(jì)算的篩選上下文環(huán)境,而不去管這個(gè)度量值是什么。

從 CALCULATE 的技術(shù)細(xì)節(jié)來(lái)講,應(yīng)該是在 CALCULATE 計(jì)算的上下文堆棧中,壓入新的篩選器,再計(jì)算 CALCULATE 的第一個(gè)參數(shù)。(詳細(xì)原理已經(jīng)在Excel120的《DAX基礎(chǔ)》中給出,不再贅述。)這里很明顯會(huì)涉及到三個(gè)問(wèn)題:

如何選出當(dāng)前的度量值:SELECTEDMEASURE。
當(dāng)前度量值的名字:SELECTEDMEASURENAME。
是否是特定的度量值:ISSELECTEDMEASURE。

上述三個(gè)新增函數(shù)就可以來(lái)解決這個(gè)問(wèn)題。

還有一個(gè)問(wèn)題就是如果一個(gè)基礎(chǔ)度量值與多個(gè)calculation item同時(shí)使用,到底哪個(gè) calculation item 先算的問(wèn)題,這個(gè)由上述的優(yōu)先級(jí)定義給出。

相關(guān)信息

該DAX能力目前僅僅在預(yù)覽階段的 SQL Server 2019 CTP 2.3 中存在,而且尚無(wú)任何微軟官方編輯器可以編輯操作該特性,也就是說(shuō),你無(wú)法在 DAX Studio,Power BI Desktop 或 SSAS 的 SSDT 中操作或設(shè)置該特性。

該特性已經(jīng)在 引擎版本1470中存在。目前我們使用的 2019年2月 版的PowerBI 引擎版本為 1465。如下:

也就是說(shuō),本文所述的特性目前看不見,摸不著,但它的確存在于最新的DAX引擎中了。

這是一個(gè)使用起來(lái)很簡(jiǎn)單的特性,但SSAS團(tuán)隊(duì)需要在背后做很多事情,才能確保該特性與其他DAX特性完好共存,例如:Excel是可以作為客戶端來(lái)使用的;RLS的兼容;動(dòng)態(tài)格式字符串;AllSELECTED等函數(shù);Detail Rows 表達(dá)式等。

動(dòng)態(tài)格式字符串

你可以想象對(duì)于一個(gè)基礎(chǔ)度量值(如:銷售額)與N個(gè) calculation item 的結(jié)合使用,會(huì)產(chǎn)生 去年銷售額 以及 銷售額增長(zhǎng)率 這兩個(gè)不同指標(biāo),而它們一個(gè)是數(shù)字格式,一個(gè)是百分比格式,但卻只有一個(gè)基礎(chǔ)度量值,這便構(gòu)成了一個(gè)矛盾。

在 超級(jí)復(fù)雜中國(guó)式復(fù)雜報(bào)表 中,我們給出了現(xiàn)有 PowerBI DAX 下的解決方案,但那并非一種原生特性,而是需要利用多種技巧。很明顯,動(dòng)態(tài)格式字符串的發(fā)布將更好的解決這類問(wèn)題,以及更容易地創(chuàng)建中國(guó)式復(fù)雜報(bào)表。

動(dòng)態(tài)格式字符串 特性應(yīng)該會(huì)在2019的迭代中發(fā)布,我們將持續(xù)關(guān)注。

提前嘗鮮

如果特別希望提前體驗(yàn) calculation group 特性,確實(shí)有一個(gè)方法,那就是使用:Tabular Editor。這是一個(gè)由社區(qū)開發(fā)的第三方工具。

給出嘗試思路如下:

  1. 下載最新版 SQL Server 2019 CTP 2.3 并建立一個(gè) SSAS Tabular 項(xiàng)目。正如上所述,目前微軟尚未提供任何一種可以體驗(yàn) calculation group 特性的編輯工具。
  2. 使用 Tabular Editor 來(lái)打開上述項(xiàng)目模型文件,通過(guò) Tabular Editor 的能力來(lái)創(chuàng)建 calculation group。
  3. 部署發(fā)布項(xiàng)目。
  4. PowerBI Desktop live connenction 模式連接SSAS體驗(yàn)。

按照意大利大師的話來(lái)說(shuō),由于Calculation Group特性的到來(lái),即將解鎖一大波DAX的新能力,具體能做到哪些,現(xiàn)在不好說(shuō),微軟還沒(méi)有對(duì)外明確公布在 Power BI 中發(fā)布該特性的時(shí)間,大師們表示需要數(shù)月甚至整年時(shí)間來(lái)研究由此帶來(lái)的新玩法。

而在微軟的官方博客已經(jīng)能預(yù)料到由于DAX引擎一波特性的發(fā)布,已經(jīng)讓SSAS團(tuán)隊(duì)處于很大負(fù)荷的狀態(tài)。這些特性包括:管理聚合(多對(duì)多);PowerBI 增量刷新;開放 PowerBI 可作為 SSAS 連接,以及今天提及的Calculation Group。

總之,盡情享用吧。

參考資料

微軟SSAS團(tuán)隊(duì)博客:
https://blogs.msdn.microsoft.com/analysisservices/2019/03/01/whats-new-for-sql-server-2019-analysis-services-ctp-2-3/

SQLBI博客:
https://www.sqlbi.com/blog/marco/2019/03/01/calculation-groups-in-dax-first-impressions/

Chris Webb博客:
https://blog.crossjoin.co.uk/2019/03/01/ssas-tabular-2019-calculation-groups-and-migration-from-ssas-multidimensional/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容