我的情况如下:
这是在Excel 2013(32位)中开发的Powerpivot解决方案。 我有一个包含交易金额,类别和过账日期的交易表。我想要的是根据时间范围提出许多不同的计算。
因此,想法是创建一个“当天”措施作为所有其他措施的立场。
[Current day] = LASTDATE('TransactionTable'[Posting Date])
在总结事情之前,我想创建一些措施来代表每个时期的开始和结束日期(在报告中显示并简化措施),这就是我遇到麻烦的地方。
[First day of current month] = STARTOFMONTH([Current Day])
给我错误:“函数'CALCULATE'已在用作表过滤器表达式的True / False表达式中使用。这是不允许的。”
有了这个,我想在本月结束这样的事情:
[Sum of amount current month] = CALCULATE(SUM('Transactiontable'[Amount]);DATESBETWEEN('DateTable'[Date]; [First day of current month];[Current day]))
这是上个月的总数:
[First day of previous month] = DATEADD([First day of current month];-1;MONTH)
[Last day of previous month] = EOMONTH([Current day];-1)
CALCULATE(SUM('Transactiontable'[Amount]);DATESBETWEEN('DateTable'[Date]; [First day of previous month]; [Last day of previous month]))
感觉我没有以“正确”的方式使用这些措施......基本上我想创建动态度量,这将根据事务表中最新发布日期的内容来更改时间范围。这是最好的方式吗?
谢谢你们,
答案 0 :(得分:3)
你非常接近 - 让[CurrentDate]
正确的诀窍是使用ALL()
功能。这个方便的功能会覆盖您拥有的任何过滤条件。
让我们看一下使用[CurrentDate]
的{{1}}指标。如果您的数据透视表有几个月作为行标签,则会发生这种情况:
行上下文改变LASTDATE('TransactionTable'[Posting Date])
的输出。不是我们想要的。所以你需要覆盖过滤条件,就像这样。
[CurrentDate]
然后总算[CurrentDate] = CALCULATE(LASTDATE(TransactionTable[Posting Date])
,ALL(TransactionTable)
)
的金额:
[CurrentDay]
我们需要使用[SumAmountCurrentDay] = CALCULATE([SumAmount]
,FILTER(TransactionTable
,TransactionTable[Posting Date]=[CurrentDay]
)
)
,因为它是一个比FILTER()
默认可以处理的更复杂的标准。 CALCULATE
明确告诉FILTER()
需要过滤哪个表格 - 虽然对我们来说可能很明显,但不是PowerPivot。
以下是您需要的其他公式,其复杂性各不相同,但主要是重复使用您在上面列出的功能,加上CALCULATE()
和ALL()
。
<强> [FirstDayOfCurrentMonth] 强>
FILTER()
<强> [SumAmountCurrentMonth] 强>
=CALCULATE(STARTOFMONTH(TransactionTable[Posting Date])
,ALL(TransactionTable)
,FILTER(TransactionTable
,TransactionTable[Posting Date]=[CurrentDay]
)
)
<强> [FirstDayOfPrevMonth] 强>
=CALCULATE([SumAmount]
,DATESBETWEEN(DateTable[Date]
,[FirstDayOfCurrentMonth]
,[CurrentDay]
)
)
<强> [LastDayOfPrevMonth] 强>
=CALCULATE(STARTOFMONTH(TransactionTable[Posting Date])
,ALL(TransactionTable)
,FILTER(TransactionTable
,TransactionTable[Posting Date]=
CALCULATE(dateadd(LASTDATE(TransactionTable[Posting Date])
,-1
,month
)
,ALL(TransactionTable)
)
)
)
<强> SumAmountPrevMonth 强>
=CALCULATE(ENDOFMONTH(TransactionTable[Posting Date])
,ALL(TransactionTable)
,FILTER(TransactionTable
,TransactionTable[Posting Date]=
CALCULATE(dateadd(LASTDATE(TransactionTable[Posting Date])
,-1
,month
)
,ALL(TransactionTable)
)
)
)