2016-06-21 1 views
1

Je construis un tableau de bord en utilisant Pentaho CDE, dans lequel une table affiche les données d'une requête comme ceci:Pentaho cde inclure/exclure la clause where dans sql requête

select * from types where id = ${id} 

Maintenant je l'id de paramètre url comme ceci

id = Dashboards.getQueryParameter('id'); 

Si je ne donne pas l'ID en URL, la table ne montre rien comme id = '' ne correspond à rien. Mais ce que je veux faire est, si je ne donne pas id il exclut la clause where et montrer un résultat de requête comme

select * from types 

Comment y parvenir dans Pentaho CDE?

+0

vous pouvez hadle cela en utilisant une procédure de magasin. –

Répondre

1

Vous pouvez utiliser deux sources de données et choisir un pendant la phase Pre Execution d'une table. La source de données du composant (tableau, graphique) d'un tableau de bord est représentée par la propriété dataAccessId.

Vous pouvez définir dataAccessId en utilisant du code JavaScript dans un composant comme celui-ci: this.chartDefinition.dataAccessId = {datasource name}.

1) Datasource sql_with_id:

select * from types where id = ${id} 

2) DataSource = sql_no_id:

select * from types 

Tableau de Code Pre Execution:

function f() { 
    var id = Dashboards.getQueryParameter('id'); 
    if (id && id !== "") { 
     this.chartDefinition.dataAccessId = "sql_with_id"; 
    } else { 
     this.chartDefinition.dataAccessId = "sql_no_id"; 
    } 
} 
+0

Je n'utilise pas de graphiques, juste la table, savez-vous comment je peux changer dynamiquement la source de données de table? –

+0

Le 'Table Component' a aussi une phase' Pre Execution' ainsi que tous les composants CDE. Il peut être trouvé dans l'onglet «Propriétés avancées» du composant. – mzy

+0

Je sais cela mais je n'ai pas trouvé dataAccessId –

0

Que diriez-vous de créer un paramètre personnalisé javascript (disons, 'where_clause') un peu comme ceci:

id = Dashboards.getQueryParameter('id'); 
if (id != null) 
    where_clause = 'id = ' + id; 
else 
    where_clause = '1=1'; 
return where_clause; 

Et puis construire votre requête:

select * from types where ${where_clause} 
+0

umm ça ne marche pas comme ça, ça montre une mauvaise requête. –