Select_multiple
Le domande select_multiple permettono ai rispondenti di scegliere una o più opzioni da un elenco predefinito.
Il tipo di domanda select_multiple visualizza un elenco in cui il rispondente può selezionare una o più opzioni. Per impostazione predefinita, le scelte vengono visualizzate come caselle di controllo. Il valore memorizzato è un elenco di tutti i valori di scelta selezionati separati da spazi.
Specifica XLSForm di base
Foglio di lavoro survey:
| type | name | label |
|---|---|---|
| select_multiple crops | crops_grown | Quali colture coltiva la famiglia? |
Foglio di lavoro choices:
| list_name | name | label |
|---|---|---|
| crops | maize | Mais |
| crops | beans | Fagioli |
| crops | rice | Riso |
| crops | vegetables | Verdure |
| crops | other | Altro |
Per ulteriori dettagli vedere la specifica XLSForm.
Formato dei dati esportati
La colonna esportata contiene un elenco di valori selezionati separati da spazi:
maize beans vegetables
Usa la funzione selected() — non = — quando si testano i valori di select_multiple nelle espressioni (vedi sotto).
Utilizzi
Le domande select_multiple vengono usate per:
- Raccogliere più risposte applicabili (es. fonti di reddito, colture coltivate, sintomi)
- Elementi di accordo in stile casella di controllo (es. “Seleziona tutto ciò che si applica”)
- Inventari di lingue o competenze
- Qualsiasi domanda in cui più risposte sono simultaneamente valide
Opzioni di appearance
| Appearance | Descrizione |
|---|---|
| (nessuna) | Caselle di controllo predefinite, una per riga |
minimal | Widget multi-selezione a discesa |
compact | Griglia compatta, le colonne si adattano alla larghezza dello schermo |
compact-N | Griglia compatta forzata a N colonne |
horizontal | Scelte disposte orizzontalmente in una riga (web) |
horizontal-compact | Orizzontale, spaziatura compatta (web) |
label | Mostra solo le etichette, senza caselle di controllo (usa con list-nolabel) |
list-nolabel | Mostra solo le caselle di controllo, senza etichette (usa con label) |
columns(N) | Visualizza in N colonne (estensione rtSurvey) |
Esempio: layout compatto a 3 colonne
| type | name | label | appearance |
|---|---|---|---|
| select_multiple symptoms | symptoms | Seleziona tutti i sintomi osservati | compact-3 |
Utilizzo di selected() nelle espressioni
Poiché il valore memorizzato è una stringa separata da spazi, devi usare selected() per verificare se una scelta specifica è stata selezionata. L’utilizzo di = non funzionerà correttamente.
In relevant
Mostra una domanda di follow-up solo se è stato selezionato “altro”:
| type | name | label | relevant |
|---|---|---|---|
| select_multiple crops | crops_grown | Quali colture vengono coltivate? | |
| text | crops_other | Specifica altre colture | selected(${crops_grown}, 'other') |
In constraint
Richiedi almeno 2 scelte:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple issues | issues | count-selected(.) >= 2 | Seleziona almeno 2 problemi |
Limita a un massimo di 3:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple priorities | priorities | count-selected(.) <= 3 | Seleziona non più di 3 priorità |
In calculate — unione delle etichette selezionate
Combina selected-at(), count-selected() e choice-label() per creare un riepilogo leggibile:
| type | name | calculation |
|---|---|---|
| calculate | crops_summary | join(’, ‘, ${crops_grown}) |
Opzione “Nessuno dei precedenti” / esclusiva
Un pattern comune è rendere un’opzione mutuamente esclusiva con tutte le altre. Usa un constraint per applicarlo:
| type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| select_multiple issues | issues | Seleziona tutti i problemi presenti | not(selected(., 'none') and count-selected(.) > 1) | “Nessuno” non può essere selezionato con altre opzioni |
choices:
| list_name | name | label |
|---|---|---|
| issues | water | Carenza d’acqua |
| issues | roads | Strade pessime |
| issues | health | Mancanza di servizi sanitari |
| issues | none | Nessuno dei precedenti |
Conteggio e riepilogo delle selezioni
| Funzione | Esempio | Risultato |
|---|---|---|
count-selected(field) | count-selected(${crops_grown}) | Numero di scelte selezionate |
selected(field, value) | selected(${crops_grown}, 'maize') | true/false |
selected-at(field, index) | selected-at(${crops_grown}, 0) | Primo valore selezionato |
choice-label(field, value) | choice-label(${crops_grown}, 'maize') | Etichetta per un valore |
Best practice
- Usa sempre
selected()inrelevant,constraintecalculate— mai=o!=. - Aggiungi un vincolo per limitare il numero massimo di selezioni se il design della domanda lo richiede.
- Includi un’opzione “Nessuno” o “Non applicabile” quando zero selezioni è una risposta valida.
- Per gli elenchi lunghi (15+ scelte), usa
minimal(menu a discesa multi-selezione) per evitare lo scorrimento eccessivo. - Esporta i dati e usa la suddivisione delle stringhe nel tuo strumento di analisi — il formato separato da spazi richiede la suddivisione prima del pivoting.
Limitazioni
- I valori select_multiple non possono essere confrontati direttamente con
=. Usa sempreselected(). - L’appearance compact potrebbe non visualizzarsi bene per etichette di scelta molto lunghe.
- Quando si filtrano le scelte con
choice_filter, il filtraggio si applica a tutte le scelte visualizzate, come perselect_one.