![]()
一位零售經理花了3小時手動篩選Excel表格,只為找出"過去90天利潤超20%且銷量過500的產品"。同一時刻,懂DAX的同事輸入一行公式,30秒出結果。差距不在智商,在于多數人把Power BI用成了"高級Excel"——而微軟早就埋了更鋒利的工具。
CALCULATE:數據分析的"如果"按鈕
這是DAX的底層操作系統。原話:「It changes the context of a calculation.」
想象你在看全國銷售報表,老板突然問"高端品類表現如何"。沒有CALCULATE,你得新建一張表、重新導入數據、再算一遍。有了它,公式這樣寫:
High End Sales = CALCULATE(SUM(Sales[Amount]), Products[Category] = "High-End")
原話解釋:「It lets you ask questions like 'what if?' without changing your original data.」數據上下文像俄羅斯套娃,CALCULATE負責拆開你想看的那一層。它不修改原始數據,只臨時切換計算視角。
實際場景:財務想看"剔除促銷后的真實毛利率",運營想看"華東區VIP客戶貢獻"。同一套數據,不同切片,靠這一個函數來回切換。
SUMX:為什么簡單求和會坑你
Excel用戶最順手的SUM,在Power BI里可能是陷阱。
假設銷售表有Price和Quantity兩列。直接SUM(Price)*SUM(Quantity)?你會得到"平均單價×總銷量"的荒謬結果。原話:「It's more accurate than a simple sum.」
SUMX的運作像老式收銀機:逐行掃描,每行算Price×Quantity,最后累加。
Total Revenue = SUMX(Sales, Sales[Price] * Sales[Quantity])
![]()
原話強調:「It goes row by row... handles complex logic that a simple sum cannot.」行級計算是DAX的分水嶺。不懂這個,你的"總營收"可能永遠對不上財務部的數字。
延伸:AVERAGEX、MINX、MAXX同屬X函數家族,邏輯相同——先遍歷,后聚合。
DATESINPERIOD:時間維度的自動駕駛
每月初手動改報表日期范圍?這個函數讓報告永遠"新鮮"。
Sales Last 3 Months = CALCULATE(SUM(Sales[Amount]), DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -3, MONTH))
拆解:MAX('Date'[Date])找到最新日期,-3 MONTH往回倒推,CALCULATE框定計算范圍。原話:「Instead of manually filtering dates every month, this automates your reports.」
關鍵在負號。寫-3是回溯,寫3是預測。季度環比、滾動12個月、同比去年——時間智能的骨架都在這里。
一個細節:必須自建獨立的Date表,不能直接用Sales表的日期列。這是90%新手踩的第一坑。
FILTER:當篩選條件本身就是計算結果
CALCULATE的篩選參數通常是固定值,比如Region="North"。但如果條件是"消費總額超1000的客戶",固定值不夠用。
High Value Customers = CALCULATE(DISTINCTCOUNT(Customers[ID]), FILTER(Customers, CALCULATE(SUM(Sales[Amount])) > 1000))
原話點破:「It allows you to filter based on the result of a calculation, not just raw data.」FILTER先對客戶表逐行計算歷史消費,再篩出符合條件的ID,最后去重計數。
![]()
嵌套CALCULATE是高級玩法。外層算客戶數,內層算每個客戶的消費額——上下文切換兩次,像望遠鏡調焦。
典型場景:RFM模型里的M(Monetary),客戶分層,LTV預測。沒有FILTER,這些模型搭不起來。
DIVIDE:除法里的安全氣囊
利潤率公式人人會寫:[Total Profit]/[Total Revenue]。但當某月營收為零,報表炸出"Infinity"或"NaN",老板的臉色比錯誤代碼更難看。
Profit Margin = DIVIDE([Total Profit], [Total Revenue], 0)
第三個參數是"備選方案"。原話:「If the revenue is zero, just show zero instead of breaking.」
這個函數很小,但防御性編程的意識很大。業務數據永遠不干凈:新店開業首月、季節性停售、數據錄入延遲——零值和空值是常態,不是異常。
對比Excel的IFERROR,DIVIDE更輕量,專為度量值設計。寫進模板,能避免未來無數個深夜debug。
組合實戰:一個公式回答老板的真實問題
回到開頭的零售經理。需求拆解:利潤>20%、銷量>500、時間窗口90天。
五個函數全部登場:CALCULATE切換上下文,DATESINPERIOD鎖定90天,SUMX算實際銷量(Price×Quantity),DIVIDE算利潤率,FILTER把兩個條件打包塞進篩選器。
原話總結:「You don't need to be a programmer to be good at business analytics. You just need to know how to ask the right questions and master these 5 building blocks.」
這五個函數覆蓋80%業務場景,不是夸張。剩下的20%?大概率是你把問題想復雜了。
最后留一個細節:那位30秒出結果的同事,把常用組合存成了DAX模板。下次類似需求,復制粘貼改參數——這才是"工具人"和"分析師"的真正差距。你的DAX代碼庫,現在有幾個可復用的片段?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.