期末平均值-列与行总计

时间:2019-01-03 15:24:24

标签: excel pivot-table dax

我有一个要求,要计算截至任何给定时间点结束时的平均消费协议的平均值。在该期间的最后一天在我的Agreement Data表中没有条目的地方,它们应该显示为空白。平均值应为该时间点所有协议的平均值。标注了所需输出的电流输出图示。在下面的示例中,协议1和2分别于2015年和2016年12月31日之前终止。

enter image description here

所需的输出:

enter image description here

下面是DAX,我认为行总计显示的是LASTNONBLANK()值,但是对于协议1和协议2,理想情况下,它们将以空白显示为空白,因为它们在时不处于活动状态2016年12月31日:

Average Consumption:=
CALCULATE(
    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
    ,LASTNONBLANK('Calendar'[ActualDate]
            ,CALCULATE(
                AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
                )
            )
    )

任何想法都深表感谢。在两个表中的Agreement Data列上都有从CalendarDateKey的关系。

我还要补充一点,即年份也是顶部顶部的年/月/日层次结构的一部分,因此,如果我向下钻取至一天的水平,我希望这一原则能够奏效。 / em>

2 个答案:

答案 0 :(得分:3)

我认为您可以使其简单得多。尝试这样的事情:

Average Consumption :=
IF( LASTDATE( 'Agreement Data'[DateKey] ) < LASTDATE( 'Calendar'[DateKey] ),
    BLANK(),
    AVERAGE( 'Agreement Data'[ConsumptionPercentage] )
)

如果您的列是日历表的层次结构,则您钻取到的任何时间段的最后日期应该是LASTDATE('Calendar'[DateKey]),而该时间段的最后交易日期是LASTDATE('Agreement Data'[DateKey])。如果这些不匹配,则将其空白,否则取平均值。


编辑:针对您的评论...

如果DateKey不是日期格式,则您可以使用MAX代替LASTDATE,或者使用日期格式的列。

答案 1 :(得分:0)

为后代,我的最终代码如下。仍然需要LASTNONBLANK()来仅在任何分段时间的最后一天运行平均值,但这是我最初的提议和标记答案之间的混合。假设您的日历表仅能达到您需要的程度:

Average Consumption:=
IF(MAX('Agreement Data'[DateKey]) < MAX('Calendar'[DateKey]),
BLANK(),
CALCULATE(
    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
    ,LASTNONBLANK('Calendar'[ActualDate]
                ,CALCULATE(
                    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
                        )
                    )
    )
)