DAX平均包括零
我的问题是,我想计算一个每日平均考虑天数为零。
让我澄清一下:
我想计算每个类别单位的平均每日价值,如下表所示:
当我总结每一天和类别的价值时,我得到:
我想在平均计算中包含零。
我使用下面的代码:
SUMMARIZE( Data, Data[Category], "Average", AVERAGEX( SUMMARIZE( Data, Data[Date], "Sum of Units", SUM(Data[Units]) ), [Sum of Units] ) )
但是问题是对于B类,它没有考虑那些0的日子。
你能指导我如何解决它?
提前致谢!
乔治
解决这个问题的一个方法是创build一个日历表,然后可以用它来计算任何分组时段的天数。 这也意味着你可以使用非标准的日历,例如4-4-5
通过创build日历表,您可以利用DAX中的FIRSTDATE
和LASTDATE
function。
我build议将日历列添加到日历表中,可以使用以下公式使用DAX创build日历表。 在计算列中使用DAX中的today函数只会在模型更新时进行评估。
在我的例子中,我在date表中创build了一个名为Past_Dates的计算列
Past_dates = IF(TODAY()> [Date],TRUE(),BLANK())
例如,如果我创build以下的措施,今天只是用于说明。
Start_date:=FIRSTDATE( Dates[Date] ) End_Date:=LASTDATE( Dates[Date]) Today:=TODAY() EndPhased:=CALCULATE( LASTDATE( Dates[Date] ), Dates[Past_dates] = TRUE())
当添加到一个空的数据透视表时,其计算结果如下。 请注意,如果您有多年的数据,则希望在数据透视表中的某个地方有一年。
拥有“过去”标志的想法是不要计算将来不会有数据的日子。 因此,例如在九月份,它只能使用11天的销售,而不是全部30天。
如下面的例子所示,开始和结束date的结果甚至以季度为基础。
因此,现在我们有一种方法来获取一个时期的开始和结束date,下一步就是将其添加到我们的计算度量中。
在下面的例子中,我们遍历每个唯一的类别名称。 在此类别中,我们正在对已售出的单位进行汇总,然后除以EndPhased和Start_Date + 1之间的天数。然后将结果按该期间有数据的类别数进行平均。
Average:=AVERAGEX ( VALUES ( Data[Category] ), CALCULATE ( DIVIDE ( SUM ( Data[Units] ), [EndPhased] - [Start_date] + 1 ) ) )
在我看来,你需要有一个底层的行中的零值(在你的初始数据表)。 现在,02/01/2017你实际上没有B的零值。 如果你添加一个值为|的行 02/01/2017 | B | 0 | 我相信你会看到它的平均数。 现在,我认为数据透视表实际上没有反映任何价值(空白),而不是零值,因此目前没有计算平均值。
我认为最好的方法是使用UNION函数添加缺less的零:
SUMMARIZE( Data, Data[Category], "Average", AVERAGEX( UNION( SUMMARIZE( Data, Data[Date], "Sum of Units", SUM(Data[Units]) ), ADDCOLUMNS( EXCEPT( ALL(Data[Date]), VALUES(Data[Date]) ), "Sum of Units", 0 ) ), [Sum of Units] ) )