有伙伴說一段時間沒有更新文章,這一次頂十次诺舔。明明能拆成十期的文章鳖昌,非要一次寫完,沒辦法混萝,厚道。
客觀地講萍恕,PowerBI 作為快速發(fā)展的BI產(chǎn)品逸嘀,在很多方面仍然需要打磨,以前我們似乎更多來說 PowerBI 有多厲害允粤,但這并不影響我們客戶地向更加優(yōu)秀的伙伴學(xué)習(xí)崭倘,例如:在 Tableau 確實有太多的優(yōu)點翼岁,PowerBI 需要去學(xué)習(xí),期待希望微軟的產(chǎn)品經(jīng)理們司光。(也只能期待了...)
在數(shù)據(jù)分析中琅坡,除了簡單匯總或簡單變換以外,很多需求是需要有額外的輔助才能實現(xiàn)的残家,在 PowerBI 中榆俺,這些全部以 DAX函數(shù) 給出,來構(gòu)建模型的語義層坞淮;而在 Tableau 中茴晋,自有她的一套巧妙設(shè)計,我們不妨來對比研究一下對于同樣的略微復(fù)雜的功能是如何在不同的產(chǎn)品中實現(xiàn)的回窘。由于我們這里主要是研究 PowerBI诺擅,故給出 Tableau 的實現(xiàn)效果,對其涉及公式不再詳細討論啡直,而將這些精力留給對 PowerBI 的描述烁涌。
本文全部是案例,案例來自于實際酒觅,Tableau舉例了十個案例撮执,為了處于學(xué)習(xí)目的,這里將變換下案例阐滩,但保持本質(zhì)不變二打,來達到花費最小精力學(xué)習(xí)最多收益的效果。
參考文章《10大Tableau表計算》:https://www.tableau.com/zh-cn/about/blog/2017/2/top-10-tableau-table-calculations-65417
推薦實踐方式:
- 打開 10大Tableau表計算 文章掂榔,對照每個案例继效,理解業(yè)務(wù)需求。
- 用 Excel120 通用案例數(shù)據(jù)逐個自行實現(xiàn)装获,以達到鍛煉自己 PowerBI 能力瑞信。
- 對照本文查看你的實現(xiàn)邏輯與這里的異同以進一步探討。
以下詳細對比每個案例并給出在 PowerBI 中的實現(xiàn)穴豫。
自參考日期開始的百分比變化
在 Tableau 中凡简,利用表計算,可以計算從任意值開始的百分比變化精肃。假設(shè)您對某個股票組合感興趣秤涩,并且想評估它們從某個時間點開始的相對表現(xiàn)。為此司抱,需要設(shè)置一個“投資日期”筐眷,并將這些股票標準化到同一個時間點,用線條顯示百分比變化习柠≡纫ィ可使用滑塊調(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ù)當(dāng)前坐標軸位置來計算,PowerBI DAX 表達式為:
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果消请。
隨時間變化的銷售總額百分比
希望一次執(zhí)行兩遍表計算的情況很常見栏笆。例如,查看某個細分市場隨時間變化的增長或收縮對公司的重要性可能很有意義臊泰。為此蛉加,必須先按細分市場計算隨時間變化的銷售額匯總,然后將其作為隨時間變化的銷售總額百分比來查看缸逃。這也稱為多遍聚合针饥,在 Tableau 中不寫公式也可以完成這種聚合。
在 Tableau 中僅需要設(shè)置就可以完成:
以及:
在 PowerBI 中需频,模擬類似的需求丁眼,實現(xiàn)按照不同類別顯示其當(dāng)年積累銷售額占整體銷售額的比例。效果如下:
Power BI DAX 表達式:
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果昭殉。
- Tableau 有更加豐富的報告層計算功能苞七,可以通過設(shè)置完成。
- PowerBI 無法設(shè)置同一可視化對象的分組也自然無法在報告層完成復(fù)雜計算挪丢。
- PowerBI 報告層幸好有 PowerBI DAX 可以依賴蹂风。
整理時保持排序
這里我們需要了解產(chǎn)品在一個月和一年內(nèi)的排名,然后顯示排名隨時間的變化乾蓬。為此惠啄,我們創(chuàng)建一個凹凸圖,其中以折線圖形式顯示隨時間的變化〗父螅可在左側(cè)看到復(fù)印機和傳真機已經(jīng)從銷售不佳的產(chǎn)品變成目前的銷售前 3 甲。還可以看到族奢,傳真機和復(fù)印機的購買量波動很大姥闭。
Tableau中這樣計算:
在 PowerBI 中,模擬類似的需求越走,實現(xiàn)按照不同類別顯示其不同時間段的排名棚品。效果如下:
在 PowerBI 中,在報告層面可以實現(xiàn)傳達同樣信息的效果廊敌,但從報告層的細節(jié)來說铜跑,仍無法做到 Tableau 的融合性,例如:
無法做到最少可視化元素的完備性以及整體性骡澈,PowerBI 產(chǎn)品經(jīng)理有的玩了锅纺。
當(dā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ù)當(dāng)日開案數(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 中是不支持真正遞歸的蠢熄,當(dāng)然在這種案例中也不用使用真正的遞歸跪解。
小結(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)品的供應(yīng)鏈救崔。這里惶看,我們使用 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 中為了報表層效果有時候需要建立輔助報表層的輔助表檬果,這是不符合設(shè)計常識的瓮孙,PowerBI 有獨立的模型層,里面的表反應(yīng)了實際的業(yè)務(wù)选脊,而不應(yīng)該將輔助表與之混合杭抠,這完全違背了設(shè)計學(xué)上的常識,而目前沒有在這方面得到改良恳啥。
移動范圍的事件數(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 中的設(shè)置和計算如下:
在 PowerBI 中花嘶,模擬類似的需求笋籽,效果如下:
PowerBI DAX 表達式如下:
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果。
各時段與平均值的差異
您可能更想看到季度銷售額與當(dāng)年平均值(而不是絕對數(shù))的差異椭员。此處顯示了與當(dāng)年平均值和絕對訂單數(shù)之間的差異车海。
在 Tableau 中的主要設(shè)置和計算如下:
在 PowerBI 中,模擬類似的需求隘击,效果如下:
PowerBI DAX 表達式如下:
雖然是達到同樣的效果侍芝,在 PowerBI DAX 中卻要理解上下文轉(zhuǎn)換以及取消外部篩選等高級的 DAX 知識才能快速而準確地寫出度量值。
小結(jié):
- PowerBI DAX 計算可以非常容易地實現(xiàn)效果埋同。
- 對該效果的實現(xiàn)州叠,雖然 DAX 公式并不復(fù)雜,但背后涉及需要透徹理解 DAX 計算原理凶赁,該復(fù)雜度遠遠超越了寫出同樣表達式的 Tableau 的程度咧栗。
總結(jié)
通過對比用 Tableau 和 PowerBI 實現(xiàn)同樣的 10 種非默認效果的計算,可以對兩種軟件在某方面的設(shè)計有了一個局部的認知虱肄,可以總結(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)在:很多設(shè)置是無法在報表上進行的咽块,例如:無法按某度量值設(shè)置圖中恒線绘面,無法統(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ū)分谢揪,導(dǎo)致任何報表需求的本質(zhì)都是一個DAX查詢,而報表層又沒能做到:
- 基于 DAX查詢結(jié)果 后捐凭,沒有充分枚舉各種變化可能性的組件化(非編程)實現(xiàn)拨扶。
- 基于 DAX查詢結(jié)果 后,沒有提供二次輕量級報表層計算能力茁肠。
這兩點導(dǎo)致:
PowerBI 的報表制作嚴重依賴于添加眾多沒有模型意義的輔助表以及過度復(fù)雜的相對重量級 DAX計算患民,雖然能證明 DAX 的強大,但明顯可以感受到在很多方面垦梆,這并不得心應(yīng)手酒奶。
相信 PowerBI 在報表層必然有更大的提升,至少完成兩點:
- 要么充分枚舉各種變化可能性奶赔,并提供相應(yīng)的組件化(非編程)實現(xiàn)惋嚎,類似:Power Query。
- 要么提供一種報表層的計算能力站刑,也許是另一套輕量級的函數(shù)或DAX本身的大幅優(yōu)化另伍,并補充輕量級的報表層計算能力。
最后绞旅,致敬 Tableau摆尝,沒有這么優(yōu)秀的對手,這么可能讓 PowerBI 變得更強大呢因悲,通過對 Tableau 的體會和理解堕汞,可以更多加深對 BI體系 的思考,也更清楚 PowerBI 的軟肋晃琳,對于應(yīng)對實際問題讯检,如何基于現(xiàn)有的 PowerBI 特點做出合理的設(shè)計也就給出了更多的方法琐鲁。