QuickBI使用odps数据源表创建数据集,如何使用SQL参数,实现查询控件查询固定天数前的数据内容?

问题描述

使用odps数据源,在自定义SQL创建数据集时,想通过对参数进行日期计算函数的操作,实现在仪表板中查询180天前的数据内容,结果运行SQL报错如下图:

问题原因

  • 自定义SQL如下:
SELECT

*

FROM

API_TEST_DATA_COMPANY

WHERE

${REPORT_DATE:DATE_ADD(REPORT_DATE,-180)}
  • 通过排查上述SQL,发现SQL参数这里的书写有多处错误:
${REPORT_DATE:DATE_ADD(REPORT_DATE,-180)}
  1. 由于是odps数据源,这里的函数应该使用DATEADD()。
  2. 函数格式错误,而且需要在字段名上加函数而不是参数名,${字段名:参数名}。
  3. 日期数值错误,查询控件查询到的内容为使用函数后的字段名,例如查询内容为20210101,那么:
    REPORT_DATE+180=20210101,REPORT_DATE为20210101前180天,查的内容是180天前的。
    REPORT_DATE-180=20210101,REPORT_DATE为20210101后180天,查的内容是180天后的。
    这里需要区分清楚。
  • 下图为odps数据源的日期计算函数用法:

解决方案

由于是需要查询180天前的数据,则意味着查询控件中选择的日期为REPORT_DATE+180天,所以天数应为180而不是-180。SQL参数正确写法如下:

${DATEADD(REPORT_DATE, 180, 'DD'):REPORT_DATE}

适用于

  • Quick BI

说明:本文适用于数据集模块。