0

我正在尝试构建一些参数化数据源(通过 jndi 的 sql 查询)。我的数据源的查询是:

SELECT ${param_interval}(dim_date.date), count(docs_fact.id) as docs_count
FROM rel_docs_dates
left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
left join dim_date on rel_docs_dates.date_id = dim_date.id

参数${param_interval}可以得到两个值:MONTHDAY,并且当我检查它得到正确的值。但是当我试图预览我的仪表板时,我收到警告“错误处理组件”。

请注意,此查询(见下文)可以正常工作。

SELECT MONTH(dim_date.date), count(docs_fact.id) as docs_count, ${param_interval} as tmp_fiel
FROM rel_docs_dates
left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
left join dim_date on rel_docs_dates.date_id = dim_date.id

有人能告诉我哪里出错了吗?或者(可能)不支持这种在数据源中使用参数的方式?

4

1 回答 1

1

最后我找到了决定。这不是我想要的,但它有效,而且它是最重要的。

我用“case”结构重写了我的查询,重要的是,我将参数的类型从字符串更改为数字(字符串不起作用:()。现在我的查询如下所示:

    SELECT 
    case ${param_interval}
    when 1 then MONTH(dim_date.date)
    when 2 then DAY(dim_date.date)
    end
    ,count(docs_fact.id) as fact_count
    FROM rel_docs_dates
    left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
    left join dim_date on rel_docs_dates.date_id = dim_date.id
    where  dim_date.date > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL ${param_period}  MONTH))
     AND dim_date.date < LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 0 MONTH)) 
    group by
    case ${param_interval}
    when 1 then MONTH(dim_date.date)
    when 2 then DAY(dim_date.date)
    end
    order by YEAR(dim_date.date), MONTH(dim_date.date)

也许它会帮助别人。

于 2013-11-03T18:26:27.883 回答