首页 > 解决方案 > 从现有日期列创建一个日期列作为一天减去现有日期列

问题描述

我有一个名为的日期列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) for cmg= F1

最后一行将与eff_date特定的相同cmg 请帮助

标签: dax

解决方案


我在您的表中添加了几行来测试对关系的处理:

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

推荐阅读