以下是股票交易数据的简化版本。
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
函数返回所有经纪人的列表,但没有成功。 以上是我想通过一项措施实现的目标。
非常感谢
最佳答案
模范写的很好的问题!
为此,让我们首先创建一个独立的计算表以供不同的买家和卖家使用。
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