1、背景
昨天在看论坛帖子时候,看到一个关于SKU组合的问题,有很多M大佬都给出了处理方案,于是想用dax也写一个。
注:
原贴有dax的写法,这里主要说明下GENERATE之笛卡尔积、排列、组合处理过程。
上效果图
左起依次表名:data、笛卡尔积、排列、组合
2、问题
1、大前提是使我们要使用data的数据做购物篮分析分组;
2、在问题1已的基础上,笛卡尔积表(5*5)存在类似黄色区域问题,SKU两两相同,这是不需要看到的;
3、在问题1的基础上,排列表(见图中公式)存在类似绿色区域的问题,SKU1对SKU2和SKU2对SKU1其实是一样的,这也是我们不需要看到的;
4、基于以上,我们通过笛卡尔积-排列-组合这样 处理下来得到我们要的购物篮分组。
3、上DAX
1、笛卡尔积
2、排列
4、组合
DEFINE
    VAR T1 =
        SELECTCOLUMNS ( data, "SKUA", data[SKU] )
    VAR T2 =
        SELECTCOLUMNS ( data, "SKUB", data[SKU] )
    VAR T3 =
        GENERATE ( T1, T2 )
    VAR T4 =
        FILTER ( T3, [SKUA] <> [SKUB] )
    VAR T5 =
        DISTINCT (
            SELECTCOLUMNS (
                ADDCOLUMNS (
                    T4,
                    "AB", IF ( [SKUA] < [SKUB], [SKUA] & [SKUB], [SKUB] & [SKUA] )
                ),
                "AB", [AB]
            )
        )
    VAR T6 =
        FILTER ( ADDCOLUMNS ( T4, "AB", [SKUA] & [SKUB] ), [AB] IN T5 )
    VAR T7 =
        SUMMARIZE ( T6, [SKUA], [SKUB] )
EVALUATE
T7
ORDER BY
    [SKUA],
    [SKUB] ASC
4、总结
1、以上问题基于购物篮分析产生,所以需要组合结果;
2、在实际需求中肯定这三种都是有需求的;
3、处理GENERATE,两列名称不能相同,于是有了上述的GENERATE ( T1, T2 ),而不是GENERATE ( T1, T1);
4、处理从排列到组合的思路主要是利用两两组合排序后去重即可,分步体会从T1-T7的过程。
点击查看更多内容
					为 TA 点赞
										
				 评论
				共同学习,写下你的评论
评论加载中...
作者其他优质文章
					正在加载中
				
			感谢您的支持,我会继续努力的~
		扫码打赏,你说多少就多少
		赞赏金额会直接到老师账户
		支付方式
		打开微信扫一扫,即可进行扫码打赏哦
	 
                 
            



 
			 
					 
					