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

焦棚子的文章目录

请点击下载附件

1、背景

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

注:

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

上效果图

2db61ba4-ff17-eb11-8da9-e4434bdf6706.png
左起依次表名:data、笛卡尔积、排列、组合

2、问题

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

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

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

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

3、上DAX

1、笛卡尔积

32b61ba4-ff17-eb11-8da9-e4434bdf6706.png
DEFINE
    VAR T1 =
        SELECTCOLUMNS ( data, "SKUA", data[SKU] )
    VAR T2 =
        SELECTCOLUMNS ( data, "SKUB", data[SKU] )
    VAR T3 =
        GENERATE ( T1, T2 )
EVALUATE
T3
ORDER BY
    [SKUA],
    [SKUB] ASC

2、排列

35b61ba4-ff17-eb11-8da9-e4434bdf6706.png
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] )

EVALUATE
T4
ORDER BY
    [SKUA],
    [SKUB] ASC

4、组合

3ab61ba4-ff17-eb11-8da9-e4434bdf6706.png
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的过程。

by 焦棚子

焦棚子的文章目录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值