1. 概述
1.1 版本
FineBI版本 | 功能变动 |
---|---|
6.0 | - |
6.0.16 | 过滤组件绑定参数功能优化 1)参数显示优化:
2)参数绑定优化
|
1.2 功能简介
本文提供 实时数据 中使用 SQL 数据集参数的 SQL 写法示例。
注:不同数据库的写法不同,本文仅提供参考示例。
1.3 注意事项
1)where 1=1 表示条件永真,防止没有之后的参数条件时,where 多出而导致出错。
2)<parameter> and </parameter>该添加的parameter用于在中间参数为空时,获取所有值。 可用于「文本参数」「数值参数」和「日期参数」。
3)数据准备 sql 表参数中,年月参数、年季度参数、年月区间参数中的月份和季度参数类型为文本类型,取值为(1~12)和(1~4),不可以写成 01 这种格式的,否则仪表板中的控件读出数据会不正确。
2.Microsoft SQL Server
2.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM 互联网访问数据 WHERE YEAR(销售日期)='${年份}' | 文本 |
年月 | SELECT * FROM 互联网访问数据 WHERE YEAR(销售日期)='${年份}' and month(销售日期)='${月份}' | 文本 |
日期 | SELECT * FROM 互联网访问数据 WHERE CAST(统计日期 as varchar) in ('${日期}') | 日期 |
日期区间 | SELECT * FROM 互联网访问数据 WHERE 统计日期 between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM 互联网访问数据 WHERE format(统计日期,'yyyyMM') >=concat('${开始年份}',case when '${开始月份}'>9 then '${开始月份}'else concat(0,'${开始月份}') end ) and format(统计日期,'yyyyMM') <=concat('${截至年份}',case when '${截至月份}'>9 then '${截至月份}'else concat(0,'${截至月份}') end ) | 文本 |
年季度 | SELECT * FROM 互联网访问数据 WHERE CAST(YEAR(注册时间) as varchar) = '${年份}' and CAST(FLOOR((MONTH(注册时间)+2)/3) as varchar) = '${季度}' | 文本 |
2.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM 互联网访问数据 WHERE 合同类型='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM 互联网访问数据 WHERE 合同类型 in ('${文本参数}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | select * from new_dian where 1=1 ${if(len(所属大区2) == 0,"","and 所属大区 in ('" + 所属大区2 + "')")} 或者:select * from new_dian where 1=1 <parameter> and 所属大区 in ('${所属大区}')</parameter> | 文本 |
3. Oracle(teradata类似)
3.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM 互联网访问数据 WHERE TO_CHAR("销售日期,"'YYYY')='${年份A}' | 文本 |
年月 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY')='${年份}' and EXTRACT(MONTH FROM "销售日期")='${月份}' | 文本 |
日期 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY-MM-DD') in ('${日期参数}') | 日期 |
日期区间 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY-MM-DD') between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYYMM') >=concat('${开始年份}',case when '${开始月份}'>9 then '${开始月份}'else concat(0,'${开始月份}') end ) and TO_CHAR("销售日期",'YYYYMM') <=concat('${截止年份}',case when '${截止月份}'>9 then '${截止月份}' else concat(0,'${截止月份}') end ) | 文本 |
年季度 | SELECT * FROM DEMO_CONTRACT WHERE TO_CHAR("注册时间",'YYYY')='${年份}' and FLOOR((EXTRACT(MONTH FROM "注册时间")+2)/3)='${季度}' | 文本 |
3.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM demo_contract WHERE "合同类型"='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM demo_contract WHERE "合同类型" in ('${文本参数}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | SELECT * FROM demo_contract WHERE 1=1 <parameter> and "合同类型" in ('${文本参数}') </parameter> | 文本/日期/数值 |
4. Presto
4.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM new_salesdetail WHERE cast(year(销售日期) as varchar)='${年份}' | 文本 |
年月 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'yyyy')='${年份}' and cast(EXTRACT(MONTH FROM "销售日期") as varchar)='${月份}' | 文本 |
日期 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'yyyy-mm-dd') in ('${日期参数}') | 日期 |
日期区间 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'yyyy-mm-dd') between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM DEMO_CONTRACT WHERE TO_CHAR("注册时间",'yyyymm') >=concat('${开始年份}',case when cast('${开始月份}' as tinyint)>9 then '${开始月份}' else concat('0','${开始月份}') end ) and TO_CHAR("注册时间",'yyyymm') <=concat('${截至年份}',case when cast('${截至月份}' as tinyint)>9 then '${截至月份}' else concat('0','${截至月份}') end ) | 文本 |
年季度 | SELECT * FROM DEMO_CONTRACT WHERE TO_CHAR("注册时间",'yyyy')='${年份}' and cast(FLOOR((EXTRACT(MONTH FROM "注册时间")+2)/3) as varchar)='${季度}' | 文本 |
4.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM demo_contract WHERE "合同类型"='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM demo_contract WHERE "合同类型" in ('${文本参数}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | SELECT * FROM demo_contract WHERE 1=1 <parameter> and "合同类型" in ('${文本参数}') </parameter> 用于 | 文本 |
5. Postgresql
5.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY')='${年份A}' | 文本 |
年月 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY')='${年份}' and EXTRACT(MONTH FROM "销售日期")='${月份}' | 文本 |
日期 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY-MM-DD') in ('${日期参数}') | 日期 |
日期区间 | SELECT * FROM new_salesdetail WHERE TO_CHAR("销售日期",'YYYY-MM-DD') between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM DEMO_CONTRACT WHERE TO_CHAR("注册时间",'yyyymm') >=concat('${开始年份}',case when cast('${开始月份}' as tinyint)>9 then '${开始月份}' else concat('0','${开始月份}') end ) and TO_CHAR("注册时间",'yyyymm') <=concat('${截至年份}',case when cast('${截至月份}' as tinyint)>9 then '${截至月份}' else concat('0','${截至月份}') end ) | 文本 |
年季度 | SELECT * FROM DEMO_CONTRACT WHERE TO_CHAR("注册时间",'YYYY')='${年份}' and FLOOR((EXTRACT(MONTH FROM "注册时间")+2)/3) ='${季度}' | 文本 |
5.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM demo_contract WHERE "合同类型"='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM demo_contract WHERE "合同类型" in ('${文本参数}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | SELECT * FROM demo_contract WHERE 1=1 <parameter> and "合同类型" in ('${文本参数}') </parameter> | 文本 |
6. APACHE IMPALA
6.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM xxxx WHERE cast(year(销售日期) as STRING)='${年份}' | 文本 |
年月 | SELECT * FROM xxxx WHERE cast(year(销售日期) as STRING)='${年份}' and cast(month(销售日期) as STRING)='${月份}' | 文本 |
日期 | SELECT * FROM xxxx WHERE 注册时间 in ('${日期参数}') | 日期 |
日期区间 | SELECT * FROM xxxx WHERE 注册时间 between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM xxxx WHERE TO_CHAR("注册时间",'yyyymm') >=concat('${开始年份}',case when cast('${开始月份}' as tinyint)>9 then '${开始月份}' else concat('0','${开始月份}') end ) and TO_CHAR("注册时间",'yyyymm') <=concat('${截至年份}',case when cast('${截至月份}' as tinyint)>9 then '${截至月份}' else concat('0','${截至月份}') end ) | 文本 |
年季度 | SELECT * FROM xxxx WHERE cast(year(注册时间) as STRING)='${年份}' and cast(truncate((month(注册时间)+2)/3) as STRING)='${季度}' | 文本 |
6.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM demo_contract WHERE 合同类型='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM demo_contract WHERE 合同类型 in ('${文本参数1}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | SELECT * FROM demo_contract WHERE 1=1 <parameter> and 合同类型 in ('${文本参数}') </parameter> | 文本 |
7. ClickHouse
7.1 日期类参数
日期类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
年份 | SELECT * FROM xxxx WHERE toString(toYear(注册时间)) ='${年份}' | 文本 |
年月 | SELECT * FROM xxxx WHERE toString(toYear(注册时间)) ='${年份}' and toString(toMonth(注册时间)) ='${月份}' | 文本 |
日期 | SELECT * FROM xxxx WHERE 注册时间 in ('${日期参数}') | 日期 |
日期区间 | SELECT * FROM xxxx WHERE 注册时间 between '${起始日期}' and '${结束日期}' | 日期 |
年月区间 | SELECT * FROM xxxx WHERE TO_CHAR("注册时间",'yyyymm') >=concat('${开始年份}',case when cast('${开始月份}' as tinyint)>9 then '${开始月份}' else concat('0','${开始月份}') end ) and TO_CHAR("注册时间",'yyyymm') <=concat('${截至年份}',case when cast('${截至月份}' as tinyint)>9 then '${截至月份}' else concat('0','${截至月份}') end ) | 文本 |
年季度 | SELECT * FROM xxxx WHERE toString(toYear(注册时间))='${年份}' and toString(floor((toMonth(注册时间)+2)/3))='${季度}' | 文本 |
7.2 文本类参数
文本类型 | SQL 示例 | 推荐设置的参数类型 |
---|---|---|
参数只能取一个值 | SELECT * FROM demo_contract WHERE "合同类型"='${文本参数}' | 文本 |
参数可以取多个值 | SELECT * FROM demo_contract WHERE "合同类型" in ('${文本参数}') | 文本 |
当参数为空时,显示全部,参数有值时,显示参数值 | SELECT * FROM demo_contract WHERE 1=1 <parameter> and "合同类型" in ('${文本参数}') </parameter> | 文本 |