从现有日期列中将日期列创建为一天减去现有日期列

时间:2019-05-29 10:10:46

标签: dax

我有一个名为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相同 请帮助

1 个答案:

答案 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
相关问题