Процент удержания - PullRequest
       8

Процент удержания

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

Я пытаюсь создать «процент удержания» для политик в течение определенного периода времени (по месяцам, с начала года и по годам).Таким образом, все политики в данный период времени по сравнению с активными в конце периода.

Политики могут быть:

    N=New
    RN=ReNew
    C=Cancel
    RI=ReInstate
    NR=NonRenew 

Данные транзакции выглядят примерно так, StatusNum - это то, что я могу получить, чтобы показать статус информации.

PolicyID PolicyNum StatusDate Status StatusNum Net 
1        123       1/1/2018   N         1      1
2        123       3/31/2018  C         0      -1
3        123       4/1/2018   RI        1      +1
4        123       6/1/2018   RN        1      0
5        222       2/1/2018   N         1      1
6        222       7/1/2018   RN        1      0
7        333       1/1/2018   N         1      1
8        333       6/1/2018   NR        0     -1
9        444       1/1/2018   N         1      1
10       444       5/30/2018  C         0     -1

Моя лучшая догадкато, как это сделать, это взять сумму последних значений StatusNum в PIT (разделенных по номеру политики), деленную на первое значение StatusNum в начале PIT.Так что, если я отфильтрую по датам с 01.01.2008 по 8/1/2018 *, будет в силе

  • 123 (+ 1, + 1)
  • 222 не будет в силепока (так что ничего не учитывается) (+ 0, + 0)
  • 333 действовал в начале, но не продлен (+ 1, -1)
  • 444 был в силев начале, но он отменил (+ 1, -1)

Таким образом, 3 политики были активны на 01.01.2008, а 2 отменены, 1 не имеет значения, поэтому срок хранения будет33,3%

Может ли кто-нибудь дать отзыв, если это лучший способ сделать это и как этого добиться?

Заранее благодарен за помощь.

Обновление

Это своего рода то, что я ищу, но это слишком медленно:

'AsOfPolicies = var A = SELECTCOLUMNS (SUMMARIZECOLUMNS (Транзакции [PolicyNumber], filter (Transactions,Транзакции [DateKey] = min (Транзакции [DateKey]) && Транзакции [IsInForce] = - 1)), «aPolicyNumber», [PolicyNumber])
var B = SELECTCOLUMNS (SUMMARIZECOLUMNS (уже [PolicyNumbe)r], фильтр (транзакции, транзакции [DateKey] <= MAX (транзакции [DateKey])), «MaxDate», MAX (транзакции [DateKey])), «bPolicyNumber», [PolicyNumber], «MaxDate», [MaxDate]) var C = SELECTCOLUMNS (фильтр (CROSSJOIN (A, B), [aPolicyNumber] = [bPolicyNumber]), "cPolicyNumber", [aPolicyNumber], "MaxDateKey", [MaxDate]) Var D = SELECTCOLUMNS (фильтр (CROSSJOIN (, Транзакции), [cPolicyNumber] = [PolicyNumber] && [MaxDateKey] = [DateKey]), «PolicyNumber», [PolicyNumber], «PD_ID», [PD_ID], «IsInForce», [IsInForce]) Возврат D '</p>

Обновление

Также фильтр не работает

1 Ответ

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

Я думаю, вы можете сделать что-то вроде этого:

Retention =
VAR StartDates =
    SUMMARIZE (
        ALLSELECTED ( PolicyLog ),
        PolicyLog[PolicyNum],
        "Start", MIN ( PolicyLog[StatusDate] )
    )
VAR Included =
    SELECTCOLUMNS (
        FILTER ( StartDates, [Start] <= MIN ( Dates[Date] ) ),
        "Policies", PolicyLog[PolicyNum]
    )
VAR Filtered = FILTER ( PolicyLog, PolicyLog[PolicyNum] IN Included )

RETURN
    DIVIDE (
        SUMX ( Filtered, PolicyLog[Net] ),
        COUNTROWS ( SUMMARIZE ( Filtered, PolicyLog[PolicyNum] ) )
    )

Сначала вы создаете таблицу StartDates, в которой указаны самые ранние даты для каждой политики, ограниченные выбранным вами периодом времени.Это будет выглядеть примерно так:

StartData = 

PolicyNum  Start
123        1/1/2018
222        2/1/2018
333        1/1/2018
444        1/1/2018

Оттуда мы просто хотим список политик, которые мы хотим включить в расчет.Таким образом, мы выбираем те, которые имеют Start на минимально выбранную дату в срезе даты.Нам просто нужен список итоговых номеров политик, поэтому мы просто выбираем этот столбец.

Included =

Policies
123
333
444

Оттуда мы фильтруем всю таблицу PolicyLog, чтобы включить только эти (Filtered).

Наконец, мы можем сложить столбец Net для каждой из этих выбранных политик и разделить их на различное количество, чтобы получить процент удержания.


Редактировать: В ответ на ваш комментарий, я думаю, вы хотите быть более избирательным с переменной StartDate.Вместо MIN( PolicyLog[StatusDate] ), попробуйте что-то вроде этого:

CALCULATE( MIN(PolicyLog[StatusDate]), PolicyLog[Status] IN {"N", "RN", "RI"} )
...