全部文档
文档中心DeepModel功能DeepQL查询语句递归函数(代替维度表达式)

递归函数(代替维度表达式)

对象开启层级结构后,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

计算链接


取值同parent

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')
}

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send