有伙伴說一段時間沒有更新文章,這一次頂十次。明明能拆成十期的文章,非要一次寫完,沒辦法,厚道。
客觀地講,PowerBI 作為快速發(fā)展的BI產(chǎn)品,在很多方面仍然需要打磨,以前我們似乎更多來說 PowerBI 有多厲害,但這并不影響我們客戶地向更加優(yōu)秀的伙伴學習,例如:在 Tableau 確實有太多的優(yōu)點,PowerBI 需要去學習,期待希望微軟的產(chǎn)品經(jīng)理們。(也只能期待了...)
在數(shù)據(jù)分析中,除了簡單匯總或簡單變換以外,很多需求是需要有額外的輔助才能實現(xiàn)的,在 PowerBI 中,這些全部以 DAX函數(shù) 給出,來構(gòu)建模型的語義層;而在 Tableau 中,自有她的一套巧妙設計,我們不妨來對比研究一下對于同樣的略微復雜的功能是如何在不同的產(chǎn)品中實現(xiàn)的。由于我們這里主要是研究 PowerBI,故給出 Tableau 的實現(xiàn)效果,對其涉及公式不再詳細討論,而將這些精力留給對 PowerBI 的描述。
本文全部是案例,案例來自于實際,Tableau舉例了十個案例,為了處于學習目的,這里將變換下案例,但保持本質(zhì)不變,來達到花費最小精力學習最多收益的效果。
參考文章《10大Tableau表計算》:https://www.tableau.com/zh-cn/about/blog/2017/2/top-10-tableau-table-calculations-65417
推薦實踐方式:
- 打開 10大Tableau表計算 文章,對照每個案例,理解業(yè)務需求。
- 用 Excel120 通用案例數(shù)據(jù)逐個自行實現(xiàn),以達到鍛煉自己 PowerBI 能力。
- 對照本文查看你的實現(xiàn)邏輯與這里的異同以進一步探討。
以下詳細對比每個案例并給出在 PowerBI 中的實現(xiàn)。
自參考日期開始的百分比變化
在 Tableau 中,利用表計算,可以計算從任意值開始的百分比變化。假設您對某個股票組合感興趣,并且想評估它們從某個時間點開始的相對表現(xiàn)。為此,需要設置一個“投資日期”,并將這些股票標準化到同一個時間點,用線條顯示百分比變化??墒褂没瑝K調(diào)整參考日期。效果如下:

Tableau 表達式:

以及:

在 PowerBI 中,模擬類似的需求,實現(xiàn)選定任意時間點,顯示不同時間相對于該時間的銷售額的增長率。效果如下:

Power BI DAX表達式:

以及:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
- PowerBI 可視化層無法顯示用戶鼠標點擊點位。
公共基準
您可能想?yún)⒄找粋€公共基準點查看數(shù)據(jù),而不是查看一段絕對時間范圍的數(shù)據(jù)。例如,這里有三部《玩具總動員》電影的票房收入。如果按星期看一下自首映日開始的總收入,比較起來就容易多了:

Tableau 表達式:

在 PowerBI 中,模擬類似的需求,實現(xiàn)按照首次銷售計算不同類別的銷售額趨勢。效果如下:

首先構(gòu)造了一個坐標軸,然后根據(jù)當前坐標軸位置來計算,PowerBI DAX 表達式為:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
隨時間變化的銷售總額百分比
希望一次執(zhí)行兩遍表計算的情況很常見。例如,查看某個細分市場隨時間變化的增長或收縮對公司的重要性可能很有意義。為此,必須先按細分市場計算隨時間變化的銷售額匯總,然后將其作為隨時間變化的銷售總額百分比來查看。這也稱為多遍聚合,在 Tableau 中不寫公式也可以完成這種聚合。

在 Tableau 中僅需要設置就可以完成:

以及:

在 PowerBI 中,模擬類似的需求,實現(xiàn)按照不同類別顯示其當年積累銷售額占整體銷售額的比例。效果如下:

Power BI DAX 表達式:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
- Tableau 有更加豐富的報告層計算功能,可以通過設置完成。
- PowerBI 無法設置同一可視化對象的分組也自然無法在報告層完成復雜計算。
- PowerBI 報告層幸好有 PowerBI DAX 可以依賴。
整理時保持排序
這里我們需要了解產(chǎn)品在一個月和一年內(nèi)的排名,然后顯示排名隨時間的變化。為此,我們創(chuàng)建一個凹凸圖,其中以折線圖形式顯示隨時間的變化??稍谧髠?cè)看到復印機和傳真機已經(jīng)從銷售不佳的產(chǎn)品變成目前的銷售前 3 甲。還可以看到,傳真機和復印機的購買量波動很大。

Tableau中這樣計算:

在 PowerBI 中,模擬類似的需求,實現(xiàn)按照不同類別顯示其不同時間段的排名。效果如下:

在 PowerBI 中,在報告層面可以實現(xiàn)傳達同樣信息的效果,但從報告層的細節(jié)來說,仍無法做到 Tableau 的融合性,例如:

無法做到最少可視化元素的完備性以及整體性,PowerBI 產(chǎn)品經(jīng)理有的玩了。
當然 PowerBI DAX 表達式:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
- PowerBI 報表層無法做到最少可視化元素的完備性以及整體性。
- PowerBI 報表層可實現(xiàn)傳達信息以及勉強的可視化效果。
遞歸效果的匯總
現(xiàn)在需要監(jiān)視呼叫中心未結(jié)支持案例的數(shù)量,或者有貨的庫存數(shù)量。但是系統(tǒng)未記錄未結(jié)案例的滾動合計,您需要推算出來。這等于開案日的案例數(shù) + 新開案例數(shù) + 重開案例數(shù) – 已結(jié)案例數(shù)。
表面看來,這是簡單計算。但是,每日開案數(shù)量是根據(jù)上一個結(jié)案日推算的,后者又是根據(jù)當日開案數(shù)量推算的。這形成了計算的循環(huán)引用。
效果如下:

在 Tableau 中的大致實現(xiàn)方式:

以及:

以及:

充分看出在 Tableau 中的報表層提供了很多控制以實現(xiàn)計算。
在 PowerBI 中,模擬類似的需求,實現(xiàn)計算每天的累計未發(fā)貨量,未發(fā)貨量由昨日累計訂單量 - 昨天累計發(fā)貨量得到,效果如下:

PowerBI DAX 表達式:

這看似一種遞歸的效果,但其實可以轉(zhuǎn)化為非遞歸實現(xiàn),在 Tableau 和 PowerBI 兩者中都并非真正的遞歸,在 PowerBI DAX 中是不支持真正遞歸的,當然在這種案例中也不用使用真正的遞歸。
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
加權(quán)平均
對于考試分數(shù)或訂單優(yōu)先級等數(shù)據(jù),適合采用加權(quán)平均分析。也許您想查看各種產(chǎn)品類型所有訂單的平均優(yōu)先級,并且想按訂購量加權(quán)該優(yōu)先級,這樣訂購量大的產(chǎn)品就會得到更高的優(yōu)先級分數(shù)??梢允褂眉訖?quán)平均優(yōu)先級分數(shù)來優(yōu)化訂購量大、優(yōu)先級高的產(chǎn)品的供應鏈。這里,我們使用 Superstore 銷售數(shù)據(jù)進行加權(quán)平均:

在 PowerBI 中,模擬類似的需求,實現(xiàn)按子類別銷售額利潤率加權(quán)來計算類別的平均銷售額,效果如下:

PowerBI DAX 表達式可以直接由快速度量值給出:

生成的 PowerBI DAX 表達式如下:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
按計算分組
如果您管理公司的配送運營,可能會對哪些產(chǎn)品的運輸成本高于平均值感興趣。在 Tableau 6 中,可以計算整個時間窗口的平均值,并在計算中使用該值對各值進行分組和配色。

Tableau 中的主要計算如下:

在 PowerBI 中,模擬類似的需求,效果如下:

首先構(gòu)建一個用來分組的輔助表作為圖例,然后編寫 PowerBI DAX 表達式如下:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
- PowerBI 中為了報表層效果有時候需要建立輔助報表層的輔助表,這是不符合設計常識的,PowerBI 有獨立的模型層,里面的表反應了實際的業(yè)務,而不應該將輔助表與之混合,這完全違背了設計學上的常識,而目前沒有在這方面得到改良。
移動范圍的事件數(shù)
對于零售、智能或邊界控制等不同的場景,通常需要了解在一個時間窗口內(nèi)發(fā)生某一事件的次數(shù)。例如,一次可疑事件可能是一次意外,但是如果在 x 天里發(fā)生次數(shù)超過 n 次,那就值得調(diào)查一下。

這里 Tableau 用到了參數(shù)和計算的結(jié)合,主要的計算如下:

在 PowerBI 中,模擬類似的需求,實現(xiàn) X 天內(nèi)小于上月日平均銷售額的次數(shù)達到指定閾值,效果如下:

如果在連續(xù)的X天內(nèi)次數(shù)超過了閾值次數(shù)則顯示,否則不顯示。
PowerBI DAX 表達式如下:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
可變時段的移動平均
您已使用 Tableau 中的快速表計算功能,計算了所有月份的銷售額移動平均,但現(xiàn)在希望進行擴展,以便選擇要計算多少個時段的平均值。
淡藍色線條顯示所有月份的銷售額總和,而橙色線條顯示 15 個時段的銷售額移動平均。

在 Tableau 中的設置和計算如下:

在 PowerBI 中,模擬類似的需求,效果如下:

PowerBI DAX 表達式如下:

小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
各時段與平均值的差異
您可能更想看到季度銷售額與當年平均值(而不是絕對數(shù))的差異。此處顯示了與當年平均值和絕對訂單數(shù)之間的差異。

在 Tableau 中的主要設置和計算如下:

在 PowerBI 中,模擬類似的需求,效果如下:

PowerBI DAX 表達式如下:

雖然是達到同樣的效果,在 PowerBI DAX 中卻要理解上下文轉(zhuǎn)換以及取消外部篩選等高級的 DAX 知識才能快速而準確地寫出度量值。
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
- 對該效果的實現(xiàn),雖然 DAX 公式并不復雜,但背后涉及需要透徹理解 DAX 計算原理,該復雜度遠遠超越了寫出同樣表達式的 Tableau 的程度。
總結(jié)
通過對比用 Tableau 和 PowerBI 實現(xiàn)同樣的 10 種非默認效果的計算,可以對兩種軟件在某方面的設計有了一個局部的認知,可以總結(jié)為:
- Tableau 具有高度精細的可視化引擎及完備的可視化組件系統(tǒng)。
- Tableau 具有一套完備的報表級計算公式系統(tǒng)。
- PowerBI 可視化組件系統(tǒng)并不完備,典型的缺失如:可視化對象的分組整體顯示。
- PowerBI 沒有報表級計算公式系統(tǒng)。
- PowerBI 報表級計算完全依賴于模型級的計算,全部由 DAX 給出。
- PowerBI 為了實現(xiàn)某些報表計算效果,必須在模型級構(gòu)建沒有任何模型意義的輔助表結(jié)合 DAX 實現(xiàn)報表級的計算。
因此,我們可以對 PowerBI 的報表計算能力有一個更準確的把握:
- PowerBI 報表層沒有完備的組件系統(tǒng),表現(xiàn)在:很多設置是無法在報表上進行的,例如:無法按某度量值設置圖中恒線,無法統(tǒng)一分組可視化元素并按整體顯示等。
- PowerBI 報表層沒有獨立的計算系統(tǒng),表現(xiàn)在:PowerBI 沒有提供基于模型的計算結(jié)果的輕量級二次計算能力,所有的計算全部依賴于模型級的 DAX 表達式進行。
- PowerBI DAX 表達式著實強大和靈活,它不僅肩負著完成模型級的大規(guī)模聚合運算,也肩負著完成報表級的任何精細化運算。
更多的思考:
從本文的 10 個典型案例可以部分看出 Tableau 作為完成報表層計算和展示時有良好和完備的能力,這也許得益于其初期就明確的精準定位,尤其看到在 Tableau 6 時代就已經(jīng)達到了完備的計算。在這方面,由于 PowerBI 將數(shù)據(jù)準備,數(shù)據(jù)建模,數(shù)據(jù)可視化,報表制作融為一體,尤其是 模型層計算 和 報表層計算 并沒有從系統(tǒng)化的角度做嚴格區(qū)分,導致任何報表需求的本質(zhì)都是一個DAX查詢,而報表層又沒能做到:
- 基于 DAX查詢結(jié)果 后,沒有充分枚舉各種變化可能性的組件化(非編程)實現(xiàn)。
- 基于 DAX查詢結(jié)果 后,沒有提供二次輕量級報表層計算能力。
這兩點導致:
PowerBI 的報表制作嚴重依賴于添加眾多沒有模型意義的輔助表以及過度復雜的相對重量級 DAX計算,雖然能證明 DAX 的強大,但明顯可以感受到在很多方面,這并不得心應手。
相信 PowerBI 在報表層必然有更大的提升,至少完成兩點:
- 要么充分枚舉各種變化可能性,并提供相應的組件化(非編程)實現(xiàn),類似:Power Query。
- 要么提供一種報表層的計算能力,也許是另一套輕量級的函數(shù)或DAX本身的大幅優(yōu)化,并補充輕量級的報表層計算能力。
最后,致敬 Tableau,沒有這么優(yōu)秀的對手,這么可能讓 PowerBI 變得更強大呢,通過對 Tableau 的體會和理解,可以更多加深對 BI體系 的思考,也更清楚 PowerBI 的軟肋,對于應對實際問題,如何基于現(xiàn)有的 PowerBI 特點做出合理的設計也就給出了更多的方法。