计算会计中未结头寸的总和(来源中的两个日期列)

时间:2015-11-28 13:27:38

标签: excel powerpivot

我想计算应收账款账户的未平仓头寸总和。会计系统中的条目在源表中提供了三个相关列:

  • 预约日期
  • 到期(=付款)日期
  • 到期金额

我想有一个可以用于图表的度量,显示每天所有开放位置的总和。

未结头寸是指在“今天”之前预订日期和“今天”之后的截止日期预订的金额。

我在Power Pivot模型中尝试了以下方法(带有三个日历表):

  • 与“日历表1”相关的预订日期
  • 与“日历表2”相关的截止日期
  • 与第三个“日历表主”相关的“日历表1”和“日历表2”的日期列

enter image description here

对于该公式,我收到一条错误消息:

enter image description here

嗯,对PowerPivot没有足够的精通来解决这个问题。

1 个答案:

答案 0 :(得分:1)

SumAmt:=
SUM( Source_Table[Amount] )

OpenPositions:=
CALCULATE(
    [SumAmt]
    ;FILTER(
        VALUES( Source_Table[Booking_Date] )
        ;Source_Table[Booking_Date] < MAX( Calendar_Main[Calendar_Date] )
    )
    ;FILTER(
        VALUES( Source_Table[Due_Date] )
        ;Source_Table[Due_Date] > MAX( Calendar_Main[Calendar_Date] )
    )
)

您的错误非常明显。如果在CALCULATE()中使用直接列引用,则只能引用单个列。您正在引用两个Calendar_Main [Calendar_Date]和Source_Data [Booking_Date]或Source_Data [Due_Date]。这是不允许的,所以它会引发错误。

解决方法只是将复杂的过滤逻辑包装在表表达式中,并将它们用作CALCULATE()的参数。实际上,除非您对单个列的文字谓词进行硬编码,否则您应该使用某种表表达式(如FILTER())作为CALCULATE()的参数。

我们做的是两次调用FILTER()来检查日期。我们使用MAX(),因为我们不能在列引用之间进行比较,我们需要在标量之间进行不等式比较。

由于我们对Source_Data [Booking_Date]和Source_Data [Due_Date]进行了FILTER(),因此在行上下文中对这些引用进行求值,并在FILTER()的迭代中引用当前行的值。对Calendar_Main [Calendar_Date]的引用只是一个列引用,因此我们将它包装在MAX()中以获取不等式的标量值。 MAX()引用来自数据透视表的当前过滤器上下文,它将是当前行标签或列标签。

如果您汇总到月份级别,这将基本上为您提供期末余额,因为我们正在使用MAX()。在月份级别,该值将与该月的最后一天的值相同。

最后,由于您设置的不平等,您忽略了当天或当天到期的任何打开。我希望你想要[Booking_Date]&lt; = [Calendar_Date]和[Due_Date]&gt; [CALENDAR_DATE]。