Instrução

Reformatar os resultados de Perguntas de Seleção Múltipla no Survey123

Last Published: February 10, 2025

Descrição

Selecionar Múltiplas Perguntas no Survey123 armazena os nomes das opções selecionadas como uma string CSV, ou seja, Opção1,Opção2,Opção3,Opção4. Embora seja útil armazenar os nomes exclusivos das opções, às vezes queremos acessar facilmente uma lista dos rótulos das opções selecionadas. Por exemplo, os nomes das plantas Acacia, Banksia, Callistemon e Eucalyptus.

Temos mais flexibilidade e liberdade com convenções de nomenclatura ao escolher Rótulos em comparação com Nomes. Para melhorar a legibilidade, a string CSV também deve ser reformatada para incluir espaços entre as opções, o que é demorado quando feito manualmente. É possível criar um novo objeto em um XLSForm para reformatar as opções selecionadas usando o Rótulo em vez do Nome. Podemos fazer isso combinando uma série de fórmulas no campo Cálculo. Os nomes científicos e comuns de algumas plantas Australianas são usados neste exemplo.

Solução ou Solução Provisória

  1. Crie um tipo de pergunta Selecionar Múltiplos , com uma lista de opções associada. Certifique-se de anotar o número de opções de escolha, isso é necessário para a segunda parte. Também podemos escolher aqui tornar a pergunta obrigatória ou não. Nesse caso, não precisaremos de uma resposta.

table1-au-plants-800px.png

  1. Crie uma pergunta deTexto para armazenar os rótulos reformatados. A aparência pode ser definida como oculta se não quisermos que nossos usuários vejam a lista. Para preencher esta pergunta de texto, combinamos as fórmulas selected-at(), jr:choice-name(), concat() e if.

table2-au-plants-800px.png

Criando o Cálculo

Como combinaremos várias funções, é uma boa ideia começar no ponto final e construir para fora. Para começar, usaremos as funções jr:choice-name() e selected-at():

  • A função jr:choice-name() para uma determinada pergunta retorna o rótulo associado ao nome da escolha.
  • A função selected-at() deve ser usada para extrair o rótulo para respostas individuais.
  • A pergunta deve ser definida entre aspas.
jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}')

Podemos usar a função concat() para unir todos os rótulos de todas as respostas selecionadas em uma string, com a pontuação desejada.

concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},1),  '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}'), ', and ',  jr:choice-name(selected-at(${PlantSpeciesCSV},3), '${PlantSpeciesCSV}'))

A partir daqui, precisamos criar uma série de instruções if aninhadas para filtrar nossos rótulos pelo número de respostas escolhidas. Definimos a condição para que cada instrução if retorne true se tivermos um valor ou escolha no número fornecido. A contagem começa do zero, então '3' retornará a quarta escolha selecionada. Por exemplo, se quisermos exibir os rótulos quando selecionamos três opções, definimos a condição como selected-at(${PlantSpeciesCSV},2). Se esta condição retornar TRUE, então nossa string concatenada é gerada, ou seja, Gold Dust Wattle, Silver Banksia e Willow Bottlebrush. Se a condição for falsa, testamos a próxima instrução if. Isso continua até que a condição retorne TRUE. Se nenhuma das condições for atendida, poderemos especificar que uma instrução personalizada, como Nenhuma Planta Observada , seja retornada, indicando que nenhuma opção foi selecionada.

if(selected-at($PlantSpeciesCSV},3),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ', 
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}'), ', ', jr:choice-name(selected-at(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}'), ', and ', jr:choice-name(selected-at(${PlantSpeciesCSV},3),
'${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},2),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), ', ',
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}'), 'and ', jr:choice-name(selected-at
(${PlantSpeciesCSV},2), '${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},1),concat(jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), 'and ',
jr:choice-name(selected-at(${PlantSpeciesCSV},1), '${PlantSpeciesCSV}')), if(selected-at($PlantSpeciesCSV},0),jr:choice-name(selected-at(${PlantSpeciesCSV},0), '${PlantSpeciesCSV}'), 'No Plants Observed'))))

Algumas coisas a serem observadas:

  • Esteja ciente de quantos colchetes você está abrindo. Podem surgir problemas com pares de colchetes não correspondentes que podem ser difíceis de localizar. Especialmente se você tiver muitas opções de escolha.
  • As instruções IF precisam começar com a instância em que o maior número de seleções é feito e em cascata para baixo até apenas uma. Caso contrário, a primeira instrução IF retornará true e a string de saída conterá apenas o Rótulo para a primeira seleção, mesmo que várias seleções tenham sido feitas.

ID do Artigo: 000031066

Receba notificações e encontre soluções para problemas novos ou comuns

Obtenha respostas resumidas e soluções de vídeo do nosso novo chatbot de IA.

Baixe o Aplicativo de Suporte da Esri

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download