我正在基于从几个OLTP源收集的数据构建本地OLAP多维数据集 . 请注意,我是以编程方式执行此操作,无法访问SSAS或基于MDX的工具等工具 .

我的要求与OLTP系统用户的操作要求略有不同 . 我知道“理论上”最好保留我可用的最原子粒度,但我没有理由在立方体中包含最低级别的数据 .

例如(我正在简化),我有一个像“价格”这样的度量字段 . 此外,每个销售事实都有一个Version属性,其值如下:

  • 清单(原件/初始)

  • 初始报价

  • 调整后的报价

  • 已售出

这些描述了我们定价的内部发展,对我创建的报告至关重要 .

但是,出于报告目的,每当我引用给定的事务时,我总是想知道所有版本的 Value . 因此,我正在考虑在多维数据集中使用像Version by Version这样的透视度量(版本在数据模型中仍然是它自己的实体),从而产生如下度量的度量:

  • PriceList

  • PriceQuotedInitial

  • PriceQuotedAdjusted

  • PriceSold

由于在给定的时间点只有一个版本有效,因此我们不需要跨多个版本进行聚合 .

Known Advantages

  • 由于这将是一个本地多维数据集文件,看起来这种方法可以简化几个所需的计算度量的创建,这些度量比较不同版本的价格(如果我这样做,那么在各种聚合级别创建计算度量不会是一个问题MDX)

  • 它还会将记录数减少3到6倍,这将显着提高本地多维数据集的性能 .

Known Disadvantages

  • 虽然数据模型将与业务流程匹配,但多维数据集不会将数据存储在最原子级别 . 分析师需要区分“按度量选择版本”,并且无法按版本进行过滤 - 他们将始终获得所有可用版本 .

  • 这种方法将大大增加措施的数量 . 例如,我们跟踪的不只是一个价格,而是我们跟踪每个交易的几个价格组件和其他度量 . 因此,如果我们跟踪每个事务的十几个真正的度量,那么如果采用这种方法,最终可能会有50-60个度量 .

我理解,对于非常大的Fact表,为了性能目的,最好将Fact表中的所有可能字段分解为Dimensions,但我不确定使用本地多维数据集时是否是这种情况,因为很可能,鉴于本地多维数据集的局限性,我会将少于50,000条记录放入任何给定的多维数据集文件中 .

我缺少这种方法还有其他缺点吗?