首页/数据/数仓建模速查/区域归属的历史口径案例
维度与事实设计149 条

区域归属的历史口径案例

销售区域(大区-小区-负责人)经常调整:要支持「按当时区域」统计必须版本化;只看当前归属则用类型 1 覆盖并重刷历史标签。

数仓建模速查数据更新于 2026-10-13

区域归属的历史口径

销售区域(大区、小区、负责人)会随组织调整而变化,这是维度历史归属最典型的案例。若要支持「按当时区域」统计(例如考核当时的负责人),必须版本化保留历史归属;若业务只关心当前归属,可以用类型 1 覆盖并重刷历史标签,但要明确声明「历史业绩按最新区域重述」。两种方案的结论不同,选型必须由业务确认。

基本信息

属性集大区 / 小区 / 区域负责人
方案 A类型 2 保留历史归属,按当时区域统计
方案 B类型 1 覆盖 + 事实按新区域重刷
影响指标责任归属、考核、返利类指标
选型依据业务对考核口径与历史可比性的要求
切换要求同一报表内不得新旧口径并存

典型使用场景

  • 责任人考核:历史业绩算给当年的区域负责人,还是算给现任
  • 区域合并:两个小区合并成大区后历史数据如何汇总展示
  • 返利结算:返利比例按签约时的区域政策计算,需要当时归属
  • 组织复盘:对比调整前后的区域产能,需要可比的区域划分
  • 客户归属:大客户在区域调整后划归新团队,跟进记录连续

按当时归属与当前归属取数

按当时归属与当前归属取数
-- 当时口径:事实挂的是发生时的区域代理键
SELECT r.region_name, sum(f.amt) AS amt
FROM fact_sales f
JOIN dim_region r ON f.region_sk = r.region_sk
GROUP BY r.region_name;   -- 按事实发生时的区域归属汇总
-- 当前口径:先取当前版本再关联
SELECT r.region_name, sum(f.amt) AS amt
FROM fact_sales f
JOIN dim_customer c ON f.customer_sk = c.customer_sk
JOIN dim_region r ON c.region_sk = r.region_sk AND r.is_current = 1
GROUP BY r.region_name;   -- 按客户当前归属重述历史

两种方案对比

对比项类型 2 保留历史类型 1 覆盖重刷
历史归属可还原当时区域历史被改写为当前区域
考核可用性支持按当时责任人考核只反映当前组织
维护成本成员版本多,加工复杂维护简单,重刷有成本
跨期可比区域调整后趋势断层口径统一,便于同比
两个方案对责任归属类指标影响很大,选型必须与业务确认考核口径:同一套数据同时支持两套口径时,应分别在事实层与客户维层面提供入口,而不是让报表各自决定。
版本化之后要保证旧事实已正确关联到对应版本:如果历史事实仍在引用旧代理键而维度已覆盖更新,就会出现「口径声称按当时区域,实际按当前区域」的假版本化。

易错点

  • 用当前区域回顾历史业绩,考核结果与当年实际责任人不符,引发争议
  • 版本化之后旧事实未重关联,新旧口径并存,同一指标两个数值
  • 区域调整未记录生效日期,无法判断某笔业绩应归哪个版本
  • 用类型 1 覆盖却不声明历史是否重述,同比数据无法解释

数据来源与参考

  • Kimball Group:维度历史归属
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌