12

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

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

但是,要创建多维数据集,我相信我的数据源结构需要采用“星形”或“雪花”配置(我认为现在不是)。

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

谢谢

4

2 回答 2

10

是的,这是基本思想。您使用高度规范化的 OLTP 数据库并将其反规范化为多维数据集,以便对数据进行切片和切块,然后在其上呈现报告。逻辑设计技术称为维度建模。Kimball Group有大量关于维度建模的重要信息。Ralph Kimball关于这个主题的书籍也非常出色。如果您想了解有关 BI 工具本身的更多信息,请查看有关 SSIS、分析服务等的虚拟实验室。

于 2009-06-23T05:28:57.813 回答
5

答案是:是的,但是。

SSAS 中的维度具有属性之间的关系,可以使用一系列字段来筛选切片。这些关系可以是分层的(多于一层深度 - 一个属性可以有父级和子级。您还可以建立向下钻取路径(在 SSAS 中称为层次结构),其行为类似于属性但具有引导向下钻取。

为了做到这一点,您需要在数据库中提供存在严格层次关系的键(即键不能有模糊关系,其中一个孩子可以有多个父级)。请注意,这不是故事的全部,但目前已经足够接近现实了。

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

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

如果您的源数据中的键可以具有与雪花等效的数据语义,那么您可以通过源系统上的一系列数据库视图来填充您的多维数据集,这些视图以足够类似于雪花的格式呈现基础数据以供使用对于多维数据集尺寸(我实际上已经做过几次)。大量使用合成密钥的模式更有可能为此工作良好。

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

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

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

一些附带条件:

  1. 可以使多维数据集以实时模式运行,它们只需向基础数据发出查询。这可能会导致对源数据的查询效率低下,因此不建议这样做,除非您真的确信自己知道自己在做什么。

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

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

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

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

  4. 如果您的基础生产数据存在严重的数据质量问题,它们将反映在多维数据集中。GIGO。

于 2010-06-22T11:56:48.217 回答