前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多维度帕累托丨最终话

多维度帕累托丨最终话

原创
作者头像
PowerBI丨白茶
修改2021-09-04 09:21:13
8520
修改2021-09-04 09:21:13
举报
文章被收录于专栏:PowerBIPowerBI

最近事情比较多,学习的速度也慢了下来,惭愧。

白茶对近一个月所学的DAX进行了一次梳理,做出了一个动态多维度的帕累托图,效果如下。

这个动图包含了最近所学的相关DAX函数,那么是如何实现的呢?

这是本次,白茶所使用的一份示例数据,可以说是白茶使用频率最高的一份样例了。导入PowerBI中,系统会自动匹配模型关系,如下图:

这是前期的准备工作,接下来开始对近期所学的相关知识进行梳理。

一、编写基本的销售金额、成本、利润代码,如下:

销售金额代码:

代码语言:txt
复制
销售金额 =
SUMX ( '销售明细', '销售明细'[销售数量] * RELATED ( '产品表'[销售价] ) )

成本代码:

代码语言:txt
复制
销售成本 =
SUMX ( '销售明细', '销售明细'[销售数量] * RELATED ( '产品表'[成本] ) )

利润代码:

代码语言:txt
复制
利润 =
[销售金额] - [销售成本]

结果如图:

这里面涉及到的知识点是:

当相关数据没在一个表格里面时,我们不能使用SUM进行聚合,需要使用迭代循环SUNX以及RELATED函数。

二、确立维度

通常情况下一组数据我们需要观测的维度大概也就是三方面:时间、财务、具体内容切换。

①、时间维度好说,可以看得出来事实表中自带销售日期,选取年份字样放入切片器中即可,结果如下:

具体的样式可以去点击右上角调整。

也可以去设置中调整。

这样就得到了符合我们心里预期的大致效果,具体的细节根据个人喜好去调整,这里就不赘述了。如果对销售日期不满意,也可以利用相关函数生成自己的日期表。后面的财务、观测维度设置方法也是一样的,不赘述。

②、财务维度。财务维度说白了,就是利用切片器,可以动态的切换数据。

点击输入数据,确定自己的表名,在列值中分别输入销售金额,利润,结果如下:

接下来,输入代码,将没有关系的维度与度量值建立关系。

代码语言:txt
复制
SWITCH写法 =
SWITCH (
    TRUE (),
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "利润", [利润],
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "销售金额", [销售金额],
    BLANK ()
)

这里涉及到的是SWITCH函数与SELECTEDVALUE函数,当然也可以用IF进行判断,这里就不赘述了,结果如下:

③、坐标维度。所谓的观测维度,其实也就是坐标维度,其根本原理,是将原本不在一个表中的数据,利用DAX建立在一个表格中,使其同处于一个维度之下,再利用虚拟关系,将原本没有联系的表格强行建立关系。

建立维度表,输入如下代码:

代码语言:txt
复制
名称与分店维度 =
VAR BC1 =
    SELECTCOLUMNS (
        ADDCOLUMNS ( DISTINCT ( '分店表'[分店名] ), "名称与分店", "分店" ),
        "名称与分店", [名称与分店],
        "具体内容", [分店名]
    )
VAR BC2 =
    SELECTCOLUMNS (
        ADDCOLUMNS ( DISTINCT ( '产品表'[商品名称] ), "名称与分店", "商品名称" ),
        "名称与分店", [名称与分店],
        "具体内容", [商品名称]
    )
RETURN
    UNION ( BC1, BC2 )

结果如图:

在建模卡片下选择新表,输入DAX函数,得到我们需要的统一坐标维度表。

再输入如下代码将原本没有联系的数据建立关系:

代码语言:txt
复制
分析数据 =
VAR BC3 =
    TREATAS ( VALUES ( '名称与分店维度'[具体内容] ), '产品表'[商品名称] )
VAR BC4 =
    TREATAS ( VALUES ( '名称与分店维度'[具体内容] ), '分店表'[分店名] )
RETURN
    SWITCH (
        TRUE (),
        SELECTEDVALUE ( '名称与分店维度'[名称与分店] ) = "商品名称", CALCULATE ( [SWITCH写法], BC3 ),
        SELECTEDVALUE ( '名称与分店维度'[名称与分店] ) = "分店", CALCULATE ( [SWITCH写法], BC4 ),
        BLANK ()
    )

选择柱型折线图,将具体内容作为共享坐标轴,将分析数据放入列值中,结果如下:

这样的话我们就得到一个动态数据与动态坐标结合在一起的动态图,可以随意的切换三种维度。涉及到的一些相关函数,在这里就不赘述了。

三、帕累托累计占比

三种维度我们得到了,接下来就是来编写累计、占比、以及累计占比的代码。

累计代码:

代码语言:txt
复制
累计 =
SWITCH (
    TRUE (),
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "利润", CALCULATE ( [利润], ALLSELECTED ( '销售明细'[销售数量] ) ),
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "销售金额", CALCULATE ( [销售金额], ALLSELECTED ( '销售明细'[销售数量] ) )
)

占比代码:

代码语言:txt
复制
占比 =
DIVIDE( [分析数据], [累计] )

累计占比代码:

代码语言:txt
复制
累计占比 =
VAR SQ = [占比]
RETURN
    CALCULATE ( [占比], FILTER ( ALL ( '名称与分店维度'[具体内容] ), [占比] >= SQ ) )

将累计占比的代码放入刚才的可视化插件,放在行值位置。结果如下:

我们会发现似乎有些地方不对劲啊,有一些商品在2017年这个维度上是没有消费的啊,不应该进行累计的啊!简单,记得白茶之前提到过的筛选空值么?优化我们的代码。

代码语言:txt
复制
累计占比 =
VAR SQ = [占比]
RETURN
    IF (
        [分析数据] <> 0,
        CALCULATE (
            [占比],
            FILTER ( ALL ( '名称与分店维度'[具体内容] ), [占比] >= SQ && [分析数据] <> 0 )
        )
    )

结果如图:

这次是不是很完美?

四、参数分类

那么动态的帕累托图到这里告一段落了,但是我们并没有对数据优先级进行判定啊?这里需要我们添加参数值。

在建模窗格下,选择添加参数,分别添加三个参数,ABC。

参数A:

代码语言:txt
复制
DAX=
GENERATESERIES( 1, 100, 1 )

参数B:

代码语言:txt
复制
DAX=
GENERATESERIES( 0, 100, 1 )

参数C:

代码语言:txt
复制
DAX=
GENERATESERIES( 0, 100, 1 )

这里说一下,问什么参数A的初始值是1,这是为了防止后面的计算出现问题。

将三个参数值放入环形图中,添加切片器,这是为了方便我们在实际使用中能随时对ABC三类划分权重。

添加ABC三类的比例权重。

总体:

代码语言:txt
复制
参数总体 =
[参数A 值] + [参数B 值] + [参数C 值]

A类:

代码语言:txt
复制
A类比例 =
DIVIDE([参数A 值],[参数总体])

B类:

代码语言:txt
复制
B类比例 =
DIVIDE([参数B 值],[参数总体])

C类:

代码语言:txt
复制
C类比例 =
DIVIDE([参数C 值],[参数总体])

接下来,对数据进行判定分类,划分出三种结果。输入如下代码:

代码语言:txt
复制
优先级 =
VAR BC = [累计占比]
RETURN
    SWITCH ( TRUE (), BC <= [A类比例], "优先", BC <= [A类比例] + [B类比例], "其次", "最后" )

将其放入矩阵中查看,结果如图:

会发现又出现之前的毛病了,咋办,优化代码呗:

代码语言:txt
复制
优先级 =
VAR BC = [累计占比]
RETURN
    IF (
        [分析数据] <> 0,
        SWITCH ( TRUE (), BC <= [A类比例], "优先", BC <= [A类比例] + [B类比例], "其次", "最后" )
    )

结果如下:

是不是结果看起来舒服了很多?

五、优化

剩下最后的步骤,就是对各个可视化插件进行细节上的优化处理了,这里就不过多的赘述了。

颜色配置,大小什么的,可以按照个人喜好的来。

当然,也可以添加一个关于ABC三类计数的表格,以及一个销售趋势图,让你的报表看起来格调更高。

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

小彩蛋:

1、ABC三类该如何计数呢?

2、帕累托该如何动态配色?


小伙伴们❤GET了么?

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档