背景:
- 有一张用户登录明细表,其中判断用户当天登录的条件是isLoginDayDateShift=1,然后看LastLoginDate列即可
- 求:用户最大登录间隔,比如用户2021/1/1 2021/1/3 2020/1/6号分别有登录,则最大登录间隔为2天
- 除了登录间隔,也可以判断缺货天数这种场景
思路:
万能的视图层算法
- 先构建一张干净的登录表,包括用户ID、登录日期
- 给登陆表加一列,新列为下次登录日期
- 最后一个登录日期行,这行的”下次登录日期“肯定是空的,因此,将空替换为刷新日期
- 求日期间隔,日期1为原本登录日期、日期2为下次登录日期
- 返回步骤4中的最大值
实现:
-- FactTable[IsLoginDayDateShift]是用来辅助判断是否最后登录的列 当这列=1时,看last loggin date就是登录日期
a =
VAR logintable =
FILTER (
SUMMARIZE (
FactTable,
FactTable[IDnum],
FactTable[LastLoginDate],
FactTable[IsLoginDayDateShift]
),
FactTable[IsLoginDayDateShift] = 1
&& NOT ISBLANK ( FactTable[LastLoginDate] )
)
--if have next log day, then dateiff, otherwise refreshdate
VAR next_ =
ADDCOLUMNS (
logintable,
"@next",
CALCULATE (
MIN ( FactTable[LastLoginDate] ),
FILTER (
logintable,
FactTable[LastLoginDate]
> EARLIER ( FactTable[LastLoginDate] )
),
FILTER (
logintable,
FactTable[IDnum] = EARLIER ( FactTable[IDnum] )
),
logintable
)
)
VAR NEXT_MODIFY =
--change blank as refresh date
ADDCOLUMNS (
next_,
"@next_m",
IF (
ISBLANK ( [@next] ),
SELECTEDVALUE ( 'Dim_Data Refreshing'[Time] ),
[@next]
)
)
VAR DATEDIFFTABLE =
ADDCOLUMNS (
NEXT_MODIFY,
"@datediff", DATEDIFF ( FactTable[LastLoginDate], [@next_m], DAY )
)
RETURN
MAXX ( DATEDIFFTABLE, [@datediff] )