You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于登录登出时间计算并发用户数,构建服务器负载可视化图表

解决方案:统计小时级并发用户数并可视化

核心逻辑

要实现需求,关键是将每个用户的登录-登出时段拆解为覆盖的所有完整小时区间,再按小时去重统计活跃用户数(避免同一用户在同一小时被重复计数)。


分工具实现步骤

1. 使用 Power BI(适配切片器需求,推荐)

步骤1:生成小时维度表

进入「数据视图」,新建表并输入DAX公式,生成覆盖所有数据日期的0-23点完整小时时间戳:

小时维度表 = 
ADDCOLUMNS(
    GENERATE(
        CALENDAR(MIN('原始数据'[登录时间]), MAX('原始数据'[登出时间])),
        GENERATESERIES(0, 23, 1)
    ),
    "完整小时时间", DATETIME(YEAR([Date]), MONTH([Date]), DAY([Date]), [Value], 0, 0)
)

步骤2:创建活跃用户数度量值

新建度量值,用于实时计算筛选日期下的小时级并发用户:

小时活跃用户数 = 
VAR 当前小时 = SELECTEDVALUE('小时维度表'[完整小时时间])
VAR 下一小时 = 当前小时 + TIME(1,0,0)
RETURN
CALCULATE(
    DISTINCTCOUNT('原始数据'[用户ID]),
    FILTER(
        '原始数据',
        '原始数据'[登录时间] < 下一小时 && '原始数据'[登出时间] > 当前小时
    )
)

逻辑:只要用户登录时间早于当前小时结束、登出时间晚于当前小时开始,即判定为该小时活跃用户。

步骤3:可视化与切片器配置

  • 插入折线图/柱状图,X轴选「小时维度表」的「完整小时时间」(可设置格式为仅显示小时),Y轴选「小时活跃用户数」度量值。
  • 插入「日期切片器」,关联「小时维度表」的Date字段,即可通过切片器筛选日期,查看对应时段的服务器负载。

2. 使用 Excel

步骤1:生成小时序列

在空白列生成目标统计时段的所有小时时间戳(格式如YYYY-MM-DD HH:00:00),覆盖所有需要分析的日期与小时。

步骤2:统计活跃用户数

在对应单元格输入数组公式(按Ctrl+Shift+Enter确认):

=SUM(--(('原始数据'!$B$2:$B$1000 < A2+TIME(1,0,0)) * ('原始数据'!$C$2:$C$1000 > A2)))

注:原始数据!$B$2:$B$1000为登录时间列,$C$2:$C$1000为登出时间列,A2为当前小时的时间戳。

步骤3:可视化与切片器

  • 选中小时列和统计结果列,插入柱状图/折线图。
  • 插入「切片器」,关联原始数据中提取的日期列,即可筛选日期查看对应小时负载。

3. 使用 SQL(数据预处理场景)

如果需要先在数据库中生成统计好的小时-活跃数表,执行以下SQL:

WITH 小时维度 AS (
    -- 生成覆盖数据起止日期的所有小时
    SELECT DATE_ADD(CAST(MIN(登录时间) AS DATE), INTERVAL h.hour HOUR) AS 统计小时
    FROM 原始数据
    CROSS JOIN (SELECT 0 AS hour UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23) h
    UNION ALL
    SELECT DATE_ADD(CAST(MAX(登出时间) AS DATE), INTERVAL h.hour HOUR) AS 统计小时
    FROM 原始数据
    CROSS JOIN (SELECT 0 AS hour UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23) h
)
SELECT 
    hd.统计小时,
    COUNT(DISTINCT ud.用户ID) AS 活跃用户数
FROM 小时维度 hd
LEFT JOIN 原始数据 ud 
    ON ud.登录时间 < DATE_ADD(hd.统计小时, INTERVAL 1 HOUR) 
    AND ud.登出时间 > hd.统计小时
GROUP BY hd.统计小时
ORDER BY hd.统计小时;

执行后得到的结果表可导出至Excel或Power BI进行可视化。


内容的提问来源于stack exchange,提问作者GODEFFO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:32:35