我有一个 FinalRawData 表,其中包含每月某些 ID(电路)的发票。这些值存储在“总计 (USD)”列中。日期存储在发票日期字段中或作为日历[日期]值存储在另一个表中。
我需要计算差异,因此如果与上个月的发票(不一定是连续月份)相比,差异超过 10% 或 1000 美元,我需要差异值,无论是负值还是正值。如果不是,我希望它是 0。
我不知道为什么这个公式返回当前月份的值而不是与前一个月的差值。
Amount_Difference =
VAR CurrentRowDate = MAX('finalrawdata'[Invoice Date])
VAR CurrentRowItem = MAX('finalrawdata'[Item])
VAR CurrentRowAmount = MAX('finalrawdata'[Total (USD)])
VAR PreviousMonthAmount =
CALCULATE(
SUM('finalrawdata'[Total (USD)]),
'finalrawdata'[Invoice Date] = EOMONTH(CurrentRowDate, -1),
'finalrawdata'[Item] = CurrentRowItem
)
VAR AmountDiff = CurrentRowAmount - PreviousMonthAmount
RETURN
IF(
ABS(AmountDiff) > 1000 || ABS(AmountDiff) > CurrentRowAmount * 0.1,
AmountDiff,
BLANK()
)
PreviousMonthAmount
没有返回值,因此您得到的结果。一些障碍:
PreviousMonthAmount
具有行上下文,因此它只能看到自身 - 您将需要其中一个 Filter 函数来获取其他行。EOMONTH(CurrentRowDate, -1)
在这里不起作用。尝试以下操作:
Amount_Difference =
VAR CurrentRowDate = MAX('finalrawdata'[Invoice Date])
VAR CurrentRowItem = MAX('finalrawdata'[Item])
VAR CurrentRowAmount = MAX('finalrawdata'[Total (USD)])
VAR PreviousMonthAmount =
CALCULATE(
MIN('finalrawdata'[Total (USD)]),
TOPN(1,
FILTER(
ALL('finalrawdata'),
'finalrawdata'[Item] = CurrentRowItem &&
'finalrawdata'[Invoice Date] < CurrentRowDate
),
[Invoice Date], DESC
)
)
VAR AmountDiff = IF(NOT ISBLANK(PreviousMonthAmount), CurrentRowAmount - PreviousMonthAmount)
RETURN
IF(
ABS(AmountDiff) > 1000 || ABS(AmountDiff) > CurrentRowAmount * 0.1,
AmountDiff,
BLANK()
)
上面根据日期获取之前的发票金额。