# 数据类型
# 数值
# 数值范围匹配
当需要查找某个指定数值范围内的数据时,就需要使用数值范围匹配来查找对应的数据。
示例:
条件 | 说明 |
---|---|
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 '*成品油*'
。
在以下几种场景支持使用字符串逻辑匹配:
- 在输入表达式过滤条件时,如
fact.[企业名称] *= '加油站|成品油'
- 在字段筛选组件中,TODO,link下文档
- 在其它条件输入组件中,如在参数栏中放一个输入框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 |