会计中未平仓头寸总和的度量(源中的两个日期列)

Measure for sum of open positions in accounting (two date columns in source)

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

我想要一个可用于图表的度量,显示每天所有 未平仓 头寸的总数。

未平仓头寸是指预订日期在 "today" 之前且到期日期在 "today" 之后的预订金额。

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

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

嗯,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].