![]()
Power BI用戶平均收藏夾里躺著47個(gè)DAX公式,真正高頻調(diào)用的不到5個(gè)。
這個(gè)數(shù)據(jù)來自我對身邊12位數(shù)據(jù)分析師的隨機(jī)抽樣——他們中有人甚至背下過200多個(gè)函數(shù),卻在季度匯報(bào)前夜,對著屏幕逐行排查一個(gè)除零錯(cuò)誤。DAX(數(shù)據(jù)分析表達(dá)式,Power BI的核心計(jì)算語言)的學(xué)習(xí)曲線像一座故意設(shè)計(jì)得很難看的山:官方文檔超過800頁,社區(qū)論壇里充斥著"這個(gè)函數(shù)為什么返回空值"的絕望提問。
但真相是另一回事。一位在零售行業(yè)干了8年的BI負(fù)責(zé)人告訴我,他的團(tuán)隊(duì)用5個(gè)函數(shù)解決了80%的業(yè)務(wù)問題。"剩下的20%?要么找IT排期,要么直接用Excel硬算。"
CALCULATE:那個(gè)永遠(yuǎn)坐C位的函數(shù)
如果DAX是Excel公式的高級進(jìn)化版,CALCULATE就是它的基因編輯工具。
它的核心能力只有一句話:在不碰原始數(shù)據(jù)的前提下,臨時(shí)改寫計(jì)算規(guī)則。比如你想知道"高端品類貢獻(xiàn)了多少銷售額",但不想動(dòng)現(xiàn)有的數(shù)據(jù)模型——CALCULATE讓你在公式層面直接疊加過濾條件。
實(shí)際寫法很直白:
High End Sales = CALCULATE(SUM(Sales[Amount]), Products[Category] = "High-End")
第一個(gè)參數(shù)是你想算的東西,后面的參數(shù)全是"如果"。如果品類等于高端,如果日期在今年,如果客戶等級是VIP——這些條件可以無限疊加,像給數(shù)據(jù)戴上不同的眼鏡。
我見過最狠的用法是一家連鎖藥店,用CALCULATE嵌套了7層條件,實(shí)時(shí)對比"會(huì)員價(jià)vs非會(huì)員價(jià)"對毛利率的影響。他們的BI負(fù)責(zé)人原話是:「這函數(shù)讓我們少建了3個(gè)數(shù)據(jù)倉庫。」
SUMX:為什么簡單求和會(huì)騙人
新手最常踩的坑,是用SUM算"總價(jià)"。
假設(shè)你有兩張表:一張是訂單明細(xì)(含單價(jià)、數(shù)量),一張是產(chǎn)品主數(shù)據(jù)(含成本)。如果你直接SUM(單價(jià)),得到的是所有單價(jià)的加總,不是"單價(jià)×數(shù)量"的總和。這在財(cái)務(wù)對賬時(shí)會(huì)制造災(zāi)難——我見過某電商運(yùn)營因此多報(bào)了300萬GMV。
SUMX的解決方式很笨,也很可靠:逐行計(jì)算,最后匯總。
![]()
Total Revenue = SUMX(Sales, Sales[Price] * Sales[Quantity])
它先走到第一行,拿單價(jià)乘數(shù)量,存?zhèn)€中間結(jié)果;再走到第二行,重復(fù)一遍;全部走完才加起來。這種"行上下文"的遍歷機(jī)制,讓它能處理SUM搞不定的復(fù)雜邏輯——比如"先算折扣再算稅"或者"按客戶等級動(dòng)態(tài)定價(jià)"。
同系列的AVERAGEX、COUNTX、MINX、MAXX原理一樣,只是最后一步的匯總方式不同。掌握SUMX,等于解鎖了整個(gè)X函數(shù)家族。
DATESINPERIOD:時(shí)間智能的自動(dòng)檔
業(yè)務(wù)報(bào)表里最煩的需求,是"最近N天/周/月"的動(dòng)態(tài)計(jì)算。
傳統(tǒng)做法是每月手動(dòng)改過濾條件,或者寫死日期范圍——結(jié)果就是3月的報(bào)表到了4月還在顯示"1-3月數(shù)據(jù)",被老板在群里@出來鞭尸。DATESINPERIOD把這個(gè)流程自動(dòng)化了:
Sales Last 3 Months = CALCULATE(SUM(Sales[Amount]), DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -3, MONTH))
拆解一下:MAX('Date'[Date])找到當(dāng)前上下文的最大日期(通常是今天),-3表示往前推3個(gè)單位,MONTH指定單位是月。整個(gè)公式會(huì)自動(dòng)滾動(dòng),永遠(yuǎn)顯示"截止到今天的前三個(gè)月"。
參數(shù)里的-3可以改成-12做同比,-1做環(huán)比,DAY/QUARTER/YEAR切換粒度。一家SaaS公司的財(cái)務(wù)總監(jiān)用它做了套"滾動(dòng)12個(gè)月ARR"看板,每月1號零手工操作,「終于不用凌晨兩點(diǎn)改公式了。」
FILTER:當(dāng)條件本身需要計(jì)算
CALCULATE的過濾條件通常是"列=值"這種簡單判斷,但業(yè)務(wù)場景往往更臟。
比如你想找"累計(jì)消費(fèi)超過1000元的高價(jià)值客戶數(shù)"——這個(gè)"超過1000"沒法直接從任何一列讀出來,得先算每個(gè)人的消費(fèi)總額,再判斷。FILTER就是干這個(gè)的:
High Value Customers = CALCULATE(DISTINCTCOUNT(Customers[ID]), FILTER(Customers, CALCULATE(SUM(Sales[Amount])) > 1000))
注意這里的嵌套結(jié)構(gòu):外層CALCULATE負(fù)責(zé)計(jì)數(shù),F(xiàn)ILTER負(fù)責(zé)篩選,內(nèi)層CALCULATE負(fù)責(zé)算每個(gè)人的消費(fèi)額。三層計(jì)算,各干各的,像流水線分工。
![]()
這種"用計(jì)算結(jié)果當(dāng)過濾條件"的能力,在客戶分層、異常檢測、動(dòng)態(tài)閾值場景里幾乎是剛需。某跨境電商用它實(shí)現(xiàn)了"自動(dòng)識別30天內(nèi)退貨率超15%的供應(yīng)商",替代了原來每周五小時(shí)的人工排查。
DIVIDE:一個(gè)除法函數(shù)能救多少報(bào)表
所有分析師都見過這個(gè)錯(cuò)誤:#DIV/0!(除以零)。
在DAX里它更隱蔽——不會(huì)報(bào)錯(cuò),而是返回"Infinity"或者空白,然后你的KPI卡片突然變成空的,折線圖斷成幾截。DIVIDE的解法很樸素:第三個(gè)參數(shù)指定"除數(shù)為零時(shí)返回什么"。
Profit Margin = DIVIDE([Total Profit], [Total Revenue], 0)
最后一個(gè)0的意思是,如果營收為零,利潤率顯示0而不是崩潰。這個(gè)默認(rèn)值可以改成任何數(shù)字、BLANK()、或者另一個(gè)度量值。一家制造業(yè)客戶用它處理了"新品上市首月無銷售"的邊界情況,避免了整個(gè)供應(yīng)鏈看板因一個(gè)SKU而癱瘓。
更隱蔽的用法是替代IF+除法的組合。傳統(tǒng)寫法要判斷分母是否為零,再?zèng)Q定怎么算,代碼臃腫。DIVIDE一行搞定,執(zhí)行效率也更高——在大數(shù)據(jù)量下差距明顯。
一個(gè)真實(shí)場景的拼接演示
假設(shè)你是零售區(qū)域經(jīng)理,周一晨會(huì)前要回答:「哪些產(chǎn)品利潤率超20%、且近90天銷量過500件?」
用上述5個(gè)函數(shù)的拼接思路:
第一步,DATESINPERIOD鎖定最近90天;第二步,SUMX算出各產(chǎn)品銷量(因?yàn)榭赡苌婕岸鄡r(jià)格帶,不能簡單求和);第三步,F(xiàn)ILTER篩選銷量>500的產(chǎn)品;第四步,DIVIDE安全計(jì)算利潤率;第五步,CALCULATE把整個(gè)邏輯包起來,輸出最終列表。
沒有嵌套10層的恐怖公式,沒有自定義列的冗余計(jì)算,5個(gè)積木按需組合。
那位8年經(jīng)驗(yàn)的BI負(fù)責(zé)人給我看過他的"公式庫"——一個(gè)Excel文件,存了20多個(gè)常用場景的模板,全部基于這5個(gè)函數(shù)變體。「新人來了,半天能上手做分析。以前?至少兩周。」
當(dāng)然,這5個(gè)函數(shù)不能解決所有問題。復(fù)雜的表連接、迭代邏輯、性能優(yōu)化仍然需要深入學(xué)習(xí)。但對于"用數(shù)據(jù)回答業(yè)務(wù)問題"這個(gè)核心目標(biāo),它們構(gòu)成了一個(gè)足夠用的最小工具集。
Power BI的官方文檔仍在膨脹,社區(qū)里每天誕生新的"最佳實(shí)踐"。但一位從業(yè)者的反饋或許更值得參考:「我收藏了200多個(gè)公式,最后發(fā)現(xiàn)每天用的還是那幾個(gè)。不是學(xué)得不夠,是學(xué)得太散了。」
你的DAX收藏夾里,有幾個(gè)公式是上個(gè)月真正用過的?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.