❄️维度设计器
对维度的管理和分析是多维模型最重要的功能之一, 维度设计器能够帮助用户定义数据的维度、层次以及各个维度间的关系,从而提高数据分析的效率。
维度的规划和构建好不好是从技术层面衡量多维模型的重要标准, 其次是指标管理从业务方面衡量模型的能力, 没有好的维度管理就没有好的指标管理, 最后才是好的可视化展示能力.
创建维度有以下两种方式:
- 模型内联维度;
- 共享维度;
内联维度
内联维度是指直接在多维数据集编辑界面里创建维度, 创建的维度只能被当前多维数据集使用, 不能被其他多维数据集引用到.
详情参考 多维数据集设计器#维度
共享维度
共享维度 是指在多维数据模型中,被许多数据多维数据集共用的维度。这样的设计可以保证数据的一致性和可重复性,同时可以减少数据的存储和维护的成本。共享维度可以被多个数据多维数据集共用,每个多维数据集可以选择使用不同的维度层次结构和维度成员, 使用共享维度可以统一规范维度数据和管理。
一个维度可以创建一个或多个层次结构.
操作步骤: 点击实体标题栏中的 新建 按钮, 或者将数据表拖至模型实体区域将会打开维度创建窗口, 选择类型为 维度.
- 类型: 多维数据集;
- 名称: 多维数据集的唯一技术名称;
- 标签: 多维数据集的语言描述;
- 表:维度物理表
- 主键:维度表的主键字段;
- 可见:维度启用的默认层级字段;
- 标签:维度物理表字段的语言描述;
- 字段:维度物理表字段的技术名称;
共享维度编辑界面有比内联维度更丰富直观数据的功能界面, 维度界面共分为 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 Caption | All 成员的标签 | |
All 层级名称 | All Level Name | All 层级的名称 | |
维度表 | Dimension Tables | 维度表 | 物理表数组 |
主键 | Primary Key | 选择一个维度表字段作为层次结构的主键 | |
主键表 | Primary Key Table | 当维度表个数超过一个时需要指定一个表作为维度的主表 | |
默认成员 | Default Member | 在查询时当没有指定维度成员时, 将使用默认成员对维度进行限定 |
创建层级
- 依次将维度表中的字段拖至层级区域, 顺序为由粗粒度字段到细粒度字段, 也可以在层级区域对字段调整顺序.
- 拖动层级字段:
- 可以调整层级之间的顺序.
- 可以拖回维度表区域将层级移除.
- 可以拖至删除图标处将其移除.
- 选中层级, 打开属性界面, 可以对此层级的属性进行设置: 见下面属性列表;
层级属性
层级所有的属性列表
属性 | 英文名称 | 描述 | 可选值 |
---|---|---|---|
名称 | 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_id | employee_id | distance |
1 | 1 | 0 |
1 | 2 | 1 |
1 | 3 | 2 |
1 | 5 | 3 |
1 | 6 | 2 |
1 | 4 | 1 |
2 | 2 | 0 |
2 | 3 | 1 |
2 | 5 | 2 |
2 | 6 | 1 |
3 | 3 | 0 |
3 | 5 | 1 |
4 | 4 | 0 |
5 | 5 | 0 |
6 | 6 | 0 |
属性设置如下图
语义设置
- 语义类型
- 日历的 格式化
目前暂时只支持 Calendar 语义.
预览
在维度设计器中, 每个层次结构都可以通过预览区域对维度数据进行预览, 以便于用户对维度数据的正确性进行验证.
维度数据预览支持两种方式:
- 表格:以表格形式展示维度数据;
- 树形:以树形结构展示维度成员的层级关系;
树形预览
多维引擎会根据层次结构中的层级顺序划分维度成员之间的上下级隶属关系,形成一个树形结构进行展示:
- 层级序号:层级的顺序编号。
- 每个层级展示为一列,列名为层级的名称。
- 子节点数量:每个节点下的子节点数量,最末级节点没有子节点。
- 所有成员层级:当层次结构设置了 "有所有成员" 属性时,会在树形结构的最顶层展示一个 "所有成员" 节点。
实际使用中,度量值将按照此树形关系对维度数据进行汇总计算。