Skip to main content
Version: 5.1.0

语义角色(Role Type)

什么是语义角色

每个 Object Type 属性除了基础的数据类型(typeRef)之外,还可以设置一个语义角色(roleType),用来描述这个字段在业务语义上承担的作用。语义角色是 TIS ChatBI 能够"理解"数据表结构、自动生成统计口径的关键依据 —— 同样是数值类型的字段,被标记为 Measure 与被标记为 Identifier,在被 ChatBI 引用时的处理方式完全不同。

roleType 字段定义在 DefaultOntologyProperty.java 中:

@FormField(ordinal = 5, validate = {Validator.require})
public PropertyRoleType roleType;

PropertyRoleType 的具体实现最终都会归类到 SemanticRole 枚举中的一项:

public SemanticRole getSemanticRole() {
return this.roleType == null ? SemanticRole.Unknown : this.roleType.kind();
}

五种语义角色

SemanticRole 枚举共定义了 5 种角色:

角色枚举值说明
Unknown0未识别 / 未设置,默认兜底值,不参与任何语义化处理
Identifier1实体的唯一标识列,通常对应主键或业务编码(如订单号、用户 ID)
Dimension2用于分组、筛选的分类型属性(如地区、渠道、状态)
TimeDimension3时间属性,支持按粒度(天/周/月/年等)进行切分与聚合
Measure4可被聚合计算的数值型度量(如金额、数量),需配合派生属性配置聚合方式

Identifier(标识列)

用于标记该属性是用于唯一定位一条记录的标识字段。一个 Object Type 通常会有一个标识列与主键(pk)字段重合,但 pk 描述的是数据库层面的主键约束,roleType=Identifier 描述的是语义层面"这是一个 ID"的含义,二者关注点不同,并不强制一致。

Dimension(维度)

用于标记该属性是可以用来做分组(GROUP BY)或筛选(WHERE)的分类型字段。例如商品类目、订单状态、所属部门等。在 ChatBI 场景下,当用户提出"按渠道统计"之类的问题时,TIS 会优先在标记为 Dimension 的属性中寻找匹配项。

TimeDimension(时间维度)

时间维度是一种特殊的维度,额外具备按时间粒度(日、周、月、季、年)切分聚合的能力。下单时间、创建时间等字段适合标记为 TimeDimension,从而支持"近 7 天""按月统计"等时间相关的查询语义。

Measure(度量)

度量是可以被聚合函数(SUM、AVG、COUNT 等)处理的数值型字段,是统计分析的核心。当一个属性的角色被设置为 Measure 时,通常需要进一步配置该度量的聚合方式 —— 这正是派生属性(Derived Property)要解决的问题。

角色与派生属性的关系
直接添加在 Object Type 上的常规属性,其 `roleType` 一般设置为 `Identifier`、`Dimension` 或 `TimeDimension`。而 `Measure` 角色通常对应 `MeasureRole` 这一派生属性的具体实现,详见派生属性一节。