filter函数的用法_Power BI学习-CALCULATE,CALCULATETABLE和FILTER的区别

本文介绍了DAX中的CALCULATETABLE和FILTER函数,详细阐述了它们的使用方法和区别。CALCULATETABLE在指定筛选条件下返回表,而FILTER则逐行计算并在所有数据上应用筛选。在给定的例子中,CALCULATETABLE先筛选后计算,FILTER则是先计算后筛选,导致结果不同。实践中,FILTER更为常用,但CALCULATETABLE在处理多表操作时有其独特优势。
摘要由CSDN通过智能技术生成

346150baf2444eea6c48d3fa0138589a.png

CALCULATE和CALCULATETABLE其实一样,区别在于返回结果不同,CALCULATE返回一个值,CALCULATETABLE返回一个表,是一个表函数,用于建立虚拟表,在这点上又跟FILTER类似,今天重点也是分享CALCULATETABLE和FILTER的区别。

首先先认识一下CALCULATETABLE:

语法:CALCULATETABLE(表,过滤条件1,过滤条件2...)

参数:第一个参数是表或表达式返回的表

第二参数及以后参数都是筛选条件

功能:在由过滤器修改的上下文中计算表达式

返回:根据第二个及以后的过滤器筛选的上下文中,返回第一个表达式计算的表

注意:表和筛选条件的表是有关系的,只要有关系的表都可以进行筛选,实现多表运作的功能

明白了此函数的用法,下面就看一下CALCULATETABLE和FILTER的区别:

举例:

产品种类销售计数 =ADDCOLUMNS(VALUES('产品表'[种类]),"计数",COUNTROWS('销售数据表'))

先看一下这个公式的返回结果,是一张产品种类的销售数据计数

4354b965ec5907389e0a05acd0b93090.png

在这个函数外面分别加入CALCULATETABLE和FILTER,结果如下:

calculatetable函数 = CALCULATETABLE(ADDCOLUMNS(VALUES('产品表'[种类]),"计数",COUNTROWS('销售数据表')),'产品表'[种类]="美式")

6822c7f3e191307f76fb61badeeb67df.png

filter函数 = FILTER(ADDCOLUMNS(VALUES('产品表'[种类]),"计数",COUNTROWS('销售数据表')),'产品表'[种类]="美式")

0fe8fa503d60e7d5ae22fae425aff42e.png

问题来了:为什么显示的数据不一样?

虽然两者函数内的参数是一模一样,但是逻辑运算不同,首先根据CALCULATETABLE这个函数的功能是在第二参数的筛选条件的基础上计算第一参数表达式,那么 CALCULATETABLE是先筛选产品表种类是美式,在这个基础上新增列计数。

FILTER函数是逐行计算,没有筛选上下文,所以是执行第一参数结果后再筛选条件,也就是说筛选条件是在ADDCOLUMNS和COUNTROWS计算了所有产品的数量后执行的,相当于是不起作用的,所以最终结果显示的是所有产品的数量。

在实际工作中可能用到CALCULATETABLE这个函数的机会很少,常用的就是FILTER函数建立虚拟表,况且在编写DAX函数公式时CALCULATE+FILTER这个是黄金组合。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值