首页/数据/数仓建模速查/DWD 与 DWS 的边界判据
分层与规范64 条

DWD 与 DWS 的边界判据

边界判据是是否需要下钻到单据/事件级:需要下钻的留在 DWD;只看维度组合下的聚合结果、且被多个下游复用,才进 DWS。

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

DWD 与 DWS 怎么分界

分界判据有两条最实用:一是下游是否需要下钻到单据或事件级记录,需要下钻的留在 DWD;二是同一维度组合的汇总是否被两个以上下游复用,被复用的才值得落成 DWS。DWD 保存业务过程粒度,一行对应一笔订单或一次事件;DWS 在维度组合上做轻度汇总,粒度由维度组合与周期共同确定。判断顺序不要反过来:先问复用范围和下钻需求,再决定要不要物化汇总。

基本信息

DWD 定位明细层,保留业务过程粒度,一行一事件或一单据
DWS 定位主题域轻度汇总,粒度为维度组合乘周期
首要判据下游是否需要下钻到单条记录
复用判据同一汇总被两个以上下游消费才建 DWS
反例单个报表专用的特殊口径聚合,落 ADS 或留在报表层
常见错误报表 SQL 直接对 DWD 写复杂聚合,相当于把 DWS 的活挪到查询时做
建模方式DWD 事实表加维度表,DWS 基于 DWD 汇总并声明粒度

典型使用场景

  • 门店日销售汇总被财务、运营、BI 三方同时使用,复用量足够,落成 DWS 值得
  • 只有一张临时报表需要的门店乘品类乘小时汇总,直接放 ADS 或不落表,避免产生无人维护的中间层
  • 下游要追查单笔订单的处理轨迹,这类需求落在 DWD,不能靠 DWS 反推
  • 汇总口径还在频繁调整时先不物化,等口径稳定、消费方确定后再建 DWS
  • 做层间复核:粒度相同的两张汇总表必须合并,同一指标不允许在两个地方各算一遍

边界判断顺序

边界判断顺序
1) 下游需要 order_id 级明细记录            -> 留在 DWD
2) 同一维度组合的汇总被 2 个以上下游复用    -> 建 DWS
3) 只有单个报表使用的特殊口径聚合          -> 放 ADS 或报表层,不落 DWS
4) 汇总粒度与已有 DWS 表相同                -> 复用或扩列,不新建表
5) 粒度未定、口径还在调整                  -> 暂缓物化,先在 DWD 上出临时结果

两条判据的倾向

判据倾向 DWD倾向 DWS
数据粒度一行一事件或一单据维度组合乘周期
下游用法下钻、明细追溯看板、指标、复用
复用范围天然公共明细被两个以上下游消费
口径稳定性来自业务过程,相对稳定需先稳定再物化
维护成本随源表结构变化随维度组合膨胀
把 DWD 当 DWS 用,报表 SQL 每次都重算明细聚合,既浪费资源,又让同一指标的口径散落在各个报表里,改一次要翻十几份 SQL。
判据冲突时优先看复用范围:DWS 的价值来自被多处消费,只有一张报表用到的汇总放在中间层,后续几乎必然沦为无人维护的僵尸表。

易错点

  • 汇总只有一张报表使用却建了 DWS:无人维护,半年后与报表口径已经不一致
  • 该保留明细的数据汇总进 DWS:下游要下钻时只能回源系统取数,链路绕远且口径不统一
  • 同粒度重复建表:同一指标出现两个数字,业务方每次都要人工判断信哪个
  • 口径未稳定就物化 DWS:口径一变就要全量重刷,且历史数据无法回溯
  • DWS 表不声明粒度与过滤条件(例如仅含已支付订单):下游按全量理解,指标口径整体偏移

数据来源与参考

  • Kimball《数据仓库工具箱(第3版)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌