我正在尝试在给定的时间段内(按月,年初至今和每年)为政策创建“保留率”。因此,与给定时间段内有效的策略相比,给定时间段内的所有策略。
政策可以是:
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
关于如何执行此操作的最佳猜测是,将PIT上的最后StatusNum值的总和除以开始PIT处的第一个StatusNum值。因此,如果我按日期1/1/2018到8/1/2018
因此,其中3个策略于2018年1月1日生效,而2个已取消,其中1个无关紧要,因此保留率为33.3%
如果这是执行此操作的最佳方法以及如何完成此操作,谁能提供反馈?
预先感谢您的帮助。
更新
这是我想要的,但是太慢了:
'AsOfPolicies =
var A = SELECTCOLUMNS(SUMMARIZECOLUMNS(Transactions [PolicyNumber],filter(Transactions,Transactions [DateKey] = min(Transactions [DateKey])&& Transactions [IsInForce] =-1)),“ aPolicyNumber”,[PolicyNumber])
var B = SELECTCOLUMNS(SUMMARIZECOLUMNS(Transactions [PolicyNumber],filter(Transactions,Transactions [DateKey] <= MAX(Transactions [DateKey]))),“ MaxDate”,MAX(Transactions [DateKey])),“ bPolicyNumber”,[PolicyNumber ],“ MaxDate”,[MaxDate])var C = SELECTCOLUMNS(filter(CROSSJOIN(A,B),[aPolicyNumber] = [bPolicyNumber]),“ cPolicyNumber”,[aPolicyNumber],“ MaxDateKey”,[MaxDate])
变量D = SELECTCOLUMNS(filter(CROSSJOIN(C,Transactions),[cPolicyNumber] = [PolicyNumber] && [MaxDateKey] = [DateKey]),“ PolicyNumber”,[PolicyNumber],“ PD_ID”,[PD_ID],“ IsInForce” ,[IsInForce])
返回D'
更新
此外,过滤器似乎无法正常工作
答案 0 :(得分:0)
我认为您可以执行以下操作:
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"} )