美文网首页
Power Query和Power Pivot中如何实现卡迪尔积

Power Query和Power Pivot中如何实现卡迪尔积

作者: Data_Skill | 来源:发表于2019-11-27 22:27 被阅读0次

    (一) 什么叫卡迪尔积?

    笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。简单来说就是2组数据互相交集。

    (二) 示例

    例如一组字符a,b,c和另外一组数字4,5,6要求实现卡迪尔积组合。

    imageimage

    两组数据任意的值都会和另外一组值进行相交组合。

    (三) Power Pivot中的实现方法。

    在Power Pivot中会有一个自带实现卡迪尔积方法的函数Generate

    imageimage

    通过链接回表的方式就可以实现数据的加载。

    (四) Power Query中实现的方式。

    同样的在Power Query里面也有一个和Power Pivot中的Generate函数一样功能的函数List.Generate。

    let
    源 = Table.FromColumns({{"a".."c"},{1..3}}),
    数据=[A=源[Column1],B=源[Column2]],
    数量 = [A数量=List.Count(数据[A]), B数量 = List.Count(数据[B])],
    第1列结果 = List.Generate( () => 0, 
                              each _ < 数量[A数量] * 数量[B数量], 
                              each _ + 1, 
                              each 数据[A]{ Number.IntegerDivide(_, 数量[B数量]) }
                              ),
    第2列结果 = List.Repeat( 数据[B], 数量[A数量]),
    结果=Table.FromColumns({第1列结果,第2列结果})
    in
    结果
    

    解释:
    我们主要讲解第1列的结果公式

    • 因为是要生成卡迪尔积,所以数据总量应该是2组数据的相乘。所以在第2参数代表循环结束的时候使用的是相乘的数据作为循环次数条件;
    • 第3参数是代表每次循环后,记录循环次数,之前的循环次数+1;
    • 第4参数相当于A列根据B列的数量生成重复值进行排列。

    (五) 使用数据透视表

    我们可以直接使用数据透视表,在2个无关联的表中直接使用即可生成。

    imageimage

    当然这里你还需要重复报表布局中选中重复所有项目标签

    imageimage

    相关文章

      网友评论

          本文标题:Power Query和Power Pivot中如何实现卡迪尔积

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