Благодаря @AlexisOlson я могу рассчитать заработанную премию между датами вступления в силу и сроком действия до конца текущего месяца.
Но конечный пользователь хочет, чтобы он рассчитал до конца сегодняшнего дня.Таким образом, если срок действия больше, чем сегодня, он все еще рассчитывается до конца текущего месяца.
Как видно на снимке за февраль 2019 года, у него 28 дней.Но так как это должно быть на сегодняшний день, то DaysInMonth
должно быть 12 дней.Потому что AsOfDate = "2019-02-12"
Нужно быть примерно таким:
Код:
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