首页 > 解决方案 > PowerBI:如何获取表中列的不同计数,同时分别对许多列进行分组

问题描述

我有一个包含多个日期列和一个标签列的表,如以下代码所示

Data = DATATABLE (
"Date1", DATETIME,
"Date2", DATETIME,
"Label", STRING,
{
    { "2020-01-01","2020-01-02", "A" },
    { "2020-01-01","2020-01-01", "A" },
    { "2020-01-01","2020-01-02", "B" },
    { "2020-01-01","2020-01-01", "D" },
    { "2020-01-01","2020-01-02", "E" },
    { "2020-01-02","2020-01-01", "A" },
    { "2020-01-02","2020-01-02", "B" },
    { "2020-01-02","2020-01-01", "C" }
}
)

在考虑 date1 以及考虑 date2 时,我想绘制一张每天不同标签计数的图表。这些需要在同一个图中,作为一个聚集的条形图,如下所示。这意味着我需要获取新日期列上的值。

预期的结果是这样的,

Date                | value1    | value2
---------------------------------
1/1/2020 12:00:00 AM |  4       |   3 |
1/2/2020 12:00:00 AM |  3       |   3 |

聚类条形图

当前解决方案:

  1. 我正在为每个计数创建两个不同的表,如下所示

     Date1_Count = 
     ADDCOLUMNS (
         ALL ( Data[Date1] ),
         "Count",
             CALCULATE (
                 DISTINCTCOUNT ( Data[Label] )
             )
     )
    

     Date2_Count = 
     ADDCOLUMNS (
         ALL ( Data[Date2] ),
         "Count",
             CALCULATE (
                 DISTINCTCOUNT ( Data[Label] )
             )
     )
    
  2. 然后我创建第三个带有日期的表,

     Final_Counts = CALENDAR("2020-01-01", "2020-01-04")
    
  3. 接下来,我添加三个日期之间的关系,即。Date1_Count 表、Date2_Count 表和 Final_Counts 表

  4. 最后,我使用RELATED函数组合数据如下

     value1 = RELATED(Date1_Count[Count])
     value2 = RELATED(Date2_Count[Count])
    

问题

是否有更简单的解决方案不需要为每个日期列创建一个表?当前方法不能扩展到许多日期列。

标签: powerbidax

解决方案


可以一步获得 Final_Counts 计算表,使用 ADDCOLUMNS 迭代 Data[Date1],然后将 Value1 计算为在当前迭代 Date1 上过滤的 Data 表上的 DISTINCTCOUNT。

这项工作得益于触发上下文转换的 CALCULATE 语句。

获取 Value2 需要使用当前迭代的 Date1 在 Date2 上创建一个新的过滤上下文。

首先,我们将当前的 Date1 保存在一个变量中,以便在 Date2 上的过滤器表达式中的 CALCULATE 中使用。

我们还需要 REMOVEFILTERS(Data) 来删除上下文转换设置的 Date1 上的过滤上下文。

Final_Counts =
ADDCOLUMNS(
    ALL( Data[Date1] ),
    "Value1",
        CALCULATE(
            DISTINCTCOUNT( Data[Label] )
        ),
    "Value2",
        VAR CurrentDate = Data[Date1]
        RETURN
            CALCULATE(
                DISTINCTCOUNT( Data[Label] ),
                REMOVEFILTERS( Data ),
                Data[Date2] = CurrentDate
            )
)

推荐阅读