DAX:每天的平均不同值

3

我有一些分类数据分布在多个日期上。同一类别可能在同一日期上出现多次。如何计算每天不同分类的平均数量?

数据集:

Date,Category
11.10.2018,A
11.10.2018,B
11.10.2018,C
12.10.2018,A
12.10.2018,A
12.10.2018,A
13.10.2018,B
13.10.2018,B

数据视图中的表格:

enter image description here

表格可视化:

enter image description here

我的尝试:

我可以使用dist = CALCULATE(DISTINCTCOUNT(Table1[Category]);DISTINCT(Table1[Date]))作为一种度量来获取每天的不同值。

enter image description here

所以我想得到的是上表中dist的平均值,即1.67。但是怎么做呢?我已经尝试了不同的组合,包括AVERAGEAVAREGEXVALUESCALCULATE,但都没有成功。而且我尝试的越多,就越相信DAX是无用的(尽管我深知它不可能是这样)。谢谢您的任何建议!
1个回答

3
使用SUMMARIZE计算每个日期的不同计数,然后可以使用AVERAGEX迭代每个日期值:
dist:= 
IF ( 
    HASONEFILTER ( Table1[Date] ), 
    DISTINCTCOUNT ( Table1[Category] ), 
    AVERAGEX ( 
        SUMMARIZE ( 
            Table1, 
            Table1[Date],
            "Daily Average", DISTINCTCOUNT ( Table1[Category] )
        ),
        [Daily Average]
    )
)

编辑:您实际上不需要IF函数——它似乎只需使用以下方式就能执行得很好:

dist:= 
AVERAGEX ( 
    SUMMARIZE ( 
        Table1, 
        Table1[Date],
        "Daily Average", DISTINCTCOUNT ( Table1[Category] )
    ),
    [Daily Average]
)

谢谢!运行得很好!这就是为什么DAX让我有点害怕。一个看似简单的任务很快就变成了一堆嵌套函数的混乱。你知道在哪里可以找到一些方法,使它不那么复杂吗?我以为CALCULATE(我的一些同事总是使用)是正确的方法,但在这种情况下我不这么认为。 - vestland
1
其实并不是很复杂!像嵌套的DAX一样,从内向外阅读。您需要为评估上下文中的每个日期执行不同的计数,因此我们首先使用SUMMARIZE创建一个日期/不同计数的汇总表(您第一个“表可视化”图像的虚拟版本)。然后,我们使用AVERAGEX(迭代器)函数来计算此虚拟表中所有日期的不同计数的平均值。最后,IF语句只是用于在仅评估一个日期时执行简单的DISTINCTCOUNT - Olly
谢谢提供详细信息!如果您不介意的话,我还有一个问题。您是在Power BI中编写表达式,还是在其他编辑器中编写?比如DAXEditor或者DAX Studio?我正在寻找一种方法,可以更轻松地展示每个计算步骤。如果可能的话... - vestland
1
我通常只使用Notepad ++,并且有良好的缩进/换行纪律!! - Olly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接