如何在Tableau中计算并展示随时间变化的90天活跃用户数
解决Tableau滚动90天活跃用户数的动态计算问题
你的问题出在原计算字段用了固定的today(),导致窗口始终是「今天往前90天」,无法随图表上的日期维度动态调整。要实现每个日期点对应的过去90天活跃用户数(即滚动窗口计算),可以用以下两种方法:
方法一:表计算(滑动窗口)
这是最直接的实现方式,适合按日期粒度(天/周/月)展示趋势:
创建基础标记字段
创建计算字段有活动的用户ID:IF activity > 0 THEN cust_id END作用是标记当天有活动的用户ID,无活动的用户返回空值。
搭建基础图表
- 将日期字段
dt拖到行,设置为连续的日期粒度(比如「天」,根据需求调整) - 将
有活动的用户ID拖到列,选择「度量」→「计数(不同)」,此时得到的是当日活跃用户数
- 将日期字段
添加滚动窗口计算
- 右键列上的「计数(不同)(有活动的用户ID)」→「添加表计算」
- 在弹出的设置面板中:
- 计算类型:选择「窗口计算」
- 聚合函数:选择「计数(不同)」
- 窗口范围:选择「从当前行的前89行到当前行」(包含当前日期在内共90天,前89天+当天=90天)
- 计算依据:选择
dt(确保按日期升序计算)
设置完成后,图表就会显示每个日期点对应的过去90天累计活跃用户数。
方法二:LOD表达式结合表计算(复杂场景适配)
如果需要更灵活的维度拆分(比如按地区/产品分组计算滚动活跃用户),可以用LOD+表计算的组合:
创建滚动窗口活跃用户计算字段
创建计算字段滚动90天活跃用户数:COUNTD( { FIXED cust_id : MAX(IF dt >= DATEADD('day', -89, [dt]) AND dt <= [dt] AND activity > 0 THEN cust_id END) } )这里用
FIXED cust_id固定用户维度,判断该用户在当前日期往前90天内是否有活动,最后用COUNTD去重统计符合条件的用户数。调整图表维度
将dt拖到行,滚动90天活跃用户数拖到列,设置好日期粒度即可。
注意事项
- 如果存在日期缺失(比如某些天没有用户活动数据),需要在Tableau中设置日期轴为「显示缺失值」,否则滚动窗口会计算错误(右键日期轴→「显示缺失值」)
- 确保
dt字段的类型是「日期」,而非字符串,否则无法正确计算日期范围
内容的提问来源于stack exchange,提问作者Intern
相关产品推荐
相关产品推荐

