(本文采用批量翻译,所以其中会有少数翻译不准确之处,但是个人认为不影响阅读理解。原文链接)
篮子分析模型使得能够分析与特定实体相关的交易之间的共现关系,例如以相同顺序购买的产品,或者由不同购买的同一客户。
基本模型示例
假设您有一个Sales表,其中包含订单中每行详细信息的一行。 SalesOrderNumber列标识属于同一订单的行,如图1所示。
图1 在Sales表中,具有相同SalesOrderNumber值的行是同一订单的详细信息。
OrderDateKey和ProductCode列分别引用Date和Product表。 Product表包含作为分析目标的属性,例如产品名称或类别。 您可以创建名为Filter Product的Product表的副本,该表包含相同的数据,并且在所有表名和列名之前都有前缀“Filter”。 Sales表和Filter Product表之间的关系处于非活动状态,如图2所示。
图2 Product表有一个副本Filter Product,它与Sales表具有非活动关系。
过滤器产品表使用户能够将第二个产品(或相关属性)指定为数据透视表中的过滤器,以用于仅考虑包含两个产品的订单的度量。 例如,图3中的数据透视表显示了每个自行车配件的订单数量,并且在同一行中显示了该配件的订单数量以及过滤器产品切片机过滤的产品(在本例中为Patch Kit/8 Patches)。
图3 “两种产品的订单”度量显示的订单数量包括行中列出的产品(来自“产品”表)和筛选产品切片器中选择的产品。
Orders度量是SalesOrderNumber列的简单不同计数。
[Orders] := DISTINCTCOUNT ( Sales[SalesOrderNumber] )
具有两种产品的订单度量实施类似的计算,应用仅考虑包含在过滤产品表中选择的产品的订单的过滤器:
[Orders with Both Products] :=
CALCULATE (
DISTINCTCOUNT ( Sales[SalesOrderNumber] ) ,
CALCULATETABLE (
SUMMARIZE ( Sales, Sales[SalesOrderNumber] ),
ALL ( Product ) ,
USERELATIONSHIP ( Sales[ProductCode], 'Filter Product'[Filter ProductCode] )
)
)
这是一种通用的篮子分析方法,对于许多不同的计算非常有用.
用例
如果要分析同一表中由位于同一表或查找表中的属性连接的不同行之间的关系,则可以在方案中使用Basket Analysis(购物篮)模型。 以下是一些有趣的用例列表。
交叉销售
通过购物篮分析,您可以确定向客户提供哪些产品,增加收入并改善与客户的关系。 例如,您可以分析其他客户一起购买的产品,然后向您的客户提供具有类似购买历史记录的其他人购买的产品。
向上销售
在定义订单期间,您可以提供升级,附加或更昂贵的项目。 购物篮分析可帮助您根据订单历史记录确定哪种产品组合更成功。
打折促销
您可以使用购买历史记录来定义组合或折扣某些产品的特殊促销。 购物篮分析可帮助您确定成功的产品组合,并评估促销活动的成功率,鼓励客户以相同的顺序购买更多产品。
完整模型
创建一个如图4所示的数据模型.Filter Product表是Product表的副本,每个名称(表,列,层次结构和层次结构级别)都有前缀“Filter”。 Sales和Filter Product表之间的关系处于非活动状态。 在进行购物篮分析时,用户将使用“过滤产品”表将第二个过滤器应用于产品属性。
图4 数据模型在Sales和Filter Product表之间具有非活动关系。
图5中的数据透视表显示了具有不同条件的订单数量,具体取决于行和切片器中产品的选择。
图5 包含在行和切片器中选择的一个或两个产品的订单的度量。
数据透视表行中的产品层次结构过滤所有订单,订单度量显示至少包含一个所选产品的订单数量(这是包含所选类别/子类别中至少一个产品的订单数量在粗体行中)。
[Orders] := DISTINCTCOUNT ( Sales[SalesOrderNumber] )
数据透视表周围的切片器显示过滤器产品表(过滤器类别,过滤器子类别和过滤器产品)中的属性选择。 在此示例中,仅选择了一个产品(Patch Kit / 8 Patches)。 “包含两个产品的订单”度量显示有多少订单包含在数据透视表行中选择的至少一个产品以及在过滤器产品切片器中选择的过滤产品(补丁工具包/ 8个补丁)。
[Orders with Both Products] :=
CALCULATE (
DISTINCTCOUNT ( Sales[SalesOrderNumber] ) ,
CALCULATETABLE (
SUMMARIZE ( Sales, Sales[SalesOrderNumber] ),
ALL ( Product ) ,
USERELATIONSHIP ( Sales[ProductCode], 'Filter Product'[Filter ProductCode] )
)
)
具有两种产品的订单%度量显示具有两种产品的订单的百分比; 它是通过将订单与两种产品的度量与订单度量进行比较而获得的。 但是,如果在Product和Filter Product表中选择的产品相同,则隐藏返回BLANK的结果,因为在这些情况下看100%是没有用的。
[SameProductSelection] :=
IF (
HASONEVALUE ( Product[ProductCode] )
&& HASONEVALUE ( 'Filter Product' [Filter ProductCode] ),
IF (
VALUES ( Product[ProductCode] )
= VALUES ( 'Filter Product' [Filter ProductCode] ),
TRUE
)
)
[Orders with Both Products %] :=
IF (
NOT ( [SameProductSelection] ) ,
DIVIDE ( [Orders with Both Products], [Orders] )
)
没有两种产品的订单度量只是订单和订单与两种产品度量之间的差异。 此数字表示包含在数据透视表中选择的产品的订单数,但不包括在筛选产品切片器中选择的产品。
[Orders without Both Products] :=
[Orders] - [Orders with Both Products]
您还可以创建分析每个客户在不同订单中进行的购买的度量。 图6中的数据透视表显示了具有不同条件的客户数量,具体取决于行和切片器中产品的选择。
图6 购买在行和切片机中选择的一种或两种产品的客户的度量。
数据透视表中的选择与用于计算订单的选项相同。 度量也类似 - 您只需使用Sales表上的CustomerKey列替换公式中的非重复计数。
[Customers] := DISTINCTCOUNT ( Sales[CustomerKey] )
[Customers with Both Products] :=
CALCULATE (
DISTINCTCOUNT ( Sales[CustomerKey] ) ,
CALCULATETABLE (
SUMMARIZE ( Sales, Sales[CustomerKey] ),
ALL ( Product ) ,
USERELATIONSHIP ( Sales[ProductCode], 'Filter Product'[Filter ProductCode] )
)
)
[Customers with Both Products %] :=
IF (
NOT ( [SameProductSelection] ) ,
DIVIDE ( [Customers with Both Products], [Customers] )
)
要计算或列出从未购买过您想要过滤的产品的客户数量,有一种更有效的技术。 使用“无过滤产品的客户”度量,如下所述。
[Customers with No Filter Products] :=
COUNTROWS (
FILTER (
CALCULATETABLE ( Customer, Sales ) ,
ISEMPTY (
CALCULATETABLE (
Sales,
ALL ( Product ),
USERELATIONSHIP ( Sales[ProductCode], 'Filter Product'[Filter ProductCode] )
)
)
)
)
您可以使用FILTER语句的结果作为CALCULATE语句的过滤器参数 - 例如,评估过滤的客户选择的销售额。 如果您的DAX版本中没有ISEMPTY功能,请使用以下实现:
[Customers with No Filter Products Classic] :=
COUNTROWS (
FILTER (
CALCULATETABLE ( Customer, Sales ) ,
CALCULATE (
COUNTROWS ( Sales ),
ALL ( Product ),
USERELATIONSHIP ( Sales[ProductCode], 'Filter Product'[Filter ProductCode] )
) = 0
)
)
|
重要 说明ISEMPTY功能仅在Microsoft SQL Server 2012 Service Pack 1累积更新4或更高版本中可用。 因此,ISEMPTY仅在Power Pivot for Excel 2010 build 11.00.3368(或更高版本)和SQL Server Analysis Services 2012 build 11.00.3368(或更高版本)中可用。 在撰写本文时,ISEMPTY在任何版本的Excel 2013中都不可用,其更新取决于Microsoft Office发布周期,而不取决于SQL Server Service Pack。
更多模型示例
在本节中,您将看到一些篮子分析模型的示例。
产品更可能与另一种产品一起购买
如果您想确定哪些产品最有可能与其他产品一起购买,您可以使用数据透视表,按照您在 [完整模型中] 看到的百分比度量之一对产品进行分类 。 例如,您可以将筛选器用于筛选器产品,并将产品名称放在数据透视表行中。 您可以使用具有两种产品的订单%度量或具有两种产品的客户%度量来按行对产品进行排序,以便数据透视表中的第一行显示最有可能与产品中选择的产品一起销售的产品。切片机。 图7中显示的示例按客户对产品进行排序,以两种产品%递减测量,以便您了解哪些产品最常销售给购买过滤产品切片机中所选产品的客户。
图7 最常销售给购买Mountain Tire Tube产品的客户的产品。
购买产品A而非产品B的客户
一旦您知道某些产品很有可能被一起购买,您就可以获得购买产品A但从未购买产品B的客户列表。您使用两个切片机,产品和过滤产品,在每个产品中选择一个或多个产品。 数据透视表的行名称中包含客户名称。 对于购买了产品切片机中选择的至少一种产品但从未购买过滤产品切片机中选择的任何产品的客户,无过滤产品测量的客户应返回1。
图8所示的示例显示了购买HL Mountain Tire或ML Mountain Tire但从未购买过Mountain Tire Tube的客户列表。 您可能想联系这些客户并提供Mountain Tire Tube。
图8 购买一种产品(HL Mountain Tire或ML Mountain Tire)而非过滤产品表(Mountain Tire Tube)中的项目的客户。







