Snowflake环境下员工股权激励链路维度建模方案咨询
股权激励场景维度建模方案建议
核心前提
该场景的业务实体为强依赖层级:Vesting脱离对应Grant无业务意义,Planned Distribution脱离对应Vesting无业务意义,所有分析需求最终都可下钻到「单条计划分配记录」这个最细粒度,所有上层实体的属性本质上是该最细粒度的继承属性。
三个待选方案评估
- 方案1:独立维度+无事实事实表
该方案的疑问完全成立,不可行。不可独立被业务方理解、不能脱离父节点单独分析的实体不符合独立维度的设计标准,额外增加的无事实事实表只会冗余关联逻辑,提升数据出错概率,同时多表关联的查询性能远低于宽表查询,完全没有必要性。 - 方案2:计划分配事实表下沉上层属性
这是Kimball星型模型针对强层级交易场景的标准实践,符合大部分分析需求,结合Snowflake的列存高压缩、微分区优化特性,宽表的存储成本可忽略,查询性能远优于多表关联。你提到的「后续其他事实表需复用Grant、Vesting信息」的缺陷可通过补充一致性维度轻松解决,并不需要放弃该方案的核心优势。 - 方案3:独立维度关联父节点自然键+无事实事实表
属于方案1的冗余改良版,没有必要性。已经通过自然键关联父子维度的前提下,额外新增无事实事实表只会提升ETL维护成本,且自然键关联在大数据量下的性能远不如事实表直接存储代理键。
最终落地建议(适配Snowflake)
在方案2的基础上做优化,兼顾性能、扩展性和易维护性:
- 核心事实表定为计划分配事实表,粒度为单条计划分配记录,存储所有可度量字段(可行权数量、行权单价等),同时冗余存储Grant、Vesting的所有静态属性(授予日公允价、归属年度等不会发生变更的属性),满足90%以上的常规分析需求,无需多表关联。
- 额外保留Grant、Vesting两个一致性维度,事实表中存储两个维度的代理键,后续如果新增实际行权事实表、个税扣缴事实表等其他业务事实表,可直接复用这两个一致性维度,彻底解决方案2的扩展性缺陷。
- 若需做时点分析(如每月末统计未归属、未行权权益总规模),直接基于计划分配事实表构建周期快照表即可,无需额外设计无事实事实表。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

