Power BI - 用于引用值列表的 DAX 度量。计算每个经纪人的净营业额 - 更优雅的解决方案?
Power BI - DAX measure to reference a list of values. Calculate net turnover per broker - more elegant solution?
以下是股票交易数据的简化版本。
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
然而,为了获得上面示例数据中所有(四)经纪人的净营业额,我必须用不同的标准重写四次度量,即,而不是使用 "BRC" 我必须使用 "GSI"等...
真实数据集由 50 个不同的经纪人代码组成,因此具有 50 个不同度量的解决方案是不可行的。
如何让这个 DAX 函数遍历我的数据集中的所有 Broker 代码。考虑到股票的过滤器。即,如果 MSFT 不存在典型的经纪人代码,但 AAPL 则该措施将考虑到这一点。
我已经尝试 values
函数 return 所有经纪人的列表,但没有成功。
以上是我想通过一项措施实现的。
非常感谢
问题写得很好!
为此,我们首先创建一个独立的计算 table 用于不同的买家和卖家。
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
以下是股票交易数据的简化版本。
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
然而,为了获得上面示例数据中所有(四)经纪人的净营业额,我必须用不同的标准重写四次度量,即,而不是使用 "BRC" 我必须使用 "GSI"等...
真实数据集由 50 个不同的经纪人代码组成,因此具有 50 个不同度量的解决方案是不可行的。
如何让这个 DAX 函数遍历我的数据集中的所有 Broker 代码。考虑到股票的过滤器。即,如果 MSFT 不存在典型的经纪人代码,但 AAPL 则该措施将考虑到这一点。
我已经尝试 values
函数 return 所有经纪人的列表,但没有成功。
以上是我想通过一项措施实现的。
非常感谢
问题写得很好!
为此,我们首先创建一个独立的计算 table 用于不同的买家和卖家。
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