我想计算应收账款账户的未平仓头寸总和。会计系统中的条目在源表中提供了三个相关列:
我想有一个可以用于图表的度量,显示每天所有开放位置的总和。
未结头寸是指在“今天”之前预订日期和“今天”之后的截止日期预订的金额。
我在Power Pivot模型中尝试了以下方法(带有三个日历表):
对于该公式,我收到一条错误消息:
嗯,对PowerPivot没有足够的精通来解决这个问题。
答案 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]。