Power BI学习浅析(二) 筛选上下文的理解Calculate+filter+all

源数据很简单为销售表格,其中有省份字段和金额字段,现在想在一张表格中显示每个省份的销售金额以及每个省份与北京销售的差距(预览效果如下):

在这里插入图片描述

主要探讨实现BJ_Actual的几种方式及各自之间的差别

  1. 方法一:Calculate函数
BJ_Actual = 
CALCULATE(
          [Actual],
          '省份区域'[省份]="北京"
)
  1. 方法二:Calculate+filter+all
BJ_Actual_equal = 
CALCULATE(
          [Actual],
          filter(
                 all('省份区域'[省份]),
                 [省份]="北京"
          )
)
BJ_Actual_equal2 = 
CALCULATE(
          [Actual],
          filter(
                 all('省份区域'),
                 '省份区域'[省份]="北京"
          )
)
  1. 方法三
BJ_Actual2 = 
CALCULATE(
          [Actual],
          filter(
                '省份区域',
                '省份区域'[省份]="北京"
          )
)

结论:

  1. 方法一与方法二实质是一样的,方法二相当于方法一的简单书写方式,实质的运作模式其实与方法一一致,即计算的结果剔除了表格中省份作为筛选上下文的筛选,因此在表格中每个省份对应的只是北京的金额
  2. 方法三与方法一和二是有很大区别的,关键在于filter函数中,一个有all的限制,剔除了表格中筛选上下文的筛选,一个没有,因此保留表格的筛选上下文的筛选,因此只有当北京被筛选时,方法三才会出现北京的值,其他省份均不会出现北京的值(其他省份为空值)

补充思考点:

  1. 需要更深入了解在表格中放入度量值后,度量值中的计算和表格筛选的系统运行先后顺序

  2. 在方法二中看似两个表达式的结果一样,但还是在运算效率和逻辑上有一定的区别,逻辑上,第一种filter筛选出来的只是省份这样的一个单列,而第二种filter筛选出来的是整张表格,因此,从速率上来讲,第一种更快,但是第二种也有存在的必要性,如筛选条件中需要用到表中的其他列的时候,因此要根据具体的情况进行使用。

  3. 上述所有方法中的All都可以用REMOVEFILTERS函数代替,效果完全一致。

Power BI 中,可以使用 CalculateFilter 的组合来创建复杂的计算和筛选逻辑。下面是一些常见的用例: 1. 计算一段时间内的销售总额:使用 Calculate 函数计算销售总额,然后使用 Filter 函数筛选指定时间范围内的销售数据。例如:CALCULATE(SUM(Sales[SalesAmount]), FILTER(Sales, Sales[OrderDate] >= DATE(2021,1,1) && Sales[OrderDate] <= DATE(2021,3,31))) 2. 计算某个时间段的销售增长率:使用 Calculate 函数计算当前时间段的销售总额,然后使用 Filter 函数筛选上一个时间段的销售总额,最后计算增长率。例如:CALCULATE(DIVIDE(SUM(Sales[SalesAmount]), CALCULATE(SUM(Sales[SalesAmount]), DATEADD(Sales[OrderDate], -1, MONTH))), FILTER(Sales, Sales[OrderDate] >= DATE(2021,1,1) && Sales[OrderDate] <= DATE(2021,3,31))) 3. 计算不同分组的销售额占比:使用 Calculate 函数计算各个分组的销售总额,然后使用 Filter 函数筛选数据,并使用 SUMX 函数计算总销售额,最后计算占比。例如:CALCULATE(DIVIDE(SUM(Sales[SalesAmount]), SUMX(Sales, Sales[SalesAmount])), FILTER(Sales, Sales[ProductCategory] = "Clothing")) 4. 计算某个分组的排名:使用 Calculate 函数计算每个分组的销售总额,然后使用 Filter 函数筛选数据,最后使用 RANKX 函数计算排名。例如:RANKX(FILTER(VALUES(Sales[Product]), [Total Sales] > 0), [Total Sales], , DESC, Dense) 以上是一些常见的 CalculateFilter 的组合用法,但实际应用中可能会更加复杂,需要根据具体情况进调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值