Pentaho CDE“全部”选项在“选择”组件中

时间:2016-08-12 19:50:56

标签: db2 pentaho pentaho-cde

虽然选择下拉组件中的“全选”功能似乎是一个简单的功能,但我很难找到可行的解决方案。我可以在这个主题上找到三个SO问题,但没有一个方法可以完全发挥作用。

How to add a select all option to select component in CDE
Pentaho CDE reset parameter
How to add a "select all" option to select component in CDE?

我有一个表,其列包含1-5的评级(作为字符串类型)。我需要让用户选择1-5中的值或“全部”。

我创建了一个简单的数据源(DB2),将数字1-5作为字符串。如果适用于以下情况,我会UNION ALL使用''或“全部”

SELECT ... WHERE (CAST(RATING AS CHAR) = CAST(${parameter} AS CHAR) OR ${parameter} = '')

SELECT ... WHERE (RATING = ${parameter} OR ${parameter} = '')

SELECT ... WHERE (RATING LIKE (CASE WHEN ${parameter} = 'All' THEN '%' ELSE ${parameter} END))

我正如预期的那样使用“选择组件”和“简单参数”功能。我已尝试将“参数属性值”设置为'',“全部”和数字1-5,但我只能 “全部”要使用的数字选择。在这种方法的大约50次迭代中,我从来没有成功地两者工作。

是否有一种简单或直接的方法来添加“全部”选择​​而无需切换到多选组件或其他JavaScript?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望用户能够过滤此评级的某些信息(例如电影列表),但如果未选择评级,则应显示所有电影。

我已经多次遇到这种情况,虽然这个解决方案可能并不是最好的解决方案,但它很容易实现并且有效。

基本上你创建了一个SQL,你可以在其中选择select-component

的数据
SELECT RATING
UNION
SELECT '...'
ORDER BY RATING

现在添加一个简单参数'评分'或者你想称之为什么。并在主查询中使用它(需要过滤器),如下所示:

SELECT 'all the data you want to show'
FROM 'your table'
WHERE 'your conditions'
AND
CASE WHEN ${Rating} NOT LIKE '...' THEN RATING = ${Rating} else RATING NOT IN ('dummy value') END 

其中'虚拟值'代表RATINGS表中永远不会出现的任何值。

答案 1 :(得分:0)

我最终搞清楚这一点,(部分归功于@dooms和@ÓscarGómezAlcañiz的建议)。

当我提取选择器组件的评级时,我强制所有内容都输入str,以便我可以包含“所有”组件:

SELECT 'All' AS RATING
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '1'
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2'
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '3'
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '4'
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '5'
FROM SYSIBM.SYSDUMMY1

然后在我的表组件的查询中,我添加了这个条件:

WHERE (MY_RATING IN (${Rating_Parameter}) OR ${Rating_Parameter} LIKE ('All'))

出于某种原因,在“全部”上使用IN是不够的。该查询仅在我使用LIKE时才有效。然而,如上所述,一切都终于如我所愿。