销售需求丨查找问题

2021-09-03 10:50:10 浏览数 (1)

BOSS:茶,那个,什么茶来着?(递过一杯茶...) BOSS:?!!不是这个,我是说那个白茶啊! 白茶:......(懵)咋滴了,BOSS? BOSS:哎,今年行情不行啊,能不能搞一个表,就是我选择一个颜色,就能知道这个颜色售卖的所有商品? 白茶:......(咳,咳)BOSS,这个有点难啊! ——(支付宝到账####元!)—— 白茶:好嘞,马上办!

上面的都是白茶和大家开的小玩笑,但是实际上这种需求,是很普遍的一种情况。起初这个问题来源于群里小伙伴的提问,就是当我选择A、B的时候,能不能出现同时包含A、B、AB的项目?白茶一寻思,可以做到。

最后要达到上图的这种效果,该如何实现呢?

开始本期的问题—《销售需求之查找问题》。

案例文件:

这是白茶随机模拟的一份数据,一个维度表,一个销售表。


那么当我们选择维度中的数据,显示出销售表中对应颜色的销售,这个问题属于什么问题?很明显,这个属于查找问题,查找维度表中的颜色在事实表中的对应项目。

白茶翻阅了一下DAX中关于查找功能的函数,有两个函数。

FIND函数与SEARCH函数

二者在语法上是一样的:

代码语言:javascript复制
DAX=
FIND 或 SEARCH(查找内容,被查找,[开始位置],[找不到返回值])

二者的语法结构是一致的,但是有所区别:

FIND函数区分大小写,不支持通配符;

SEARCH函数不区分大小写,支持通配符。


编写如下代码:

代码语言:javascript复制
销售颜色: =
VAR SLL =
    VALUES ( '维度'[维度] )
VAR SQL =
    MAX ( '事实表'[颜色] )
RETURN
    IF ( SEARCH ( SLL, SQL,, 0 ) > 0, SQL, BLANK () )

从结果中我们不难看出,当切片器无选择时,以及多选时,其结果呈现的很明显是有问题的。

做到这里的时候,白茶思考了很久,没明白当选项为多选时,如何通过比较多个值进行结果的呈现。

感谢@冬哥。

冬哥提点了我一句,无法将多个值与查找范围进行比较,那么可以把思路反过来啊,通过反计数的方式呈现。

编写如下代码:

代码语言:javascript复制
销售颜色 =
VAR SLL =
    VALUES ( '维度'[维度] )
VAR SQL =
    MAX ( '事实表'[颜色] )
RETURN
    IF (
        COUNTROWS ( FILTER ( SLL, SEARCH ( [维度], SQL,, 0 ) > 0 ) ) > 0,
        SQL,
        BLANK ()
    )

当然,也可以使用FIND写法:

代码语言:javascript复制
FIND写法 =
VAR SLL =
    VALUES ( '维度'[维度] )
VAR SQL =
    MAX ( '事实表'[颜色] )
RETURN
    IF (
        COUNTROWS ( FILTER ( SLL, FIND ( [维度], SQL,, 0 ) > 0 ) ) > 0,
        SQL,
        BLANK ()
    )

其结果如下:

可以看得出来这次的结果没有任何问题,这种情况下SEARCH和FIND的用途是一致的。

代码含义: 通过VALUES函数,去除重复值,来提取多个值,形成一个虚拟表; SQL这里的作用单纯的是为了将[颜色列]进行聚合,否则无法在查询函数中使用; 通过IF语句进行判断,符合条件显示,否则显示为空,内部利用FILTER函数进行上下文传递,将原本没有联系的维度和事实表中的颜色查询链接在一起。


至于其他的项目,可以通过IF进行判断决定是否显示,这里就不赘述了,最终形成下面的动图:

样例链接:http://t.cn/A62FPa3i

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球[PowerBI丨需求圈])

这里是白茶,一个PowerBI的初学者。

0 人点赞