背景:
- 有一張用戶登錄明細(xì)表呼奢,其中判斷用戶當(dāng)天登錄的條件是isLoginDayDateShift=1,然后看LastLoginDate列即可
- 求:用戶最大登錄間隔宜雀,比如用戶2021/1/1 2021/1/3 2020/1/6號分別有登錄,則最大登錄間隔為2天
- 除了登錄間隔握础,也可以判斷缺貨天數(shù)這種場景
思路:
萬能的視圖層算法
- 先構(gòu)建一張干凈的登錄表辐董,包括用戶ID、登錄日期
- 給登陸表加一列禀综,新列為下次登錄日期
- 最后一個登錄日期行简烘,這行的”下次登錄日期“肯定是空的,因此定枷,將空替換為刷新日期
- 求日期間隔孤澎,日期1為原本登錄日期、日期2為下次登錄日期
- 返回步驟4中的最大值
實現(xiàn):
-- FactTable[IsLoginDayDateShift]是用來輔助判斷是否最后登錄的列 當(dāng)這列=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] )