跳到主要内容

❄️维度设计器

对维度的管理和分析是多维模型最重要的功能之一, 维度设计器能够帮助用户定义数据的维度、层次以及各个维度间的关系,从而提高数据分析的效率。

信息

维度的规划和构建好不好是从技术层面衡量多维模型的重要标准, 其次是指标管理从业务方面衡量模型的能力, 没有好的维度管理就没有好的指标管理, 最后才是好的可视化展示能力.

创建维度有以下两种方式:

  • 模型内联维度;
  • 共享维度;

内联维度

内联维度是指直接在多维数据集编辑界面里创建维度, 创建的维度只能被当前多维数据集使用, 不能被其他多维数据集引用到.

详情参考 多维数据集设计器#维度

共享维度

共享维度 是指在多维数据模型中,被许多数据多维数据集共用的维度。这样的设计可以保证数据的一致性和可重复性,同时可以减少数据的存储和维护的成本。共享维度可以被多个数据多维数据集共用,每个多维数据集可以选择使用不同的维度层次结构和维度成员, 使用共享维度可以统一规范维度数据和管理。

一个维度可以创建一个或多个层次结构.

操作步骤: 点击实体标题栏中的 新建 按钮, 或者将数据表拖至模型实体区域将会打开维度创建窗口, 选择类型为 维度.

创建共享维度
创建共享维度
  • 类型: 多维数据集
  • 名称: 多维数据集的唯一技术名称;
  • 标签: 多维数据集的语言描述;
  • 表:维度物理表
    • 主键:维度表的主键字段;
    • 可见:维度启用的默认层级字段;
    • 标签:维度物理表字段的语言描述;
    • 字段:维度物理表字段的技术名称;

共享维度编辑界面有比内联维度更丰富直观数据的功能界面, 维度界面共分为 4 个功能区域:

  • 左下, 维度表(Dimension Tables): 已添加的维度物理表, 由数据表区域拖至此;
  • 右下, 维度表关联(Dimension Tables Join): 编辑维度表关联关系;
  • 左上, 层级(Levels): 已创建的维度层级列表, 由维度表区域字段拖至此;
  • 右上, 维度数据预览(Dimension Data Preview): 预览由已创建层级决定的维度数据预览.

编辑属性:

  • 点击导航栏左侧更多按钮, 选择(编辑)维度, 在属性编辑界面对维度属性进行设置;
  • 点击层次结构页签上的更多按钮, 选择(编辑)层次结构, 在属性编辑界面对层次结构的属性进行设置, 同时可以对维度属性进行设置;
  • 点击选中层级, 在属性编辑界面对层级属性进行设置;

维度属性

维度 属性设置一些维度的基础信息, 详细列表

属性英文名称描述可选值
名称Name维度唯一名称标识一般使用英文字符
标签Caption维度语言描述用户语言
描述Description长文本描述用户语言
事实表外键Fact foreign key与维度关联的事实表外键, 此属性内联维度可用事实物理表字段
维度类型Dimension Type除正常类型外就是 Time 时间类型的维度
默认层次结构Default Hierarchy默认的层次结构
语义Semantics维度的语义, 增强维度的表达能力语义设置

层次结构和层级

  • 层次结构 (Hierarchy)
  • 层级 (Level)

层次结构 显示维度表中的列组之间的关系。例如,季度包含月份,月份包含天。使用层次结构可以在报表中钻探。

维度可以具有一个或多个层次结构。层次结构通常从合计层级开始,然后是子层级,最后细分到最低详细层级。

维度的所有层次结构必须具有一个共同的最低层级。例如,时间维度可以包含一个财政层次结构和一个日历层次结构,并将作为共同的最低层级。天具有两个命名的父级(名为财政年度和日历年度),二者均是全部根层级的子级。

除合计层级以外的所有层级必须至少具有一个指定为键或显示列的列。但是,不必将表中的所有列与级别显式关联。未与层级关联的任何列都将与层次(与该维度表对应)中的最低层级关联。

层次结构中可包含的层级数没有限制。层级总数自身不是查询性能的确定因素。但是,请注意对于极其复杂的查询,即使是几个层级也会影响性能。

创建层次结构

点击维度的层次结构导航栏中 新建按钮 创建层次结构.

  • 打开属性界面, 编辑层次结构属性: 见下方
  • 将数据表中的物理表名拖至维度表区域, 添加为维度层次结构的维度表.
    • 维度表可以添加一个或多个.
    • 当维度表添加了多个时, 右侧维度表关系设计界面会自动打开, 也可以手动打开, 选择表之间的关系和新增关联的左键和右键, 对维度表进行关联.

层次结构属性

层次结构所有的属性列表

属性英文名称描述可选值
名称Name唯一名称标识一般使用英文字符
标签Caption语言描述用户语言
描述Description长文本描述用户语言
是否显示Visible是否对用户可见
有 All 成员Has All Member是否存在 All 成员, 如果是层次结构将包含默认的所有成员这一层级, 这个层级将作为首个层级
All 成员名称All Member Name取代默认生成的 All 成员名称
All 成员标签All Member CaptionAll 成员的标签
All 层级名称All Level NameAll 层级的名称
维度表Dimension Tables维度表物理表数组
主键Primary Key选择一个维度表字段作为层次结构的主键
主键表Primary Key Table当维度表个数超过一个时需要指定一个表作为维度的主表
默认成员Default Member在查询时当没有指定维度成员时, 将使用默认成员对维度进行限定

创建层级

  • 依次将维度表中的字段拖至层级区域, 顺序为由粗粒度字段到细粒度字段, 也可以在层级区域对字段调整顺序.
  • 拖动层级字段:
    1. 可以调整层级之间的顺序.
    2. 可以拖回维度表区域将层级移除.
    3. 可以拖至删除图标处将其移除.
  • 选中层级, 打开属性界面, 可以对此层级的属性进行设置: 见下面属性列表;

层级属性

层级所有的属性列表

属性英文名称描述可选值
名称Name唯一名称标识一般使用英文字符
标签Caption语言描述用户语言
描述Description长文本描述用户语言
是否显示Visible是否对用户可见
成员唯一Unique Members此属性用于优化 SQL 生成. 如果您知道维度表中给定层级列的值在父层级中该列的所有其他值中是唯一的, 那么设置为"true", 否则设置为 "false".
字段Column层级对应的数据表字段, 作为层级的主键
值类型Type层级字段对应的数据库类型, 有利于引擎生成正确的执行语句
名称字段Name Column组成层级成员的输出 ID, 如果为设置名称字段则成员 ID 默认由字段的值组成
说明字段Caption Column组成层级成员的输出 Caption, 如果未设置说明字段成员说明取自名称字段, 名称字段也未设置则取自字段的值
顺序字段Ordinal Column决定层级成员顺序的字段
父级字段Parent Column当数据表记录为上下级结构时, 设置父级字段可以生成树状的成员结构
父级字段空Null Parent Value判断父级成员是否存在的值, 默认为 null, 但有的数据库并不支持 null 值, 所以需要指定用 空字符串, 0-1 代替
Table当层次结构是由多张表关联组成时, 需要为层级指定一个表名
时间类型Level Time Type当维度为时间类型时需要设置每个层级的时间类型(表示了时间粒度)
隐藏成员Hide Member If隐藏成员的条件。如果一个层次有一个或多个带有隐藏成员的级别,那么不是所有的叶成员距离根的距离相同,这称为锯齿形层次。
语义Semantics维度层级的语义, 增强维度层级的表达能力语义设置
键表达式Key Expression表达式
名称表达式Name Expression表达式
说明表达式Caption Expression表达式
顺序表达式Ordinal Expression表达式
父字段表达式Parent Expression表达式
闭合表Closure维度上下级层级关系时, 可以设置闭包表优化 SQL 运行效率1. 表; 2. 父级字段; 3. 子级字段;
层级属性Property层级的属性列表1. 属性名称; 2. 属性字段; 3. 属性表达式

顺序字段

顺序字段 (Ordinal Column) 是用来排序层级成员的字段, 例如月份的顺序字段可以是月份的数字.

The Ordinal Column attribute specifies a column in the Hierarchy table that provides the order of the members in a given level, while the nameColumn specifies a column that will be displayed.

表达式

使用 SQL 表达式可以代替字段的设置, 以表达更丰富的计算功能. 例如 层级的说明字段可以使用以下表达式将年和月拼接显示出来:

CONCAT("the_year",' ',"the_month")
提示

注意 SQL 表达式语法要与实际执行的数据库语法一致.

闭合表

当层级设置有父级字段时, 此层级成员为上下级结构的关系. 在计算汇总值时不确定深度的上下级成员会给性能带来挑战. 这时可以为上下级关系表指定一个闭合表以提高汇总值计算性能.

闭包表是一张SQL表,例如员工闭包表它包含每个员工/主管(所有上级主管, 无论深度如何)关系的记录。(数学术语中,这称为员工/主管关系的“自反传递闭包”。距离(distance)列并不严格要求,但它使填充表变得更容易。)

employee_closure
supervisor_idemployee_iddistance
110
121
132
153
162
141
220
231
252
261
330
351
440
550
660

属性设置如下图

Small

语义设置

  • 语义类型
  • 日历的 格式化
信息

目前暂时只支持 Calendar 语义.

预览

在维度设计器中, 每个层次结构都可以通过预览区域对维度数据进行预览, 以便于用户对维度数据的正确性进行验证.

维度数据预览支持两种方式:

  • 表格:以表格形式展示维度数据;
  • 树形:以树形结构展示维度成员的层级关系;
Dimension Members Preview Table
表格预览

树形预览

多维引擎会根据层次结构中的层级顺序划分维度成员之间的上下级隶属关系,形成一个树形结构进行展示:

  • 层级序号:层级的顺序编号。
  • 每个层级展示为一列,列名为层级的名称。
  • 子节点数量:每个节点下的子节点数量,最末级节点没有子节点。
  • 所有成员层级:当层次结构设置了 "有所有成员" 属性时,会在树形结构的最顶层展示一个 "所有成员" 节点。
Dimension Members Preview Tree
树形预览

实际使用中,度量值将按照此树形关系对维度数据进行汇总计算。