必须掌握dax公式编写以实现动态聚合、跨表计算和时间分析:一、建度量值用于上下文敏感的实时聚合;二、建计算列实现行级静态派生;三、建计算表生成衍生维度;四、用时间智能函数做周期对比;五、用var提升公式可读性与性能。

如果您希望在Power BI或Analysis Services中对表格数据模型执行动态聚合、跨表关联计算或时间维度分析,则必须掌握DAX公式的正确编写方式。以下是实现数据模型高级计算的具体操作路径:
一、创建度量值进行动态聚合计算
度量值是上下文敏感的动态计算,其结果随报表筛选器、切片器或行列分组变化而实时重算,适用于SUM、AVERAGE、COUNT等聚合场景。
1、在Power BI Desktop的“模型”视图中,右键单击任意表,选择“新建度量值”。
2、在公式栏中输入标准语法:度量名称 = 聚合函数(表名[列名]),例如:总销售额 = SUM(Sales[Amount])。
3、确认公式无语法错误(IntelliSense将高亮提示函数参数与括号匹配),按Enter完成创建。
4、该度量值将自动出现在字段窗格对应表下,可直接拖入可视化对象中使用。
二、定义计算列实现行级静态派生
计算列在数据刷新时一次性计算并物理存储于模型中,每行生成一个标量值,适用于基于本行其他列的逻辑判断或格式转换。
1、在“数据”视图中,右键目标表,选择“新建列”。
2、输入含列引用的表达式,列名必须用方括号包裹,例如:销售利润率 = DIVIDE(Sales[Profit], Sales[Revenue], 0)。
3、公式中若涉及多表字段,需通过RELATED函数显式调用关联表列,如:产品类别 = RELATED('Product'[Category])。
4、回车后列立即填充全部行值,并可在后续建模中作为筛选或分组依据。
三、构建计算表生成衍生维度或汇总结果
计算表由DAX公式返回完整表对象,常用于创建独立日期表、分类映射表或预聚合中间结果,不依赖源数据结构。
1、在“建模”选项卡中点击“新建表”,打开DAX公式编辑框。
2、使用CALENDAR或DATATABLE等表构造函数,例如:日期表 = CALENDAR(DATE(2020,1,1), DATE(2025,12,31))。
3、配合ADDCOLUMNS添加派生列,如年份、季度、工作日标识等,确保日期列为唯一连续值。
4、选中新建表,在“表工具”中点击“标记为日期表”,并指定日期列,以启用时间智能函数支持。
四、应用时间智能函数处理周期对比
时间智能函数依赖已标记的日期表及有效关系,用于实现同比、环比、累计等业务关键指标,其结果严格受视觉对象中的日期字段上下文约束。
1、确认模型中存在已标记的日期表,且与事实表通过日期列建立单向活动关系。
2、新建度量值,调用TOTALYTD函数实现年累计,例如:年累计销售额 = TOTALYTD(SUM(Sales[Amount]), '日期表'[Date])。
3、使用SAMEPERIODLASTYEAR进行同期比较,例如:去年同期销售额 = CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR('日期表'[Date]))。
4、在报表中将该度量值与‘日期表’[年]、[月]等字段共同置于矩阵或折线图中,系统将自动按上下文切片计算。
五、利用变量提升公式可读性与复用性
DAX变量通过VAR声明局部命名值,避免重复计算相同子表达式,同时使复杂逻辑更易理解与调试,所有变量必须在RETURN语句前定义。
1、在新建度量值或计算列中,以VAR开头声明变量,例如:VAR CurrentYearSales = SUM(Sales[Amount])。
2、可连续声明多个变量,每个变量均可引用前序变量,例如:VAR PriorYearSales = CALCULATE([CurrentYearSales], SAMEPERIODLASTYEAR('日期表'[Date]))。
3、在RETURN后调用最终表达式,例如:RETURN DIVIDE(CurrentYearSales - PriorYearSales, PriorYearSales)。
4、公式执行时,各变量仅计算一次,RETURN结果即为该计算单元的输出值。










