销售需求丨多列判定筛选 (一)
在实际做报表中,我们经常能遇到一些特殊情况需要我们对一张表来进行筛选。最开始白茶写的几期文章,讲解过利用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丨白茶
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)