第二个最新日期 - DAX

时间:2014-10-14 18:35:46

标签: powerpivot dax

我有一个登录应用程序的用户数据集。我想找到他们最后两次登录之间的天数。我有DAX表达式来获取他们的最后一次登录(最新日期)

=CALCULATE(Max([Date]),ALL(Table1),Table1[Name]=EARLIER(Table1[Name]))

但现在我想要获得他们的倒数第二次登录,并减去这两次。我看到一些关于倒数第二次登录的帖子,但是如果只有两次登录则会显示空白,而我也希望它们之间的天数。

1 个答案:

答案 0 :(得分:5)

<强> dcheney

这个很棘手,但可行。这可能有点难以理解,但鉴于您已经使用了EARLIER功能,您将非常接近您想要的结果,并计算登录日期和倒数第二天之间的日差。 / p>

因此,假设您的源数据如下所示:

ID  User    Day
    1   1   1-Jan
    2   1   10-Jan
    3   2   2-Feb
    4   2   3-Feb
    5   2   7-Feb

我首先要创建一个新的计算列,它会对特定用户的每次访问进行排序。这个公式应该这样做:

=CALCULATE (
    COUNTROWS ( 'datatable' ),
    'datatable'[User] = EARLIER ( 'datatable'[User] ),
    'datatable'[Day] < EARLIER ( 'datatable'[Day] ),
    ALL ( 'datatable' )
)
    + 1

这会将基于用户的排名添加到您的数据表:

ID  User    Day CountLoginNumber
1   1   1/1/2014 12:00:00 AM    1
2   1   1/10/2014 12:00:00 AM   2
3   2   2/2/2014 12:00:00 AM    1
4   2   2/3/2014 12:00:00 AM    2
5   2   2/7/2014 12:00:00 AM    3

完成此操作后,还有另一个嵌套列(我将其命名为上次登录日期)的另一个神奇公式,它可以完成所有繁重工作:

=
IF (
    AND (
        [CountLoginNumber] > 1,
        [CountLoginNumber]
            = CALCULATE (
                COUNTROWS ( 'datatable' ),
                'datatable'[User] = EARLIER ( 'datatable'[User] ),
                ALL ( 'datatable' )
            )
    ),
    CALCULATE (
        LASTDATE ( 'datatable'[Day] ),
        'datatable'[User] = EARLIER ( 'datatable'[User] ),
        ALL ( 'datatable' )
    )
        - CALCULATE (
            LASTDATE ( 'datatable'[Day] ),
            'datatable'[User] = EARLIER ( 'datatable'[User] ),
            'datatable'[CountLoginNumber]
                < EARLIER ( 'datatable'[CountLoginNumber] ),
            ALL ( 'datatable' )
        ),
    BLANK ()
)

老实说,这是我在Powerpivot上写过的最长的公式之一。你可以用分开计算的列来做到这一点,但我不是那个的忠实粉丝。这就是公式基本上做的事情:

  1. IF子句检查是否有多于1次登录并且如果登录日期也等于每个用户的最后一次已知登录(我想仅计算上次已知日期的日期差异)。
  2. 如果上述条件为TRUE,则有2个CALCULATE公式 - 第一个计算每个用户的最后登录日期;第二个为同一个用户计算前一个)。 如果您减去这两个日期,则会得到所需的结果
  3. 然后还有BLANK() function当IF条件不为TRUE时执行。以防万一: - )
  4. 结果表格如下:

    ID  User    Day CountLoginNumber    Date of Last Login
    1   1   1/1/2014 12:00:00 AM    1   
    2   1   1/10/2014 12:00:00 AM   2   9
    3   2   2/2/2014 12:00:00 AM    1   
    4   2   2/3/2014 12:00:00 AM    2   
    5   2   2/7/2014 12:00:00 AM    3   4
    

    然后,您可以创建一个简单的(Power)数据透视表来执行需要完成的所有以下(分析)工作。

    如果需要,请查看我的source file in Excel (2013)。希望这有帮助!