维度表达式是为查询某维度下符合特定条件的维度成员而设计的特定查询语法。
维度表达式的基础构成单元有两种:
维度成员名 例如 A
维度表达式函数 例如 Descendant(A,0)
一个维度表达式中可以出现多个函数或是维度成员,函数与函数或者维度成员之间用“;”连接(例如Entity{Descendant(A,0);Children(B,0);C}); 这里需要提到完整维度表达式的格式:
维度名{维度表达式} 例如 Year{2024;2025}
在先胜云平台的大部分组件中,用户不需要写完整的维度名{维度表达式} 的格式,只需要关注内部的 维度表达式 即可。
维度表达式中的英文不区分大小写;
在某些业务场景下,同名成员的共享节点有着不同的业务意义。所有需要一种新的维度成员格式:父.子。因为维度成员name本身支持“.”点符号,所以在使用父.子结构时,父和子成员需要各套一层中括号[]以做区分(如[A].[B])。
维度表达式中包含四种类型的基本函数以及在基本函数基础上延伸的聚合函数,聚合函数可以更灵活的查询表达式的维度成员。下面我们将分别介绍:
即当前节点下的所有低于当前节点等级的节点。
Descendant(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2))
IDescendant(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2))(包含节点本身)
示例:
获取 Entity 维度 #root 节点下所有后代节点的维度表达式为:
Entity{Descendant(#root,0)}
获取Entity维度#root节点下的所有后代节点,并且过滤实体激活版有效性,且返回纯子结构的维度表达式为 :
Entity{Descendant(#root,0,2)}
即当前节点下的所有次级节点。
Children(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2))
IChildren(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2))(包含节点本身)
示例:
获取 Entity 维度 #root 节点下所有子代节点的维度表达式为:
Entity{Children(#root,0)}
即当前节点下的所有最底层节点。
Base(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2)),已知维度成员本身为末级节点时返回本身
IBase(维度成员名,排序方式(0/1),有效性过滤参数(0/1/2))(包含节点本身)
示例:
获取 Entity 维度 #root 节点下所有末级节点的维度表达式为:
Entity{Base(#root,0)}
Level(维度成员名,排序方式(0/1),当前层级开始层级,当前层级结束层级,有效性过滤参数(0/1/2))
ILevel(维度成员名,排序方式(0/1),当前层级开始层级,当前层级结束层级,有效性过滤参数(0/1/2))(包含节点本身)
示例:
获取 Entity 维度 TotalEntity 节点向下第一层级到第三层级之间的节点维度表达式:
Entity{Level(TotalEntity,0,1,3)}
排序方式 0:正序 1:倒序
有效性过滤参数 0:否;1:是,并返回父点子结构成员;2:是,并返回纯子结构成员。该参数非必传,默认为0。该参数仅对多版本实体维生效。
#root是一个虚拟节点,使用表达式函数不会返回#root节点,但是作为单个维度成员查询,会返回#root节点。Entity{IDescendant(#root,0)}的返回结果中不会出现#root,但是Entity{#root}则会返回#root。
示例: 获取 Entity 维度 TotalEntity 的所有末级节点,NoEntity,以及和 TotalEntiy 同级的 Company 节点下所有节点的维度表达式:
Entity{Base(TotalEntity,0);NoEntity;Descendant(Company,0)}
维度表达式包含两种类型的聚合函数。
删除函数:去除某个单独成员。
条件过滤:筛选过滤维度成员字段。
从 函数一 获取的列表数据中去除 函数二 或者单独某个维度成员,去除的 函数二 和维度成员可为多个 Remove(函数一,函数二,维度成员名…)。
示例:
获取 Entity 维度 #root 节点的所有不是末级节点的后代节点,TotalEntity 不包含在内:
Entity{Remove(IDescendant(#root,0),Base(#root,0),TotalEntity)}
从 函数一 中获取的列表数据中维度成员的字段属性需要满足某些具体的条件。
表达式为:AndFilter/OrFilter/NAndFilter/NOrFilter(函数1,Attr(属性名,属性值))
Attr(属性名,属性值) 中属性值是否需要单引号要根据当前属性数据库设置的类型来设置:
若 ud5 的类型为 varchar,则字段属性表达式为 Attr(ud5,'1')
若 ud5 的类型为 int,则字段属性表达式为 Attr(ud5,1)
条件过滤有四种情况:
满足函数查询结果并且满足字段属性值的设定,字段属性可设置多个。
示例:
获取 Entity 维度 #root 节点下的所有 ud5 等于 1 的后代节点:
Entity{AndFilter(Descendant(#root,0),Attr(ud5,'1'))}
满足函数查询结果并且符合字段属性值设定的至少一个条件,字段属性可设置多个。
示例:
获取 Entity 维度 #root 节点下的所有 ud5 等于 1 或者是末级节点的后代节点:
Entity{OrFilter(IDescendant(#root,0),Attr(ud5,'1'),Attr(is_base,1))}
满足函数查询结果不满足字段属性值的设定,字段属性可设置多个。
示例:
获取 Entity 维度 #root 节点下的所有 ud5 不等于 1 并且不是末级节点的后代节点:
Entity{NAndFilter(IDescendant(#root,0),Attr(ud5,'1'),Attr(is_base,1))}
满足函数查询结果并且不符合字段属性值设定的至少一个条件,字段属性可设置多个。
示例:
获取 Entity 维度 #root 节点下的所有 ud5 不等于 1 或者不是末级节点的后代节点:
Entity{NOrFilter(IDescendant(#root,0),Attr(ud5,'1'),Attr(is_base,1))}
回到顶部
咨询热线