不使用窗口函数实现月度滚动年度离职人数累计求和
解决月度离职数据的滚动12个月累计计算问题
问题根源
你之前的Fixed LOD表达式无效,是因为{FIXED [Date]: ...}会把计算范围限制在单个月份内。你的IF条件中,MIN([Date])就是当前月份的日期,所以条件永远成立,最终返回的只是当前月的[All Terms],自然无法得到跨12个月的累计值。
可行解决方案
方案1:窗口函数(最直观)
直接用Tableau的窗口函数,指定滚动12个月的范围求和:
SUM([All Terms]) OVER ( ORDER BY DATE_TRUNC('month', [Date]) RANGE BETWEEN 11 PRECEDING AND CURRENT ROW )
- 逻辑:按月份升序排序,计算当前行及之前11行(共12个月)的离职数总和
- 注意:需确保视图中
[Date]字段已按月份升序排列
方案2:表计算法
通过累计总和差值实现滚动计算:
RUNNING_SUM([All Terms]) - RUNNING_SUM(LAG([All Terms], 12))
- 逻辑:当前所有月份的累计总和,减去12个月前的累计总和,结果就是最近12个月的总数
- 注意:同样需要视图按月份升序排列,且数据需包含至少12个月的历史数据
方案3:灵活LOD表达式(不依赖视图排序)
如果需要不依赖视图排序的计算,可使用如下LOD:
SUM( {FIXED : SUM( IF DATE_TRUNC('month', [Date]) >= DATEADD('month', -11, DATE_TRUNC('month', [当前行日期])) AND DATE_TRUNC('month', [Date]) <= DATE_TRUNC('month', [当前行日期]) THEN [All Terms] END ) } )
- 替换
[当前行日期]为你视图中用于标记月份的日期字段(比如每个月的第一天/最后一天) - 逻辑:针对每个行的月份,计算过去11个月到当前月的所有离职数总和
使用步骤
- 新建计算字段,复制上述任意一种表达式
- 将该计算字段拖入视图,替换原有的单月离职数字段即可得到滚动累计值
内容的提问来源于stack exchange,提问作者NidenK
相关产品推荐
相关产品推荐

