DAX консолидировал текущий баланс из двух таблиц фактов
У меня есть простая модель данных с двумя таблицами фактов, относящимися к покупкам и продажам акций:
Мне нужно рассчитать текущий баланс, взяв текущую сумму акций, купленных по тиккеру, и ВЫЧИТАЯ на текущую сумму акций, проданных по тиккеру.
Я попробовал это:
Shares balance 1 =
VAR Date_Ref = MAX( dDates[Date] )
VAR Tick_Ref = VALUES( dAssets[Ticker] )
VAR Cumm_Purch =
CALCULATE(
SUMX(
fPurch,
fPurch[Shares]
),
fPurch[Ticker] = Tick_Ref,
fPurch[Date] <= Date_Ref
)
VAR Cumm_Sold =
CALCULATE(
SUMX(
fSales,
fSales[Shares]
),
fSales[Ticker] = Tick_Ref,
fSales[Date] <= Date_Ref
)
VAR Result = Cumm_Purch - Cumm_Sold
RETURN
Result
И я также попробовал это:
Shares balance 2 =
VAR Date_Ref_Purch = MAX( fPurch[Date] )
VAR Tick_Ref_Purch = VALUES( fPurch[Ticker] )
VAR Cumm_Purch =
CALCULATE(
SUMX(
fPurch,
fPurch[Shares]
),
fPurch[Ticker] = Tick_Ref_Purch,
fPurch[Date] <= Date_Ref_Purch
)
VAR Date_Ref_Sold = MAX( fSales[Date] )
VAR Tick_Ref_Sold = VALUES( fSales[Ticker] )
VAR Cumm_Sold =
CALCULATE(
SUMX(
fSales,
fSales[Shares]
),
fSales[Ticker] = Tick_Ref_Sold,
fSales[Date] <= Date_Ref_Sold
)
VAR Result = Cumm_Purch - Cumm_Sold
RETURN
Result
И оба дают одни и те же НЕПРАВИЛЬНЫЕ результаты, как показано в приведенной ниже примерной таблице...
Для этого визуального элемента столбец «Тикер» берется из таблицы измерений dAssets, а столбец «Дата» — из таблицы дат.
И столбец «Правильный результат», который я добавил вручную, чтобы показать числа, которые я должен был вычислить:
Я предполагаю, что что-то в любом коде искажает результаты, что это может быть?
1 ответ
Ответ пользователя с другого форума...
Shares purchased =
VAR Tick_Ref = VALUES( fPurch[Ticker] )
VAR Result =
CALCULATE(
SUMX(
fPurch,
fPurch[Shares]
),
fPurch[Ticker] = Tick_Ref
)
RETURN
Result
Shares sold =
VAR Tick_Ref = VALUES( fSales[Ticker] )
VAR Result =
CALCULATE(
SUMX(
fSales,
fSales[Shares]
),
fSales[Ticker] = Tick_Ref
)
RETURN
Result
Shares balance =
VAR Tick_Ref = VALUES( dAssets[Ticker] )
VAR Date_Ref = MAX( dDates[Date] )
VAR Acumm_Purch =
CALCULATE(
SUM( fPurch[Shares] ),
dAssets[Ticker] = Tick_Ref,
dDates[Date] <= Date_Ref
)
VAR Acumm_Sold =
CALCULATE(
SUM( fSales[Shares] ),
dAssets[Ticker] = Tick_Ref,
dDates[Date] <= Date_Ref
)
VAR Result =
IF(
[Shares purchased] <> BLANK() ||
[Shares sold] <> BLANK(),
Acumm_Purch - Acumm_Sold
)
RETURN
Result