我有一个要求,要计算截至任何给定时间点结束时的平均消费协议的平均值。在该期间的最后一天在我的Agreement Data
表中没有条目的地方,它们应该显示为空白。平均值应为该时间点所有协议的平均值。标注了所需输出的电流输出图示。在下面的示例中,协议1和2分别于2015年和2016年12月31日之前终止。
所需的输出:
下面是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
列上都有从Calendar
到DateKey
的关系。
我还要补充一点,即年份也是顶部顶部的年/月/日层次结构的一部分,因此,如果我向下钻取至一天的水平,我希望这一原则能够奏效。 / em>
答案 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])
)
)
)
)