"Select" 组件中的 Pentaho CDE "All" 选项

Pentaho CDE "All" option in "Select" component

虽然 select 下拉组件中的 "Select All" 功能似乎是一个简单的功能,但我很难找到可行的解决方案。我可以找到关于该主题的三个 SO 问题,但是 none 的方法完全有效。

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

我有一个 table,其中有一列包含 1-5 的评级(作为字符串类型)。我需要让用户选择 select 1-5 的值或 "All".

我创建了一个简单的数据源 (DB2),将数字 1-5 作为字符串提取。在下面适用时,我会 UNION ALL'' 或 "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))

我按预期使用了 "Select Component" 和 "Simple Parameter" 功能。我已经尝试将 "Parameter Property Value" 设置为 ''、"All" 和数字 1-5,但我只能得到 或者 "All" 数字 select 离子起作用。在这种方法的大约 50 次迭代中,我从未成功地 both 工作。

是否有一种简单或直接的方法来添加 "All" selection 而无需切换到多 select 组件或额外的 JavaScript?

如果我理解正确的话,您希望用户能够过滤关于此评级的某些信息(例如电影列表),但是当没有评级时 select 应该显示所有电影。

我遇到过很多次这个问题,虽然这个解决方案可能不是最好的,但它很容易实施并且有效。

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

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

现在添加一个简单参数 '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 

其中 'dummy value' 代表您的 RATINGS table 中永远不会出现的任何值。

我最终解决了这个问题(部分感谢@dooms 和@Óscar Gómez Alcañiz 的建议)。

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

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

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

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

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