Excel DAX平均值包括零

Excel DAX平均值包括零,excel,powerpivot,calculated-columns,dax,Excel,Powerpivot,Calculated Columns,Dax,我的问题是,我想计算一个每日平均值,考虑到带零的天数 让我澄清一下: 我想用下表计算每个类别单位的平均日价值: 当我将每天和类别的值相加时,我得到: 我想在平均数计算中加上零 我使用以下代码: SUMMARIZE( Data, Data[Category], "Average", AVERAGEX( SUMMARIZE( Data, Data[Date], "Sum of

我的问题是,我想计算一个每日平均值,考虑到带零的天数

让我澄清一下:

我想用下表计算每个类别单位的平均日价值:

当我将每天和类别的值相加时,我得到:

我想在平均数计算中加上零

我使用以下代码:

SUMMARIZE(
    Data,
    Data[Category],
    "Average",
    AVERAGEX(
        SUMMARIZE(
            Data,
            Data[Date],
            "Sum of Units",
            SUM(Data[Units])
        ),
        [Sum of Units]
    )
)
但问题是,对于B类,它没有考虑那些0的日子

你能告诉我怎么解决吗

提前谢谢


Jorge

在我看来,您需要一个包含零值的底层行(在初始数据表中)。现在,在2017年1月2日,B的实际值不是零。如果您添加一行值为| 02/01/2017 | B | 0 |,我相信您会看到平均值说明了这一点。就目前的情况而言,我相信透视表实际上没有反映任何值(空白)而不是零值,因此当前不将零值计算为平均值。

解决此问题的一种方法是创建一个日历表,然后可以使用它来计算任何分组期间的天数。这也意味着您可以使用非标准日历,例如类似4-4-5的日历

创建日历表后,您可以利用DAX中的
FIRSTDATE
LASTDATE
函数

我建议将“过去日期”列添加到日历表中,可以使用DAX使用以下公式创建日历表。DAX中的today函数在计算列中使用时,将仅在模型更新时进行计算

在我的示例中,我在date表中创建了一个计算列,名为Past_Dates

过去日期=如果(今天()>[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 ) )
)

我认为最好的方法是使用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]
    )
)