假设我有一张如下所示的桌子:
股票代码 | 日期 | 交易 | 分享 | 价格 | 平均成本 |
---|---|---|---|---|---|
ABEV3 | 2021 年 3 月 01 日 | 购买 | 77 | 12.93 美元 | 12.93 美元 |
ABEV3 | 2021 年 5 月 04 日 | 购买 | 73 | 13.60 美元 | 13.26 美元 |
ABEV3 | 2021 年 6 月 04 日 | 销售 | 150 | 17.91 美元 | 13.26 美元 |
ABEV3 | 2021 年 6 月 28 日 | 购买 | 62 | 16.01 美元 | 16.01 美元 |
ABEV3 | 2021 年 10 月 29 日 | 销售 | 62 | 15.62 美元 | 16.01 美元 |
也3 | 2021 年 1 月 07 日 | 购买 | 39 | $25.12 | $25.12 |
也3 | 2021 年 2 月 03 日 | 销售 | 39 | 27.20 美元 | $25.12 |
也3 | 2021 年 6 月 29 日 | 购买 | 36 | $27.53 | $27.53 |
也3 | 2022 年 1 月 07 日 | 购买 | 56 | 17.85 美元 | 21.64 美元 |
也3 | 2022 年 3 月 30 日 | 销售 | 92 | 22.61 美元 | 21.64 美元 |
只要有一行包含“购买”,“平均成本”列下的度量就会重新计算该特定代码的新平均成本。
每当有一行带有 SALE 时,所有度量所需要做的就是从 同一列中获取同一代码的最新计算平均成本。
我尝试的每一种方法都会在我的 DAX 代码上引发循环依赖错误。
如何在避免循环依赖的同时做到这一点?
您需要了解,您正在尝试执行计算,其中结果取决于同一列中先前计算的结果,这会在 DAX 中创建循环依赖关系。 您可以创建一个新的计算列来计算每行的累计购买金额和累计购买份额。然后,您可以使用这些值来计算平均成本。
我为
Cumulative Purchase Amount
创建了一列,将每个代码的购买金额(股票 * 价格)相加,直至当前行。
然后,我为
Cumulative Shares Bought
创建了另一列,以将每个股票代码的股票总计到当前行,同时考虑到购买和销售(减去销售股票)。
然后我用累计购买金额除以累计购买的股票来计算平均成本。
Cumulative Purchase Amount =
SUMX(
FILTER(
Table,
Table[Ticker] = EARLIER(Table[Ticker]) &&
Table[Date] <= EARLIER(Table[Date]) &&
Table[Transaction] = "Purchase"
),
Table[Shares] * Table[Price]
)
Cumulative Shares Bought =
SUMX(
FILTER(
Table,
Table[Ticker] = EARLIER(Table[Ticker]) &&
Table[Date] <= EARLIER(Table[Date])
),
IF(Table[Transaction] = "Purchase", Table[Shares], -Table[Shares])
)
Average Cost =
IF(
Table[Transaction] = "Purchase",
Table[Cumulative Purchase Amount] / Table[Cumulative Shares Bought],
LOOKUPVALUE(Table[Average Cost], Table[Date], MAXX(FILTER(Table, Table[Ticker] = EARLIER(Table[Ticker]) && Table[Date] < EARLIER(Table[Date])), Table[Date]))
)