DAX度量值指南

        最近在工作中,用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. 上下文修改函数

上下文修改函数用于改变计算上下文,最常用的函数是 CALCULATEFILTER

  • 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
    )
  )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值