以下是股票交易数据的简化版本。

StockData =
DATATABLE (
    "STOCK", STRING,
    "Date", DATETIME,
    "Buyer", STRING,
    "Seller", STRING,
    "Turnover", INTEGER,
    {
         { "AAPL", "2019/04/07", "GSI", "BRC", 100 },
         { "AAPL", "2019/04/07", "CITI", "JPM", 500 },
         { "AAPL", "2019/04/07", "JPM", "GSI", 700 },
         { "AAPL", "2019/04/08", "GSI", "JPM", 300 },
         { "AAPL", "2019/04/08", "GSI", "CITI", 800 },
         { "AAPL", "2019/04/08", "JPM", "BRC", 400 },
         { "MSFT", "2019/04/07", "GSI", "GSI", 500 },
         { "MSFT", "2019/04/07", "JPM", "BRC", 700 },
         { "MSFT", "2019/04/07", "BRC", "GSI", 800 },
         { "MSFT", "2019/04/08", "GSI", "BRC", 500 },
         { "MSFT", "2019/04/08", "GSI", "JPM", 600 },
         { "MSFT", "2019/04/08", "CITI", "BRC", 500 }
    }
)

目标是计算经纪人每天的净营业额。

我可以通过遵循 DAX 度量来实现这一目标
Test BRC Net Turnover =
VAR TotalBuy = CALCULATE(SUM(StockData[Turnover]),StockData[Buyer] = "BRC")
VAR TotalSell = CALCULATE(SUM(StockData[Turnover]),StockData[Seller] = "BRC")
Return TotalBuy - TotalSell

但是,要获得上述示例数据中所有(四个)经纪人的净营业额,我必须使用不同的标准重写该度量四次,即,我必须使用“GSI”等,而不是使用“BRC”...

真实数据集由 50 个不同的经纪人代码组成,因此具有 50 个不同度量的解决方案是不可行的。

如何让这个 DAX 函数迭代我的数据集中的所有 Broker 代码。考虑到股票的过滤器。即,如果 MSFT 不存在典型的经纪人代码,但 AAPL 的措施将考虑到这一点。

我试过 values 函数返回所有经纪人的列表,但没有成功。 list - Power BI - 用于引用值列表的 DAX 度量。计算每个经纪人的净营业额 - 更优雅的解决方案?-LMLPHP

以上是我想通过一项措施实现的目标。

非常感谢

最佳答案

模范写的很好的问题!

为此,让我们首先创建一个独立的计算表以供不同的买家和卖家使用。

Brokers = VALUES( StockData[Buyer] )

现在我们可以将 Brokers[Buyer] 放在 Legend 字段中并编写一个读取该值的度量。
Net Turnover =
VAR Broker = SELECTEDVALUE ( Brokers[Buyer] )
VAR TotalBuy = CALCULATE ( SUM ( StockData[Turnover] ), StockData[Buyer] = Broker )
VAR TotalSell = CALCULATE ( SUM ( StockData[Turnover] ), StockData[Seller] = Broker )
RETURN
    TotalBuy - TotalSell


list - Power BI - 用于引用值列表的 DAX 度量。计算每个经纪人的净营业额 - 更优雅的解决方案?-LMLPHP

10-06 10:57