第二个最新日期 - DAX

0 powerpivot dax

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

=CALCULATE(Max([Date]),ALL(Table1),Table1[Name]=EARLIER(Table1[Name]))
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*lik 5

dcheney,

这个很棘手,但可行.这可能有点难以理解,但鉴于您已经使用了EARLIER功能,您可以通过计算上次登录日期和倒数第二次日期之间的日差来非常接近您想要的结果.

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

ID  User    Day
    1   1   1-Jan
    2   1   10-Jan
    3   2   2-Feb
    4   2   3-Feb
    5   2   7-Feb
Run Code Online (Sandbox Code Playgroud)

我将从创建一个新的计算列开始,该将对特定用户的每次访问进行排序.这个公式应该这样做:

=CALCULATE (
    COUNTROWS ( 'datatable' ),
    'datatable'[User] = EARLIER ( 'datatable'[User] ),
    'datatable'[Day] < EARLIER ( 'datatable'[Day] ),
    ALL ( 'datatable' )
)
    + 1
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

完成后,还有另一个嵌套列(我将其命名为Last of Last Login)的另一个神奇公式,它可以完成所有繁重的工作:

=
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 ()
)
Run Code Online (Sandbox Code Playgroud)

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

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

结果表然后如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

如果需要,请在Excel(2013)中查看我的源文件.希望这可以帮助!