Как изменить код DAX для расчета заработанной премии между датами вступления в силу и сроком действия на сегодняшний день, а не на конец месяца - PullRequest
0 голосов
/ 13 февраля 2019

Благодаря @AlexisOlson я могу рассчитать заработанную премию между датами вступления в силу и сроком действия до конца текущего месяца.

Но конечный пользователь хочет, чтобы он рассчитал до конца сегодняшнего дня.Таким образом, если срок действия больше, чем сегодня, он все еще рассчитывается до конца текущего месяца.

Как видно на снимке за февраль 2019 года, у него 28 дней.Но так как это должно быть на сегодняшний день, то DaysInMonth должно быть 12 дней.Потому что AsOfDate = "2019-02-12"

enter image description here

Нужно быть примерно таким:

enter image description here

Код:

CrossTableEffectiveDate = 
    VAR AsOfDate = TODAY()
    VAR CrossTables =
        CROSSJOIN(

            SUMMARIZE(fact_Premium, 
                fact_Premium[PolicyNumber],
                fact_Premium[TreatyYear],
                fact_Premium[CompanyLocationGuid],
                fact_Premium[State],
                fact_Premium[ClassCode],
                fact_Premium[ProducerGUID],
                "Start", MIN(fact_Premium[EffectiveDate]),
                "End", MAX(fact_Premium[ExpirationDate]),
                "Premium", SUM(fact_Premium[Premium])
                    ),
            'Calendar')
VAR RiskPeriods =
        ADDCOLUMNS(
            FILTER(CrossTables,
                'Calendar'[EoMonth] >= [Start] && 'Calendar'[Month] <= [End] && 'Calendar'[Month] <= AsOfDate),
            "StartRiskMonth", IF([Start] > 'Calendar'[Month], [Start], 'Calendar'[Month]),
            "EndRiskMonth", IF([End] < 'Calendar'[EoMonth], [End], 'Calendar'[EoMonth])
                 )
    RETURN SELECTCOLUMNS(RiskPeriods,
                "PolicyNumber", fact_Premium[PolicyNumber],
                "TreatyYear", fact_Premium[TreatyYear],
                "CompanyLocationGUID", fact_Premium[CompanyLocationGuid],
                "State", fact_Premium[State],
                "ClassCode",fact_Premium[ClassCode],
                "ProducerLocationGUID",fact_Premium[ProducerGUID],
                "StartRiskMonth", [StartRiskMonth],
                "EndRiskMonth", [EndRiskMonth],
                "YearNum", YEAR('Calendar'[Month]),
                "Qtr", ROUNDUP(MONTH('Calendar'[Month])/3, 0),
                "MonthNum", MONTH('Calendar'[Month]),
                "WrittenPremium", [Premium],
                "DaysInMonth", [EndRiskMonth] - [StartRiskMonth] + 1,
                //"EndRiskMonth-Start", [EndRiskMonth] - [StartRiskMonth] + 1,
               //"End-Start",[End] - [Start] + 1,
                "EarnedPremium", [Premium] *
                    DIVIDE([EndRiskMonth] - [StartRiskMonth] + 1, [End] - [Start] + 1))

То, что я пробовал:

Я попытался убедиться в ограничении EndRiskMonth, передав параметр AsOfDate:

"EndRiskMonth", IF([End] < 'Calendar'[EoMonth] && [End] < VALUE("2019-02-12"),[End], [AsOfDate])

Но этовыдает ошибку:

The DAX expression for calculated table 'CrossTableEffectiveDateTest' results in a variant data type for column 'EndRiskMonth'. Please modify the calculation such that the column has a consistent data type.

Также пытался использовать функцию SWITCH ():

    "EndRiskMonth", SWITCH(
                        TRUE(),
                        [End]<'Calendar'[EoMonth],[End],
                        AsOfDate < 'Calendar'[EoMonth], [AsOfDate],
                        [End]
                          )

Но также получал ошибку.

Должна быть простая настройка, но не могу придумать решение.Пожалуйста, помогите

.pbix можно найти здесь:

https://www.dropbox.com/s/8xb6c4mg0ucsjgf/EarnedPremiumTest.pbix?dl=0

...