派生属性(Derived Property)
派生属性是基于 Link Type 关系链路进行跨对象聚合计算的特殊属性,属于语义角色为 Measure(度量)的属性在启用派生模式时的配置形态。

什么是派生属性
在业务分析场景中,经常需要将不同对象间的数量关系汇总计算,例如:
- 统计某个"客户"关联的所有"订单"的总金额
- 计算某个"商品"被下单的总次数
这类计算需要跨越对象之间的关联关系(Link)进行聚合,不能直接从单表字段读取。派生属性正是为此而设计:通过配置 Link 链路 + 聚合函数,系统可以自动生成对应的查询逻辑。
配置项说明
派生属性由 MeasureRole 实现(对应源码 MeasureRole.java),包含以下核心配置:
| 配置项 | 说明 |
|---|---|
| linkers(关联链路) | 选择从当前 ObjectType 出发,经过哪些 Link 到达目标对象。支持多跳(最多 3 跳),以 OntologyLinkerRef 列表形式配置 |
| aggregation(聚合方式) | 对目标字段执行何种聚合操作,由 AggregationKind 枚举定义,包含 SUM、COUNT、AVG、MAX、MIN 等常见聚合函数 |
| unit(单位) | 聚合结果的单位,如"元"、"次"、"件"等,纯描述性字段,用于在 ChatBI 展示时附加单位标签 |
| precision(精度) | 数值结果的小数位精度,如设置为 2 则保留两位小数 |
使用场景
场景 1:计算客户订单总金额
假设本体中有:
- ObjectType:
Customer(客户) - ObjectType:
Order(订单),含属性total_amount - Link Type:
Customer_has_Orders,关联 Customer → Order
在 Customer 的属性中,可以新增一个派生属性:
- linkers:选择
Customer_has_Orders链路 - aggregation:
SUM - unit:元
- precision:2
系统将自动为 ChatBI 提供"客户订单总金额"这一聚合度量。
场景 2:统计商品下单次数(多跳链路)
- Link 1:
Product→OrderItem(商品-订单项) - Link 2:
OrderItem→Order(订单项-订单)
配置派生属性时可选择两跳链路,聚合方式为 COUNT,即统计经过两跳关联后所有订单的数量。
与普通 Measure 属性的区别
| 对比项 | 普通 Measure 属性 | 派生属性(Derived) |
|---|---|---|
| 数据来源 | 直接映射物理表字段 | 通过 Link 链路跨对象聚合 |
| 是否需要配置链路 | 否 | 是(linkers) |
| 是否需要聚合函数 | 否(读取原始值) | 是(aggregation) |
| 典型场景 | 订单金额、商品价格 | 客户总消费、商品销量 |
注意事项
- Link 链路必须已创建:派生属性依赖已有的 Link Type,请先完成 Link Type 的创建。
- 两端 ObjectType 需有主键:若链路中涉及
BackingObjectType类型的 Link,两端 ObjectType 必须已设置主键属性(pk=true)。 - 多跳性能考虑:链路跳数越多,查询复杂度越高。建议在实际业务中控制跳数,通常不超过 3 跳。