永洪社区

标题: 时间过滤问题 [打印本页]

作者: yhdata_GWxAKLq6    时间: 2022-7-2 09:06
标题: 时间过滤问题
之前的方法是通过这样的方式控制时间,因为数据量较大,页面组件过滤打开页面较慢,所以通过这种方式直接在sql控制时间范围,现在这种下拉组件不满足于需求,更换了定制时间日期参数组件,但是这种我尝试了只能在页面过滤,有什么方法可以还是采用将数值传入sql的方法过滤页面展示时间范围。版本9.2.1

作者: 永洪tech-joey    时间: 2022-7-2 09:06
本帖最后由 永洪tech-joey 于 2022-7-2 11:24 编辑


找不到hive中字符串转日期的话,还可以有两种解决方式
1、SQL中反向写
where 1=1
<定制组件1_Start> and dates >= to_char(?{定制组件1_Start},'yyyy-mm-dd') </定制组件1_Start>
<定制组件1_End> and dates <= to_char(?{定制组件1_End},'yyyy-mm-dd')  </定制组件1_End>

2、在永洪报告的『变化时运行』运行脚本中做转义
param["开始时间"] = formatDate(param["定制组件1_Start"],"yyyy-MM-dd")
param["结束时间"]= formatDate(param["定制组件1_End"],"yyyy-MM-dd")

然后在SQL中
where 1=1
<开始时间> and dates >= ?{开始时间} </开始时间>
<结束时间> and dates <= ?{结束时间} </结束时间>

注:开始时间和结束时间为文本格式

作者: 永洪tech-joey    时间: 2022-7-2 09:21
举一个小case,可以参考着来进行实操
1. 复制粘贴生成一个新的『咖啡中国市场销售数据_副本』

2. 在『咖啡中国市场销售数据_副本』数据集中新建一个参数:市场分布,且SQL语句替换成
SELECT * from 咖啡中国市场销售数据
where 1=1 <市场分布> and 市场分布 in (?{市场分布}) </市场分布>

3. 新建一个报告,拖入表格组件,绑定『咖啡中国市场销售数据_副本』的市场分布和销售额

4. 拖入一个下拉列表参数组件,绑定『咖啡中国市场销售数据』的市场分布字段,并修改组件名称为市场分布 -> 注意这里不是绑定副本的数据

5. 预览查看,发现表格数据会随着下拉参数的选择而变化;


原理讲解
1. 副本数据中引用了市场分布的参数用来过滤,不用在表格中添加过滤器,只要报告中存在同名参数,数据集即可获取到报告上的参数所选值来进行筛选,起到加速的效果
2. 特别注意的是,报告中的参数组件需要引用维度表的数据(本例子指『咖啡中国市场销售数据』),而不能引用和表格组件同一个数据集(即副本),
否则会报错『绑定的数据集"咖啡中国市场销售数据"中存在与参数组件"市场分布"同名的参数。』

同理,您这边的case中开始时间和结束时间也可以用同样的方式来做,只需要修改对应SQL即可


作者: yhdata_GWxAKLq6    时间: 2022-7-2 09:31
永洪tech-joey 发表于 2022-7-2 09:21
举一个小case,可以参考着来进行实操
1. 复制粘贴生成一个新的『咖啡中国市场销售数据_副本』

我想用这个时间组件控制,在sql用in可以实现么

作者: 永洪tech-joey    时间: 2022-7-2 09:40
设置一个开始时间,一个结束时间的参数
select * from table where 1=1
<开始时间> and 日期 >= ?{开始时间} </开始时间>
<结束时间> and 日期 <= ?{结束时间} </结束时间>

不同的数据库SQL的写法可能不一样,可以百度一下
作者: yhdata_GWxAKLq6    时间: 2022-7-2 09:43
永洪tech-joey 发表于 2022-7-2 09:40
设置一个开始时间,一个结束时间的参数
select * from table where 1=1
and 日期 >= ?{开始时间}

这个组件好像是自带开始结束参数的,我不太清楚怎么传里面这个参数,能帮忙解决一下么
作者: 永洪tech-joey    时间: 2022-7-2 09:46
本帖最后由 永洪tech-joey 于 2022-7-2 09:56 编辑

(, 下载次数: 11)