销售需求丨切换技巧

2021-09-04 09:21:27 浏览数 (3)

(时间:23点15分)微信嘀嘀嘀~

小A:白茶兄!!白茶兄!!在不在??!!救命啊,兄弟!

白茶:(一脸迷茫)啊?!

小A:是这样的,我遇到了一个需求问题!某位老板,想自由切换TOP3!

白茶:额,这个我不是教过你么?TOP3通过ALLSELECTED函数可以实现啊!

小A:不是这样的,这个老板是个完美主义者!要的是不同维度的TOP3,并且只能显示一个,比如选择A维度就不能出现B维度的TOP3,但是要求在一个框框中体现!

白茶:......

小伙伴们,以上就是本期内容的问题来源,一些场景和人物都是白茶虚构的,但是这个事却是真的。

在实际生活中,我们经常能遇到各种莫名其妙的需求,也就是白茶所说的中国式报表——即追求个性化自定义逻辑的报表。

而且因为行业和业务需求的不同,这类问题也是千奇百怪。没有办法做一个系统的归纳,只能是不断的发现需求,解决需求。

话不多说,开始本期的问题:

如何在不同维度之间切换TOP3,并且让无关项不显示呢?

模拟数据:

这是白茶随机模拟的一份销售明细。

其中包含了两个可以分析的维度:品名和分店。

将其导入到BI中,建立基础的度量值。

代码语言:txt复制
销售数量 : =
SUM ( '销售明细'[销售数量] )

关于本期的问题,白茶有两个解决思路。

思路①:

通过IF判断字段来决定是否显示相关排名。

编写两个维度的TOP3排名度量值。

商品TOP:

代码语言:txt复制
RANKX_商品 =
VAR T1 =
    RANKX ( ALLSELECTED ( '销售明细'[商品名称] ), [销售数量 :] )
RETURN
    IF ( T1 <= 3, T1, BLANK () )

分店TOP:

代码语言:txt复制
RANKX_分店 =
VAR T1 =
    RANKX ( ALLSELECTED ( '销售明细'[所在分店]] ), [销售数量 :] )
RETURN
    IF ( T1 <= 3, T1, BLANK () )

结果如下:

添加切片器维度:

通过IF对筛选字段进行判断。

商品排名:

代码语言:txt复制
RANKX_商品KPI =
IF ( SELECTEDVALUE ( '维度表'[维度] ) <> "分店", [RANKX_商品], BLANK () )

分店排名:

代码语言:txt复制
RANKX_分店KPI =
IF ( SELECTEDVALUE ( '维度表'[维度] ) <> "商品", [RANKX_分店], BLANK () )

这里解释一下:

1、通过RANKX函数,分别对商品、分店维度进行排名,排序依据是销售数量,利用IF判断,排名小于3显示,否则为空;

2、利用IF进行维度字段判定,符合条件显示,否则为空,通过度量值实现维度消失的效果。

其效果如下:

如果BOSS想让两个在一个框框内,可以选择将两个可视化插件重叠,也可以通过多行卡片图显示。

思路②:

通过坐标维度显示。

编写如下代码,添加表函数:

代码语言:txt复制
TABLE =
VAR T1 =
    SELECTCOLUMNS ( '销售明细', "明细", [商品名称], "类别", "商品", "INDEX", "1" )
VAR T2 =
    SELECTCOLUMNS ( '销售明细', "明细", [所在分店], "类别", "分店", "INDEX", "2" )
RETURN
    DISTINCT ( UNION ( T1, T2 ) )

结果如下:

编写度量值,将新生成的坐标维度与事实表建立联系:

代码语言:txt复制
KPI =
VAR T1 =
    TREATAS ( VALUES ( 'TABLE'[明细] ), '销售明细'[商品名称] )
VAR T2 =
    TREATAS ( VALUES ( 'TABLE'[明细] ), '销售明细'[所在分店] )
VAR T3 =
    SELECTEDVALUE ( 'TABLE'[类别] )
RETURN
    SWITCH (
        TRUE (),
        T3 = "商品", CALCULATE ( [销售数量 :], T1 ),
        T3 = "分店", CALCULATE ( [销售数量 :], T2 )
    )

排序依据有了,编写排名代码:

代码语言:txt复制
RANKX KPI =
VAR T1 =
    RANKX ( ALLSELECTED ( 'TABLE'[明细] ), [KPI] )
RETURN
    IF ( T1 <= 3, T1, BLANK () )

其结果如下:

解释一下思路:

1、通过新建的表函数,将两个维度放在一列中;

2、利用TREATAS将维度与事实表联系起来;

3、利用RANKX进行排序,之后IF判断,符合条件显示,否则为空。

我们对比一下效果:

小伙伴们❤GET了么?

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

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

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

0 人点赞