У меня есть столбец даты, называемый Eff_Date
, и имя столбца cmg
, как показано ниже,
Eff_Date cmg
-------------------
15-12-2017 F1
18-12-2018 F1
1-2-2019 F2
и я хочу создать новый столбец даты, который на один день предшествует дате в следующей строке в столбце eff_date
, как показано ниже для конкретного cmg
.
Eff_Date NewDateColumn
-------------------------------
15-12-2017 17-12-2018
18-12-2018 18-12-2018
1-2-2019 1-2-2019
NewDateColumn
будет иметь (17-12-2018 , так как следующая строка в Eff_date
имеет 18-12-2018) для cmg
= F1
Последняя строка будет такой же, как eff_date
для конкретного cmg
Пожалуйста помоги
Я добавил несколько строк в вашу таблицу, чтобы проверить обработку связей:
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