Получение ошибки при расчете суммы премиальных значений с использованием DAX для медленно меняющегося измерения - PullRequest
0 голосов
/ 26 октября 2018

Использование DAX - мне нужно рассчитать общую сумму премии для политик с определенным статусом - используя медленно меняющееся измерение в качестве источника.

Это то, что работает в табличной модели SSAS.

Решение имеет две таблицы - dim_date (это таблица календаря) и Dim_contract (в котором перечислены все мои политики). Таблица Dim_Contract - это медленно меняющееся измерение.

Формат таблицы:

DW_ContractID   DW_EffectiveFromDate    contract_number actual_recurring_collection ContractStatusTLA
-2145825896 22 August    2018   4303140 80  PIN
-2145627139 26 September 2018   4303140 80  INF
-2145428382 09 October   2018   4303140 80  Can
-2145229625 21 August    2018   4303142 100 PIN
-2145030868 22 September 2018   4303142 100 NTU
-2144832111 02 September 2018   4303999 50  PIN
-2144633354 03 September 2018   4303999 50  INF

Я сделал расчет для подсчета политик - которые работают на 100%.С помощью этого расчета мы подсчитываем количество политик за каждый период времени.(в зависимости от того, что выберет пользователь)

Пример - если мы хотим подсчитать количество политик на конец сентября для каждого статуса, мы должны получить:

INF: 2 (This is counting policy numbers 4303140 and 4303999 as their last status is INF)
CAN: 0 
NTU: 1

Код, используемый для выполненияколичество:

PolicyCount_NTU :=
IF (
    MIN ( DIM_Date[Date] )
        >= CALCULATE ( MIN ( DIM_Contract[DW_EffectiveFromDate] ), ALL ( DIM_Contract ) ),
    IF (
        MIN ( DIM_Date[Date] )
            <= CALCULATE ( MAX ( DIM_Contract[DW_EffectiveFromDate] ), ALL ( DIM_Contract ) ),
        CALCULATE (
            COUNTROWS (
                FILTER (
                    DIM_Contract,
                    DIM_Contract[DW_ContractID]
                        = CALCULATE (
                            MAX ( DIM_Contract[DW_ContractID] ),
                            ALL ( DIM_Contract ),
                            DIM_Contract[contract_number] = EARLIER ( DIM_Contract[contract_number] ),
                            ( DIM_Contract[DW_EffectiveFromDate] ) <= VALUES ( DIM_Date[Date] )
                        )
                )
            ),
            LASTDATE ( DIM_Date[Date] ),
            DIM_Contract[ContractStatusTLA] = "NTU"
        )
    )
)

Проблема возникает с калькулятором, чтобы получить сумму сумм ... Я использовал этот код:

PolicyAPI_NTU :=
IF (
    MIN ( DIM_Date[Date] )
        >= CALCULATE ( MIN ( DIM_Contract[DW_EffectiveFromDate] ), ALL ( DIM_Contract ) ),
    IF (
        MIN ( DIM_Date[Date] )
            <= CALCULATE ( MAX ( DIM_Contract[DW_EffectiveFromDate] ), ALL ( DIM_Contract ) ),
        CALCULATE (
            SUM ( DIM_Contract[actual_recurring_collection] ),
            (
                FILTER (
                    DIM_Contract,
                    DIM_Contract[DW_ContractID]
                        = CALCULATE (
                            MAX ( DIM_Contract[DW_ContractID] ),
                            ALL ( DIM_Contract ),
                            DIM_Contract[contract_number] = EARLIER ( DIM_Contract[contract_number] ),
                            DIM_Contract[DW_EffectiveFromDate] < VALUES ( DIM_Date[Date] )
                        )
                )
            ),
            LASTDATE ( DIM_Date[Date] ),
            DIM_Contract[ContractStatusTLA] = "NTU"
        )
    )
)

Использование последнего куска кода дляполучить сумму сумм не работает - я получаю сообщение об ошибке: Ошибка: ошибка вычисления в мере 'DIM_Contract' [PolicyAPI_NTU]: была предоставлена ​​таблица с несколькими значениями, где ожидалось одно значение.

1 Ответ

0 голосов
/ 26 октября 2018

Я подозреваю, что ваша проблема здесь

DIM_Contract[DW_EffectiveFromDate] < VALUES ( DIM_Date[Date] )

DAX не знает, как сделать сравнение, если DIM_Date[Date] имеет несколько значений.

Попробуйте использовать MAX или MIN или LASTDATE или что-то подобное вместо VALUES.

...