最近在工作中,用PowerBi做数据报表,关于报表的计算多维度计算,用到度量值,那度量值是什么?
在 Power BI 中,度量值(Measure)是用于在数据模型中进行聚合计算的核心工具,通常是基于现有数据的汇总、计算或操作。这些度量值是通过使用 DAX (Data Analysis Expressions) 公式语言创建的。
以下是 DAX 的一些关键概念和常见公式,帮助你全面理解如何使用度量值和进行复杂计算
DAX 公式汇总
1. 基本聚合函数
SUM
: 对列中的数值求和
Total Sales = SUM(Sales[Amount])
AVERAGE
: 对列中的数值求平均
Average Sales = AVERAGE(Sales[Amount])
COUNT
: 计算某列中非空值的数量
Sales Count = COUNT(Sales[OrderID])
COUNTROWS
: 计算表中的行数
Row Count = COUNTROWS(Sales)
2. IF 和条件逻辑
与 Excel 类似,DAX 支持条件逻辑来实现简单或复杂的逻辑判断。
IF
: 实现条件判断,类似于 Excel 的 IF 函数
Profit Margin = IF(Sales[Revenue] > 0, Sales[Profit] / Sales[Revenue], 0)
3. 时间智能函数
DAX 提供强大的时间智能函数,用于处理时间维度上的计算,如同比、环比、累积等。
DATESYTD
: 计算从年初至今的累计值
Total Sales YTD = TOTALYTD(SUM(Sales[Amount]), Calendar[Date])
PREVIOUSYEAR
: 计算上一年同一时期的值
Sales Last Year = CALCULATE(SUM(Sales[Amount]), PREVIOUSYEAR(Calendar[Date]))
SAMEPERIODLASTYEAR
: 计算去年同一时期的数据
Sales Same Period Last Year = CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Calendar[Date]))
4. 上下文修改函数
上下文修改函数用于改变计算上下文,最常用的函数是 CALCULATE
和 FILTER
:
CALCULATE
: 重新计算表达式,并且可以在其中应用新的过滤上下文
Total Sales for USA = CALCULATE(SUM(Sales[Amount]), Sales[Country] = "USA")
FILTER
: 在CALCULATE
中用于应用更复杂的过滤条件
Total Large Sales = CALCULATE(SUM(Sales[Amount]), FILTER(Sales, Sales[Amount] > 1000))
5.关系与表操作
DAX 允许对表进行操作,提取特定列、行或筛选表中的数据
RELATED
: 在相关表中查找值(用于有关系的表格中)
Product Category = RELATED(Product[Category])
RELATEDTABLE
: 返回与当前行相关的整个表
Related Sales = RELATEDTABLE(Sales)
VALUES
: 返回某列中唯一的值(常用于获取过滤器上下文中的值)
Selected Country = VALUES(Sales[Country])
6. 排名与排名函数
DAX 中可以使用函数进行排名计算
RANKX
: 计算排名,通常用于对某一列进行排序排名
Sales Rank = RANKX(ALL(Sales), SUM(Sales[Amount]), , DESC)
7. 迭代函数
DAX 提供的迭代函数允许你对表的每一行进行逐行操作,类似于 Excel 的数组公式
SUMX
: 对表中的每一行进行计算,然后求和
Total Revenue = SUMX(Sales, Sales[Quantity] * Sales[Price])
AVERAGEX
: 对表中的每一行计算后求平均
Average Revenue per Order = AVERAGEX(Sales, Sales[Revenue])
8. 处理空值和错误
DAX 允许对空值或错误进行处理,防止报表中出现不期望的值
BLANK
: 返回空值
No Data = BLANK()
ISBLANK
: 判断某个值是否为空
Is Empty = IF(ISBLANK(Sales[Amount]), "No Data", Sales[Amount])
9. 上下文函数
上下文是 DAX 中重要的概念,分为行上下文和过滤上下文。DAX 中的函数可以用于在不同的上下文中计算值
ALL
: 忽略所有过滤器
Sales Without Filter = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Country]))
10. 复杂表达式和嵌套公式
DAX 允许将多个公式组合在一起,创建更复杂的度量值
- 例如,结合
IF
和CALCULATE
进行条件性计算:
Total High Sales = IF(
CALCULATE(SUM(Sales[Amount]), Sales[Amount] > 1000) > 5000,
"High",
"Low"
)
工作中常用的日期通用度量值
日期表 =
GENERATE (
CALENDARAUTO(),
VAR currentDay = [Date]
VAR year = YEAR ( currentDay )
VAR quarter = "Q" & FORMAT ( currentDay, "Q" )
VAR month = FORMAT ( currentDay, "MM" )
VAR day = DAY( currentDay )
VAR weekid = WEEKDAY ( currentDay,2)
RETURN ROW (
"年度", year ,
"季度",quarter,
"月份", month,
"日", day,
"年度季度", year&quarter,
"年度月份", year&month,
"星期几", weekid
)
)