Di default, QlikView decide automaticamente se un campo è testuale o numerico (le date sono considerate numeri).
A volte però risulta utile forzare un tipo piuttosto che un altro mediante text() o num().
Ad esempio avere ID che finiscono per ,00 è brutto, oppure si può voler forzare un formato numerico come default del campo.
In verità per i campi numerici QlikView memorizza sia una rappresentazione testuale che il valore: può far comodo sfruttare ciò specificando esplicitamente testo e numero.
È qui che entra in gioco la funzione dual(rappresentazione testuale, valore numerico).
Spesso si denormalizzano i campi di date per rendere possibile selezionare, ad esempio, tutte le date che ricadono in un certo anno-mese:
load year(data) & ' ' & month(data) as anno_mese, ...;
Ottenendo stringhe tipo "2008 gen". Il problema è che l'ordine alfabetico non ha senso; inoltre non è possibile usarle come dimensione impostando l'asse delle ascisse come continua.
Non sarebbe molto più bello avere "gennaio 08", che sia anche ordinabile come numero?
load dual(text(date(data, 'MMMM YY'))
,
date#(text(date(data, 'MMMM YY')), 'MMMM YY')
) as mese_anno,
...;
Suggerimento: in caso si voglia giorno/mese/anno (tagliando fuori quindi ore, minuti, secondi), poiché QlikView memorizza le date come giorni passati dal 1900, è sufficiente approssimare per difetto: date(floor(data)) as giorno_mese_anno.
Altro esempio: classi d'età ordinabili.
load if(anni < 1, dual('meno di un anno', 0),
if(anni < 10, dual('fra 1 e 9 anni', 1),
dual('da 10 anni in su', 10))) as classe_eta,
...;
Leave a comment