Skip to main content
Version: 5.1.0

派生属性(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 链路
  • aggregationSUM
  • unit:元
  • precision:2

系统将自动为 ChatBI 提供"客户订单总金额"这一聚合度量。

场景 2:统计商品下单次数(多跳链路)

  • Link 1:ProductOrderItem(商品-订单项)
  • Link 2:OrderItemOrder(订单项-订单)

配置派生属性时可选择两跳链路,聚合方式为 COUNT,即统计经过两跳关联后所有订单的数量。

与普通 Measure 属性的区别

对比项普通 Measure 属性派生属性(Derived)
数据来源直接映射物理表字段通过 Link 链路跨对象聚合
是否需要配置链路是(linkers)
是否需要聚合函数否(读取原始值)是(aggregation)
典型场景订单金额、商品价格客户总消费、商品销量

注意事项

  1. Link 链路必须已创建:派生属性依赖已有的 Link Type,请先完成 Link Type 的创建。
  2. 两端 ObjectType 需有主键:若链路中涉及 BackingObjectType 类型的 Link,两端 ObjectType 必须已设置主键属性(pk=true)。
  3. 多跳性能考虑:链路跳数越多,查询复杂度越高。建议在实际业务中控制跳数,通常不超过 3 跳。