BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

时间:2022-01-02 12:35:10

上篇文章我们已经将Dim Geography维度设计好。

若要查看维度的成员, AS需要接收该维度的详细信息(包括已创建的特性、成员属性以及多级层次结构), 通过XMLA与AS的实例进行通信。

今天我们将维度部署到AS上进行查看。

文章提纲

  • 补充背景知识
  • 浏览维度,细化维度
  • 总结

补充背景知识

XMLA是一种基于简单对象访问协议(SOAP)的XML应用程序编程接口的行业标准, 设计用于OLAP和数据挖掘。

XMLA规范定义了两个函数,即Execute和Discover, 这两个函数用于向主机实例发送操作及从主机实例检索数据。

下面是一个使用XMLA发送到AS实例的Execute请求示例。

<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">

<Command>

<Statement>

SELECT Measures.MEMBERS ON COLUMNS FROM [Adventure Works DW]

</Statement>

</Command>

<Properties>

<PropertyList>

<Catalog>

ASMultidimensionalPOC

</Catalog>

<Format>Multidimensional</Format>

<AxisFormat>ClusterFormat</AxisFormat>

</PropertyList>

</Properties>

</Execute>

上面的XMLA中发送了一个请求, 执行在Statement命令中指定的MDX查询。与AS Server进行通信的一些常见命令包括Create、Alter、Process和Statement.

AS 对象的定义通过DDL(Data Definition Language, 数据定义语言)来实现。

其他命令处理已经定义的数据,称为DML(Data Manipulation Language, 数据操作语言)命令。

当项目部署到AS服务器时,会发送一些XMLA请求,如下所述:

1. 从AS请求一个数据库列表以确定当前项目所定义的数据库是否已在该实例中存在, 指定的项目名称将被用作数据库名称。

SSDT将针对数据库发送Create或Alter命令,具体取决于该数据库是否已存在于服务器上。

2.随后, SSDT将发送一个XMLA请求,以处理你创建和/或修改的对象。

SSDT将执行验证,以确保维度设计正确无误。

浏览维度,细化维度

现在我们来将维度部署到AS上来查看维度的内容:

右击项目Deploy,SSDT尝试将该项目部署到AS实例。

可以看到,部署失败。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

SSDT将使用Error List窗口报告由SSDT从AS实例识别出的所有警告和错误。

上图中显示的前15个警告是提醒违反最佳实践的情况,一般按照必要性进行排序。这些错误是可以忽略的(右键选Dismiss, 类似于Word忽略拼写错误)

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

另外一种是AS实例报告的警告,这种是不能解除的。

如右击第16个警告,可以发现Dismiss是灰色禁用状态。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

第16条警告指出,在处理City特性时,识别出重复的特性键值,表明具有多个使用相同名称的城市,但无法确定哪个State Province Name与某个特定的城市具有关系。例如有多个Augsburg

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

由于该错误,AS实例无法处理City特性,随后也就无法处理Dim Geography维度,最终导致部署失败。

若要更正上述问题,需要确保每个城市都是唯一的。

我们使用组合键的方式(City+State Province Code)来唯一标识一个City特性。

设置组合键

1. 在维度设计器中打开Dim Geography维度,然后在Attributes窗格中选择City特性

2. 在Properties窗格中,找到KeyColumns属性,然后单击省略号

在跳出的对话框中,将StateProvinceCode添加到Key Columns列表中。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

3. 设置NameColumn

默认情况下,使用列名称作为特性的键列。

AS实例会自动将同一列推断为NameColumn(用于显示特性的成员名称的列)。只要定义一个组合键,就需要为特性定义一个名称列,因为SSDT和AS实例不知道应该使用组合键的哪个列作为特性的名称列。

在KeyColumns下面可以看到NameColumn属性,单击省略号,选择City作为Name Column.

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

再次Deploy, 可以发现还是有问题:

Warning    16    OLAP 存储引擎中存在错误: 处理时找到重复的属性键: 表:"dbo_DimGeography",列:"PostalCode",值:"12171"。该属性为"Postal Code"。

根据错误提示,我们再次确认数据,发现Postal也有重复。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

类似刚才City特性所执行的操作一样,也需要Postal Code特性成员具有唯一性。

1. 选择Postal Code特性,

2. 在Properties窗格中,找到KeyColumns属性,然后单击省略号, 包含数据源中的StateProvinceCode、City和Postal Code列。

3.设置NameColumn为PostalCode

再次Deploy就成功了。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

浏览维度

切换到Browser选项卡来浏览Dim Geography维度的数据。

默认选中的Hierarchy就是Geography, 随便展开一些level来看

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

我们来做几个修改,使得UI更加友好。

将Geography层次结构的All级别名称更改为All Countries

我们回到维度设计器Dimension Structure

在Hierarchies窗格中选择Geography层次结构

按F4切换到Properties窗口,第一个属性是AllMemberName, 默认不显示任何值,填入All Countries

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

再次部署项目,再次切换到Browser页面,点击Reconnect菜单。

可以看到All已经变成All Countries了。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

对某个级别的成员进行排序

某个级别的成员就是构成该级别的特性的成员。

如Geography层次结构中Country级别的成员实际上就是特性English Country Region Name的成员。(前面我们重命名过English Country Region Name,改成了Country)

我们就以这个Country为例,使用名称列来显示特性名称,使用键列来进行排序。

维度中每个特性都有以下两个属性:KeyColumns和NameColumn, 其中,KeyColumns属性用于指定对成员进行排序所用的列,而NameColumn属性用于保存成员的描述性名称。

默认情况下,维度向导和维度设计器会在向维度中添加添加特性时设置KeyColumns属性,但不会设置NameColumn属性。

如果NameColumn属性为空,AS将返回KeyColumns值作为成员的描述性名称,以响应客户端请求。

按F4切换到Country的属性,默认是如下设置

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

我们将KeyColumns改成Country Region Code, 将NameColumn改成原来的KeyColumns中的值。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

再确认下Properties窗口的Advanced部分中, 确保OrderBy属性的值为Key

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

再次部署项目,再次切换到Browser页面,点击Reconnect菜单。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

优化特性

在设计维度中,如果维度过多,看起来会很乱,我们可以通过两个特性属性来操纵特性对最终用户的可见性。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

选中相应属性,直接看下属性窗口的说明就可以区别开来:

AttributeHierarchyEnabled

Indicates whether an atrribute hierarchy is enabled for this attribute. If the attribute hierarchy is not enabled, then the attribute cannot be used in a user-defined hierarchy.

AttributeHierarchyVisible

Indicates whether the attribute hierarchy is visible to client applications.

Even if the attribute hierarchy is not visible, it can still be used in a user-defined hierarchy and referenced in Multidimensional Expressions(MDX).

我们简单测试下:

将English Country Region Name 的AttributeHierarchyEnabled设为False, 可以看到Deploy会报错。(因为我们在用户层次结构中使用了它)。

将French Country Region Name的AttributeHierarchyEnabled设为False, Deploy后可以发现,Browser选项卡中已经没有这一项了。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

在维度中定义翻译

最后再看下Tanslations选项卡。

我们利用之前的French Country Region Name,创建法语翻译

1. 切换到Translations页面,New Translation,选择French(France)

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

2. 在新添加的列中单击English Country Region Name右边的单元格按钮,在弹出对话框中选择FrenchCountryRegionName列。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

3. 重新Deploy后浏览 可以看到变成了法语。

BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

总结

我们需要掌握维度部署过程中错误的查找调试。

需要掌握常见的维度功能,如设置组合键,排序,优化特性等。

祝学习进步:)

相关系列文章列表:

所有文章列表
首发博客园 by MiroYuan,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。