我正在根据从多个OLTP源收集的数据构建本地OLAP多维数据集。请注意,我是以编程方式执行此操作,无法访问SSAS或基于MDX的工具等工具。
我的要求与OLTP系统用户的操作要求有所不同。我知道“在理论上”最好保留我可用的最原子粒度,但我没有理由在立方体中包含最低级别的数据。
例如(我正在简化),我有一个像“价格”这样的度量字段。此外,每个销售事实都有一个Version属性,其值如下:
这些描述了我们定价的内部发展,对我创建的报告至关重要。
但是,出于报告目的,每当我引用给定的事务时,我总是想知道所有版本的价值。因此,我正在考虑在多维数据集中使用像Version by Version这样的透视度量(版本在数据模型中仍然是它自己的实体),从而产生如下措施:
由于在给定时间点只有一个版本有效,因此我们不需要跨多个版本进行聚合。
已知优势
由于这将是一个本地立方体文件,所以看起来这种方法会 简化了比较Price的几个必需计算度量的创建 跨越不同版本(如果我使用MDX执行此操作,则不会在各种聚合级别创建计算度量的问题)
它还会将记录数减少3倍 和6,这将显着提高本地立方体的性能。
已知缺点
虽然数据模型将与业务流程匹配,但多维数据集不会将数据存储在最原子级别。分析师需要区分“按度量选择版本”,并且无法按版本进行过滤 - 他们将始终获得所有可用版本。
这种方法将大大增加措施的数量。对于 例如,我们跟踪的不是一个价格,而是几个 我们跟踪每笔交易的价格组件和其他措施。 因此,如果我们为每笔交易追踪十几个真实的措施,那就是 如果采用这种方法,最终可能会达到50-60个措施。
我理解对于非常大的Fact表,为了性能目的,最好将Fact表中的所有可能字段分解为Dimensions,但我不确定使用本地多维数据集时是否是这种情况,如考虑到本地立方体的局限性,我将把不到50,000条记录放到任何给定的立方体文件中。
我缺少这种方法还有其他缺点吗?