DAX Patterns 2015 第10章 动态ABC(补充)

第10章:ABC分类(动态)补充

ABC 动态分类

        ABC 分类模式的动态版本是动态分段模式的扩展。它将项目 (如产品或客户) 划分为基于其累积销售额的细分, 以及它们对所在整体的总销售额的贡献程度。动态分割是对所有筛选进行的, 与静态 ABC 分类模式不同, 其中分组(段)是在处理过程中计算的, 因此独立于以后应用于数据透视表的任何筛选器。
       动态分段允许你分析特定项在不同区域之间的变化, 或者在各个类之间移动一段时间。在模式中, 可以使用参数表来定义不同段的边界定义 (请参见参数表模式部分)。

在使用此模式之前, 请确保你已经熟悉以下模式:

动态分割

(1)ABC分类(静态)
(2)参数表
(3)基本模式示例

      假设, 除了分析某一产品在 ABC 分类方面的总体重要性之外, 你还希望随时分析该产品的开发情况。这种情况下, 需要一种动态方法, 它对每个时间段分别进行分割。动态基本处理方法与静态 ABC 分类相同, 但现在,我们将在所有当前筛选器的筛选中计算这种动态的分割。最后的计算是非常灵活的, 并能在任何筛选器下工作。

   图1所示的数据模型包含以下表:

(1)Sales  销售表: 含产品、日期和销售区域粒度的销售表;
(2)Product产品表: 接受 ABC 分类的项目表;
(3)Date  日期表: 用于记录订购日期的天数、月份和年份;
(4)SalesTerritory区域表: 销售产品的区域;
(5)Classfications分类表: 类及其边界(值区间)。

图 1 具有所有必需列表的现有数据模型。

请注意, 分类表与任何其他表没有关系。这将在 DAX 计算中使用虚拟关系进行分割。分类表包含了你可以在图2中设置的值。

图 2 具有类和边界的分类表。

动态 ABC 分类需要定义以下四个度量:
(1)Sales Amount销售金额: 基于销售列的计算;
(2)MinLowerBoundary:    当前选定段的较低边界;
(3)MaxUpperBoundary:    当前选定段的上部边界;
(4)Sales Amount ABC 销售金额 ABC: 根据累积销售额将单个物料分组为细分市场的最终度量值:

       现在可以将 "分类" 表中的 "类别" 列与 " Sales Amount ABC " 度量一起使用, 以显示这些段及其值。通过进一步添加[年份]切片器, 你可以按年份进行筛选, 并基于现有的切片程序选择重新分类。因此, 根据所选筛选器计算分类和Sales Amount ABC度量, 如图3所示。

       图 3 静态 ABC 分类模式的原始示例情况,现在可以按年份进行筛选。
      在图4中, 你可以看到单个产品如何在一段时间段之间变化(属于不同的ABC值范围里)。

          图 4 可以跟踪两年内单个产品的ABC值变化。

      动态 ABC 分类模式用于将项目 (如产品或客户) 在经过给定条件筛选后对其进行的分组。通常, 你可以将此分类与时间或区域结合使用, 以查找给定选择的重要项目。

   用例

      除了静态 ABC 分类模式涵盖的所有用例 (如库存管理、客户细分和市场细分), 动态ABC分类模式计算还进一步扩展了静态模式的分析能力, 允许所有其他维度和层次结构的切片和切分(筛统称选)。

     跟踪产品或客户随时间推移的变化

      你可以使用 ABC 分类的动态版本跟踪一段时间内某一产品或一组产品的趋势变化。这使得早期识别这些业务是否下降或越来越重要。此信息可用于启动市场营销活动或从销售中删除表现不好的产品等实际业务场景。

        跨区域比较产品性能

       你可以使用动态 ABC 分类来确定产品以及产品集在销售方面的区域差异。这使你可以将某些产品按区域或市场的销售情况划分为那些是优先级, 或者简单地帮助你按区域分析数据以更好地了解你的业务。

        完整模式

       你可以将动态 ABC 分类模式应用于任何现有数据模型。它不需要数据模型的任何特殊处理;你将只需要添加一个定义 ABC 区段及其边界的参数表。

       首先, 你必须确定用于分割的度量。这种度量必须通过使用 SUM 类聚合函数, 以便动态 ABC 分类模式能正常工作。一个典型的例子就是:销售额聚合。

    [segmentation_measure] :=SUM ( 'fact_table'[value_column] )

       其次,标识包含要分类的项的列表。这是标识与其业务主键列对应的项表的列 (例如, 客户编号或产品代码)。
       最后,添加定义类(比如ABC分类)以及分类使用的参数表。你已经在图2中看到了此表的一个示例。此表包含三列:

< 类别名 >: 区段的名称 (通常为 A、B 和 C等)。
< lower_boundary >: 百分比的较低边界 (0.7 表示 70%)。
< upper_boundary >: 以百分比表示的线段的上边界 (0.9 意味着 90%)。

现在,可以创建以下度量值, 以计算当前所选段的边界:

[MinLowerBoundary] :=MIN ( )  //下边界
[MaxUpperBoundary] := MAX ( )  //上边界

一旦所有这些先决条件都到位, 就可以创建最终计算:

       最后的公式相当复杂。为了使它更容易理解, 让我们把它分解成不同的几个逻辑步骤。  
       首先, 必须定义与该分段相关的一组Items-项列表。这将考虑使用一个带有当前筛选器: CALCULATETABLE (例如, ALL ()所有项) 来完成。在此模式中, 你将了解如何根据你的要求修改此筛选器以实现不同的结果.
       其次,一旦有了这样一组项列表, 必须计算每个Item项目的累计销售额。这里包含有两步过程:
       获取每个Item—项的当前值。在上述公式中, 这是 OuterValue 列, 它是使用 ADDCOLUMNS 与VALUES结合来针对当前筛选器中的每个Item计算的。再次循环遍历整个Item表, 计算每个Item的累积值, 并汇总大于或等于上一步中计算的 OuterValue 的所有值。这是筛选器上的 SUMX(求和)。
       将累计销售额--cumulated sales除以所有cumulated percentage--相关项的总值,以获取每个项的累计百分比 (CumulatedValuePercentage—累计百分比)。为此,使用了DIVIDE--除法函数。
       结果表将包含每个Item及其对应的 CumulatedValuePercentage—累计百分比。然后, 再根据当前段边界值的边界参数筛选此表, 返回只包含在当前段中的Item的表。
       最外层的CALCULATE函数使用此结果作为列表筛选器, 并将计算限制为当前段中的Item。
       由于表筛选器将覆盖事实计算列(业务主键)上的任何现有筛选器 (例如, 如果业务键列用于行), 则需要添加VALUES( ),以便在业务键列上保留当前筛选器筛选。
        图5说明了评估过程的不同步骤, 它们执行细分产品的完整操作, 然后计算累积销售额。计算顺序从左向右。

            图 5  ABC 分类法的计算步骤。

     其他变体

       你可以更改 ABC 分类模式以适应不同特定的需要。现实世界中有两种常见的变体。

      页面筛选级别上的动态分类

       基本 ABC 分类 (动态) 模式计算结果集中每个切片的段。例如, 如果你在列中有多年, 则每年都进行分段, 如图4所示。通过这种方式, 可以跟踪多年来的单个项的表现。但是, 对于某些情况,可能希望只在页面筛选器的当前筛选中对所有列使用相同的分割。例如, 在图6中, 将每个细分市场的销售额划分为不同的区域。

           图 6   按区域划分的销售金额的ABC分类。

        如你所见, 在North America--北美,C 段中的产品性能(20879>19384)高于B 段。这是因为产品是根据Grand Total列的值与段相关联的, 该列值结果体现了ABC 分类的 70/20/10比值(代表ABC值的291781、97626、49458三个数值与其合计值的比)。一个产品的总销售额在所有的continents大洲 (Total Sales) 上可能是较低的销售,但其在一个单一的地区 (如North America北美)反而特别突出。这种类型的细分可以为市场营销和销售部门带来宝贵的洞察力。为了获得此结果, 你可以将 ALLSELECTED 添加到 CALCULATETABLE 函数的筛选器参数中:

     组内动态分类

      在某些情况下, 你首先需要对项进行分组, 然后在这些组中进行细分。假设产品属于不同的业务领域,因为产品本身彼此独立。因此希望在这些区域内进行细分,

       例如, 图7中的数据透视表显示了segmentation特定组 (color Multi) 中的分割。

                图 7 组内销售金额的分类。

       在所有组中, 所有的Multi-color都在 C 段 (请参见 " Sales Amount ABC销售量 ABC" 列中的值), 因为默认情况下, 分割适用于任何颜色的产品。但是, 你可以在所选组 (例如, 产品的Multi-color) 中进行细分, 如 "Sales Amount ABC wGroup "列中所示那样。为此, 可以使用 ALLEXCEPT代替ALL来更改此计算。这样, 就会在当前选定的组内进行分割。在下面的示例中,将group_column改成是对" Products'[Color]”列的引用即可:

     其他变体

       变化的列表是无止境的。你可以通过简单地扩展或更改 CALCULATETABLE 函数的参数来使用任何筛选器。硬编码的过滤器也是可能的。例如, 在图8中的示例中, 如果要只考虑标价大于3000的产品, 则将是对 " Products'[ListPrice] 的引用条件:

图 8 用固定过滤器对销售金额进行分类。这是此变体的相应模式:

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

推荐阅读更多精彩内容