美文网首页Power BI干货PowerBI专栏
PowerBI业务分析,如何找出任意商品组合的共同客户?

PowerBI业务分析,如何找出任意商品组合的共同客户?

作者: PowerBI星球 | 来源:发表于2020-10-10 21:08 被阅读0次

    之前的上章介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析。

    之前的思路是计算出两个产品的共同客户数,那么能不能选择三个产品呢,当然是可以的,利用上篇文章的思路,把三种产品的客户找出来,然后求三个表的交集就可以了。

    但是这种方法是不是显得太笨拙了?如果只是两三个产品的共同客户数,勉强还可以使用,但如果是十几个甚至几十个产品,难道要先计算出几十个产品的客户表,再一个个求交集?

    DAX当然不会这么笨,本文就给你看一个优雅的解决方案。

    以关联分析中的示例数据为例,当时是利用一个切片和一个表格上下文的方式,来计算两种产品的共同客户数,

    下面这个度量值,可以返回任意产品组合的客户数量,

    共同客户数量 =

    VAR t1 =

     GENERATE(

            VALUES('订单表'[客户ID]),

            EXCEPT(

               VALUES('产品表'[产品名称]),

               CALCULATETABLE(VALUES('产品表'[产品名称]))))

    VAR t2 = SUMMARIZE(t1,'订单表'[客户ID])

    VAR t3 = EXCEPT(VALUES('订单表'[客户ID]),t2)

    RETURN COUNTROWS(t3)

    来看看它的效果,

    任意选择多个产品,都可以自动计算出共同客户的数量,这种方式是不是比之前的要优雅的多呢?

    再回头看这个度量值的代码,并不长,比上一篇文章中的代码都要短一些,但其理解难度却比那些要高出几个等级。

    其中最重要的一个函数就是GENERATE,它的参数很简单,就是两个表,但是封装了强大的计算逻辑。它的这两个参数表,并不是简单的单独计算出来以后再合并到一起。事实上它的第一个参数表的每一行,为第二个表的表达式提供行上下文,在每一行上分别计算第二个表的表达式。

    并且这个度量值中,GENERATE的第二个参数的表表达式,其中又使用了VALUES函数和CALCULATETABLE函数,利用它们对行上下文不同的计算逻辑,来最终返回未购买全部所选商品的客户列表。

    如果把GENERATE函数彻底弄懂了,你对DAX的掌握,对上下文的理解都可以提升一大步。

    这里你如果实在看不懂,也可以先直接用着,回头再慢慢品味。

    我整体上再简单解释一下这个度量值,

    VAR定义的第一个表t1是最重要的一环,该表返回的是只有两列的表,客户ID和产品名称,每一行组合全是订单表不存在的组合(把t1逻辑搞懂了,你也就理解了这个度量值)

    t2将t1表的客户ID提取出来,含义是至少未购买过其中一个所选商品的客户列表;

    t3利用EXCEPT函数,剔除t2的客户,就是所选商品的共同客户列表;

    最后利用COUNTROWS函数返回共同客户的数量。

    是不是仍然很绕呢,不要指望几句话就能帮你理解这个代码,你需要动手去练习,观察它的输出结果,思考上下文的逻辑。

    看起来很长的DAX代码并不一定就很难理解,而短的也不一定就很简单。实现同样的业务逻辑,把DAX写的很长并不算很厉害,而在保证性能的前提下,知道如何把代码写短,更需要深厚的内功。

    -精彩推荐-

    PowerBI数据分析和可视化实战案例

    PowerBI时间相关的度量值,都在这里了

    PDF转Excel,这个秘籍推荐给你

    采悟 from PowerBI星球

    相关文章

      网友评论

        本文标题:PowerBI业务分析,如何找出任意商品组合的共同客户?

        本文链接:https://www.haomeiwen.com/subject/pkojpktx.html