销售需求丨多列判定筛选 (一)

在实际做报表中,我们经常能遇到一些特殊情况需要我们对一张表来进行筛选。最开始白茶写的几期文章,讲解过利用CALCULATE函数和FILTER函数的筛选求和模式,但是当时的思路是限定一个点。比如说我有一份销售退货表,限定条件是“销售”,我不想知道退货的情况。这些都属于单点限制,利用的是“=”取值来判定。

后来在写关于活动月份环比的时候,因为列值不唯一,需要提供多个值来解决筛选情况,当时使用的是“IN”。

本期呢,白茶决定分享一下,如果我的限定条件,不只是一列,而是很多列,该怎么操作呢?

这是群里小伙伴提供的文件,需求是什么,我要通过语文成绩的最大值,来提取每个人的所有成绩。

将其导入到PowerBI中:

这道题的思路是什么?筛选!那么想到筛选,需要我们记住的有两个函数,CALCULATETABLE函数与FILTER函数,这两个都可以对表进行筛选,迭代。

白茶这个题尝试很多次:

第一次尝试:

第一次尝试 = 
FILTER ( '示例', '示例'[语文] = MAX ( '示例'[语文] ) )

单纯的利用FILTER这个函数,整个表都进行了筛选,选取的是语文成绩的最大值。很明显一个FILTER是不够的。

第二次尝试:

白茶决定利用SUMMARIZE函数,组成一个可见组合的表。

第二次尝试 = 
SUMMARIZE ( '示例', '示例'[姓名], "语文", CALCULATE ( MAX ( '示例'[语文] ) ) )

结果如下:

这种利用了SUMMARIZE的可见组合重新构建了一个表,只有姓名和语文成绩最大值这一组合。

接下来利用IN进行取值:

IN进行取值 = 
CALCULATETABLE ( '示例', '示例'[语文] IN ALL ( '第二次尝试'[语文] ) )

结果如下:

这样的话就达到了通过判定语文成绩最大值筛选整个表的情况。但是这种做法实际上是有弊端的。一旦数据量过大,提取了两个表很占用内存的,为了节省空间,白茶想尝试合并这两组代码。

尝试合并 = 
VAR DQ =
    SUMMARIZE ( '示例', '示例'[姓名], "语文", CALCULATE ( MAX ( '示例'[语文] ) ) )
VAR CQ =
    CALCULATETABLE ( '示例', '示例'[语文] IN ALL ( DQ ) )
RETURN
    CQ

结果:

这种情况下这个代码行不通。

后续请点击原文观看:

原文(https://mp.weixin.qq.com/s/J61LfTObhmTDFbmUU5ZUZQ)

请在PC端查看,有部分图片无法在移动端显示。
PowerBI丨白茶