我的问题是,我想计算每日平均值,并考虑零日。
让我澄清一下:
我想计算每个类别的单位平均每日价值,如下表所示:
当我总结每天和类别的值时,我得到:
我想在平均值计算中包含零。
我使用以下代码:
SUMMARIZE(
Data,
Data[Category],
"Average",
AVERAGEX(
SUMMARIZE(
Data,
Data[Date],
"Sum of Units",
SUM(Data[Units])
),
[Sum of Units]
)
)
但问题是,对于B类,它并没有考虑那些带0的日子。
你能指导我如何解决它吗?
提前致谢!
豪尔赫
答案 0 :(得分:1)
解决此问题的一种方法是创建一个日历表,然后可以使用该表来计算任何分组期间的天数。这也意味着您可以使用非标准日历,例如4-4-5
创建日历表后,您可以利用DAX中的FIRSTDATE
和LASTDATE
功能。
我建议在日历表中添加过去的日期列,可以使用DAX使用以下公式创建。在计算列中使用时,DAX中的today函数仅评估模型何时更新。
在我的示例中,我在日期表中创建了一个名为Past_Dates
的计算列Past_dates = IF(TODAY()> [Date],TRUE(),BLANK())
因此,例如,如果我创建以下度量,则今天仅用于说明。
Start_date:=FIRSTDATE( Dates[Date] )
End_Date:=LASTDATE( Dates[Date])
Today:=TODAY()
EndPhased:=CALCULATE( LASTDATE( Dates[Date] ), Dates[Past_dates] = TRUE())
当添加到空透视表时,评估为以下内容。 请注意,如果您有多年的数据,您可能希望将年份放在枢轴中。
拥有过去标志的想法是不要计算由于未来而不会出现任何数据的日子。因此,例如在9月,它只会使用11天的销售而不是完整的30天。
如下例所示,开始和结束日期的查找甚至按季度进行。
现在我们有办法获得一段时间的开始和结束日期,下一步是将它添加到我们的计算量度中。
在下面的示例中,我们将迭代每个唯一的类别名称。在该类别中,我们将销售的单位相加,然后除以EndPhased和Start_Date + 1之间的天数。然后将结果平均为该时段内具有数据的类别数。
Average:=AVERAGEX (
VALUES ( Data[Category] ),
CALCULATE ( DIVIDE ( SUM ( Data[Units] ), [EndPhased] - [Start_date] + 1 ) )
)
答案 1 :(得分:0)
在我看来,你需要有一个零值的基础行(在你的初始数据表中)。现在,在2017年2月2日,你实际上没有B值为零。如果添加值为|的行02/01/2017 | B | 0 |我相信你会看到它的平均值。就目前的情况而言,我认为数据透视表实际上没有反映任何值(空白)而不是零值,因此零点目前不计入平均值。
答案 2 :(得分:0)
我认为最好的方法是使用UNION函数添加缺失的零:
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]
)
)