Hitachi Vantara Pentaho Community Forums
Results 1 to 7 of 7

Thread: Resettare filtro all'apertura della Dashboard

  1. #1
    Join Date
    Oct 2012
    Posts
    13

    Default Resettare filtro all'apertura della Dashboard

    Ciao a tutti.
    Da qualche giorno sto giocando con Pentaho per capire le potenzialità del prodotto.
    Ho creato una piccola dashboard caricando i dati da una tabella di un db SQLSERVER.
    Sto usando lo strumento CDE per la creazione della dashboard.
    Ho creato una torta a sx con le vendite raggruppate per tipo prodotto
    e una tabella a dx con le vendite per agente.
    Ho reso la torta cliccabile e ho passato il parametro alla tabella che filtra i dati in base al tipo prodotto.
    Tutto funziona benissimo ma il problema è che vorrei all'apertura della dashboard di avere nella tabella tutte le vendite di tutti i tipi prodotti.
    la query che uso nella tabella è :
    SELECT
    (Cognome_Incaricato + ' ' + Nome_Incaricato) as Descrizione,
    SUM(Qta * Prezzo_Iva) as Valore
    FROM v_Matteo_Test
    WHERE Descrizione_Gruppo_Prodotti=${pGruppoProdotti}
    GROUP BY (Cognome_Incaricato + ' ' + Nome_Incaricato)

    e il parametro ha un valore di default quindi lui comunque mi applica un filtro sui dati.
    Esiste un modo di fare una cosa del genere:
    alla partenza usa
    SELECT
    (Cognome_Incaricato + ' ' + Nome_Incaricato) as Descrizione,
    SUM(Qta * Prezzo_Iva) as Valore
    FROM v_Matteo_Test
    GROUP BY (Cognome_Incaricato + ' ' + Nome_Incaricato)

    quando clicco su una fetta della torta allora usa

    SELECT
    (Cognome_Incaricato + ' ' + Nome_Incaricato) as Descrizione,
    SUM(Qta * Prezzo_Iva) as Valore
    FROM v_Matteo_Test
    WHERE Descrizione_Gruppo_Prodotti=${pGruppoProdotti}
    GROUP BY (Cognome_Incaricato + ' ' + Nome_Incaricato)

    Grazie mille

  2. #2
    Join Date
    Dec 2010
    Posts
    304

    Default

    Ciao gendelr,
    supponendo che il valore di default del parametro pGruppoProdotti sia una stringa vuota,
    puoi trasformare la tua query così:

    SELECT
    (Cognome_Incaricato + ' ' + Nome_Incaricato) as Descrizione,
    SUM(Qta * Prezzo_Iva) as Valore
    FROM v_Matteo_Test
    WHERE CASE WHEN ${pGruppoProdotti} = '' THEN 1=1 ELSE Descrizione_Gruppo_Prodotti=${pGruppoProdotti} END
    GROUP BY (Cognome_Incaricato + ' ' + Nome_Incaricato)

    Quando non è valorizzato il parametro la condizione nella where è sempre vera (1=1), per cui prende tutto come se omettessi la where

  3. #3
    Join Date
    Oct 2012
    Posts
    13

    Default

    Quote Originally Posted by lukolap View Post
    Ciao gendelr,
    supponendo che il valore di default del parametro pGruppoProdotti sia una stringa vuota,
    puoi trasformare la tua query così:

    SELECT
    (Cognome_Incaricato + ' ' + Nome_Incaricato) as Descrizione,
    SUM(Qta * Prezzo_Iva) as Valore
    FROM v_Matteo_Test
    WHERE CASE WHEN ${pGruppoProdotti} = '' THEN 1=1 ELSE Descrizione_Gruppo_Prodotti=${pGruppoProdotti} END
    GROUP BY (Cognome_Incaricato + ' ' + Nome_Incaricato)

    Quando non è valorizzato il parametro la condizione nella where è sempre vera (1=1), per cui prende tutto come se omettessi la where
    Ciao lukolap
    avevo già pensato a quella soluzione ma purtroppo SQLSERVER mi da errore probabilemnte non mi permette di inserire dopo la THEN un'espressione ma vuole un valore (posso mettere 1 e non 1=1)

  4. #4
    Join Date
    Oct 2012
    Posts
    13

    Default

    Alla fine ho risolto usando invece che una query SQL una query in MDX la quale ha la possibilità
    di inserire [All Descrizione_Gruppo_Prodottis] questo è il valore di default del parametro e poi a seconda di quale fetta clicco inserisco il valore corretto. Tutto funziona perfettamente.

    L'unica cosa è che mi sembra un po più lenta la query in MDX secondo voi è meglio usare SQL puro oppure MDX ?

  5. #5
    Join Date
    Dec 2010
    Posts
    304

    Default

    Quote Originally Posted by gandelr View Post
    L'unica cosa è che mi sembra un po più lenta la query in MDX secondo voi è meglio usare SQL puro oppure MDX ?
    La lentezza è dovuta al fatto che le query MDX vengono tradotte in SQL da Mondrian, essendo il DW di tipo ROLAP.

    Io preferisco usare MDX, anche se a volte è meno performante, per questi motivi:
    • specifico per interrogare data warehouse
    • nelle query MDX vengono usati i nomi di dimensioni e misure e non direttamente i nomi dei campi nel database (se ad esempio volessi prendere il valore di una misura da un altro campo, basta che modifico il valore di un attributo nello schema Mondrian e non tutte le query dove uso quella misura)
    • è cross-database, cioè Mondrian produce query SQL conformi al database che stai usando (ad esempio se volessi usare uno stesso dashboard con database che si trovano su DBMS diversi, se hai usato query SQL molto probabilmente dovresti modificarne alcune a causa delle differenze nella sintassi tra un db e l'altro)
    • con Mondrian (e quindi le query MDX) puoi avere in automatico e in maniera trasparente un sistema di controllo degli accessi ai dati (chi può visualizzare cosa); se volessi ottenere questa cosa con SQL dovresti costruirti delle condizioni ad hoc nelle where

  6. #6
    Join Date
    Oct 2012
    Posts
    13

    Default

    Chiarissimo, grazie mille allora direi che valuto di volta in volta in base a quello che mi serve.

  7. #7
    Join Date
    Oct 2012
    Posts
    13

    Default

    Posto una versione senza MDX che funziona e fa la stessa cosa (è molto simile alla query indicata da lukolap)

    SELECT *
    WHERE 1=CASE ${varAnno} WHEN 'TUTTI' THEN 1 END OR ANNO = ${varAnno}


    Ciao ciao

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Privacy Policy | Legal Notices | Safe Harbor Privacy Policy

Copyright © 2005 - 2019 Hitachi Vantara Corporation. All Rights Reserved.