PowerBI可视化实战:商品销售动态ABC分析案例

在开始动手制作案例之前,大家首先跟随小黎子来一起了解商品销售中的ABC分析的定义。

1.商品销售ABC分析法是以商品销售为主线将商品划分为A、B、C类,商品销售从高到低,累计占比0至50%为A类商品,50%-90%为B类商品,90%-100%为C类商品

2.商品销售ABC分析法又称巴雷托分析法,它是根据事物在技术或经济方面的主要特征,进行分类排队,分清重点和一般,从而有区别地确定管理方式的一种分析方法。由于它把被分析的对象分成A、B、C三类,所以又称为ABC分析法。

3. 商品销售ABC分析法可以完成整体宏观分析要求,也可以满足单品的销售、毛利、成本、笔数等的分析和操作需求。

该模型是基于KSOA时空医药软件的数据库建立的销售ABC分析模型,本案例中无法提供给大家医药数据源。大家可以通过小黎子数据分析公众号回复【销售】获取销售数据源进行学习了解。我们首先来看一下商品动态ABC分析中的构成元素:

1、分析指标、分析维度、元素名称都是我们可以自由选择的要被分析的对象,可以动态选择在右下角显示分析曲线

2、动态设置ABC参数的相对大小,可以通过调节ABC的参数大小来结合企业实际的分类占比进行分析商品

3、ABC分类总价值占比和全动态ABC分析都是展现最终结果的图表


接下来我们来看看是如何制作的。


一、处理需要的维度表和事实表

1、维度表:商品档案、日期

2、事实表:销售数据

二、处理需要分析的维度和指标公式信息

  • 商品档案维度:商品类型、商品一级分类、商品二级分类、剂型、生产厂商、主治功能
  • 销售指标:销售笔数、销售成本、销售金额、销售毛利
  • 动态设置ABC参数
  • ABC元素价值指标处理

  • 1、商品档案维度信息处理

    实现动态ABC分析,就需要从商品档案中动态提取ABC元素。具体公式如下:

    维度_ABC元素 =

    VAR Products1 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[主治功能] ) , "元素类型" , "主治功能" ) , "元素名称" , [主治功能] , "元素类型" , [元素类型] )

    VAR Products2 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[商品一级分类] ) , "元素类型" , "商品一级分类" ) , "元素名称" , [商品一级分类] , "元素类型" , [元素类型] )

    VAR Products3 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[商品二级分类] ) , "元素类型" , "商品二级分类" ) , "元素名称" , [商品二级分类] , "元素类型" , [元素类型] )

    VAR Products4 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[商品类型] ) , "元素类型" , "商品类型" ) , "元素名称" , [商品类型] , "元素类型" , [元素类型] )

    VAR Products5 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[剂型] ) , "元素类型" , "剂型" ) , "元素名称" , [剂型] , "元素类型" , [元素类型] )

    VAR Products6 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '维度_商品档案'[生产厂商] ) , "元素类型" , "生产厂商" ) , "元素名称" , [生产厂商] , "元素类型" , [元素类型] )

    RETURN UNION(  Products1,Products2,Products3,Products4,Products5,Products6 )



    2、销售指标信息处理

    销售指标是直接填写的ABC指标分类,在表中直接输入指标信息和排序即可


    销售金额公式:销售金额 = SUM('事实_销售数据'[实收金额])

    销售毛利公式:销售毛利 = SUM('事实_销售数据'[毛利])

    销售笔数公式:销售笔数 = DISTINCTCOUNT('事实_销售数据'[单据编号])

    销售成本公式:销售成本 = SUM('事实_销售数据'[成本金额])


    销售指标自动选择切换

    销售 指标 自动 =

    SWITCH( TRUE() ,

       SELECTEDVALUE( '维度_ABC指标分类'[指标名称] ) = "销售金额" , [销售金额] ,

       SELECTEDVALUE( '维度_ABC指标分类'[指标名称] ) = "销售毛利" , [销售毛利] ,

       SELECTEDVALUE( '维度_ABC指标分类'[指标名称] ) = "销售笔数" , [销售笔数] ,

       SELECTEDVALUE( '维度_ABC指标分类'[指标名称] ) = "销售成本" , [销售成本] ,

       [销售金额] // as default

    )


    3、动态ABC参数设置

    首先我们需要输入ABC分类表


    在通过公式生成参数A\B\C

    参数 ABC A = GENERATESERIES(0, 100, 1)

    参数 ABC B = GENERATESERIES(0, 100, 1)

    参数 ABC C = GENERATESERIES(0, 100, 1)


    4、ABC元素指标价值处理

    ABC 元素 价值 =  

    VAR ItemRelationOfCustomer1 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_会员'[性别] )

    VAR ItemRelationOfCustomer2 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_会员'[年龄 (组)] )

    VAR ItemRelationOfProduct = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[商品类型] )

    VAR ItemRelationOfProduct2 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[主治功能] )

    VAR ItemRelationOfProduct3 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[商品一级分类] )

    VAR ItemRelationOfProduct4 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[商品二级分类] )

    VAR ItemRelationOfProduct5 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[剂型] )

    VAR ItemRelationOfProduct6 = TREATAS( VALUES( '维度_ABC元素'[元素名称] ) , '维度_商品档案'[生产厂商] )

    RETURN  

       SWITCH( TRUE() ,


           SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "性别" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfCustomer1 ) ,

           SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "年龄 (组)" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfCustomer2 ) ,

           SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "商品类型" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct ) ,

            SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "主治功能" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct2 ) ,

            SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "商品一级分类" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct3 ) ,

            SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "商品二级分类" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct4 ) ,

            SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "剂型" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct5 ) ,

            SELECTEDVALUE( '维度_ABC元素'[元素类型] ) = "生产厂商" ,

           CALCULATE( [销售 指标 自动] , ItemRelationOfProduct6 ) ,


           BLANK()

       )


    ABC 元素 价值 占比 =

    VAR Items = CALCULATETABLE( DISTINCT( '维度_ABC元素'[元素名称] ) , ALLSELECTED( '维度_ABC元素'[元素名称] ) )

    VAR Total = CALCULATE( [ABC 元素 价值] , Items )

    VAR CurrentItemValue = [ABC 元素 价值]

    RETURN DIVIDE( CurrentItemValue , Total )


    ABC 元素 价值 占比 按分类 =

    IF( SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] ) = [ABC 元素 所属分类] , [ABC 元素 价值 占比] , BLANK() )


    ABC 元素 价值 累计占比位 =

    VAR Items = CALCULATETABLE( DISTINCT( '维度_ABC元素'[元素名称] ) , ALLSELECTED( '维度_ABC元素'[元素名称] ) )

    VAR Total = CALCULATE( [ABC 元素 价值] , Items )

    VAR CurrentItemValue = [ABC 元素 价值]

    VAR CumulativeValue = CALCULATE(

       [ABC 元素 价值] , FILTER( Items , [ABC 元素 价值] >= CurrentItemValue )

    )

    RETURN DIVIDE( CumulativeValue , Total )


    ABC 元素 价值 累计占比位 按分类 =

    IF( SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] ) = [ABC 元素 所属分类] , [ABC 元素 价值 累计占比位] , BLANK() )


    ABC 参数 A = [参数 ABC A 值] / ( [参数 ABC A 值] + [参数 ABC B 值] + [参数 ABC C 值] )


    ABC 参数 B = ( [参数 ABC A 值] + [参数 ABC B 值] ) / ( [参数 ABC A 值] + [参数 ABC B 值] + [参数 ABC C 值] )


    ABC 参数 占比 =

    SWITCH( TRUE() ,

       SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] ) = "A" , [参数 ABC A 值] / ( [参数 ABC A 值] + [参数 ABC B 值] + [参数 ABC C 值] ) ,

       SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] ) = "B" , [参数 ABC B 值] / ( [参数 ABC A 值] + [参数 ABC B 值] + [参数 ABC C 值] )  ,

       SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] ) = "C" , [参数 ABC C 值] / ( [参数 ABC A 值] + [参数 ABC B 值] + [参数 ABC C 值] )  ,

       BLANK()

    )


    ABC 元素 所属分类 =

    VAR CurrentItemCumulativePrecent = [ABC 元素 价值 累计占比位]

    RETURN SWITCH( TRUE() ,

       CurrentItemCumulativePrecent >= [ABC 参数 B] , "C" ,

       CurrentItemCumulativePrecent >= [ABC 参数 A] , "B" ,

       "A"

    )


    ABC 类别 价值 =

    VAR CurrentABCCategory = SELECTEDVALUE( '维度_ABC分类'[ABC分类名称] )

    VAR Items = CALCULATETABLE( DISTINCT( '维度_ABC元素'[元素名称] ) , ALLSELECTED( '维度_ABC元素'[元素名称] ) )

    RETURN CALCULATE( [ABC 元素 价值] , FILTER( Items , [ABC 元素 所属分类] = CurrentABCCategory ) )


    ABC 类别 价值 占比 = DIVIDE( [ABC 类别 价值] , CALCULATE( [ABC 元素 价值] , ALLSELECTED( '维度_ABC元素'[元素名称] ) ) )


    三、制作前端可视化报告

    1、分析指标切片器:直接勾选维度_ABC指标分类中的指标名称即可,切片器样式选择下拉

    2、动态设置ABC参数的相对大小切片器:直接分别勾选参数ABC A、参数ABC B或者参数ABC C。切片器样式上开启滑块

    3、分析维度切片器:直接勾选维度_ABC元素中的元素类型,切片器样式选择下拉

    4、元素名称切片器:直接勾选维度_ABC元素中的元素名称,切片器样式选择列表

    5、ABC分类总价值占比:选择条形图,勾选维度_ABC分类中的ABC分类名称


    6、全动态ABC分析是本文核心的展现区域,它主要通过折线和柱状图来实现的效果。

    四、总结

    本文中制作商品动态销售ABC分析法的关键就是在于滚动计算要分析的指标,也可以灵活的使用要分析的维度信息。当然本文中还缺少了时间维度的切片设置,大家可以根据实际的情况进行加上时间切片器即可。文中的小黎子并没有非常仔细的去描述细节,对于学习的新手来说可能比较复杂一点。当然大家在制作过程中遇到任何问题欢迎联系小黎子,我们一起成长。最终我们实现的效果如下:

    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 159,569评论 4 363
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 67,499评论 1 294
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 109,271评论 0 244
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 44,087评论 0 209
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 52,474评论 3 287
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 40,670评论 1 222
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 31,911评论 2 313
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 30,636评论 0 202
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 34,397评论 1 246
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 30,607评论 2 246
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 32,093评论 1 261
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 28,418评论 2 254
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 33,074评论 3 237
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 26,092评论 0 8
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 26,865评论 0 196
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 35,726评论 2 276
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 35,627评论 2 270