第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 用固定过滤器对销售金额进行分类。这是此变体的相应模式: