我有一个相当标准的OLTP规范化数据库,我意识到我需要做一些复杂的查询,平均值,数据中不同维度的标准偏差。
所以我转向SSAS并创建了OLAP多维数据集。
然而,为了创建立方体,我相信我的数据源结构需要采用“星形”或“雪花”配置(我认为现在不是这样)。
使用SSIS在我的主OLTP DB上进行某种ETL过程的常规过程是使用事实和维度处于正确“星形”配置的另一个关系数据库,然后使用此DB作为OLAP多维数据集的数据源吗?
谢谢
我有一个相当标准的OLTP规范化数据库,我意识到我需要做一些复杂的查询,平均值,数据中不同维度的标准偏差。
所以我转向SSAS并创建了OLAP多维数据集。
然而,为了创建立方体,我相信我的数据源结构需要采用“星形”或“雪花”配置(我认为现在不是这样)。
使用SSIS在我的主OLTP DB上进行某种ETL过程的常规过程是使用事实和维度处于正确“星形”配置的另一个关系数据库,然后使用此DB作为OLAP多维数据集的数据源吗?
谢谢
是的,这是基本的想法。您可以使用高度规范化的OLTP数据库并将其去规范化为多维数据集,以便对数据进行切片和切块,然后在其上显示报告。逻辑设计技术称为维度建模。有很多关于的信息 维度建模 过了 金博集团。 Ralph Kimball的 有关这一主题的书籍 也很棒。如果您想了解有关BI工具本身的更多信息,请查看 虚拟实验室 关于SSIS,分析服务等。
答案是:是的,但是。
SSAS中的维度具有属性之间的关系,可以使用一系列字段来过滤切片。这些关系可以是分层的(多个级别深度 - 一个属性可以有父级和子级。您还可以建立向下钻取路径(在SSAS中称为层次结构),其作用类似于属性但具有向导钻取。
为了做到这一点,你需要在数据库中提供以严格的层次关系存在的密钥(即密钥不能具有模糊关系,其中一个孩子可以有多个父母)。请注意,这不是整个故事,但它现在已接近现实。
这些层次结构可以由系统从平面数据结构构建,也可以通过雪花呈现,在基础数据源视图中标记关系(DSV是多维数据集元数据的一部分,可用于以类似于数据库的方式按摩数据视图)。
雪花是一种3NF-ish模式(它不一定是3NF - 你可以在实践中展平它的一部分)只有1:M的关系。 SSAS可以支持一些其他维度结构,例如父子(具有递归自连接的父子关系)和M:M维度(M:M关系 - 正是它们听起来像)。这种尺寸更加繁琐,但可能对您有用。
如果您的源数据中的键具有与雪花相同的数据语义,那么您可以通过源系统上的一系列数据库视图填充多维数据集,这些数据库视图以类似雪花的格式呈现基础数据以供使用对于立方体尺寸(我实际上已经在几次这样做了)。大量使用合成密钥的模式更有可能适用于此。
如果您的供应商或其他方不允许您向源数据库添加视图,则可以使用数据源视图。 DSV可以具有称为“命名查询”的虚拟表,这些表是从数据库查询填充的。
事实表与维度相关联。在SSAS2005 +中,您可以在一个维度内的不同粒子上连接不同的事实表。在数据仓库中,我通常不会对此有太多用处,但如果您尝试使用源数据而不必过度按摩它,则此功能可能很有用。
如果这不起作用,那么您可能必须编写一个ETL过程来填充星型或雪花模式。
一些附带条件:
可以使多维数据集以实时模式运行,它们只是向底层数据发出查询。这有可能会针对您的源数据创建低效查询,因此除非您确信自己知道自己在做什么,否则不建议这样做。
(i)的合适,您可能无法使用多维数据集作为应用程序中屏幕的数据源。如果您需要计算用户想要在屏幕上看到的内容的平均值,您可能需要在屏幕后面的存储过程中计算它。
如果执行此操作,请设置复制数据库并从中填充多维数据集。定期刷新此数据库,以便ETL过程可以从内部一致的数据集运行。如果从实时数据库运行,则可能会冒一些后续填充的项目,这取决于运行相应进程后创建的记录。
您可以处于运行维度加载的情况,然后将新数据输入系统。当事实表加载运行时,它现在包含依赖于尚未加载的维度数据的数据。这将破坏多维数据集并导致加载过程失败。批量刷新复制数据库以运行ETL或多维数据集加载将缓解此问题。
如果您没有复制数据库的选项,则可以为丢失的数据设置更多松弛策略。
如果您的基础生产数据存在严重的数据质量问题,它们将反映在多维数据集中。 GIGO。