报表日期漏斗查询不准确解决方案
1 问题描述
在报表中,通过漏斗查询是很常见的搜索方式。而日期漏斗查询有时会出现不那么精确的现象。
2 原因分析
原因是日期漏斗范围过滤的结束时间判断条件默认都是"<"当前所选择的时间。所以”上月“条件和”从...到...“选择6月1日至6月30日,实际上是相差一天的,如下图。这俩个条件本身都没有问题,但如果我们拿他们做对比,可能就觉得查询没那么舒适了。
3 解决方法
可以对"从..到..."这个条件进行二开
准备数据源,以及报表查询取数插件这里就不详细说了。
步骤一:先实现报表显示漏斗过滤功能,需要继承报表表单插件并重写setSortAndFilter方法
public void setSortAndFilter(List<SortAndFilterEvent> allColumns) { super.setSortAndFilter(allColumns); for(SortAndFilterEvent event: allColumns){ event.setFilter(true); } }
步骤二:报表取数插件重写query方法,拿到前端漏斗过滤的条件,执行过滤查询
public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable { DataSet resultDataSet = null; String pattern = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); QFilter[] qFilters =null; Calendar calendar = Calendar.getInstance(); //获取漏斗过滤条件 List<QFilter> headFilters = reportQueryParam.getFilter().getHeadFilters(); //获取漏斗过滤条件的选择项 List<FilterItemInfo> tableHeadFilterItems = reportQueryParam.getFilter().getTableHeadFilterItems(); String search=null; for (int x=0;x<headFilters.size();x++){ //判断是否是日期字段过滤 if(headFilters.get(x).getProperty().equals("lago_datefield")){ //拿到搜索条件 search= (String) headFilters.get(x).toString(); //拿到过滤条件的选择项 String compareType = tableHeadFilterItems.get(x).getCompareType(); String[] splitstart = search.split(">="); String[] splitend = search.split("<"); String startDate = splitstart[1].substring(2, 21); String endDate = splitend[1].substring(2, 21); Date date = sdf.parse(startDate); Date date2 = sdf.parse(endDate); //判断如果是”从...到...“就给结束时间加一天 if(compareType.equals("BETWEEN")){//从...到...:BETWEEN,上月:LASTMONTH,本月:THISMONTH,本周:THISWEEK,今天:TODAY,过去三个月:LASTTHREEMONTH calendar.setTime(date2); calendar.add(Calendar.DAY_OF_MONTH,+1); date2=calendar.getTime(); } //重新拼接查询条件 qFilters = new QFilter[]{new QFilter("lago_datefield", QCP.large_equals, date).and(new QFilter("lago_datefield", QCP.less_than, date2))}; } } resultDataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "lago_sheet1", "id,lago_combofield,lago_textfield,lago_textfield1,lago_textfield2,lago_textfield3,lago_datefield", qFilters, null); return resultDataSet; }
4 效果图
5 注意事项
我们可以利用compareType属性做更多的二开操作。通过断点调试可以看到该属性条件对应的编码
比如:
从...到...=BETWEEN,上月=LASTMONTH,本月=THISMONTH,本周=THISWEEK,今天=TODAY,过去三个月=LASTTHREEMONTH等
6 源码
报表日期漏斗查询不准确解决方案
1 问题描述在报表中,通过漏斗查询是很常见的搜索方式。而日期漏斗查询有时会出现不那么精确的现象。2 原因分析 原因是日期漏斗范围过滤...
点击下载文档
上一篇:苍穹补丁制作下一篇:kingscript辅助编程
本文2024-09-23 00:17:26发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138523.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf
热门文章