本文是详细介绍数据仓库中的 OLAP 多维数据集功能系列博文的第二篇博文,OLAP 多维数据集是实现 SCSM 2012 中新增自助报表功能的一项新功能。
体系结构概述
在下图中,SQL Server Business Intelligence Development Studio (BIDS) 的屏幕截图描绘了 OLAP 多维数据集所需的主要组件。这些组件是数据源、数据源视图、多维数据集和维度。
图:BIDS 分析服务的 DWANalysisData DB 视图
数据源:
数据源是 OLAP 多维数据集中包含的所有数据的来源。OLAP 多维数据集将连接到数据源以读取和处理原始数据,从而执行相关度量值的聚合和计算。所有 SCSM 多维数据集的数据源均为 SCSM 数据市场,其中包括针对 Operations Manager 和 Configuration Manager 的数据市场。有关数据源的身份验证信息必须存储在 Analysis Services 中,才能建立正确的权限级别。
数据源视图:
数据源视图 (DSV) 是表示数据源(例如 SCSM 数据市场)的维度、事实和支架维度表的视图集合。DSV 将包含主键和外键等数据表之间的所有关系。换句话说,DSV 将指定 Analysis Services DB 如何映射到关系架构,并在关系数据库上提供一个抽象层。利用这个抽象层,可以定义事实和维度数据表之间的关系,即使数据源关系数据库中不存在任何数据表。在 DSV 中也可以定义 DW 维度架构中原本不存在的指定的计算、自定义度量值和新属性。例如,如果事件的状态为已解决或已关闭,则为“Incidents Resolved”定义布尔值的指定计算将该值计算为“正确”。现在,我们可以使用指定的计算定义一个度量值,以便显示已解决事件的百分比、已解决事件的总数和未解决事件的总数等有用信息。
指定计算的另一个简单示例是“ReleasesImplementedOnSchedule”,它提供对实际结束日期小于或等于计划结束日期的发布数量记录的快速健康状态检查。
多维数据集:
上面的 OLAP 多维数据集简介部分中提供了 OLAP 多维数据集的定义。
维度:
Analysis Services 中的维度引用 SCSM DW 的维度。在 SCSM 中,维度大体上与 ManagementPackClass 类似。每个 MP 类具有一个属性列表,而每个维度包含一个特性列表,并且每个特性映射到类中的一个属性。维度允许筛选、分组和标记数据。例如,您可以按照已安装的操作系统来筛选计算机,以及按性别或年龄将人员分入各个类别。然后,可以按照数据被自然地细分为这些层次结构和类别的格式呈现数据,以便进行更深入的分析。维度也可以包含自然的层次结构,以便使用户能够“深化”至更多的详细粒度级别。例如,日期维度具有“年度 → 季度 → 月份 → 星期 → 日期”层次结构。
下图中提供了包含日期、地区和产品维度的多维数据集的示意图:
图:包含日期、地区和产品维度的多维数据集
例如,Microsoft 可能需要 Xbox 360 游戏控制台 2010 年销售情况的快速、高级摘要。他们可以进一步深化,以获取更具针对性的时间框架内的销售数字。业务分析师可能希望考核推出全新控制台设计和无 Kinect 控制器游戏体验对 Xbox 360 销售的影响。这有助于他们确定出现何种销售趋势,以及需要对业务战略进行哪些潜在的修正。通过按照日期维度进行筛选,可以迅速提供和利用这方面的信息。由于维度在设计方面可以使客户轻松地筛选和分组属性和数据,因此只能对数据进行这种切片和切块。
在 SCSM 2012 中,所有多维数据集将共享一组共同的维度。所有维度均使用主 DW 数据市场作为数据源,甚至在多市场应用场景中也同样如此。在多市场应用场景中,这可能导致在处理多维数据集时出现维度键错误。请参阅下面有关处理的故障排除部分,了解如何解决这一问题的更多详细信息。
多维数据集的分解
此部分将定义界定 Analysis Services 中实际多维数据集对象的元素:
度量值组
度量值组是与 DW 术语中的事实完全相同的概念。正如 DW 中的事实包含数字度量值一样,度量值组包含多维数据集的度量值。多维数据集中源自数据源视图中的单一事实数据表的所有度量值,也可以被视为一个度量值组。但是,存在这样一种情形,即多维数据集中的度量值源自多个事实数据表。相同粒度的度量值统一为一个度量值组。度量值组定义哪些数据将被载入系统、如何加载数据,以及如何将数据绑定到多维度多维数据集。
每个度量值组还包含一组分区,这些分区在单独的非重叠部分中保留实际数据。度量值组还包含聚合设计,它定义为每个度量值组计算的预汇总的数据集,以便提高用户查询的性能。
度量值
度量值是用户希望切片、切块、聚合和分析的数字值;这是用户不希望在数据仓库基础结构上构建多维数据集的其中一个根本原因。通过使用 Analysis Services,用户可以构建应用业务规则和计算来格式化和显示可自定义格式的度量值的多维数据集。多维数据集的许多开发时间花费在将显示哪些度量值和如何计算度量值方面。
度量值通常是映射到 DW 事实数据表中的数字列的值,但也可以在维度和退化维度属性上创建度量值。这些度量值是所分析的多维数据集的最重要的值,而且主要对浏览多维数据集的最终用户具有意义。DW 中存在的一个现有度量值的示例是 ActivityTotalTimeMeasure。ActivityTotalTimeMeasure 是 ActivityStatusDurationFact 中表示每项活动处于特定状态的时间的度量值。度量值的粒度由引用的所有维度组成。例如,关系事实“ComputerHostsOperatingSystem”的粒度包括计算机和操作系统维度。
根据度量值计算聚合函数,以便进一步进行数据分析。最常见的聚合函数是 Sum。例如,常见的多维数据集查询是对处于“进行中”状态的所有活动的总时间进行求和。其他常见的聚合函数包括 Min、Max 和 Count。
处理多维数据集中的原始数据之后,用户可以使用多维表达式 (MDX) 来定义自己的度量值表达式或已计算的成员,从而执行更复杂的计算和查询。MDX 是查询和访问存储在 OLAP 系统中数据的行业标准,因为 SQL 并非针对使用受多维数据库支持的数据模型而设计。
深化
当用户深化多维数据集中的数据时,他们在不同的摘要级别分析数据。数据粒度随用户深化而改变,基本上在层次结构中的不同级别检查数据。随着用户进一步深化,它们从摘要信息移至具有更窄重点的数据。
下面是一些示例:
1) 深化数据以了解美国的人口统计信息,然后了解华盛顿州、西雅图大都市区、雷德蒙德市的人口统计信息,最后了解 Microsoft 的人口统计信息。
2) Zune 便携式媒体播放器 2010 年度的销售数字,接着是该年度第四季度、十二月份、圣诞节前一周的销售数字,最后是平安夜的销售数字。(另请参见上述的 Microsoft Xbox 360 示例。)
下图说明了将六月份 Jaguar 的销售数据深化至每一天的销售信息。
图:深化数据以了解六月份 Jaguar 销售详情的示例
钻取
当用户“钻取”数据时,他们希望了解构成多维数据集聚合数据的所有单个事务。换句话说,用户可以在最低的粒度级别检索数据,获取指定的度量值。例如,当指定特定月份和产品类别的销售数据时,可以钻取该数据,以查看数据单元格中包含的每个数据表行的列表。
术语“深化”和“钻取”非常容易混淆。主要区别在于深化是针对多维数据集中预定义的数据层次结构(美国 → 华盛顿 → 西雅图)的操作,而钻取直接进入最低的数据粒度,从聚合在单个单元格的数据源检索一组行。
关键绩效指标
KPI 使企业能够通过衡量实现预定义目标的进度而衡量企业及其绩效的健康状况。KPI 是为了监测实现特定目的和目标的进度而定义的业务指标。KPI 通常具有目标和实际值,它表示对组织的成功至关重要的量化目标。KPI 通常显示在记分卡上,该记分卡包含一组 KPI,以便在一个快照中表明业务的总体健康状况。
KPI 的一个示例是在 48 小时内完成所有更改请求。KPI 可用于衡量在该时间范围内解决更改请求的百分比。SM 仪表板以视觉方式表示 KPI。在下图中,在 48 小时内完成所有更改请求的 KPI 目标值是 75%。
分区
分区是在一个度量值组中保留其中一些数据或全部数据的一种数据结构。每个度量值组分为多个分区,定义载入度量值组的事实数据的子集。Analysis Services 标准版仅允许每个度量值组一个分区,而企业版允许一个度量值组包含多个分区。分区是一种对最终用户透明的功能,但它主要影响多维数据集的性能和可扩展性。度量值组的所有分区始终存在于相同的物理 DB 中。
分区使管理员能够更好地管理多维数据集和提高多维数据集的性能。例如,您可以删除或重新处理度量值组的一个分区中的数据,而且不影响其余的度量值组。在将新数据载入事实数据表时,只有包含新数据的分区受到影响。
分区还可以提高对多维数据集的处理和查询性能。Analysis Services 可以并行处理多个分区,从而更有效地使用服务器的 CPU 和内存资源。在运行查询时,Analysis Services 还将从多个分区提取、处理和聚合数据。仅扫描包含与查询相关数据的分区,从而减少了所需的总体 IO 数量。
分区策略的一个示例是将每个月的事实数据表置入每月的分区。在每月结束时,所有新数据将进入新的分区,这将导致自然分发具有非重叠值的数据。
聚合
多维数据集中的聚合是预汇总的数据集,它们与具有 GROUP BY 子句的 SQL SELECT 语句类似。Analysis Services 可以在回答查询时使用这些聚合,以减少所需的计算量,从而迅速地向用户返回结果。多维数据集中内置的聚合可以减少 Analysis Services 在查询时间必须执行的聚合数量。构建正确的聚合可以提高查询性能,而且在多维数据集的整个生存期,常常随着查询和使用情况的变化而不断发展。
通常创建对大多数多维数据集的查询非常有用的一组基本的聚合。为度量值组中多维数据集的每个分区构建聚合。构建聚合之后,预汇总数据集中包括特定的维度属性。然后,用户在浏览多维数据集时,可以根据这些聚合快速查询数据。聚合必须认真加以设计,因为潜在聚合的数量非常大,构建所有聚合会占用极不合理的时间量和存储空间。
SCSM DW 团队在构建和设计 SCSM OLAP 多维数据集中的聚合时可以利用两个选项:
1) 设置“性能提升达到”选项
2) 基于使用情况的优化
性能提升达到选项
“性能提升达到”选项定义构建聚合的百分比。例如,将此选项设为默认值并采用 30% 的推荐值,意味着构建的聚合可以使多维数据集的估计性能提升 30%。请注意,这并不意味着将构建 30% 的可能聚合。
基于使用情况的优化
基于使用情况的优化允许 Analysis Services 记录数据请求,从而在运行查询时,将信息馈入聚合设计流程。然后,Analysis Services 将审核数据,并建议应构建哪些聚合,以便提供最佳的估计性能提升。
—— Danny H Chen