SCSM 数据仓库中的 OLAP 多维数据集:在管理包中为 OLAP 多维数据集建模
本文是详述数据仓库中 OLAP 多维数据集功能博文系列中的第三篇,OLAP 多维数据集是一项全新的功能,其可启用 SCSM 2012 中添加的自助报告功能。
在管理包中为 OLAP 多维数据集建模
为了为 SCSM 2012 中引入的新的多维数据集 MP 元素建模,用户应利用定义自定义 MP 元素的功能。这些 MP 元素可让用户以声明的方式在一个更高的抽象级别上定义和自定义一个 OLAP 多维数据集。基于该定义,这些 MP 元素的部署将在一个更高的详细粒度级别上创建多维数据集的正确关系、组件和基础构建块,而无需进一步的用户指导。OLAP 多维数据集中引入了两大主要 MP 元素:
SystemCenterCube
CubeExtension
SystemCenterCube
SystemCenterCube 元素根据用户的特定需要在多个详细层级上定义 OLAP 多维数据集。该元素包含以下子元素:
MeasureGroups
替换
CustomMDX
NamedCalculations
度量值
KPI
操作(目前仅支持钻取操作)
ManyToManyRelationships
MeasureGroupss:
每个多维数据集都包含一个存在于数据集市中的事实集合,该集合中的每个成员都对应一个度量值组。每个度量值组必须具有其在多维数据集中自有的唯一名称,但是某个单一的事实可能对应一个多维数据集中的多个度量值组。例如,抽象关系“WorkItemAssignedToUser”可能将在一个多维数据集中被定义三次,每次都有唯一的度量值组名称“ChangeRequestAssignedToUser”、“IncidentAssignedToUser”和“ProblemAssignedToUser”。正如我们将在“替换”部分所看到的,用户可自定义事实,因此多维数据集的各个度量值组中仅包含更改请求、事件和问题。
以下示例阐释了针对 IncidentAssignedToUser 度量值组的 MP 元素。
< MeasureGroup DateDimAlias ="IncidentAssignedToUserDateDim" MeasureGroupName -"IncidentAssignedTouser" Fact ="DWBase!WorkItemAssignedToUserFact"/>
当多维数据集被部署后,维度、子维度和外键关系将自动计算,DSV 将使用这些新元素进行更新。
属性 |
是否必需 |
值 |
定义 |
DateDimAlias |
否 | 字符串 |
将在此度量值组筛选的日期维度的角色扮演名称。如果未定义别名,那么日期维度角色扮演名称将自动为“(MeasureGroupName)_DateDim” |
MeasureGroupName |
是 | 字符串 |
多维数据集中的度量值组的名称。该名称必须在多维数据集中是唯一的。 |
Fact |
是 | Relationship 或 CustomFact |
度量值组的目标,必须是数据仓库中的一个事实。 |
替换:
由于数据仓库中的关系事实可能以抽象关系和维度为目标,因此存在让用户替换具体维度的需求,从而度量值组将只包含用户希望浏览的特定实例。
以下示例说明了这一点:
<Substitution MeasureGroupName="IncidentAssignedTouser" RelationshipEndpoint="Source" Relationship="Workitem!System.WorkItemAssignedToUser" TargetDimension="DWBase!WorkItemDim" ReplacementDimension="IncidentDW!IncidentDim"/>
在本示例中,“IncidentAssignedToUser”度量值组指向“WorkitemAssignedToUser”关系。然而,该关系将不仅包含事件,还将包含被分配到任何用户的更改请求和问题。为了确保该度量值组只包含事件,我们将使用“IncidentDim”替换“WorkItemDim”。这在实质上意味着在 DSV 中为该度量值组创建的表将自动执行一个将 WorkItemDim 与 IncidentDim 内联的操作,并基于 EntityDimKey 或 BaseManagedEntityId 仅返回联接有效的实例。
请注意,用户必须定义关系端点,用户将希望在这些端点上执行替换操作。由于源维度和端点维度有可能是相同的,而且我们需要一种方法来唯一识别应替换的维度,因此我们需要这一元素。“WorkItemRelates to WorkItem”便是该关系的一个示例。
替换元素也将用于定义多维数据集的角色扮演维度。换句话说,用户可定义某一维度的角色扮演名称,但不需要实际替换一个维度。实际上,这一情形中的替换操作并非面向维度进行,而是针对多维数据集维度或角色扮演维度名称。以下显示了一个示例:
<Substitution MeasureGroupName="IncidentAssignedToUser" RelationshipEndpoint="Target" Relationship="Workitem!System.WorkItemAssignedToUser" AliasTargetDimensionAs="AssignedToUserDim" TargetDimension="DWBase!UserDim"/>
在此示例中,角色扮演多维数据集维度名为“AssignedToUserDim”。这是将用于实际筛选该多维数据集的维度的名称。通过让用户定义角色扮演的名称,名称可经特殊定制,以在能够获得更高级的筛选和分析功能的多维数据集中启用需要的多对多关系。
最后,替换不仅对关系事实有效,对于自定义事实同样有效。在本应用场景中,关系端点将被设置为“无”。
属性 |
是否必需 |
值 |
定义 |
MeasureGroupName |
是 | 字符串 |
用于执行替换的度量值组的名称 |
RelationshipEndPoint |
是 | (Target, Source, None) |
执行替换的关系的端点。默认情况下,(针对自定义事实的)值为 None |
Relationship |
否 | ManagementPackRelationship |
用于替换的关系。 |
AliasTargetDimensionAs |
否 | 字符串 |
原始目标维度的角色扮演名称 |
AliasReplacementDimensionsAs |
否 | 字符串 |
替换维度的角色扮演名称 |
DimensionAlias |
否 | ManagementPackDimension |
来自自定义事实的维度别名(如存在) |
自定义的 MDX:
自定义的 MDX(多维度表达式)脚本可让用户根据具体规范修改和定制多维数据集,以满足其具体需求。由于 SCSM 多维数据集是基于模型的,因此其无法在为某一特定用户的域特定业务需求而考虑大量要求和准确规范时,确定用户所有可能的语义需求。自定义的 MDX 可让用户定义 MDX 脚本,该脚本将在多维数据集顶部应用,以突出它们需要度量值和检测的特定应用场景。
命名计算:
命名的计算允许用户在某一自定义度量值稍后可采用的维度上定义新属性。这可让最终用户在实质上扩展维度架构,并自定义架构以满足其具体需求。让我们看一个 SystemCenterWorkItemsCube 中的示例。
<NamedCalculation ID="IncidentsPastTargetResolutionTime" Target="IncidentDW!IncidentDim" ColumnType="Int">
<Calculation>(case when ( (([Status] = 'IncidentStatusEnum.Resolved' OR [Status] = 'IncidentStatusEnum.Closed') AND ResolvedDate > TargetResolutionTime) OR (([Status] != 'IncidentStatusEnum.Resolved' AND [Status] != 'IncidentStatusEnum.Closed') AND GETUTCDATE() > TargetResolutionTime)) then 1 else 0 end )</Calculation>
</NamedCalculation>
在本示例中,事件维度包含诸如事件状态和目标解析时间等数据。然而,该维度中不存在计算未达到目标解析时间的事件数量的本机度量值。该数据对于系统管理员十分有用。我们可使用命名计算来枚举所需的应用场景,并聚合数据,从而自定义的度量值可以定位新属性,并向最终用户呈现此信息。
请注意,此时的 NamedCalculation 支持仅针对维度。当前将不存在针对事实的支持。
属性 |
是否必需 |
值 |
定义 |
ID |
是 | 字符串 |
命名计算的名称。 |
Target |
是 | ManagementPackDimension |
度量值的目标维度 |
ColumnType |
是 | (Int, Double) |
列的 SQL 类型 |
Type |
否 | (Count, Sum) |
度量值的类型 |
子元素 <Calculation> 包含命名计算的定义,并将其作为 MDX 表达式的值。
度量值:
自定义的度量值可让用户基于维度的数值属性聚合并显示数据。此时尚不存在基于事实的针对自定义的度量值的支持。继续上述来自命名计算的示例,我们定义了一个关于 IncidentsPastTargetResolutionTime 的自定义的度量值:
<Measure ID="IncidentsPastTargetResolutionTimeCount" Target="IncidentDW!IncidentDim" Type="Sum" Property="IncidentsPastTargetResolutionTime"/>
查看上述 xml,该度量值的目标是 IncidentDimension,特定属性为“IncidentsPastTargetResolutionTime”。这是一个在上述命名计算中定义的自定义属性。自定义的度量值可能将针对度量值中的本机属性或计算属性。
最后,度量值类型将被定义为一个求和。一个度量值类型的可能值包括求和与计数。此时,出于对性能的考虑,用户尚不可使用非重复计数度量值类型。
属性 |
是否必需 |
值 |
定义 |
ID |
是 | 字符串 | 度量值的名称 |
Target |
是 | ManagementPackDimension | 度量值的目标维度 |
Property | 是 | 字符串 | 已设定目标的维度属性 |
Type | 否 | (Count, Sum) | 度量值的类型 |
ManyToManyRelationship:
ManyToManyRelationship 可让多维数据集设计人员向多维数据集添加自定义的多对多维度,以启用高级的分析应用场景。定义多对多的关系已经超出了本篇博文的范围,但是我强烈建议用户阅读并理解这一相对较新的概念,及其诸多优势。以下链接所含信息十分有用,其向初级用户介绍了这些概念:多对多解析
在多维数据集的部署过程中,我们将自动为“单一跃点”关系的多维数据集添加多对多的维度,而无需任何用户指导。然而,我们并未向级联(多跃点)关系添加多对多维度,这是因为可能被添加的关系将提高指数。由于聚合多对多的关系通常不会在处理期间计数,而且系统将在浏览多维数据集时评估联接,因此添加所有这些关系将在浏览多维数据集时对性能产生重大影响。如果用户希望获得特定的级联多对多关系,那么他们可使用该 MP 元素来定义一个此类关系,该关系将被相应地添加到多维数据集中。相反地,他们可覆盖一个自动生成的多对多关系来在存在多个中间组的位置使用不同的中间度量值组(在这些情况中,我们将自动选用首个遇到的组)。以下列出了一个多对多关系 MP 元素的示例:
<ManyToManyRelationship CubeDimension="ServiceDim" TargetMeasureGroup="AlertAboutConfigItem" IntermediateMeasureGroup="ServiceContainsConfigItem" />
属性 |
是否必需 |
值 |
定义 |
CubeDimension | 是 | 字符串 | 多对多的多维数据集维度的名称 |
TargetMeasureGroup | 是 | 字符串 | 创建多对多关系的目标度量值组 |
IntermediateMeasureGroup | 是 | 字符串 | 创建多对多关系的中间度量值组 |
KPI:
关键绩效指标 (KPI) 可让企业通过衡量针对预定目标的完成进度而迅速评估企业的运行状况。每个 KPI 都有一个目标值和实际值。目标值是一个对于组织成功至关重要的定量目标。大量数据经过筛选后基本上都是一个离散值,这一离散值可用于监视针对目标和基准的性能和进度。举一个 KPI 的例子,某个学院的目标是其 90% 的学生将在 4 年内毕业,或者说一个篮球队的目标是让对方在某场比赛中的投篮命中率低于 50%。记分卡可用于显示一组 KPI,提供整个企业运行状况的一个瞬时快照。以下显示了一个示例:
<KPI ID="IncidentResolutiuonKpi" >
<Caption> The ratio of incidents resolved </Caption>
<Value>IIF(([Measures].[IncidentDimCount])> 0,([Measures].[IncidentsResolvedCount]/[Measures].[IncidentDimCount]),null)</Value>
<Goal>1.0</Goal>
<GreenThreshold> 0.75</GreenThreshold>
<YellowThreshold>0.5 </YellowThreshold>
<Direction>Up</Direction>
<StatusGraphic>Thermometer</StatusGraphic>
</KPI>
属性 |
是否必需 |
值 |
定义 |
ID |
是 | 字符串 |
KPI 的名称 |
Caption |
是 | 字符串 |
KPI 的描述 |
Value |
是 | 字符串 |
定义 KPI 数值的 MDX 脚本 |
Goal | 是 | 字符串 |
KPI 的目标值 |
GreenThreshold | 是 | 字符串(介于 0.1 和 1 之间) |
在本阈值以上或以下的任何数字(取决于方向)将在状态图中标记为绿色。 |
YellowThreshold | 是 | 字符串(介于 0.1 和 1 之间) |
在本阈值以上或以下,但又未达到绿色阈值的任何数字(取决于方向)将被标记为黄色。未达到黄色阈值的数字将在状态图中被标记为红色。 |
Direction | 是 | (Up, Down) | 如果方向朝上,那么绿色或黄色阈值以上的任何数字将按照该颜色代码标记。方向朝下的情形与朝上时类似,绿色或黄色阈值以下的数字将按照该颜色代码标记。 |
StatusGraphic | 是 | (形状、交通灯、路标、测量仪表、反向测量仪表、温度计、柱形、朝向、变形箭头) | 将代表 KPI 的图形。 |
下面显示了一个测量仪表状态图的示例,其描述了已按时完成的更改请求的百分比:
图:显示了按时完成的更改请求的测量 KPI 状态图
操作:
操作是用户在访问多维数据集内的数据时能够在 OLAP 多维数据集上触发的事件。对于 SCSM 2012 而言,目前仅支持钻取操作。以下显示了一个示例:
<Action ID="DrillThroughOnWICreatedByUser" MeasureGroupName="CreatedByUser" ActionType="DrillThrough">
<DrillThroughColumns CubeDimension="WorkItemCreatedByUser_UserDim">
<Property PropertyName="FirstName" />
<Property PropertyName="LastName" />
<Property PropertyName="Company" />
<Property PropertyName="Department" />
<Property PropertyName="Office" />
</DrillThroughColumns>
</Action>
属性 |
是否必需 |
值 |
定义 |
ID |
是 | 字符串 |
钻取操作的名称 |
MeasureGroupName |
是 | 字符串 |
操作的目标度量值组 |
ActionType |
是 | (DrillThrough) |
操作类型(SCSM 2012 中仅支持钻取) |
CubeDimension | 是 | 字符串 |
多维数据集维度是操作的目标(必须是度量值组中的一个切片程序) |
PropertyName | 是 | 字符串 | 执行钻取操作时所显示的维度的属性 |
CubeExtension:
CubeExtension 元素的主要目的是让用户在将多维数据集部署到分析服务后修改多维数据集,而无需卸载和重新安装多维数据集。在多维数据集处理多年数据的应用场景中,由于重新创建多维数据集需要完整地重新处理所有分区,因此这将是一项需要耗费大量资源的操作。
CubeExtension 元素可定义以下元素:
- NamedCalculation
- ManyToManyRelationship
- KPI
- 度量值
- 操作
- CustomMdx
请注意,每个在 CubeExtension 中定义的自定义项还可在 SystemCenterCube 对象中定义。唯一不允许在该对象中定义的自定义项是向多维数据集添加事实/度量值组以及替换。