






















DAX(Data Analysis Expressions)是 Power BI 内置的数据分析表达式语言,类似于 Excel 公式但远比 Excel 强大。它用于创建计算列、度量值和自定义表。
简单理解:DAX 就是 Power BI 中的"公式",让你在数据模型上进行各种复杂的计算和分析。
这是 DAX 中最核心的概念,必须彻底理解两者的区别。
| 特性 | 计算列 | 度量值 |
|---|---|---|
| 计算时机 | 数据刷新时(静态) | 报表查询时(动态) |
| 存储位置 | 存储在数据模型中 | 不存储,运行时计算 |
| 计算上下文 | 当前行上下文 | 筛选上下文 |
| 对文件大小的影响 | 增加文件体积 | 不增加文件体积 |
| 适用场景 | 需要按行筛选的基础字段 | 聚合计算、比率计算 |
创建一个"利润率"计算列:
利润率 = (销售表[销售额] - 销售表[成本]) / 销售表[销售额]
计算列会在每行数据中存储结果,适合用作筛选条件或需要固定值的场景。
创建一个"总销售额"度量值:
总销售额 = SUM(销售表[销售额])
度量值在报表中被引用时才会计算,会根据用户选择的筛选条件动态变化。
DAX 公式以"列名/度量值名 = 表达式"的形式存在:
度量值名称 = DAX表达式
| 运算符 | 说明 | 示例 |
|---|---|---|
+ |
加法 | [销售额] + [成本] |
- |
减法 | [销售额] - [成本] |
* |
乘法 | [数量] * [单价] |
/ |
除法 | [利润] / [销售额] |
&& |
逻辑与 | [类别] = "电子产品" && [销售额] > 1000 |
| ` | ` | |
IN |
多值匹配 | [产品] IN {"产品A", "产品B"} |
| 函数 | 说明 | 示例 |
|---|---|---|
SUM |
求和 | SUM(销售[销售额]) |
AVERAGE |
平均值 | AVERAGE(销售[销售额]) |
COUNT |
计数(数字) | COUNT(销售[订单ID]) |
COUNTA |
计数(非空) | COUNTA(销售[备注]) |
COUNTROWS |
计行数 | COUNTROWS(销售) |
MAX |
最大值 | MAX(销售[销售额]) |
MIN |
最小值 | MIN(销售[销售日期]) |
DISTINCTCOUNT |
去重计数 | DISTINCTCOUNT(销售[客户ID]) |
CALCULATE 是 DAX 中最核心、最重要的函数,用于在指定筛选条件下计算表达式。
语法:
CALCULATE(<表达式>, <筛选器1>, <筛选器2>, ...)
示例:计算电子产品类别的总销售额
电子产品销售额 =
CALCULATE(
SUM(销售[销售额]),
销售[产品类别] = "电子产品"
)
示例:计算包含多个条件的销售额
高价值销售 =
CALCULATE(
SUM(销售[销售额]),
销售[销售额] > 5000,
销售[地区] = "北京"
)
FILTER 返回一个按条件过滤后的表,常与 CALCULATE 配合使用。
高端产品销售 =
CALCULATE(
SUM(销售[销售额]),
FILTER(
ALL(产品[产品名称]),
[销售额] > 10000
)
)
| 函数 | 说明 |
|---|---|
ALL() |
移除所有筛选器,返回完整表/列 |
ALLEXCEPT() |
移除指定列之外的所有筛选器 |
ALLSELECTED() |
移除当前视觉对象的筛选器,保留页面/报表级筛选 |
总销售额(忽略所有筛选) =
CALCULATE(
SUM(销售[销售额]),
ALL()
)
理解"上下文"是掌握 DAX 的关键。
计算列内部的上下文,指当前行。
利润率 = DIVIDE([销售额] - [成本], [销售额])
在第5行计算时,[销售额] 和 [成本] 取的是第5行的值。
度量值被计算时,报表中所有筛选条件(切片器、视觉对象筛选、页面筛选等)的组合。
把"筛选上下文"理解为:度量值计算时,当前的"分析视角"是什么。
SUMX、AVERAGEX、COUNTX 等带 X 的函数称为迭代函数,它们会对表中的每一行进行计算,然后汇总结果。
示例:
订单利润 = SUMX(
销售,
销售[销售额] - 销售[成本]
)
等价于为每行计算 销售额 - 成本,然后求和。
| 函数 | 说明 |
|---|---|
DIVIDE |
安全除法(避免除零错误) |
ROUND |
四舍五入 |
SUMX |
求和(支持表达式) |
RANKX |
排名 |
| 函数 | 说明 |
|---|---|
IF |
条件判断 |
SWITCH |
多条件分支 |
AND / OR |
逻辑运算 |
| 函数 | 说明 |
|---|---|
CONCATENATE |
拼接文本 |
LEFT / RIGHT |
截取文本 |
UPPER / LOWER |
大小写转换 |
FORMAT |
格式化数字/日期 |
| 函数 | 说明 |
|---|---|
YEAR / MONTH / DAY |
提取日期部分 |
DATEDIFF |
计算日期间差 |
FORMAT |
格式化日期 |
销售额 - 总计销售数量 - 月度累计利润率 = DIVIDE([利润], [销售额])
VAR 提升可读性和性能总利润 =
VAR TotalRevenue = SUM(销售[销售额])
VAR TotalCost = SUM(销售[成本])
RETURN
DIVIDE(TotalRevenue - TotalCost, TotalRevenue)
本篇介绍了:
个人的一些经验:
下一篇:我们将深入 DAX 进阶,学习时间智能函数(如同比、环比计算)以及 CALCULATE 的高级用法。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。