如果列表中的所有值都不存在,请创建缺少值的行

时间:2019-03-28 13:00:47

标签: powerbi powerquery

这需要一些信息。

我有一个用户ID列表。我还具有20个可以与用户关联的模块,每个模块具有可以计数的会话数。

我目前有一个这样的表:

UserID  Module  Count  
A       1       3  
A       2       3  
B       1       2  
B       3       2  
C       1       3  
C       2       3  
C       3       3  

我要实现的目标如下:

对于每个用户ID,我需要考虑所有20个模块,检查每个模块是否有一行。现在设置表的方式是,当用户在模块上没有任何东西时,我不会在该模块上没有涉及到的行。如果缺少一行,则应为缺少的模块创建一行,并将Count设置为0。

因此,假设上表仅考虑3个模块,则需要将其转换为:

UserID  Module  Count  
A       1       3  
A       2       3  
A       3       0  
B       1       2  
B       2       0  
B       3       2  
C       1       3  
C       2       3  
C       3       3  

我该怎么做?

我通过将每个模块的另一张表分组来获得第一行,其中的计数是另一张表上的行数。但是,这不能解决缺少的模块,我仍然需要将其报告为0。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

NewTable = 
VAR T1 = SUMMARIZECOLUMNS ( Table1[UserID] )
VAR T2 = SUMMARIZECOLUMNS ( Table1[Module] )
RETURN
    ADDCOLUMNS ( 
        CROSSJOIN ( T1, T2 ),
        "Count",
        LOOKUPVALUE ( 
            Table1[Count], 
            Table1[UserID], [UserID],
            Table1[Module], [Module]
        ) + 0
    )

有关有效的PBIX文件示例,请参见https://pwrbi.com/so_55398321/