我正在为我们的销售和营销部门开发数据集市,我遇到了建模挑战。我们的 ERP 以几种不同的方式存储定价数据:
- 列出每个项目的定价
- 产品线的定价折扣百分比,适用于客户组或特定客户
- 商品的自定义价格,适用于客户组或特定客户
定价部门主要使用这些数据进行操作,而不是分析。例如,他们为客户生成报告(“我有哪些特殊定价/折扣 %s?”),并确定当他们采用新的定价策略时需要更改哪些项目/项目组。
定价变化在一定程度上定期发生在小范围内,通常是在逐个客户或逐个项目的基础上进行。除了客户级别的折扣外,很少有对清单定价和团体定价(折扣和单个项目)进行大规模调整。
我一直在创建一个或多个事实表来表示这个过程。不幸的是,没有预先存在的定价业务密钥。也没有具体的“交易日期”,因为 ERP 没有(准确地)维护定价何时更改的记录。本质上,“定价事件”将是以下各项的组合:
- 生效日期
- 结束日期
- 项目或产品线
- (标价不需要)客户或客户群
- 价格金额或折扣百分比
单个事实表似乎有问题,因为我将不得不处理大量无效的维度和事实组合。首先,一条记录永远不会同时具有非 NULL 价格金额和非 NULL 折扣百分比;定价事件是非此即彼。其次,只有特定的维度组合对每个事实有效。例如,折扣百分比只会有一个产品线,而不是单个项目。
首先将定价建模为事实表是否有意义?如果是这样,我应该考虑多少张桌子?我的直觉是至少使用两个,一个用于百分比,一个用于价格金额,但这仍然会留下一个问题,即每条记录要么有一个有效的客户组,要么有一个有效的客户(或者都没有,对于标价),因为我们需要将客户特定的定价与客户可能拥有的任何团体定价分开。