PowerBI_DAX函数

DAX函数

数据分析表达式 (DAX) 是在 Analysis Services、Power BI 以及 Excel 中的 Power Pivot 使用的公式表达式语言。 DAX 公式包括函数、运算符和值,用于对表格数据模型中相关表和列中的数据执行高级计算和查询
微软文档

CALCULATE

DAX中最重要的函数

语法格式

1
CALCULATE(聚合函数,筛选条件,筛选条件...)

所有筛选条件的交集形成最终的筛选数据集合,根据筛选出的数据集合执行第一个参数的聚合运算并返回运算结果

用例

导入下面这个产品明细表:

新建一个度量值求每种产品的数量:
产品数量 = COUNTROWS(‘产品明细’)
因为每种产品的只有1行,所以求产品明细表的行数就相当于求各种产品的数量,把产品名称和该度量值拖拽入矩阵表,

这里外部上下文就是表格每行的行标签。

用例01 | 筛选条件为空,不影响外部上下文

现在开始用CALCULATE函数创建一个度量值:

1
产品数量1 = CALCULATE([产品数量])

只是用了第一个参数,筛选条件为空,因为没有内部筛选所以完全依赖外部上下文,出来的结果也和原度量值一致。

另外,介绍CALCULATE语法的时候说,第一个参数为聚合运算表达式,为什么这里没有用聚合函数而只用了一个度量值呢?
这是因为度量值[产品数量]本身就是一个聚合函数运算,实际上度量值[产品数量1]等同于这个:
产品数量1 = CALCULATE(COUNTROWS(‘产品明细’))
DAX函数可以直接引用已经创建好的度量值,可以使DAX函数看起来更简洁、更具可读性,这也是建议从最简单的度量值开始建的原因。

用例02 | 添加限制条件,缩小上下文

建一个度量值[产品数量2],

1
产品数量2 = CALCULATE([产品数量],'产品明细'[品牌]="苹果")

发现只有苹果的产品计数显示出来,而其他品牌的数据没有了,这是因为CALCULATE的第二个参数的限制,只筛选品牌为“苹果”的,限制了外部的上下文,非苹果的产品都不再运算。

用例03 | 结合ALL函数,扩大上下文

新建度量值[产品数量3],

1
产品数量3 = CALCULATE([产品数量],ALL('产品明细'))

这次的数据居然是所有产品的数量,这是因为筛选条件使用了ALL函数,ALL(‘产品明细’)的意思是清除产品明细表里的所有筛选,外部筛选器不起作用了,每行统计的都是该表中的所有产品。
每行的数据都是9,你可能觉得这个ALL函数没什么用,运算的数据没有什么意义,实际上当然不是这样,这个数据使用的地方非常多,比如我们想计算每个产品数量占总产品数量的比重,直接写个度量值:
产品占比=[产品数量]/[产品数量3]

产品占比就计算出来了,这就是统计总数的一个功能。

用例04 | 重置上下文

新建度量值[产品数量4],

1
产品数量4 = CALCULATE([产品数量], all('产品明细'[产品名称]),'产品明细'[类别]="手机")

先用ALL函数清除外部上下文,然后又新增了一个筛选条件,类别为”手机”的产品数量,那么结果会是什么样的呢,

每一行产品的数量都是3,正好符合建立这个度量值的逻辑,被ALL清除行标签的外部筛选后,从全部产品中统计品类为”手机”的产品的数量,所以每行都返回3.

SUM

对某个列中的所有数值求和

1
SUM(<column>)

SUMX

返回为表中的每一行计算的表达式的和

1
2
SUMX(<table>, <expression>)
eg:商机金额预估_基础 = CALCULATE(SUMX('Opportunityproduct','Opportunityproduct'[需求数量]*'Opportunityproduct'[预计成交单价(万元)]))*10000

SUMX 函数将表或返回表的表达式作为其第一个参数。 第二个参数是包含要计算总和的数字的列,或计算结果为列的表达式。
仅对列中的数字进行计数。 空白、逻辑值和文本会被忽略。

SUM & SUMX

SUM是列级别聚合函数(不逐行计算),SUMX是行级别聚合函数(逐行计算)

USERELATIONSHIP

如下图,虚线关系为当前不可用关系,但以使用USERELATIONSHIP函数为度量值指定相关关系

1
最终客户销售金额 = CALCULATE([销售金额],USERELATIONSHIP(Account[客户识别码],OrderShipment[最终客户识别码]))
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020 李明华
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信