为了账号安全,请及时绑定邮箱和手机立即绑定

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


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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消