DAX(Data Analysis Expressions)是 Power BI、Analysis Services 和 Power Pivot 的公式表达式语言。本篇整理 DAX 核心概念:运算符、语句、上下文与数据表引用规则。
📌 什么是 DAX?
DAX(Data Analysis Expressions,数据分析表达式)是一种用于 Power BI、Analysis Services 和 Power Pivot in Excel 数据模型的公式表达式语言。DAX 公式包括函数、运算符和值,可对相关表和列中的数据执行高级计算和查询。
DAX 的应用场景
- 度量值(Measures) - 动态计算公式,结果根据上下文变化
- 计算列(Calculated Columns) - 在现有表中添加新列并用公式定义其值
- 计算表(Calculated Tables) - 基于公式表达式计算生成新表
- 行级安全性(Row-Level Security) - 使用 DAX 公式定义数据访问权限
DAX 公式基础
= TODAY()
在计算列的每一行插入今天的日期
= [Column1] + [Column2]
将同一行中 [Column1] 和 [Column2] 的值相加
= SUM('Sales'[Amount])
对 Sales 表的 Amount 列求和
🔧 DAX 运算符
算术运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
+ |
加 | [Sales] + [Tax] |
- |
减 | [Price] - [Discount] |
* |
乘 | [Quantity] * [UnitPrice] |
/ |
除 | [Revenue] / [Units] |
^ |
乘方 | [Base] ^ 2 |
比较运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
= |
等于 | [Status] = "Active" |
<> |
不等于 | [Status] <> "Inactive" |
> |
大于 | [Score] > 80 |
< |
小于 | [Age] < 18 |
>= |
大于等于 | [Quantity] >= 10 |
<= |
小于等于 | [Price] <= 100 |
逻辑运算符
| 运算符 | 含义 | 说明 |
|---|---|---|
&& |
逻辑与 | 两个条件都必须为 TRUE |
|| |
逻辑或 | 至少一个条件为 TRUE |
NOT |
逻辑非 | 取反条件 |
IN |
在集合中 | "Product A" IN {'Product A', 'Product B'} |
📝 DAX 语句
EVALUATE 语句
DAX 查询的基本语句,类似于 T-SQL 的 SELECT 语句。
daxEVALUATE
[ORDER BY [ASC | DESC]]DEFINE + EVALUATE
在查询中定义度量值或变量,然后执行查询。
daxDEFINE
MEASURE Sales[Total Sales] = SUM(Sales[Amount])
EVALUATE
SUMMARIZE(Sales, 'Product'[Category], "Total Sales", [Total Sales])VAR 语句
定义可在表达式中重复使用的变量,提高代码可读性和性能。
daxVAR TotalSales = SUM('Sales'[Amount])
VAR TotalCost = SUM('Sales'[Cost])
RETURN TotalSales - TotalCost🎯 DAX 上下文
行上下文(Row Context)
行上下文是指公式"知道"当前正在处理哪一行。在计算列中创建公式时,会自动为表的每一行创建行上下文。
= [Quantity] * [UnitPrice]
公式为每一行计算:数量 × 单价
筛选上下文(Filter Context)
筛选上下文是由数据透视表、图表或报表中的行标签、列标签、切片器和筛选器创建的一组筛选条件。
= SUM('Sales'[Amount])
在报表中按年份筛选时,度量值只计算筛选后的数据
上下文转换
使用 CALCULATE 函数可以将行上下文转换为筛选上下文。
= CALCULATE(SUM('Sales'[Amount]), 'Product'[Category] = "Electronics")
计算电子产品类别的销售总额
📋 DAX 数据表
表引用规则
- 表名包含空格或特殊字符时必须用单引号括起来:
'Sales Data' - 列名必须用方括号括起来:
[Amount] - 引用其他表的列时使用完全限定名:
'Sales'[Amount]
常用表函数
| 函数 | 说明 |
|---|---|
VALUES(<table>) |
返回指定表的唯一值列表 |
DISTINCT(<table>) |
返回表的唯一值(与 VALUES 类似) |
FILTER(<table>, <filter>) |
返回满足条件的行 |
ALL(<table>) |
返回所有行,忽略任何筛选器 |
CALCULATETABLE(<expr>, <filter>) |
返回应用了筛选器的表 |
表关系函数
RELATED(<column>)- 从相关表获取单个列值RELATEDTABLE(<table>)- 返回相关表的行集合USERELATIONSHIP(<col1>, <col2>)- 指定要使用的特定关系
由在线工具箱(www.vba.net)整理制作