跳到主要内容

层次结构

层次结构 (Hierarchy) 是维度中用于组织数据层次结构的概念。通过层次结构,用户可以定义维度成员的层次关系,从而在数据分析中提供更灵活的查询和展示方式。

名词解释:

  • 层次结构(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隐藏成员的条件。如果一个层次有一个或多个带有隐藏成员的级别,那么不是所有的叶成员距离根的距离相同,这称为锯齿形层次。1. 永不隐藏; 2. 名称为空时隐藏; 3. 名称与父级相同时隐藏;
语义Semantics维度层级的语义, 增强维度层级的表达能力语义设置
键表达式Key Expression表达式
名称表达式Name Expression表达式
说明表达式Caption Expression表达式
顺序表达式Ordinal Expression表达式
父字段表达式Parent Expression表达式
闭合表Closure维度上下级层级关系时, 可以设置闭包表优化 SQL 运行效率1. 表; 2. 父级字段; 3. 子级字段;
层级属性Property层级的属性列表1. 属性名称; 2. 属性字段; 3. 属性表达式

顺序字段

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

顺序字段属性指定层次结构表中的一列,该列提供给定级别中成员的顺序,而 名称字段 指定将显示的一列。

表达式

使用 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

隐藏成员

维度通常由多层级组成,例如,地区 > 省份 > 城市,或公司 > 部门 > 员工。隐藏规则 规则用于判断某个层级下的成员是否需要在分析视图中隐藏,常见于组织结构、地理区域、产品分类等存在“空”、“跳层”或“冗余命名”的场景。

🎯 功能说明

成员隐藏规则支持以下几种逻辑,用于自动判断某个层级的成员是否应该在视图中被省略:

规则类型说明
永不隐藏所有成员始终显示在分析结果中。适用于结构完整、数据一致的场景。
名称为空时隐藏当成员的名称为空、空字符串或仅包含空格时,不显示该成员。适用于部分节点未命名或无意义的情况。
名称与父级相同时隐藏如果当前成员的名称与其父级相同,则不显示该成员。常用于去除命名冗余,例如“总公司 > 总公司”的结构。

📚 应用示例

  • 组织结构分析 某些员工直接归属于公司总部,无中间部门;此时若部门名称为空,可自动隐藏部门层级,避免展示空白节点。

  • 产品分类展示 产品子类与父类名称相同的记录将被自动隐藏,使树状结构更清晰、避免重复信息干扰。

  • 区域层级调整 若某些地区没有省级划分,仅包括国家和城市,可以通过该规则跳过省级层,保持分析一致性。

✅ 使用建议

  • 当层级中可能存在 null、空字符串或仅包含空格的值时,建议启用“名称为空时隐藏”,以自动跳过无效节点,避免在分析结果中出现空白或无意义的成员。
  • 当某一层级的成员名称经常与其父级相同,建议启用“名称与父级相同时隐藏”,以去除冗余展示、增强层级清晰度。
  • 若维度结构完整、各层级数据规范,可保持默认“永不隐藏”,确保所有成员都被显示。