从关系OLTP数据库到OLAP多维数据集的最佳方法是什么?

时间:2009-06-23 05:06:43

标签: database ssis ssas olap

我有一个相当标准的OLTP规范化数据库,我已经意识到我需要在数据的不同维度上做一些复杂的查询,平均值,标准偏差。

所以我转向了SSAS并创建了OLAP多维数据集。

然而,为了创建立方体,我相信我的数据源结构需要采用“星形”或“雪花”配置(我认为现在不是这样)。

使用SSIS在我的主OLTP数据库上进行某种ETL过程到另一个具有事实和维度的正确“星形”配置的关系数据库是正常的过程,然后使用此数据库作为数据源OLAP多维数据集?

由于

2 个答案:

答案 0 :(得分:9)

是的,这是基本的想法。您可以使用高度标准化的OLTP数据库并将其去规范化为多维数据集,以便对数据进行切片和切块,然后在其上显示报告。逻辑设计技术称为维度建模。在dimensional modeling有大量有关Kimball Group的信息。 Ralph Kimball的books on the subject也很出色。如果您想了解有关BI工具本身的更多信息,请查看有关SSIS的virtual labs,分析服务等。

答案 1 :(得分:5)

答案是:是的,但是。

SSAS中的维度具有属性之间的关系,可以使用一系列字段来过滤切片。这些关系可以是分层的(多个级别深度 - 一个属性可以有父级和子级。您还可以建立向下钻取路径(在SSAS中称为层次结构),它们像属性一样,但具有向导钻取。

为了做到这一点,你需要在数据库中提供以严格的层次关系存在的密钥(即密钥不能具有模糊关系,其中一个孩子可以有多个父母)。请注意,这不是整个故事,但目前它已接近现实。

这些层次结构可以由系统从平面数据结构构建,也可以通过雪花呈现,其中关系在基础数据源视图中标记(DSV是多维数据集元数据的一部分,可用于按照方式按摩数据类似于数据库视图)。

雪花是一种3NF-ish模式(它不一定是3NF - 你可以在实践中展平它的一部分)只有1:M的关系。 SSAS可以支持一些其他维度结构,例如父子(具有递归自连接的父子关系)和M:M维度(M:M关系 - 正是它们听起来像)。这种尺寸更加繁琐,但可能对您有用。

如果源数据中的密钥可以具有与雪花相同的数据语义,那么您可以通过源系统上的一系列数据库视图填充多维数据集,这些数据库视图以足够的雪花状呈现基础数据用于多维数据集维度的格式(我实际上已经在几次这样做了)。大量使用合成密钥的模式更有可能适用于此。

如果您的供应商或其他方不允许您向源数据库添加视图,则可以使用数据源视图。 DSV可以具有称为“命名查询”的虚拟表,这些表是从数据库查询填充的。

事实表加入维度。在SSAS2005 +中,您可以在一个维度内的不同粒子上连接不同的事实表。在数据仓库中,我通常不会对此有太多用处,但如果您尝试使用源数据而不必过度按摩,则此功能可能很有用。

如果这不起作用,那么您可能必须编写一个ETL过程来填充星型或雪花模式。

一些附带条件:

  1. 可以使多维数据集以实时模式运行,只需向底层数据发出查询即可。这有可能会针对您的源数据创建低效查询,因此除非您确信自己知道自己在做什么,否则不建议这样做。

  2. (i)的应用程序,您可能无法将多维数据集用作应用程序中屏幕的数据源。如果您需要计算用户想要在屏幕上看到的内容的平均值,您可能需要在屏幕后面的存储过程中计算它。

  3. 如果执行此操作,请设置复制数据库并从中填充多维数据集。定期刷新此数据库,以便您的ETL过程可以从内部一致的数据集运行。如果从实时数据库运行,则可能会冒一些后续填充的项目,这取决于运行相应进程后创建的记录。

    您可以在运行维度的情况下使用加载,然后将新数据输入系统。当事实表加载运行时,它现在包含依赖于尚未加载的维度数据的数据。这将破坏多维数据集并导致加载过程失败。批量刷新复制数据库以运行ETL或多维数据集负载将缓解此问题。

    如果您没有复制数据库的选项,则可以为缺失数据设置更多松弛策略。 / p>

  4. 如果基础生产数据存在重大数据质量问题,则会反映在多维数据集中。 GIGO。