我有一个名为Eff_Date
的日期列和一个列名cmg
,如下所示,
Eff_Date cmg
-------------------
15-12-2017 F1
18-12-2018 F1
1-2-2019 F2
我想创建一个新的日期列,该日期列是特定eff_date
的{{1}}列下一行中日期之前的一天。
cmg
Eff_Date NewDateColumn
-------------------------------
15-12-2017 17-12-2018
18-12-2018 18-12-2018
1-2-2019 1-2-2019
= F1的NewDateColumn
将具有(17-12-2018,因为Eff_date
的下一行具有18-12-2018)
对于特定的cmg
,最后一行与eff_date
相同
请帮助
答案 0 :(得分:1)
我在您的表中添加了几行以测试对领带的处理:
Eff_Date cmg
12/15/2017 F1
12/18/2018 F1
1/15/2019 F1
1/20/2019 F1
1/22/2019 F1
6/7/2017 F2
8/9/2018 F2
10/10/2018 F2
1/2/2019 F2
1/2/2019 F2
虽然有很多计算方法,但我认为最重要的是您需要对日期进行排名以便确定下一个日期。
我通过定义一些变量来做到这一点:
=
VAR thisDateRank =
RANKX (
FILTER ( Table1, Table1[cmg] = EARLIER ( Table1[cmg] ) ),
Table1[Eff_Date],
,
ASC
)
VAR maxDateRank =
MAXX (
FILTER ( Table1, Table1[cmg] = EARLIER ( Table1[cmg] ) ),
Table1[Eff_Date]
)
VAR nextDate =
CALCULATE (
MAX ( Table1[Eff_Date] ),
FILTER (
ALL ( Table1 ),
Table1[cmg] = EARLIER ( Table1[cmg] )
&& RANKX (
FILTER ( Table1, Table1[cmg] = EARLIER ( Table1[cmg] ) ),
Table1[Eff_Date],
,
ASC
) = thisDateRank + 1
)
)
RETURN
IF ( Table1[Eff_Date] = maxDateRank, maxDateRank, nextDate - 1 )
结果看起来像这样
Eff_Date cmg NewDateColumn
12/15/2017 F1 12/17/2018
12/18/2018 F1 1/14/2019
1/15/2019 F1 1/19/2019
1/20/2019 F1 1/21/2019
1/22/2019 F1 1/22/2019
6/7/2017 F2 8/8/2018
8/9/2018 F2 10/9/2018
10/10/2018 F2 1/1/2019
1/2/2019 F2 1/2/2019
1/2/2019 F2 1/2/2019