CDA103484

2021-12-06   阅读量: 5144

数据分析师Power BIExcel

PBI中的CALCULATE函数在什么情况下使用呢?

对于Calculate函数的理解是有条件的筛选计算函数,也可以是无条件的,但是什么情况下用Calculate函数比较合适呢?

0.0000 0 3 关注作者 收藏

评论(3)

CDA持证人阿涛哥
2021-12-27
问题已解决,谢谢!
0.0000 0 0 回复
学无止境
2021-12-09

真不错

0.0000 0 0 回复
CDA持证人阿涛哥
2021-12-08

CALCULATE函数是PowerBI中最重要、最独特的函数。因为它是除CALCULATETABLE外唯一可以创建新的筛选上下文的函数,它可以通过函数内部的参数指定筛选条件,并且能「强势」地改变外部的筛选上下文。

它的语法很简单:CALCULATE(表达式,筛选条件1,筛选条件2,…筛选条件n)。

要理解CALCULATE函数为什么能对筛选条件进行「操纵」,记住以下两点就可以了

1,无论是来自透视表、视觉对象、切片器等外部筛选条件,还是CALCULATE函数自身参数(从第二个开始)指定的内部筛选条件,它们之间都是「且」的关系。

2,CALCULATE函数自身参数所指定的筛选条件,因为是Hardcode的,所以优先执行calcualte函数指定的筛选条件。

CALCULATE函数的基础应用就是在已有外部筛选条件的情况下,增加筛选条件。

用法一:当CALCULATE函数参数指定的筛选条件与外部筛选条件不在同一列时,CALCULATE函数为计算增加筛选

将产品类别添加到矩阵的行中,新建以下度量值:

矩阵第一行内外部筛选条件是这样起作用的:

矩阵行上的条件是:产品类别 = 办公用品

销售额度量值未指定其它筛选条件,计算值为办公用品的销售额。

沙发销售额度量值通过CALCULATE在产品名称上指定了筛选条件:产品名称 = 沙发

这一条件与矩阵行上的条件是且的关系,因此办公用品及电子设备行无计算数值,因为不存在产品类别为办公用品或者电子设备并且产品名称为沙发的销售记录。因为没有同时满足以上两个条件的数据子集存在。而家具行中两个条件交叉筛选后的数据子集只包含销售沙发的销售明细。因此计算的仅仅是沙发的销售额。

用法二:当CALCULATE函数内部参数指定的条件与外部筛选条件作用在同一列时,CALCULATE函数中的筛选条件因为是通过代码明确指定的,所以筛选数据集是优先级更高。因此可以修改外部筛选条件。

同样一个度量值,我们将矩阵行上的字段改为产品名称,计算结果如下表

矩阵第一行销售总额度量值计算时,只有一个筛选条件:产品名称 = 笔记本,计算的数值便只是笔记本的销售额。

而沙发销售额度量值内部CALCULATE函数通过第二个参数指定了筛选条件:产品名称 = 沙发。

如果按照前面的分析,筛选条件之间是且的关系,那么产品名称既是笔记本又是沙发的数据集是不存在的。计算结果应该为空才对。

但是矩阵中每一行都等于402520,也就是沙发的销售额。原始的筛选条件被修改了。

当CALCULATE函数通过参数指定的条件与外部筛选条件作用于同一列时,通过函数参数指定的筛选条件有优先级。计算时以该条件为准。因此形成了筛选条件被修改的情况。


记住这两条CALCULATE函数的计算规则基本上能解释所有场景下的计算:

1、内外部筛选条件之间是「且」的关系,需要同时满足。

2、内外部筛选作用于同一列时,CALCULATE函数参数指定的筛选存在优先级。



0.0000 0 0 回复
学无止境
2021-12-09

真不错哦

0.0000 0 0 回复
学无止境
2021-12-09

真不错哦

0.0000 0 0 回复
学无止境
2021-12-09

真不错

0.0000 0 0 回复
学无止境
2021-12-09

真不错

0.0000 0 0 回复

推荐课程