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