Skip to main content

共享维度

多维分析模型是以维度(Dimension)为基础, 维度又是由其维度表中的不同字段组成, 我们可以对维度表的字段进行不同方式的组织顺序和设置不同属性, 那么一种组织方式就是一个层次结构(Hierarchy), 字段就是其层级 (Level), 一个维度(Dimension)可以设置多个层次结构(Hierarchy)来表示维度的不同分析方式.

本文以 Demo - FoodMart Model 模型为例讲解在多维分析建模场景中如何创建公共的共享维度.

创建公共维度

我们以 Warehouse 为分析维度来创建公共维度.

  1. 打开语义模型 Demo - FoodMart Model 点击左侧栏中的添加按钮, 或者将左侧栏下方区域里的维度表 warehouse 拖至模型区域, 进行创建实体;
  2. 选择类型为 维度(Dimension) 输入名称 Warehouse 和描述 仓库 , 选择物理表为 warehouse, 点击应用;
  3. 新建维度会创建一个默认的层次结构(Hierarchy), 标签与此维度相同;

创建维度层级

层次结构(Hierarchy)的层级一般按照粒度由粗到细的顺序设置, 如 warehouse 的字段层级可以设置为:

  1. warehouse_country
  2. warehouse_state_province
  3. warehouse_city
  4. warehouse_id

接下来让我们创建维度的层级字段:

  1. 层级区域的下方可以看到 warehouse 表已经添加进来 (如果需要多张表关联可以将左边数据表区域内的表拖至此区域, 具体可以参考星形和雪花模型);
  2. 展开 warehouse 表, 可以看到表字段列表. 依次将上面列出的字段拖至层级区域; 每当层级变化时在右侧数据区域可以预览实际维度数据的变化, (计数列为数据库中实际存在的条目数).
  3. 拖动层级字段可以调整先后顺序, 也可以拖至删除按钮上进行删除;

层级详细信息

选中层级字段, 打开右侧属性编辑界面, 设置层级详细属性:

参考 维度设计器#创建层级

The uniqueMembers attribute is used to optimize SQL generation. If you know that the values of a given level column in the dimension table are unique across all the other values in that column across the parent levels, then set uniqueMembers="true", otherwise, set to "false". For example, a time dimension like [Year].[Month] will have uniqueMembers="false" at the Month level, as the same month appears in different years. On the other hand, if you had a [Product Class].[Product Name] hierarchy, and you were sure that [Product Name] was unique, then you can set uniqueMembers="true". If you are not sure, then always set uniqueMembers="false". At the top level, this will always be uniqueMembers="true", as there is no parent level.

层级属性

为层级设置属性字段列表, 然后就可以使用 MDX 语句的 member.Properties("propertyName") 函数来访问成员属性, 并且用 DIMENSION PROPERTIES [Hierarchy].[Level].[Property Name] 将属性输出在结果中.

SELECT {[Store Sales]} ON COLUMNS,
TopCount(Filter([Store].[Store Name].Members,
[Store].CurrentMember.Properties("Store Type") = "Supermarket"),
10,
[Store Sales])
DIMENSION PROPERTIES [Store].[Store Name].[Store Type] ON ROWS
FROM [Sales]

层级属性设置界面如下:

Small

在多维数据集中引用公用维度

创建库存多维模型(Inventory Cube)

  1. 使用物理表 inventory_fact 创建多维模型多维数据集(Cube), 输入名称 Inventory, 描述 库存;
  2. 新增度量字段:
    1. 名称(Name): sales
    2. 标签(Caption): 销售额
    3. 字段(Column): warehouse_sales
    4. 聚合类型(Aggregator): Sum

添加共享维度

  1. 在 Inventory 页面中, 在模型列表中拖动上面创建的共享维度 Warehouse 到维度区域;
  2. 还要修改外键(Foreign Key)属性, 点击 Warehouse 维度, 打开右边属性设置栏, 选择事实表(Fact)表相应的外键(Foreign Key), 此字段将作为关联字段与公共维度 Warehouse 的主键进行关联(Join);
    1. 注意这里的名称(Name)和外键(Foreign Key)都是必输;
  3. 点击保存, 正常情况下提示保存成功.

验证结果

打开 Inventory 页面里的 计算 页面, 可以看到下方预览区域:

  1. 将上一步添加的维度 Warehouse 拖至计算预览区域中的行上, 可以看到数据预览区有一行 All 成员
  2. 将度量 销售额 拖至计算区域中的列上, 可以看到数据预览区多出了一列度量;
  3. 点击维度 Warehouse 的层级按钮打开菜单, 选择唯一的层次结构为 Warehouse, 然后再选择层级, 可以看到不同层级下右边数据的变化;

在故事仪表板中使用维度

创建新的故事仪表板或者转到已有的故事仪表板.

在用到维度的设置里都可以看到 Warehouse 这个维度;

例如创建一个新的图形组件, 选择数据源和模型 Inventory 后在 Dimensions 区域则可以选择 Warehouse 维度;