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
Другие вопросы по тегам