在Powerpivot中计算时间段时测量为日期变量

时间:2014-01-07 14:44:31

标签: powerpivot dax measures

我的情况如下:

这是在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]))

感觉我没有以“正确”的方式使用这些措施......基本上我想创建动态度量,这将根据事务表中最新发布日期的内容来更改时间范围。这是最好的方式吗?

谢谢你们,

1 个答案:

答案 0 :(得分:3)

首先,你需要使用ALL()

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

让我们看一下使用[CurrentDate]的{​​{1}}指标。如果您的数据透视表有几个月作为行标签,则会发生这种情况:

enter image description here

行上下文改变LASTDATE('TransactionTable'[Posting Date])的输出。不是我们想要的。所以你需要覆盖过滤条件,就像这样。

[CurrentDate]

然后你需要FILTER()

然后总算[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)
                                   )
                  )
            )