会计中未平仓头寸总和的度量(源中的两个日期列)
Measure for sum of open positions in accounting (two date columns in source)
我想计算应收账款账户中未平仓头寸的总和。为此,会计系统中的条目在源 table 中提供了三个相关列:
- 预订日期
- 到期(=支付)日期
- 应付金额
我想要一个可用于图表的度量,显示每天所有 未平仓 头寸的总数。
未平仓头寸是指预订日期在 "today" 之前且到期日期在 "today" 之后的预订金额。
我在 Power Pivot 模型(具有三个日历 tables)中尝试了以下方法:
- 与"calendar table 1"
相关的预订日期
- 与 "calendar table 2"
相关的截止日期
- "calendar table 1" 和 "calendar table 2" 的日期列与第三个 "calendar table main"
相关
对于该公式,我收到一条错误消息:
嗯,PowerPivot 不够熟练,无法解决这个问题。
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]。这是不允许的,所以会抛出错误。
解决方法是将复杂的过滤逻辑包装在 table 表达式中,并将它们用作 CALCULATE() 的参数。几乎,除非您对单个列的文字谓词进行硬编码,否则您应该使用某种 table 表达式,如 FILTER(),作为 CALCULATE() 的参数。
我们所做的是两次调用 FILTER() 来检查日期。我们使用 MAX()s 是因为我们不能在列引用之间进行比较,我们需要在标量之间进行不等式比较。
由于我们正在对 Source_Data[Booking_Date] 和 Source_Data[Due_Date] 进行 FILTER(),因此在行上下文中对这些引用进行评估,并且在 FILTER() 的迭代中引用当前行的值。对 Calendar_Main[Calendar_Date] 的引用只是一个列引用,因此我们将其包装在 MAX() 中以获得不等式的标量值。 MAX() 指的是来自枢轴 table 的当前过滤器上下文,这将是当前的行标签或列标签。
如果您聚合到月份级别,这将基本上为您提供期末余额,因为我们使用的是 MAX()s。在月份级别,该值将与该月最后一天的值相同。
最后,由于您设置的不等式,您将忽略当天打开的或当天到期的任何内容。我希望你想要 [Booking_Date] <= [Calendar_Date] 和 [Due_Date] > [Calendar_Date].
我想计算应收账款账户中未平仓头寸的总和。为此,会计系统中的条目在源 table 中提供了三个相关列:
- 预订日期
- 到期(=支付)日期
- 应付金额
我想要一个可用于图表的度量,显示每天所有 未平仓 头寸的总数。
未平仓头寸是指预订日期在 "today" 之前且到期日期在 "today" 之后的预订金额。
我在 Power Pivot 模型(具有三个日历 tables)中尝试了以下方法:
- 与"calendar table 1" 相关的预订日期
- 与 "calendar table 2" 相关的截止日期
- "calendar table 1" 和 "calendar table 2" 的日期列与第三个 "calendar table main" 相关
对于该公式,我收到一条错误消息:
嗯,PowerPivot 不够熟练,无法解决这个问题。
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]。这是不允许的,所以会抛出错误。
解决方法是将复杂的过滤逻辑包装在 table 表达式中,并将它们用作 CALCULATE() 的参数。几乎,除非您对单个列的文字谓词进行硬编码,否则您应该使用某种 table 表达式,如 FILTER(),作为 CALCULATE() 的参数。
我们所做的是两次调用 FILTER() 来检查日期。我们使用 MAX()s 是因为我们不能在列引用之间进行比较,我们需要在标量之间进行不等式比较。
由于我们正在对 Source_Data[Booking_Date] 和 Source_Data[Due_Date] 进行 FILTER(),因此在行上下文中对这些引用进行评估,并且在 FILTER() 的迭代中引用当前行的值。对 Calendar_Main[Calendar_Date] 的引用只是一个列引用,因此我们将其包装在 MAX() 中以获得不等式的标量值。 MAX() 指的是来自枢轴 table 的当前过滤器上下文,这将是当前的行标签或列标签。
如果您聚合到月份级别,这将基本上为您提供期末余额,因为我们使用的是 MAX()s。在月份级别,该值将与该月最后一天的值相同。
最后,由于您设置的不等式,您将忽略当天打开的或当天到期的任何内容。我希望你想要 [Booking_Date] <= [Calendar_Date] 和 [Due_Date] > [Calendar_Date].