我有一个登录应用程序的用户数据集。我想找到他们最后两次登录之间的天数。我有DAX表达式来获取他们的最后一次登录(最新日期)
=CALCULATE(Max([Date]),ALL(Table1),Table1[Name]=EARLIER(Table1[Name]))
但现在我想要获得他们的倒数第二次登录,并减去这两次。我看到一些关于倒数第二次登录的帖子,但是如果只有两次登录则会显示空白,而我也希望它们之间的天数。
答案 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上写过的最长的公式之一。你可以用分开计算的列来做到这一点,但我不是那个的忠实粉丝。这就是公式基本上做的事情:
结果表格如下:
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)。希望这有帮助!