我有一个问题:我有一个带有简单选择器的表,用户可以对表进行过滤。此时我希望选择器为多个,以便由多个用户过滤数据。默认情况下,我把用户'Todos'(全部用英文),如果选择用户'Todos',我选择表格的列来选择所有用户。否则我会选择所选用户。
SELECT DISTINCT
p.pname AS project,
SUM(w.timeworked / 3600) OVER () AS sum_all_hours,
SUM(w.timeworked / 3600) OVER (PARTITION BY p.pname) AS suma_proyecto
FROM
jira.jiraissue j,
jira.worklog w,
jira.project p
WHERE
w.issueid = j.id
AND j.project = p.id
AND w.author IN (${Autor})
AND p.pname IN ('Area Económica',
'Proyectos Clinicos',
'Proyectos. Con sus componentes',
'Despliege y Soporte')
AND TO_CHAR(w.startdate,'yyyy-mm-dd') >= ${FromDate}
AND TO_CHAR(w.startdate,'yyyy-mm-dd') <= ${ToDate}
此代码工作正常,但省略用户'Todos'。
如果我输入以下代码,用户可以使用“Todos”,如果我选择单个用户,但多个选择不会显示任何内容。
SELECT DISTINCT p.pname AS project,
Sum(w.timeworked / 3600) OVER () AS sum_all_hours,
Sum(w.timeworked / 3600) OVER (partition BY p.pname) AS suma_proyecto
FROM jira.jiraissue j,
jira.worklog w,
jira.project p
WHERE w.issueid=j.id
AND j.project=p.id
AND w.author in(
CASE
WHEN ${Autor} = ' Todos' THEN author
else ${Autor}
END)
AND p.pname IN ('Area Económica',
'Proyectos Clinicos',
'Proyectos. Con sus componentes',
'Despliege y Soporte')
AND to_char(w.startdate,'yyyy-mm-dd') >=${FromDate}
AND to_char(w.startdate,'yyyy-mm-dd') <=${ToDate}
由于我没有pentaho CDE,我不确定为什么你的案例表达不起作用 - 它看起来很好。我认为这可能与pentaho处理参数的方式有关。我建议用不同的方式编写逻辑,例如:
AND (w.author in (${Autor})
OR ${Autor} = ' Todos')
如果问题只是pentaho扩展多值参数的方式,这可能会有所帮助。但是,如果问题是它不喜欢在查询中多次使用命名参数......这更棘手,我不知道。