Power BI——CALCULATE函数(对列操作)

一、语法结构:

1.语法:
在这里插入图片描述

其中:
1)第一个参数是计算表达式,可以执行各种聚合运算
2)从第二个参数开始,是一系列筛选条件,可以为空;如果多个筛选条件,用逗号分隔
3)所有筛选条件的交集形成最终的筛选数据集合
4)根据筛选出的数据集合执行第一个参数的聚合运算并返回运算结果

二、案例分析:

步骤1:导入下面这个产品明细表:
Power BI——CALCULATE函数(对列操作)_第1张图片
步骤2:新建一个度量值求每种产品的数量:产品数量 = COUNTROWS(‘产品明细’),因为每种产品只有 1 行,所以求产品明细表的行数就相当于求各种产品的数量,把产品名称和该度量值拖拽入矩阵表,这里外部上下文就是表格每行的行标签
Power BI——CALCULATE函数(对列操作)_第2张图片
步骤3:筛选条件为空,不影响外部上下文:
1)创建一个度量值:
产品数量 1 = CALCULATE([产品数量])
只是用了第一个参数,筛选条件为空,因为没有内部筛选所以完全依赖外部上下文,出来的结果也和原度量值一致。
Power BI——CALCULATE函数(对列操作)_第3张图片
2)说明:介绍 CALCULATE 语法的时候说,第一个参数为聚合运算表达式,为什么这里没有用聚合函数而只用了一个度量值呢?这是因为度量值[产品数量]本身就是一个聚合函数运算,实际上度量值[产品数量 1]等同于这个:产品数量 1 = CALCULATE(COUNTROWS(‘产品明细’)),DAX 函数可以直接引用已经创建好的度量值,可以使 DAX 函数看起来更简洁、更具可读性

步骤4:添加限制条件,缩小上下文
1)建一个度量值:产品数量 2 = CALCULATE([产品数量],‘产品明细’[品牌]=“苹果”)
Power BI——CALCULATE函数(对列操作)_第4张图片
2)说明:发现只有苹果的产品计数显示出来,而其他品牌的数据没有了,这是因为 CALCULATE 的第二个参数的限制,只筛选品牌为“苹果”的,限制了外部的上下文,非苹果的产品都不再运算。

步骤5:结合 ALL 函数,扩大上下文
1)新建度量值:产品数量 3 = CALCULATE([产品数量],ALL(‘产品明细’))
Power BI——CALCULATE函数(对列操作)_第5张图片
2)说明:这次的数据居然是所有产品的数量,这是因为筛选条件使用了 ALL 函数,ALL(‘产品明细’)的意思是清除产品明细表里的所有筛选,外部筛选器不起作用了,每行统计的都是该表中的所有产品。
*在计算每个产品数量占总产品数量的比重,直接写个度量值:产品占比=[产品数量]/[产品数量 3],产品占比就计算出来了,这就是统计总数的一个功能
Power BI——CALCULATE函数(对列操作)_第6张图片
步骤6:重置上下文
1)新建度量值:
产品数量 4 = CALCULATE([产品数量],
all(‘产品明细’[产品名称]),
‘产品明细’[类别]=“手机”)

先用 ALL 函数清除外部上下文,然后又新增了一个筛选条件,类别为"手机"的产品数量,结果如下:
Power BI——CALCULATE函数(对列操作)_第7张图片
每一行产品的数量都是 3,正好符合建立这个度量值的逻辑,被 ALL 清除行标签的外部筛选后,从全部产品中统计品类为"手机"的产品的数量,所以每行都返回 3.

三、结论:

通过以上几个简单的例子,可以领会到 CALCULATE 的计算逻辑:通过从第二个参数开始的筛选条件,得到一个数据集合,并利用第一个参数执行聚合运算,这不就是 DAX 要实现的功能——提取有用数据并执行聚合运算。所以说 CALCULATE 几乎就是 DAX 本身,它就是实现 DAX 功能的引擎,并能灵活的操控外部上下文,后面的数据分析也都离不开CALCULATE 的身影。

你可能感兴趣的:(Power,BI,数据分析)