定义未知成员和 Null 处理属性
Analysis Services 处理维度时,表的基础列或数据源视图中视图的所有非重复值都会填充维度中的属性。 如果 Analysis Services 在处理过程中遇到 null 值,则默认情况下,它会将此 null 转换为数值列的零或字符串列的空字符串。 你可以在基础关系数据仓库的提取、转换和加载过程(如果有)中修改默认设置或转换 Null 值。 此外,还可以让 Analysis Services 通过配置三个属性将 null 值转换为指定的值:维度的 UnknownMember 和 UnknownMemberName 属性,以及维度的键属性的 NullProcessing 属性。
根据维度的键属性是否可为 Null 或者雪花型维度的根特性是否基于可以为 Null 的列,维度向导和多维数据集向导将启用这些属性。 在这些情况下,键特性的 NullProcessing 属性将设置为 UnknownMember ,而 UnknownMember 属性将设置为 Visible。
但是,当以增量方式(也就是我们在本教程中处理“产品”维度的方式)生成雪花型维度时,或使用“维度设计器”定义维度然后将这些现有维度合并到多维数据集内时,可能需要手动设置 UnknownMember 和 NullProcessing 属性。
在本主题中的任务中,你将将产品类别和产品子类别属性添加到要添加到 Adventure Works DW 数据源视图的积雪表中的产品维度。 然后,你将为 Product 维度启用 UnknownMember 属性,将 指定Assembly Components
为 UnknownMemberName 属性的值,将 和 Category
属性关联Subcategory
到产品名称属性,然后为链接雪花表的成员键属性定义自定义错误处理。
注意
如果在最初使用多维数据集向导定义 Analysis Services 教程多维数据集时添加了 Subcategory 和 Category 属性,则会自动执行这些步骤。
查看“产品”维度中的错误处理和未知成员属性
切换到“产品”维度的维度设计器,单击“维度结构”选项卡,然后在“属性”窗格中选择“产品”。
此时,您可以查看和修改该维度自身的属性。
在“属性”窗口中,查看 UnknownMember 和 UnknownMemberName 属性。
注意, UnknownMember 属性未被启用,因为该属性的值设置为 None 而不是 Visible 或 Hidden,并且没有为 UnknownMemberName 属性指定名称。
在“属性”窗口的 ErrorConfiguration 属性单元中,选择“(自定义)”,再展开 ErrorConfiguration 属性集合。
将“ErrorConfiguration”属性设置为“(自定义)”允许你查看默认错误配置设置,此操作不会更改任何设置。
检查键和空键错误配置属性,但不进行任何更改。
注意,默认情况下,如果空键被转换为未知成员,则将忽略与此转换相关联的处理错误。
下图显示了 ErrorConfiguration 属性集合的属性设置。
单击“浏览器”选项卡,验证是否已在“层次结构”列表中选择“产品型号行”,然后展开
All Products
。注意“产品系列”级别的五个成员。
展开“组件”,再展开“型号名称”级别的未标记成员。
此级别包含生成其他组件时使用的部件组件(从 Adjustable Race 产品开始),如下图所示。
从雪花状表和“产品类别”用户定义层次结构定义属性
打开 Adventure Works DW 数据源视图的数据源视图Designer,在“关系图管理器”窗格中选择“经销商销售”,然后在“SQL Server Data Tools (SSDT) 的”数据源视图“菜单上单击”添加/删除对象”。
此时将打开“添加/删除表”对话框。
在“包含的对象”列表中,选择 DimProduct (dbo),再单击“添加相关表”。
DimProductSubcategory (dbo) 和 FactProductInventory (dbo) 都将被添加。 删除 FactProductInventory (dbo),这样,只有 DimProductSubcategory (dbo) 表将添加到“包含的对象”列表中。
在 DimProductSubcategory (dbo) 表被默认选定为最新添加的表的情况下,再次单击“添加相关表”。
DimProductCategory (dbo)表即被添加到“包含的对象”列表中。
单击“确定”。
在SQL Server Data Tools的“格式”菜单上,指向“自动布局”,然后单击“关系图”。
请注意, DimProductSubcategory (dbo) 表和 DimProductCategory (dbo) 表互相链接,并且还通过 Product 表链接到 ResellerSales 表。
切换到“产品”维度的维度设计器,再单击“维度结构”选项卡。
右键单击“数据源视图”窗格中的任意位置,再单击“显示所有表”。
在“数据源视图”窗格中,找到 DimProductCategory 表,右键单击该表中的 ProductCategoryKey,再单击“从列新建属性”。
在“ 属性 ”窗格中,将此新属性的名称更改为
Category
。在属性窗口,单击 NameColumn 属性字段,然后单击浏览 (...) 按钮打开“名称列”对话框。
选择“源列”列表中的 EnglishProductCategoryName,然后单击“确定”。
在“数据源视图”窗格中,找到 DimProductSubcategory 表,右键单击该表中的 ProductSubcategoryKey,再单击“从列新建属性”。
在“ 属性 ”窗格中,将此新属性的名称更改为
Subcategory
。在属性窗口中,单击 NameColumn 属性字段,然后单击浏览 (...) 按钮打开“名称列”对话框。
选择“源列”列表中的 EnglishProductSubcategoryName,然后单击“确定”。
按从上到下的顺序,创建名为“ 产品类别 ”的新用户定义层次结构,其中包含以下级别:
Category
、Subcategory
和 Product Name。将 指定
All Products
为产品类别用户定义层次结构的 AllMemberName 属性的值。
浏览“产品”维度中的用户定义层次结构
在“产品”维度的“维度设计器”的“维度结构”选项卡工具栏上,单击“处理”。
单击“是”以生成并部署项目,再单击“运行”来处理“产品”维度。
成功处理后,在“处理进度”对话框中展开“处理维度‘产品’已成功完成”,展开“处理维度属性‘产品名称’已完成”,再展开“SQL 查询 1”。
单击 SELECT DISTINCT 查询,再单击“查看详细信息”。
注意,WHERE 子句已添加到 SELECT DISTINCT 子句中,这将删除 ProductSubcategoryKey 列中不包含值的那些产品,如下图所示。
依次单击“关闭”三次,关闭所有处理对话框。
单击“产品”维度的维度设计器中的“浏览器”选项卡,再单击“重新连接”。
验证 “产品型号行 ”是否显示在 “层次结构 ”列表中,展开
All Products
,然后展开 “组件”。在“层次结构”列表中选择“产品类别”,展开
All Products
,然后展开“组件”。注意,没有显示部件组件。
若要修改上一任务中提到的行为,您将启用 Products 维度的 UnknownMember 属性,为 UnknownMemberName 属性设置值,将 和 Model Name 属性的 Subcategory
NullProcessing 属性设置为 UnknownMember,将Category
特性定义为特性Subcategory
的相关属性,然后将 Product Line 属性定义为 Model Name 属性的相关属性。 这些步骤将导致 Analysis Services 对每个没有 SubcategoryKey 列值的产品使用未知的成员名称值,如以下任务所示。
启用未知成员,定义属性关系,并指定 Null 的自定义处理属性
在“产品”维度的维度设计器中,单击“维度结构”选项卡,然后在“属性”窗格中选择“产品”。
在 “属性” 窗口中,将 UnknownMember 属性更改为 Visible,然后将 UnknownMemberName 属性的值更改为
Assembly Components
。将 UnknownMember 属性更改为 Visible 或 Hidden 后,就会启用该维度的 UnknownMember 属性。
单击 “属性关系” 选项卡。
在关系图中,右键单击属性,
Subcategory
然后选择“ 新建属性关系”。在“ 创建属性关系 ”对话框中, “源属性 ”为
Subcategory
。 将 “相关属性” 设置为Category
。 将关系类型保留为“柔性”。单击“确定”。
在“属性”窗格中,选择“子类别”。
在“属性”窗口中,展开 KeyColumns 属性,然后展开 DimProductSubcategory.ProductSubcategoryKey (Integer) 属性。
将 NullProcessing 属性更改为 UnknownMember。
在“属性”窗格中,选择“型号名称”。
在“属性”窗口中,展开 KeyColumns 属性,然后展开 Product.ModelName (WChar) 属性。
将 NullProcessing 属性更改为 UnknownMember。
由于这些更改,当 Analysis Services 在处理过程中遇到属性或模型名称属性的
Subcategory
null 值时,未知成员值将替换为键值,并且将正确构造用户定义的层次结构。
再次浏览“产品”维度
在“生成”菜单上,单击“部署 Analysis Services 教程”。
成功完成部署后,单击“产品”维度的维度设计器中的“浏览器”选项卡,再单击“重新连接”。
验证是否已在“层次结构”列表中选择“产品类别”,然后展开
All Products
。注意,“程序集组件”已显示为“类别”级别的新成员。
Assembly Components
展开级别的成员,Category
然后展开Assembly Components
该级别的成员Subcategory
。请注意,在“产品名称”级别上显示了所有程序集组件,如下图所示。