3

我的情况如下:

这是在 Excel 2013(32 位)中开发的 Powerpivot 解决方案。我有一个交易表,其中包含金额、类别和过帐日期的交易。我想做的是根据时间范围提出许多不同的计算。

  • 当天进口金额的总和(所有可用的最新过帐日期的交易)。
  • 金额总和本月至今(最近一笔交易的当月)
  • 上月同期金额总和(本月至今减去一个月)
  • 上月金额总和(上月总金额)

因此,想法是创建一个“当前日期”度量作为所有其他度量的立场。

[Current day] = LASTDATE('TransactionTable'[Posting Date])

在总结事情之前,我想创建代表每个时期的开始和结束日期的度量(以显示在报告中并简化度量),这就是我遇到麻烦的地方。

[First day of current month] = STARTOFMONTH([Current Day])

给我错误:“函数'CALCULATE'已用于用作表过滤器表达式的真/假表达式中。这是不允许的。”

有了这个,我想在本月得到这样的结果:

[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]))

感觉就像我没有以“正确”的方式使用这些措施......基本上我想创建动态措施,根据交易表中的最新发布日期来改变时间范围。这是要走的路吗?

多谢你们,

4

1 回答 1

3

首先你需要使用 ALL()

你非常接近 -[CurrentDate]正确的诀窍是使用该ALL()功能。这个方便的功能会覆盖您拥有的任何过滤条件。

因此,让我们看看您[CurrentDate]使用LASTDATE('TransactionTable'[Posting Date]). 如果您的数据透视表有月份作为行标签,则会发生这种情况:

在此处输入图像描述

行上下文改变 的输出[CurrentDate]。不是我们想要的。所以你需要像这样覆盖过滤条件。

[CurrentDate] = CALCULATE(LASTDATE(TransactionTable[Posting Date])
                          ,ALL(TransactionTable)
                          )

然后你需要 FILTER()

[CurrentDay]然后总结我们这样做的金额:

[SumAmountCurrentDay] = CALCULATE([SumAmount]
                       ,FILTER(TransactionTable
                               ,TransactionTable[Posting Date]=[CurrentDay]
                               )
                        )

我们需要使用,因为它是一个比默认情况下可以处理FILTER()的更复杂的标准。明确地告诉它需要过滤哪个表——尽管这对我们来说可能很明显,但对 PowerPivot 来说却不是。CALCULATEFILTER()CALCULATE()

以下是您需要的其余公式,它们的复杂程度各不相同,但主要是重用您上面列出的函数,加上ALL()FILTER()

[当前月份的第一天]

=CALCULATE(STARTOFMONTH(TransactionTable[Posting Date])
           ,ALL(TransactionTable)
           ,FILTER(TransactionTable
                   ,TransactionTable[Posting Date]=[CurrentDay]
                   )
           )

[SumAmountCurrentMonth]

=CALCULATE([SumAmount]
           ,DATESBETWEEN(DateTable[Date]
                         ,[FirstDayOfCurrentMonth]
                         ,[CurrentDay]
                         )
           )

[FirstDayOfPrevMonth]

=CALCULATE(STARTOFMONTH(TransactionTable[Posting Date])
           ,ALL(TransactionTable)
           ,FILTER(TransactionTable
                   ,TransactionTable[Posting Date]=
                         CALCULATE(dateadd(LASTDATE(TransactionTable[Posting Date])
                                           ,-1
                                           ,month
                                           )
                                   ,ALL(TransactionTable)
                                   )
                   )
            )

[LastDayOfPrevMonth]

=CALCULATE(ENDOFMONTH(TransactionTable[Posting Date])
          ,ALL(TransactionTable)
          ,FILTER(TransactionTable
                  ,TransactionTable[Posting Date]=
                        CALCULATE(dateadd(LASTDATE(TransactionTable[Posting Date])
                                          ,-1
                                          ,month
                                          )
                                   ,ALL(TransactionTable)
                                   )
                  )
            )

SumAmountPrevMonth

=CALCULATE([SumAmount]
           ,DATESBETWEEN(DateTable[Date]
                         ,[FirstDayOfPrevMonth]
                         ,[LastDayOfPrevMonth]
                          )
            )
于 2014-10-31T18:42:04.463 回答