多维数据集
本文以 FoodMart 数据源为基础带你创建多维数据集.
MDX 多维数据集功能以通用的多维数据集设计器为基础.
创建销售 (Sales) 多维数据集
首先让我们来创建 Sales 的多维数据集
- 打开上一篇"创建 MDX 语义模型"创建的模型 Demo - FoodMart Model;
- 左侧栏里上下两部分分别是 已有数据模型 和 数据源实体列表; 点击上方的新增按钮或者将下方中想要创建模型的实体 (Model 或者 Fact Table)拖到上方语言模型区域进行创建语义模型; 这里我们选择的是
sales_fact
表.MDX 模型支持两种方式: 1. 从数据库物理表创建 MDX 模型 2. 从 XMLA 数据源创建 MDX 模型
- 选择类型为多维数据集(Cube), 输入名称: Sales, 标签: 销售;
- 点击应用, 创建成功后页面转到相应的多维数据集设计器页面;
在多维数据集设计器种可以看到页面中间栏中的维度(Dimensions)度量(Measures)等区域都是还是空的. 接下来就是为 Sales 多维数据集添加维度,度量和计算成员等配置.
创建促销活动 (Promotions) 维度
我们来创建一个销售的促销活动(Promotions)维度:
- 点击维度 (Dimensions) 区域标题行上的添加图标, 可以看到下方多出一行空白维度;
- 选中此行空白维度, 打开右侧属性设置栏, 可以看到维度 (Dimension) 属性设置界面;
- 输入以下信息:
- 名称 (Name): Promotions
- 标签 (Caption): (可选) 促销活动
- 事实表外键(Foreign Key):
promotion_id
- 维度类型: Regular (可选)
此时在计算 (Calculation) 页面的的维度 (Dimension) 选择还看不到可选的层次结构, 因为我们还没有为维度
Promotions
创建相关的维度表的层次结构.
更多详细的维度属性可以参考 维度设计器-维度属性
创建促销活动层次结构 (Hierarchy)
维度的层次结构代表的是此维度与哪个维度表关联和所要使用的维度表字段的层级组织结构, 一个维度可以拥有多个层次结构.
- 在维度
Promotions
行上点击新增图标, 添加一行空白的层次结构 (Hierarchy); - 选中新增的层次结构 (Hierarchy) 行, 此时右边属性设置栏变为层次结构 (Hierarchy) 的属性设置界面;
- 输入以下信息:
- 名称(Name): 为空代表是默认的层次结构 (Hierarchy), 那么此层次结构 (Hierarchy) 将与所属维度 (Dimension) 本身同名;
- 有 All 成员(Has All):
true
参见下面解释; - 在维度表中添加一个表名为promotion;
- 选择主键(Primary Key)为: promotion_id
- 在层次结构 (Hierarchy) 行上点击新增图标, 则层次结构 (Hierarchy) 子节点中出现一行空白层级 (Level);
- 选中此行层级 (Level), 属性设置栏变为层级 (Level) 的属性设置界面, 输入以下信息:
- 名称(Name): Promotion Name
- 字段(Column): promotion_id
- 成员唯一(Unique Members): true
- 名称字段(Name Column): promotion_name
- 保存, 正常情况下会提示保存成功, 没有报错消息.
验证维度 (Dimension) 创建的成功, 打开计算(Calculation)页面, 在预览(Preview)区域行(Rows)里新增一行字段, 打开选择列表, 在维度(Dimensions)区域可以看到 [Promotions]
可选即代表维度创建成功; 可以看到 Promotions 字段设置里会出现层级属性按钮, 在里面可以设置跟层次结构相关的属性如: 选择一个层次结构, 选择特定的一个层级字段, 选择指定的成员以及后续我们要添加的维度属性列表.
By default, every hierarchy contains a top level called '(All)', which contains a single member called
'(All {hierarchyName})'
. This member is parent of all other members of the hierarchy, and thus represents a grand total. It is also the default member of the hierarchy; that is, the member which is used for calculating cell values when the hierarchy is not included on an axis or in the slicer. The allMemberName and allLevelName attributes override the default names of the all level and all member.
If the
<Hierarchy>
element has hasAll="false", the 'all' level is suppressed. The default member of that dimension will now be the first member of the first level; for example, in a Time hierarchy, it will be the first year in the hierarchy. Changing the default member can be confusing, so you should generally use hasAll="true".
创建度量 (Measure)
我们已经创建一个维度 Promotion
, 接下来创建一个度量 (Measure) 就可以成为一个最基础的多维数据集(Cube)了.
- 在度量 (Measures) 行点击新增图标, 在下面出现一行空白度量;
- 选中此行空白度量, 右边设置栏将变为度量设置界面, 输入以下信息:
- 名称(Name): Sales
- 标签(Caption): Sales (可选)
- 字段(Column): store_sales
- 聚合类型(Aggregator): sum
- 同理创建度量 Cost
- 名称(Name): Cost
- 标签(Caption): Cost
- 字段(Column): store_cost
- 聚合类型(Aggregator): sum
- 点击保存, 正常情况下会提示保存成功, 没有报错消息.
此时可以再次验证模型的使用, 打开计算 (Calculation) 界面, 在数据预览 (Preview) 区域的行 (Rows) 里添加字段促销 (Promotions), 在列 (Columns) 添加度量字段 (Sales); 可以看到右侧数据区域会刷新出相应的数据. 如果你能看到数据, 则到此步骤都正确.
注意: 对于多维数据集建模来说, 只有当模型保存到服务器后数据查询此模型信息才能生效.
创建多层级的客户 (Customers) 维度
上面步骤我们创建了一个最基本的多维数据集, 其中促销 (Promotions) 维度只有一个字段促销名称 (Promotion Name), 加上度量销售额 (Sales) 字段和门店成本(Cost).
接下来我们更进一步创建复杂点的具有多个层级字段的维度: 客户 (Customers).
- 同上面介绍, 创建客户 (Customers) 维度, 输入以下信息:
- 名称(Name): Customers
- 事实表外键(Foreign Key):
customer_id
- 创建层次结构(Hierarchy)并输入以下信息:
- 有 All 成员(Has All):
true
- 维度表(Dimension Table Name):
customer
- 主键(Primary Key):
customer_id
- 有 All 成员(Has All):
- 创建层级字段, 以下按顺序创建多个层级字段
- 国家(Country):
- 名称(Name): Country
- 标签(Caption): 国家
- 字段(Column):
country
- 成员唯一(Unique Members):
true
- 州省(State Province):
- 名称(Name): State Province
- 标签(Caption): 州省
- 字段(Column):
state_province
- 成员唯一(Unique Members):
true
- 城市(City):
- 名称(Name): City
- 标签(Caption): 城市
- 字段(Column):
city
- 成员唯一(Unique Members):
false
- 客户名称(Name):
- 名称(Name): Customer Name
- 标签(Caption): 客户名称
- 字段(Column):
customer_id
- 成员唯一(Unique Members):
true
- 名称字段(Name Column):
fullname
- 国家(Country):
- 保存, 正常情况提示保存成功, 没有错误信息.
创建成员属性 (Member Properties)
对于一些不需要作为汇总维度的字段来说, 如果需要作为过滤成员的条件或者显示信息的话, 还可以设置为层级字段的属性字段. 属性字段是配置在层级字段 (Level) 下的属性, 因为不作为汇总维度的字段只有隶属于层级字段才有意义, 才会在汇总时随层级字段汇总时不会影响汇总结果.
这里我们以客户(Customer Name)层级为例, 客户的性别, 婚姻状况, 学历, 年收入等属性只作为客户级别的附属属性用来显示信息, 而并不作为汇总维度.
创建步骤如下:
- 选中层级字段客户名称 (Customer Name), 在层级字段的属性设置界面;
- 在属性(Property)区域点击新增属性(Property), 输入以下信息:
- 名称(Name): Gender
- 字段(Column):
gender
- 这样 Gender 会作为客户名称 (Customer Name)字段的属性字段被用在之后的数据分析当中;
- 同样过程新增如下属性:
- 名称: Marital Status, 字段:
marital_status
- 名称: Education, 字段:
education
- 名称: Yearly Income, 字段:
yearly_income
- 名称: Marital Status, 字段:
- 保存, 正常情况提示保存成功, 没有错误信息.
那么在之后的数据看板中可以选择属性字段进行展示和过滤.