powerbi - 在 Power BI DAX 查询中使用 FIFO 方法计算问题股票利润
问题描述
问题:我正在尝试为买卖交易计算基于股票利润的 FIFO 方法。这是实际结果(在 Excel 中手动计算) 请注意,这仅适用于一只股票,我的数据中还有许多其他股票。 这是手动计算的图像
我的解决方案:首先我创建了一个索引列来根据日期对数据进行排序,然后根据交易进行排序 - 第一次买入然后卖出(我在同一日期有多个交易)。之后,我添加了一个 DateTime 列以在同一日期分叉多个条目。基于此 DateTime 列,我编写了一个 DAX 查询,但它没有给出正确的结果。
这是Power BI 输出的屏幕截图。我用黄色突出显示了不正确的值。
代码:
VAR myunits = ABS(Data[Quantity])
VAR Previous_buys =
FILTER (
Data,
[Code] = EARLIER ( [Code] )
&& [DateTime] < EARLIER ( [DateTime] )
&& [type] = "buy"
)
VAR Previous_sales =
ABS(SUMX (
FILTER (
Data,
[Code] = EARLIER ( [Code] )
&& [DateTime] < EARLIER ( [DateTime] )
&& [type] = "sell"
),
[Quantity]
))
VAR Previous_buys_balance =
ADDCOLUMNS (
ADDCOLUMNS (
Previous_buys,
"Cumulative", SUMX ( FILTER ( Previous_buys, [DateTime] <= EARLIER ( [DateTime] ) ), [Quantity] )
),
"Balance Left", [Quantity]
- IF (
[Cumulative] < Previous_sales,
[Quantity],
VAR previouscumulative = [Cumulative] - [Quantity]
RETURN
IF ( Previous_sales > previouscumulative, Previous_sales - previouscumulative )
)
)
VAR CostUsed =
ADDCOLUMNS (
ADDCOLUMNS (
Previous_buys_Balance,
"MyCumulatives", SUMX (
FILTER ( Previous_buys_balance, [DateTime] <= EARLIER ( [DateTime] ) ),
[Balance Left]
)
),
"Balance Used", IF (
[MyCumulatives] < myunits,
[MyCumulatives],
VAR previouscumulatives = [MyCumulatives] - [Balance Left]
RETURN
IF ( myunits > previouscumulatives, myunits - previouscumulatives )
)
)
RETURN
IF (
[type] = "sell",
ABS([Quantity]) * [unit price ($)]
- SUMX ( CostUsed, [Balance Used] * [unit price ($)] )
)
解决方案
推荐阅读
- php - foreach 中的动态表行跨度
- java - 为基于值的类预计算 hashCode?
- javascript - 使用 SafeAreaView 时反应 iOS 上的本机滚动视图抽搐
- c++ - 快速将 unsigned char 的向量转换为 POD 结构的向量,反之亦然
- c# - 列表
转换为 IEnumerable 然后列出 一片空白 - c# - 无法在 Xamarin Android 项目中读取 SQLite 文件
- python - 如何使用 Selenium 和 Python 验证选项是否被选中
- sql-server - 从 SQLChar 创建几何时出现 24114 错误
- python - 刮取某些属性 - Beautiful Soup Python
- django - 如何使用 Django Rest Framework 使用电子邮件和密码通过 REST 对用户进行身份验证