2016-08-12 2 views
0

Während eine "Alles auswählen" -Funktion in einer Auswahl-Dropdown-Komponente scheint eine einfache Funktion zu sein, hatte ich eine unglaublich harte Zeit eine funktionierende Lösung zu finden. Ich kann drei SO-Fragen zu dem Thema finden, aber keiner der Ansätze funktioniert vollständig.Pentaho CDE "Alle" Option in "Select" Komponente

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?

Ich habe eine Tabelle mit einer Spalte, die Ratings von 1-5 (als String-Typ) enthält. Ich muss den Benutzern die Möglichkeit geben, entweder einen Wert von 1-5 oder ein "All" auszuwählen.

Ich habe eine einfache Datenquelle (DB2) erstellt, indem ich die Zahlen 1-5 als Strings ziehe. Gegebenenfalls unten, würde ich UNION ALL mit einem '' oder einem "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))

ich die "Select Component" verwenden und "Simple Parameter" Eigenschaften wie wäre erwartet. Ich habe experimentiert mit der Einstellung der "Parameter-Eigenschaft Wert" gleich '', "Alle" und Nummern 1-5, aber ich kann nur entweder die "Alle" oder die numerischen Auswahlen zu arbeiten. In wahrscheinlich 50 Iterationen dieser Methodik habe ich noch nie erfolgreich sowohl arbeiten.

Gibt es eine einfache oder direkte Möglichkeit, eine "Alle" -Auswahl hinzuzufügen, ohne zu einer Mehrfachauswahlkomponente oder zusätzlichem JavaScript zu wechseln?

+0

Es könnte sein, dass Pentaho, wenn Sie numerische Werte verwenden, den Parameter als Zahl kodiert und ihn daher nicht in Anführungszeichen in SQL einpackt und andernfalls in Anführungszeichen setzt. Das wäre eine Erklärung, warum Sie nur 'entweder oder' verwenden können (nur ein Typ würde funktionieren, wenn er mit 'RATING' verglichen wird). Haben Sie versucht, den Parameter in einer LIKE-Klausel wie folgt zu verwenden: 'WHERE TO_CHAR (RATING) LIKE $ {parameter}' und dann '%' als Wert für 'All' verwenden? Ich denke, dass ich mit dieser Strategie etwas Ähnliches lösen konnte. –

Antwort

0

Ich habe das herausgefunden, (teilweise dank dem Rat von @dooms und @ Óscar Gómez Alcañiz).

Als ich in den Bewertungen für meine Selektorkomponente gezogen, ich gezwungen, alles str zu geben, damit ich die ‚All‘ Komponente enthalten könnte:

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 

Dann in der Abfrage für meine Tabellenkomponente, habe ich diese Bedingung:

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

Aus irgendeinem Grund IN verwendet, ist auf der 'All' nicht ausreichend. Die Abfrage funktioniert nur, wenn ich LIKE verwendet habe. Wie oben beschrieben, funktionierte alles wie gewünscht.

0

Wenn ich richtig verstanden habe, möchten Sie, dass Benutzer bestimmte Informationen zu dieser Bewertung filtern können (z. B. eine Filmliste), aber wenn keine Bewertung ausgewählt ist, sollten alle Filme angezeigt werden.

Ich bin schon mehrmals darauf gestoßen und obwohl diese Lösung vielleicht nicht die beste ist, ist sie sehr einfach zu implementieren und es funktioniert.

im Grunde erstellen Sie eine SQL, wo Sie Ihre Daten für die select-Komponente wählen

SELECT RATING 
UNION 
SELECT '...' 
ORDER BY RATING 

Nun fügen Sie einen einfacher Parameter ‚Rating‘ oder was auch immer Sie möchten, dass es nennen. Und verwenden Sie es in Ihrer Haupt-Abfrage (für das die Filter erforderlich ist) wie folgt:

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 

, wo der ‚Blindwert‘ für jeden Wert steht, die nie in Ihrer BEWERTUNG Tabelle auftreten würde.

Verwandte Themen