重点内容
计算列 vs 度量值
| 计算列 Calculated column | 度量值 Measure | |
|---|---|---|
| 建立 | ||
| 什么时候算 | 资料刷新时,每一行算一次,存在表里 | 放进图表时,按当下的筛选即时算 |
| 占空间 | 会让模型变大 | 几乎不占空间 |
| 适合 | 分类、分组(例如「价格区间」)、要拿来当切片器或轴的栏位 | 营业额、利润率、成长率这类汇总数字 |
| 在 Data 窗格的图标 | 表格栏位图标(带 fx) | 计算器图标 |
📌 判断方法:结果要放在图表的轴、图例、切片器里 → 计算列;结果是要被加总、比较的数字 → 度量值。
第一个度量值
Total Sales = SUM ( Orders[Amount] )Total Sales:度量值名称Orders[Amount]:表名[栏位名]- 把这个度量值放进按州属分的柱状图,每根柱子会自动只算那个州属的订单——这就是「按筛选即时计算」
💡 建议新建一个空表专门放度量值:,表名取 _Measures,建好度量值后把原本的空栏删掉,这个表就会移到 Data 窗格最上面。
常用函数
| 函数 | 用途 | 例子 |
|---|---|---|
SUM | 加总 | SUM ( Orders[Amount] ) |
AVERAGE | 平均 | AVERAGE ( Orders[Amount] ) |
COUNTROWS | 数有几行 | COUNTROWS ( Orders ) = 订单数 |
DISTINCTCOUNT | 数不重复的值 | DISTINCTCOUNT ( Orders[CustomerID] ) = 顾客人数 |
DIVIDE | 除法,分母是 0 时不会出错 | DIVIDE ( [Profit], [Total Sales] ) |
SUMX | 逐行计算再加总 | SUMX ( Orders, Orders[Qty] * RELATED ( Products[Cost] ) ) |
RELATED | 从「一」那端的表拿值(像 VLOOKUP) | RELATED ( Products[Category] ) |
CALCULATE | 在改变筛选条件后计算 | 见下面 |
IF / SWITCH | 条件判断 | 见计算列例子 |
实用度量值范例
Total Sales = SUM ( Orders[Amount] )
Order Count = COUNTROWS ( Orders )
Average Order Value = DIVIDE ( [Total Sales], [Order Count] )
Total Cost = SUMX ( Orders, Orders[Qty] * RELATED ( Products[Cost] ) )
Profit = [Total Sales] - [Total Cost]
Profit Margin % = DIVIDE ( [Profit], [Total Sales] )📌 度量值可以引用其他度量值([Total Sales]),不用每次重写。Profit Margin % 建好后,到 设成百分比。
CALCULATE:DAX 最重要的函数
CALCULATE ( 要算什么, 筛选条件1, 筛选条件2, ... )
Selangor Sales =
CALCULATE ( [Total Sales], Customers[State] = "Selangor" )
Shopee Sales =
CALCULATE ( [Total Sales], Stores[Platform] = "Shopee" )
Sales Share % =
DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALL ( Customers[State] ) ) )- 第一、二个:不管图表怎么筛,都只算雪兰莪 / Shopee
- 第三个:
ALL移除州属的筛选,算出「全部州属的营业额」当分母,得到每个州属占总额的百分比
时间智能(需要 EP03 的日期表)
Sales YTD = TOTALYTD ( [Total Sales], 'Date'[Date] )
Sales Last Year =
CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
Sales YoY % =
DIVIDE ( [Total Sales] - [Sales Last Year], [Sales Last Year] )
Sales Last Month =
CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) )| 函数 | 算什么 |
|---|---|
TOTALYTD | 年初至今累计 |
SAMEPERIODLASTYEAR | 去年同期 |
DATEADD | 往前 / 往后移几天、几个月、几年 |
计算列范例
Price Band =
SWITCH (
TRUE (),
Orders[Amount] < 50, "RM50 以下",
Orders[Amount] < 200, "RM50 – 199",
"RM200 以上"
)结果是文字分组,可以放进图表的轴或切片器,所以适合用计算列。
写 DAX 的小习惯
- 度量值名称用清楚的英文或中文,不要
Measure 1 - Shift+Enter 在公式栏换行,长公式分行写比较好读
- 除法一律用
DIVIDE,不要用/,避免分母是 0 时出现错误 - 引用栏位写完整的
表名[栏位名],引用度量值只写[度量值名],一看就分得出来
学完你会
常见错误
- ❌ 用计算列算营业额总和再拖进图表:模型变大,而且切片器筛选后数字可能不对,要用度量值。
- ❌ 用
/做除法:分母是 0 时出错,用DIVIDE。 - ❌ 没有日期表就用时间智能函数:结果不对或报错,先照 EP03 建日期表并标记。
- ❌ 把度量值当成栏位放进切片器:度量值不能当切片器,需要分组就用计算列。
- ❌ 忘了设定百分比格式:利润率显示成 0.23 而不是 23%。
Sources
官方文档:
- Learn DAX basics in Power BI Desktop - Microsoft Learn
- Create measures for data analysis in Power BI Desktop - Microsoft Learn
- Create calculated columns in Power BI Desktop - Microsoft Learn
- CALCULATE function (DAX) - Microsoft Learn
- DIVIDE function vs. divide operator - Microsoft Learn
- Time intelligence functions (DAX) - Microsoft Learn