# 数据类型

# 数值

# 数值范围匹配

当需要查找某个指定数值范围内的数据时,就需要使用数值范围匹配来查找对应的数据。

示例:

条件 说明
fact.[年龄]='[18~20]' 表示年龄在[18,20]之间的数据[]表示包含左右两侧边界值
fact.[年龄]='[18~20)' 表示年龄在[18,20)之间的数据)表示不包含右侧边界值
fact.[年龄]='(18~20]' 表示年龄在(18,20]之间的数据(表示不包含左侧边界值
fact.[年龄]='(18~20)' 表示年龄在(18,20)之间的数据()表示不包含左右两侧边界值
fact.[年龄]='[18~)' 表示年龄在大于等于18岁以上的数据,等价于>=18
fact.[年龄]='(18~)' 表示年龄在大于18岁以上的数据,等价于>18
fact.[年龄]='(~20]' 表示年龄在小于等于18岁以下的数据,等价于<=18
fact.[年龄]='(~20)' 表示年龄在小于18岁以下的数据,等价于<18

# 多个数值匹配

当需要查找多个指定数值时,可以按照约定的数据项分隔符同时传递多个值进行匹配。

示例:

条件 说明
fact.[年龄]='18,20' 表示fact.[年龄] IN (18,20)
fact.[年龄]!='18,20' 表示fact.[年龄] NOT IN (18,20)
fact.[年龄]=参数 参数包含多值且参数为18,20,表示fact.[年龄] IN (18,20)
fact.[年龄]=ARR(18,20) 表示fact.[年龄] IN (18,20)
fact.[年龄]=ARR('18,19',20) 表示fact.[年龄] IN (18,19,20)

# 字符串

# 字符串转义符

转义符,用于表示无法在当前上下文中被键盘录入的字符(如字符串中的回车符)。

示例:

条件 说明
\n 换行,将当前位置移到下一行开头
\r 回车,将当前位置移到下一行开头
\b 退格,将当前位置移到下一行开头
\t 水平制表,将当前位置移到下一行开头
\v 垂直制表,将当前位置移到下一行开头
\a 响铃
\\ 代表一个反斜线字符\
\' 代表一个单引号字符'
\" 代表一个双引号字符"
\? 代表一个问号?

# 字符串通配符

在使用like/not like/contains(包含)关系的条件时,系统支持使用通配符,来生成条件,查询期望的数据。

通配符 说明
* 匹配所有字符,比如:湖北* --表示“湖北”开头。
? 匹配一个字符,比如:*有限??公司 --表示结尾是“有限某某公司”。
% 匹配所有字符,这是数据库的原生匹配符,同*
_ 匹配一个字符,这是数据库的原生匹配符,同?
\ 转义符,当需要查询包含上述通配符时使用,比如:\** --表示匹配*开头的数据。

示例:

条件 说明
fact.[企业名称] like '*科技*' 表示企业名称包含科技
fact.[企业名称] like '%科技%' 同上
fact.[企业名称] like '湖北*' 表示企业名称湖北开头
fact.[企业名称] like '湖北%' 同上
fact.[企业名称] like '*有限??公司' 表示企业名称结尾是有限某某公司
fact.[企业名称] like '*有限__公司' 同上

# 通配符与转义符

需要查找的数据中含有通配符时,必须使用转义符,才能使查找的通配符具有意义。特别注意,表达式中\也是转义字符。

条件 说明
fact.[企业名称] like '\\*\\*\\**' 表示企业名称***开头
fact.[企业名称] like '*\\%*' 表示企业名称包含%
fact.[企业名称] like '%\\%%' 同上
fact.[企业名称] like '*\\\\*' 表示企业名称包含\

# 逻辑匹配

在使用*=(包含)关系的条件时,系统支持使用字符串逻辑匹配生成条件,使用空格AND&表示逻辑与,用OR|表示逻辑或,具体请参考操作符-数据项分隔符

如可以使用fact.[企业名称] *= '加油站|成品油'查询企业名称里包含加油站成品油的企业,系统会自动将查询条件翻译为fact.[企业名称] like '*加油站*' or fact.[企业名称] like '*成品油*'

在以下几种场景支持使用字符串逻辑匹配:

  1. 在输入表达式过滤条件时,如fact.[企业名称] *= '加油站|成品油'
  2. 在字段筛选组件中,TODO,link下文档
  3. 在其它条件输入组件中,如在参数栏中放一个输入框input1,使用包含方式匹配输入框绑定的条件字段,此时可以直接在输入框中输入逻辑匹配条件,如武汉 AND 加油站

更多示例如下:

条件 说明
*='武汉 责任' 表示包含武汉责任,和*='武汉 AND 责任'等价。
*='武汉 半导体|上海' 表示包含武汉半导体,或包含上海
*='武汉 (半导体|投资)' 表示包含武汉半导体,或包含武汉投资
*='武汉 "(半导体|导体)'" 表示包含武汉(半导体|导体)
*='武汉 "\"半导体|导体\""' 表示包含武汉"半导体|导体"
*=ARR('武汉&半导体','上海&投资') 表示包含武汉半导体或包含上海投资
  • "扩起来的内容,会当一个完整的搜索块使用
  • "括起的内容里面有"时,用\转义

# 维项匹配

数据库中多数的维都有层次关系,比如像产品、地区等,可以通过操作符-数据项分隔符中支持的分隔符来表示多个维项值,同时可以根据操作符左侧是字段还是层次还表示是否包含下级维项,参考逻辑运算符警告提示框的描述说明。

示例:

条件 示例
fact.[区划代码]='420000' 420000代码表示湖北省,表示包含湖北省(不包含下级)的数据
fact.[区划代码].[省市县层次]='420000' 420000代码表示湖北省,表示包含湖北省(包含下级)的数据
fact.[区划代码]='420000,430000' 支持多选,430000表示湖南省,表示包含湖北省(不包含下级)和湖南省(不包含下级)的数据
fact.[区划代码].[省市县层次]='420000,430000' 支持多选,430000表示湖南省,表示包含湖北省(包含下级)和湖南省(包含下级)的数据
fact.[区划代码]="420000|430000" 同上
fact.[标签]="A001&A002" 标签为A001和A002同时满足。表示and关系的两个值条件,多用于标签条件。
fact.[区划代码]!='420000' 表示不包含湖北省(不包含下级)的数据
fact.[区划代码].[省市县层次]!='420000' 表示不包含湖北省(包含下级)的数据
fact.[区划代码]!='420000,430000' 表示不包含湖北省(不包含下级)和湖南省(不包含下级)的数据

# 日期

# 相对日期匹配

当需要按照某个锚点日期偏移指定时间间隔过滤时,需要使用相对日期来匹配过滤数据。系统中使用锚点日期关键字+偏移量的字符串来表示相对日期。

系统中约定的锚点日期关键字有如下几种:

  • today:今天,默认锚点日期,可省略
  • firstDayOfWeek:本周第一天
  • lastDayOfWeek:本周最后一天
  • firstDayOfMonth:本月第一天
  • lastDayOfMonth:本月最后一天
  • firstDayOfYear:本年第一天
  • lastDayOfYear:本年最后一天

系统中约定的偏移时间间隔类型有如下几种:

类型 说明
y
q
m
w
d
ym 月,忽略年份
yd 天,忽略年份
md 天,忽略月份

示例:

条件 说明
fact.[上映日期]='today' 表示日期为今天的数据
fact.[上映日期]='-1d' 表示日期为昨天的数据
fact.[上映日期]='+1d' 表示日期为明天的数据
fact.[上映日期]='firstDayOfWeek' 表示日期为本周1的数据
fact.[上映日期]='firstDayOfWeek-7d' 表示日期为上周1的数据
fact.[上映日期]='firstDayOfMonth-1d' 表示日期为上月最后1天的数据
fact.[上映日期]='-1m' 表示日期为上月的今天的数据
fact.[上映日期]='firstDayOfYear' 表示日期为今年第1天的数据
fact.[上映日期]='lastDayOfYear' 表示日期为今年最后1天的数据
fact.[上映日期]='firstDayOfWeek' 表示日期为本周1的数据
fact.[上映日期]='-1w' 表示日期为上周的今天的数据
fact.[上映日期]='-1q' 表示日期为上季的今天的数据

# 日期范围匹配

当需要查找某个日期范围内的数据时,需要使用日期范围匹配来查询所期望的数据。

示例:

条件 说明
fact.[上映日期].[年]='[2019~2020]' 表示日期为[20190101~20200101]之间的数据
fact.[上映日期].[年]='[2019~]' 表示日期为20190101及以后的数据,等价于>=20190101
fact.[上映日期].[年]='[~2020]' 表示日期为20200101及以前的数据,等价于<=20200101
fact.[上映日期].[年月]='[201901~202008]' 表示日期为[20190101~20200801]的数据
fact.[上映日期].[年月]='[201902~]' 表示日期为20190201及以后的数据,等价于>=20190201
fact.[上映日期].[年月]='[~202008]' 表示日期为20200801及以前的数据,等价于<=20200801
fact.[上映日期].[年月日]='[20190101~20190701]' 表示日期为[20190101~20190701]之间的数据
fact.[上映日期].[年月日]='[20190101~]' 表示日期20190101及以后的数据,等价于 >='20190101'
fact.[上映日期].[年月日]='[~20190701]' 表示日期20190701及以前的数据,等价于 <='20190701'
fact.[上映日期].[日期]='[20190101 08:30:00~20190701 09:00:00]' 表示日期为[20190101 08:30:00~20190701 09:00:00]之间的数据,时间使用24小时制
fact.[上映日期]='[09:00:00~12:30:00]' 表示每天9:00到12:30的数据,时间使用24小时制
fact.[上映日期]='[21:00:00~03:30:00]' 表示每天21:00到次日凌晨03:30的数据
fact.[上映日期]='[21:00:00~21:00:00]' 表示每天21:00这一时刻的数据
fact.[上映日期].[年]='['+adddate(year(today()),-3,'y')+'~'+year(today())+']' 动态区间,表示最近三年
fact.[上映日期]='firstDayOfWeek-2w~lastDayOfWeek' 表示日期为前三周的数据
fact.[上映日期]='firstDayOfMonth-1m~firstDayOfMonth-1d' 表示日期为上个月的第1天到上个月的最后1天的数据

# 自适应粒度匹配

当字段是日期型、时间戳型或者具有日期角色时,能根据传递的值自适应粒度匹配。

示例:

条件 说明
fact.[上映日期]='[2019~2020]' 右侧区间范围值是4位,自适应粒度为,左侧字段等价于[上映日期].[年],表示[上映日期].[年]='[2019~2020]'
fact.[上映日期]='2019' 右侧值是4位,自适应粒度为,左侧字段等价于[上映日期].[年],表示[上映日期].[年]='2019'
fact.[上映日期]='2019,2020' 右侧是多值,每个值都是4位,自适应粒度为,左侧字段等价于[上映日期].[年],表示[上映日期].[年]='2019,2020'
fact.[上映日期]='[201901~202001]' 右侧区间范围值是6位,自适应粒度为年月,左侧字段等价于[上映日期].[年月],表示[上映日期].[年月]='[201901~202001]'
fact.[上映日期]='201901' 右侧值是6位,自适应粒度为年月,左侧字段等价于[上映日期].[年月],表示[上映日期].[年月]='201901'
fact.[上映日期].[年月]='20190801' 细粒度值自适应粗粒度字段,左侧字段是年月,右侧是日期,右侧细粒度的值自适应粒度为年月,等价于fact.[上映日期].[年月]='201908'
fact.[上映日期]='201901,202001' 右侧是多值,每个值是6位,自适应粒度为年月,左侧字段等价于[上映日期].[年月],表示[上映日期].[年月]='201901,202001'
fact.[创建时间]='[20190102~20200301]' 右侧区间范围值是8位,自适应粒度为年月日,左侧字段等价于[创建时间].[日期],表示[创建时间].[日期]='[20190102~20200301]'
fact.[创建时间]='20190102' 右侧值是8位,自适应粒度为年月日,左侧字段等价于[创建时间].[日期],表示[创建时间].[日期]='20190102'
fact.[创建时间]='20190102,20200101' 右侧是多值,每个值是8位,自适应粒度为年月日,左侧字段等价于[创建时间].[日期],表示[创建时间].[日期]='20190102,20200101'
fact.[上映日期]='2019,202001' 右侧是不同粒度的多值,第一个值是4位,自适应粒度为;第二个值是6位,自适应粒度为年月,表示[上映日期].[年]='2019' OR [上映日期].[年月]='202001'
fact.[上映日期].[年]='20190928,202001' 右侧是不同粗粒度的多值,都自适应粒度为,表示[上映日期].[年]='2019' OR [上映日期].[年]='2020'
fact.[上映年月]='2019,202001,20180818' 右侧是不同粒度的多值,既有粗粒度,也有细粒度的值,自适应粒度后表示为fact.[上映年月].[年]='2019' OR fact.[上映年月]='202001' OR fact.[上映年月]=='201808'
fact.[上映日期].[年月]='firstDayOfWeek-2w~lastDayOfWeek' 按照相对日期计算出来的日期范围进行粒度自适应
fact.[上映日期].[年月]='firstDayOfMonth-1m~firstDayOfMonth-1d' 按照相对日期计算出来的日期范围进行粒度自适应

TIP

日期自适应粒度可以双向自适应: 1、粗粒度值自适应细粒度字段,取细粒度字段相同粒度的维属性过滤,比如:[上映日期]='201802'自适应为fact.[上映年月].[年月]='201802' 2、细粒度值自适应粗粒度字段,将细粒度值截断,比如:[上映日期].[年月]='20180210'自适应为[上映日期].[年月]='201802'

# 布尔

布尔值有两个值:真和假,值为真用true,值为假用false。也可以使用其他数据类型进行布尔值的转换,如下所示:

数据类型 转换结果
任何非零数字 true
0 false
任何非空字符串 true
""(空字符串) false

示例:

条件 示例
if($XSSL,fact.[销售数量]>$XSSL,true) 表示销售数量为参数中的销售数量时,输出大于该参数的销售数量,否则输出全部销售数量
if(fact.[销售数量] IS NOT NULL,[销售数量],0) 表示销售数量不为空时,输出为销售数量的数据,否则输出0
是否有帮助?
0条评论
评论