人生没有彩排
每一天都是现场直播

在PowerBI中计算最高同时在线人数及其时间段

在分析用户行为数据时,"最高同时在线人数"是一个关键指标,它能帮助我们了解系统负载、用户活跃度峰值等重要信息。本篇文章将介绍如何在PowerBI中计算最高同时在线人数及其对应的时间段。

问题描述

为衡量产品的影响力,现在需要计算出最高同时在线人数,以及对应的时间段,请自行建模完成计算。具体问题如下图所示:

本案例的初始数据如下:

登录信息表:

id login_time logout_time
1001 2021/6/14 12:12:00 2021/6/14 18:12:00
1003 2021/6/14 13:12:00 2021/6/14 16:12:00
1004 2021/6/14 13:15:00 2021/6/14 20:12:00
1002 2021/6/14 15:12:00 2021/6/14 16:12:00
1005 2021/6/14 15:18:00 2021/6/14 20:12:00
1001 2021/6/14 20:12:00 2021/6/14 23:12:00
1006 2021/6/14 21:12:00 2021/6/14 23:15:00
1007 2021/6/14 22:12:00 2021/6/14 23:10:00

若需其它辅助表等,可自行创建并建模。

解题要点

1、本案例的解题思路为:先将用户的各个登录时间段转化为以秒为单位的整数列表,然后按秒进行分组,统计出现次数,然后再找到出现次数最多的秒,最后再对出现次数最多的秒进行范围合并,以及转化为时间即可。

2、对出现次数最多的秒进行范围合并时,其中的分组逻辑可参考下表的分组字段:

Second Index Group (Second-Index)
10000 1 9999
10001 2 9999
10002 3 9999
10003 4 9999
10008 5 10003
10009 6 10003
10010 7 10003
10020 8 10012
10021 9 10012

解决方案

首先,数据模型如下图所示:

然后,创建如下度量值:

MaxLoginTimeSolt = 
VAR BaseNum = 86400*10
VAR Benchmark = MINX(ALL('登录信息表'),'登录信息表'[login_time])*BaseNum
VAR TimeToSecond = 
    GENERATE(
        ALL('登录信息表'),
        VAR login_TimeStamp = '登录信息表'[login_time]*BaseNum - Benchmark
        VAR logout_TimeStamp = '登录信息表'[logout_time]*BaseNum - Benchmark
        RETURN
        GENERATESERIES(login_TimeStamp,logout_TimeStamp,1)
    )
VAR UserNumOfSecond = GROUPBY(TimeToSecond,[value],"num",SUMX(CURRENTGROUP(),1))
VAR MaxNum = MAXX(UserNumOfSecond,[num])
VAR MaxNumOfSecond = FILTER(UserNumOfSecond,[num]=MaxNum)
VAR GrpOfSecond = ADDCOLUMNS(MaxNumOfSecond,"grp",[value]-RANKX(MaxNumOfSecond,[value],,1))
VAR Period = GROUPBY(GrpOfSecond,[grp],[num],"login",MINX(CURRENTGROUP(),[value]),"logout",MAXX(CURRENTGROUP(),[value]))
VAR SecondToTime = 
    SELECTCOLUMNS(
        Period,
        "login_time",([login]+Benchmark)/BaseNum+TIME(0,0,0),
        "logout_time",([logout]+Benchmark)/BaseNum+TIME(0,0,0),
        "num_login",[num]
    )
RETURN
CONCATENATEX(
    SecondToTime,
    "Login Time: "&FORMAT([login_time],"yyyy/mm/dd hh:nn")&"
    Logout Time: "&FORMAT([logout_time],"yyyy/mm/dd hh:nn")&"
    MaxLoginNum: "&[num_login],
    UNICHAR(10)
)

然后创建一个卡片图,再将上面的度量值放入卡片图的值字段即可,结果如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论~

赞(3) 打赏
未经允许不得转载:夕枫 » 在PowerBI中计算最高同时在线人数及其时间段
订阅评论
提醒
guest
5 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫打赏

微信扫一扫打赏