Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerBI:如何获得表中一列的不同计数,同时分别对多个列进行分组_Powerbi_Dax - Fatal编程技术网

PowerBI:如何获得表中一列的不同计数,同时分别对多个列进行分组

PowerBI:如何获得表中一列的不同计数,同时分别对多个列进行分组,powerbi,dax,Powerbi,Dax,我有一个包含多个日期列和一个标签列的表,如下代码所示 Data = DATATABLE ( "Date1", DATETIME, "Date2", DATETIME, "Label", STRING, { { "2020-01-01","2020-01-02", "A" }, { "2020-01-01","2020-01-01&q

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

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 |

当前解决方案:
  • 我正在为每个计数创建两个不同的表,如下所示

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

  • 然后我创建了第三个表,其中包含日期

     Final_Counts = CALENDAR("2020-01-01", "2020-01-04")
    
  • 接下来,我添加三个日期之间的关系,即。Date1\u计数表、Date2\u计数表和Final\u计数表

  • 最后,我使用
    RELATED
    函数组合数据,如下所示

     Date1_Count = 
     ADDCOLUMNS (
         ALL ( Data[Date1] ),
         "Count",
             CALCULATE (
                 DISTINCTCOUNT ( Data[Label] )
             )
     )
    
     value1 = RELATED(Date1_Count[Count])
     value2 = RELATED(Date2_Count[Count])
    
  • 问题:
    是否有一种更简单的解决方案不需要为每个日期列创建一个表?当前方法无法扩展到多个日期列。

    可以一步获得最终的_计数计算表,使用ADDCOLUMNS迭代数据[Date1],然后计算Value1作为在当前迭代日期1上筛选的数据表的DISTINCTCOUNT

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

    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
                )
    )
    
    获取Value2需要使用当前迭代的Date1在Date2上创建新的筛选器上下文

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

    我们还需要REMOVEFILTERS(数据)来删除上下文转换设置的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
                )
    )
    

    假设只有少数几个日期列,那么只需要一个日期维度表和每个日期列一个度量值

    定义要在x轴上使用的日期表(与其他表没有关系):

    然后定义将各个日期列与日期表相匹配的度量:

    value1 =
    CALCULATE (
        DISTINCTCOUNT ( Data[Label] ),
        Data[Date1] IN VALUES ( DimDate[Date] )
    )
    


    如果您有多个
    DateN
    列,那么最好是在取消所有这些列的位置重塑数据

    对于你所拥有的两个人来说,数据看起来就像

    在这种情况下,您使用
    Unpivot[Column]
    作为图例,只需要一个度量:

    value = 
    CALCULATE (
        DISTINCTCOUNT ( Unpivot[Label] ),
        Unpivot[Date] IN VALUES ( DimDate[Date] )
    )
    
    这会产生类似的结果: