Select_multiple
As perguntas select_multiple permitem que os respondentes escolham uma ou mais opções de uma lista predefinida.
O tipo de pergunta select_multiple exibe uma lista onde o respondente pode selecionar uma ou mais opções. Por padrão, as opções são renderizadas como caixas de seleção. O valor armazenado é uma lista separada por espaço de todos os valores de opções selecionados.
Especificação básica do XLSForm
Planilha survey:
| type | name | label |
|---|---|---|
| select_multiple crops | crops_grown | Quais culturas o domicílio cultiva? |
Planilha choices:
| list_name | name | label |
|---|---|---|
| crops | maize | Milho |
| crops | beans | Feijão |
| crops | rice | Arroz |
| crops | vegetables | Vegetais |
| crops | other | Outro |
Para mais detalhes, consulte a especificação do XLSForm.
Formato de dados armazenados
A coluna exportada contém uma lista separada por espaço dos valores selecionados:
maize beans vegetables
Use a função selected() — não = — ao testar valores select_multiple em expressões (veja abaixo).
Usos
As perguntas select_multiple são usadas para:
- Coletar múltiplas respostas aplicáveis (por exemplo, fontes de renda, culturas cultivadas, sintomas)
- Itens de concordância no estilo caixa de seleção (por exemplo, “Selecione todos que se aplicam”)
- Inventários de idiomas ou habilidades
- Qualquer pergunta onde múltiplas respostas são simultaneamente válidas
Opções de aparência
| Aparência | Descrição |
|---|---|
| (nenhuma) | Caixas de seleção padrão, uma por linha |
minimal | Widget de multi-seleção em dropdown |
compact | Grade compacta, o número de colunas se ajusta à largura da tela |
compact-N | Grade compacta forçada para N colunas |
horizontal | Opções dispostas horizontalmente em uma linha (web) |
horizontal-compact | Horizontal, espaçamento compacto (web) |
label | Mostra apenas rótulos, sem caixas de seleção (use com list-nolabel) |
list-nolabel | Mostra apenas caixas de seleção, sem rótulos (use com label) |
columns(N) | Exibir em N colunas (extensão rtSurvey) |
Exemplo: Layout compacto de 3 colunas
| type | name | label | appearance |
|---|---|---|---|
| select_multiple symptoms | symptoms | Selecione todos os sintomas observados | compact-3 |
Usando selected() em expressões
Como o valor armazenado é uma string separada por espaço, você deve usar selected() para testar se uma opção específica foi escolhida. Usar = não funcionará corretamente.
Em relevant
Mostrar uma pergunta de acompanhamento apenas se “outro” foi selecionado:
| type | name | label | relevant |
|---|---|---|---|
| select_multiple crops | crops_grown | Quais culturas são cultivadas? | |
| text | crops_other | Por favor, especifique outras culturas | selected(${crops_grown}, 'other') |
Em constraint
Exigir pelo menos 2 opções:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple issues | issues | count-selected(.) >= 2 | Selecione pelo menos 2 problemas |
Limitar a no máximo 3:
| type | name | constraint | constraint_message |
|---|---|---|---|
| select_multiple priorities | priorities | count-selected(.) <= 3 | Selecione no máximo 3 prioridades |
Em calculate — juntando rótulos selecionados
Combine selected-at(), count-selected() e choice-label() para construir um resumo legível:
| type | name | calculation |
|---|---|---|
| calculate | crops_summary | join(’, ‘, ${crops_grown}) |
Opção “Nenhuma das acima” / opção exclusiva
Um padrão comum é tornar uma opção mutuamente exclusiva com todas as outras. Use uma constraint para aplicá-la:
| type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| select_multiple issues | issues | Selecione todos os problemas presentes | not(selected(., 'none') and count-selected(.) > 1) | “Nenhum” não pode ser selecionado com outras opções |
choices:
| list_name | name | label |
|---|---|---|
| issues | water | Escassez de água |
| issues | roads | Estradas ruins |
| issues | health | Falta de serviços de saúde |
| issues | none | Nenhuma das acima |
Contagem e resumo de seleções
| Função | Exemplo | Resultado |
|---|---|---|
count-selected(field) | count-selected(${crops_grown}) | Número de opções selecionadas |
selected(field, value) | selected(${crops_grown}, 'maize') | verdadeiro/falso |
selected-at(field, index) | selected-at(${crops_grown}, 0) | Primeiro valor selecionado |
choice-label(field, value) | choice-label(${crops_grown}, 'maize') | Rótulo para um valor |
Práticas recomendadas
- Sempre use
selected()emrelevant,constraintecalculate— nunca=ou!=. - Adicione uma restrição para limitar o número máximo de seleções se o design da pergunta exigir.
- Inclua uma opção “Nenhum” ou “Não aplicável” quando zero seleções for uma resposta válida.
- Para listas longas (15+ opções), use
minimal(dropdown de múltipla seleção) para evitar rolagem excessiva. - Exporte os dados e use divisão de string na sua ferramenta de análise — o formato separado por espaço requer divisão antes de pivotar.
Limitações
- Os valores select_multiple não podem ser comparados diretamente com
=. Sempre useselected(). - A aparência compacta pode não ser renderizada bem para rótulos de opções muito longos.
- Ao filtrar opções com
choice_filter, a filtragem se aplica a todas as opções exibidas, igual aoselect_one.