I campi multipli in FileMaker
Multipli o non multipli? Questo è il problema…
Le origini
I campi multipli sono una delle caratteristiche distintive di FileMaker fin dalle primissime versioni. Tanto, tanto tempo fa, quando il mondo era giovane e la RAM dei calcolatori si misurava in KB (e non in GB), FileMaker era alle sue prime versioni, ciascun file ospitava una sola tabella e non era ancora un database relazionale. Non si potevano quindi mettere in relazione due file fra loro, ma solo utilizzare i campi presenti nel file medesimo.
Questo tipo di approccio risultava molto semplice per l’utente, ma creava più di un problema. Pensiamo infatti a una fattura: come fare a legare l’intestazione alle righe contenenti i singoli prodotti?
Certo, era sempre possibile creare n campi, ciascuno per una riga. Tuttavia, avere una serie di campi del tipo:
– Descrizione1, Descrizione2, … Descrizione 35
– Importo1, Importo2… Importo35
– Quantità1, Quantità2… Quantità35
– Totale_riga1, Totale_riga2… Totale_riga35
– IVA_riga1, IVA_riga2… IVA_riga35
nel migliore dei casi creava molta confusione e nel peggiore una decisa impossibilità di aggregare i dati.
La risposta di FileMaker al problema è tipica della sua filosofia operativa: nasce il campo multiplo.
I campi multipli: cosa sono
Un campo multiplo è un concetto abbastanza curioso nell’ambito di un database: in sostanza si tratta di un campo in cui è possibile creare più ripetizioni, in ciascuna delle quali inserire dei valori a piacere, proprio come se fossero campi separati. Nel nostro esempio, ci basta creare un campo con 35 ripetizioni invece che 35 campi separati.
Avremo quindi
– Descrizione
– Importo
– Quantità
– Totale riga
– IVA riga
ciascuno dei quali con inserito il numero 35 nell’opzione Numero massimo di ripetizioni, presente nelle opzioni di campo, sezione memorizzazione.
Il bello del campo multiplo è che eventuali calcoli gestiscono le ripetizioni in maniera dinamica. Se nel nostro esempio impostiamo il campo Totale riga come calcolo (Quantità * Importo), la 21 ripetizione di totale riga moltiplicherà la 21 ripetizione di Quantità per la 21° ripetizione di Importo.
Semplice ed efficace, sembrava l’uovo di colombo. Ed effettivamente per un certo periodo di tempo fu l’unico modo di associare più dati ripetitivi a dati singoli.
La svolta: il database relazionale
Poi, cambiò tutto: arrivò il colore, Númenor si inabissò, l’Anello andò al Fuoco, ma soprattutto arrivarono le relazioni e FileMaker come lo conosciamo adesso. Tuttavia, il campo multiplo rimase, un po’ per compatibilità con il passato e un po’ perché la sua utilità esiste anche adesso.
E qui iniziano i problemi, perché molti utenti, per semplicità o per poca sicurezza con le relazioni utilizzano tuttora i campi multipli al posto di tabelle correlate. Ma in fondo, perché non usarli?
Pro e contro dei campi multipli
Innanzitutto perché, a differenza di una relazione normale con i dati in tabelle correlate, un campo multiplo non consente una memorizzazione dinamica delle informazioni: una volta impostate le nostre 35 ripetizioni, saranno sempre e comunque trentacinque, con il risultato di non utilizzarne trentaquattro in una fattura con una riga, e di trovarci con un problema nel caso di quaranta voci.
Inoltre anche il modo di interagire con l’utente non è flessibile, perché dobbiamo impostare il numero di ripetizioni visualizzate direttamente in fase di costruzione del formato, questo numero non può essere modificato record per record.
Non parliamo poi di aggregazione di dati: creare un qualsivoglia tipo di statistica con dati contenuti in un campo multiplo è estremamente complicata quando non proprio impossibile.
Nella quasi totalità dei casi, una tabella correlata funziona molto meglio del campo multiplo. E qui viene da citare il grande Faber: “si sa che la gente da buoni consigli se non può più dare il cattivo esempio”. Il sottoscritto per anni ha utilizzato un… definirlo “gestionale” è un insulto, diciamo un “coso” per fare fatture basato su multipli da 10 ripetizioni, fondamentalmente per tre motivi:
- funzionava bene per quello che serviva;
- chi mi conosce sa anche quanto posso essere pigro;
- nessuno mi pagava per rifarlo.
Passato da una attività di one-man-band a una più strutturata mi sono state richieste minuzie tipo “ma che percentuale di assistenze hai?” o “quanto incidono le licenze sul totale?”. A quel punto tutti i tre i motivi sono crollati nello stesso momento e con essi i multipli che mi avevano accompagnato per anni.
Ma allora, che senso ha continuare a usare i campi multipli al tempo di FileMaker 13? Il fatto è che per alcuni usi sono tuttora molto comodi e ci sono alcuni utilizzi molto interessanti.
Come utilizzare i campi multipli
Il primo (e il più classico) utilizzo è quello dell’immagazzinamento di dati che non richiedono particolari cure. Pensiamo ad esempio al classico utilizzo per i numeri di telefono: un campo con tre ripetizioni è molto più immediato di tre campi differenti o di una tabella correlata; e anche se quest’ultima è la forma normale corretta, stiamo usando FileMaker, non un noiosissimo DataBase, no?
Un altro utilizzo (salvifico) è nelle stampe di moduli ad intervallo fisso: il classico bollettino postale con le caselle, in ciascuna delle quali dobbiamo posizionare una lettera (o un numero). La prima cosa che viene in mente a tutti è cercare di cavarsela con una combinazione di carattere/interlinea/spazi tale da ottenere il risultato. Una procedura lunga, incerta e che spesso cambia a seconda della stampante/OS, inducendo a menzionare con convinzione e ripetitività nomi di santi e divinità. In questo caso, il campo multiplo è il classico cacio sui maccheroni. Basta posizionare ogni ripetizione del campo su ciascuna casella e il multiplo fa il lavoro per noi… o quasi.
Infatti è necessario specificare quale lettera debba andare in quale ripetizione. Per fare questo possiamo ricorrere al motore di calcolo di FileMaker, utilizzando la combinazione di tre funzioni, ovvero Mezzo(), Espanso() e Get ( NumeroRipetizioneCalcolo ):
Mezzo ( Espanso (TESTODAINSERIRE) ; Get ( NumeroRipetizioneCalcolo ) ; 1 )
Questo calcolo non fa altro che inserire una lettera del testo in ciascuna ripetizione del campo, utilizzando il numero della ripetizione stessa come numero del carattere di partenza. Elegante, semplice e dinamico: funziona con qualunque numero di ripetizioni. Ma qual è lo scopo della funzione Espanso()?
FileMaker interpreta tutti i campi come aventi una singola ripetizione, se non altrimenti specificato. Quindi, il motore di calcolo valuterebbe il calcolo solo nella prima ripetizione del campo multiplo, dato che non esistono altre ripetizioni del testo che corrispondano alle ripetizioni del campo multiplo. La funzione Espanso() serve a definire il testo contenuto come valido per tutte le ripetizioni.
Il terzo tipo di utilizzo riguarda le relazioni. Il motore di calcolo di FileMaker infatti valuta ogni ripetizione come una singola chiave di relazione, esattamente come se fossero valori divisi da a capo in una relazione multikey. Tuttavia è molto più facile (e a prova di errore) gestire molte ripetizioni diverse che un singolo campo contenente molti valori separati da a capo.
Trovo ad esempio utililissimo l’utilizzo di un multiplo come chiave di relazione per tabelle di appoggio, come ad esempio la gestione di menù dinamici. Questa tecnica è molto utile fino alla versione 12 – e con la pubblicazione web immediata funziona benissimo, consentendo di gestire dinamicamente lato IWP tutti i menù, anche da parte di un utente che non ha privilegi particolari.
Con l’avvento della 13, WebDirect e popover l’utilità specifica diminuisce, ma comunque il campo multiplo è un eccellente gestore di array. Anche perché le operazioni possono essere gestite tramite script e motore di calcolo.
A questo proposito, aggiungo una piccola notazione sintattica: teoricamente per ricavare il valore di un campo multiplo nel motore di calcolo è necessario usare la funzione RicavaRipetizioni ( TuoCampo ; NumeroRipetizione ), che è comoda quanto una forchetta nella narice. Ma si può ottenere lo stesso risultato con la sintassi TuoCampo[NumeroRipetizione] che sicuramente è più pratica. Contrariamente ad altri sistemi (che partono dallo 0) la prima ripetizione utilizzabile in FileMaker è la 1.
Una variante di questo tipo di utilizzo è l’utilizzo di multipli al posto di portali con una procedura dinamica di trasferimento dati e refresh, per evitare refresh e movimento di dati in caso di script … ma questa è un’altra storia. Anzi un altro case (study).
Alle prese con un dilemma in FileMaker? Raccontaci il tuo caso e trova la soluzione con il supporto degli altri Guru: scopri la comunità Filemaker su Guru Corner!