继续 CRM 的专题,本次解决一个问题:如题。
同时购买某几个产品的客户有多少。
业务意义
在某月的活动中,可能会硬推某些产品组合,或当月主打产品,并为此投入资源。
所以,业务人员希望看到,选择某些 SKU 后,称这个集合为:重点产品集合。希望系统可以动态计算出某段时间内,客户购买重点产品集合内所有商品(可以超过重点集合范畴),这样的客户有多少。
仔细分析过后,会发现该问题的解法并不简单,那下面给出简单解法。
效果
DAX 实现
新建一个度量值:
代码语言:javascript复制Customer.Count.Product =
// 购买过某几类(个)商品的客户数
VAR _product_list = VALUES( 'Product'[Subcategory] )
VAR _user_product_set =
GROUPBY(
SUMMARIZE( 'Order' , Customer[CustomerID] , 'Product'[Subcategory] ) ,
Customer[CustomerID] ,
"Value" ,
SUMX( CURRENTGROUP( ) , IF( [Subcategory] IN _product_list , 1 ) )
)
RETURN COUNTROWS( FILTER( _user_product_set , [Value] >= COUNTROWS( _product_list ) ) )
完成。
这里用了 3 个重要 DAX 技巧:
1、'Order'
在此通过扩展表特性伸展到 Customer[CustomerID]
和'Product'[Subcategory]
。
2、SUMMARIZE 提取仅仅需要的列,刚刚好。
3、GROUPBY 基于分组做再次分组。(该技巧在此前文章彻底刨析过,此处不再说明。)
在完全精通上述三个技巧后,设计了这样的计算模式,上图还给出了检验效果。
总结
不难分析,这个问题本身有一定复杂度,而且还涉及到性能问题,但本实现几乎兼顾了这些方面。大家可以自行尝试。