![]()
一位零售经理花了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.