继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

焦棚子
关注TA
已关注
手记 47
粉丝 3
获赞 2

1、背景

昨天在看论坛帖子时候,看到一个关于SKU组合的问题,有很多M大佬都给出了处理方案,于是想用dax也写一个。

注:

原贴有dax的写法,这里主要说明下GENERATE之笛卡尔积、排列、组合处理过程。

上效果图

108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

左起依次表名:data、笛卡尔积、排列、组合

2、问题

1、大前提是使我们要使用data的数据做购物篮分析分组;

2、在问题1已的基础上,笛卡尔积表(5*5)存在类似黄色区域问题,SKU两两相同,这是不需要看到的;

3、在问题1的基础上,排列表(见图中公式)存在类似绿色区域的问题,SKU1对SKU2和SKU2对SKU1其实是一样的,这也是我们不需要看到的;

4、基于以上,我们通过笛卡尔积-排列-组合这样 处理下来得到我们要的购物篮分组。

3、上DAX

1、笛卡尔积

108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

2、排列

108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

4、组合

108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

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的过程。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP