对象开启层级结构后,DeepQL查询语句支持基于层级链接parent的递归函数,以代替维度表达式,目前包含以下函数
cal::base(member: set of anytype):指定成员末级成员集合
cal::ibase(member: set of anytype):指定成员及末级成员集合
cal::descendant(member: set of anytype):指定成员后代成员集合
cal::idescendant(member: set of anytype):指定成员及后代成员集合
cal::ancestor(member: set of anytype):指定成员祖先成员集合
cal::iancestor(member: set of anytype):指定成员及祖先成员集合
可通过层级链接parent,直接获取父级、子级成员集合,所以不再提供相关递归函数
父级:.parent
子级:.<parent[is 对象编码],即层级链接parent的反向链接
递归函数默认按层级链接parent的层级计算,也支持按指定自我链接(包含计算链接)的层级计算
以cal::idescendant()
为例,按指定自我链接计算的函数为cal::idescendant(member: set of anytype, link_code: std::str, validate: std::bool=false)。其中,link_code表示指定链接编码,validate表示是否校验指定链接数据成环,默认为false
以对象DimRegion(大区)为例
属性/链接编码 |
属性/链接名称 |
属性类型/链接对象 |
说明 |
---|---|---|---|
code |
大区编码 |
文本 |
业务主键 |
name |
大区名称 |
多语言文本 | |
parent |
父级 |
多选链接,链接对象:DimRegion | |
self |
自我链接 |
单选链接,链接对象:DimRegion |
取值同parent |
cal_self |
自我链接(计算) |
单选链接,链接对象:DimRegion |
计算链接 |
cal_cycle_self |
自我链接_成环(计算) |
单选链接,链接对象:DimRegion |
计算链接 |
递归函数例子
需要往递归函数里传一个对象实例,仅可传一个。例如:获取所有大区及其后代成员集合。有以下两种写法
select cal::idescendant((select DimRegion filter .code = 'TotalRegion')) {
code,
name := json_get(.name, 'zh-cn')
}
with m := (select DimRegion filter .code = 'TotalRegion')
select cal::idescendant(m) {
code,
name := json_get(.name, 'zh-cn')
}
递归函数 - 根成员例子
V2维度根成员#root由空集表示即<对象编码>{}
。例如:获取大区中所有后代成员集合
select cal::idescendant(<DimRegion>{}) {
code,
name := json_get(.name, 'zh-cn')
}
父级例子
获取华东地区的父级成员集合
with m := (select DimRegion filter .code = 'HD').parent
select m {
code,
name := json_get(.name, 'zh-cn')
}
子级例子
获取华东地区的子级成员集合
with m := (select DimRegion filter .code = 'HD').<parent[is DimRegion]
select m {
code,
name := json_get(.name, 'zh-cn')
}
递归函数 - 指定自我链接例子
支持按指定自我链接(包含计算链接)的层级计算,其中指定链接编码需要使用L前缀标识,默认不校验指定链接数据是否成环
select cal::idescendant((select DimRegion filter .code = 'TotalRegion'), L"self") {
code,
name := json_get(.name, 'zh-cn')
}
递归函数 - 指定自我链接+成环校验例子
为防止自我链接数据成环导致递归函数陷入死循环,可设置校验指定链接数据是否成环,如果校验成环,则查询失败展示报错信息
select cal::idescendant((select DimRegion filter .code = 'TotalRegion'), L"cal_self", true) {
code,
name := json_get(.name, 'zh-cn')
}
select cal::idescendant((select DimRegion filter .code = 'TotalRegion'), L"cal_cycle_self", true) {
code,
name := json_get(.name, 'zh-cn')
}
回到顶部
咨询热线