Exemplos de inquéritos do Expression Manager
From LimeSurvey Manual
Introdução
A melhor forma de aprender a usar o ExpressionScript é experimentar exemplos funcionais e modificá-los de acordo com as suas necessidades.
Abaixo, você encontra um conjunto de inquéritos de exemplo para demonstrar (e testar) como o EM pode ser usado para aprimorar o seu inquérito. Esses inquéritos estão na pasta /docs/demosurveys da distribuição.
Relevância, personalização e equações
Visão geral
O exemplo a seguir calcula o IMC (Índice de Massa Corporal) de cada respondente. Veja abaixo os recursos demonstrados neste exemplo.
Recursos do EM demonstrados
- Relevância - suporte a lógica condicional avançada;
- Piping / Personalização - permite inserir ou personalizar respostas e metadados das perguntas;
- Personalização dinâmica - observe que os relatórios mudam na própria página conforme você responde às perguntas.
- Micropersonalização - personalização condicional dentro de frases e relatórios usando instruções if()
- Equações - um novo tipo de pergunta que permite fazer cálculos e armazenar os resultados na base de dados, mesmo que o cálculo esteja oculto
- Validação condicional - os critérios de validação, como o valor mínimo permitido, podem ser condicionais - por exemplo, com base em equações.
Capturas de tela
Este exemplo calcula o Índice de Massa Corporal, um cálculo baseado no seu peso e altura para determinar se você está acima do peso. Note que, inicialmente, você vê apenas as quatro perguntas obrigatórias:

Depois de inserir as suas informações (e escolher se quer usar unidades métricas ou não métricas), você vê um relatório personalizado que resume o que foi informado e indica a sua situação de peso:

Aqui está um exemplo diferente, usando unidades não métricas para mostrar como o resultado muda dinamicamente:

Há perguntas do tipo Equação ocultas, em nível interno, que convertem os dados para o sistema métrico (se necessário) e armazenam na base de dados a altura, o peso, o IMC e a situação de peso em unidades métricas, sem a necessidade de JavaScript personalizado.
Nos próximos exemplos, você pode ver como usar funções matemáticas e outras funções dentro de relatórios personalizados. Assim é a aparência da página antes de você inserir qualquer dado. Há uma lógica condicional que exibe células em branco se nenhum dado (ou dados não numéricos) for inserido, em vez de mostrar "NaN" ou "Divide by Zero".

Conforme os números são inseridos, o relatório na página muda para mostrar o cálculo que está sendo realizado e o seu resultado.

Há muitos outros exemplos neste inquérito de exemplo. Por exemplo, a captura de tela abaixo mostra uma das dezenas de maneiras de preencher a página Dynamic Relevance. Como o texto de ajuda indica, experimente idades diferentes e, principalmente, combinações ilógicas de respostas para ver as mensagens divertidas geradas na parte inferior. Observe também que, se você disser que tem mais de um filho, a mensagem dirá "I hope you enjoy playing with your X children" em vez de "I hope you enjoy playing with your child". Isso mostra como é fácil micropersonalizar frases para que correspondam ao gênero e/ou ao número dos seus participantes. Você pode até conjugar verbos e flexionar substantivos com facilidade com base no gênero e no número.

Download
Para acessar o inquérito de exemplo, clique no seguinte link: LS3_em_tailoring.zip.
Exemplo de recenseamento
Visão geral
Este é um exemplo de recenseamento que pergunta quantas pessoas vivem na sua casa.
Ele demonstra como a relevância em nível de grupo pode facilitar a implementação de um "loop" de perguntas. Depois de criar o grupo para a Pessoa 1, exportei o grupo. Como usei nomes de variáveis qcode, como p1_name, em vez do código SGQA, pude usar um editor de texto para editar e reimportar o grupo rapidamente várias vezes (por exemplo, levei cerca de 10 segundos para editar e reimportar cada grupo repetido, garantindo que todas as variáveis tivessem nomes exclusivos e que a lógica em nível de grupo estivesse correta).
Você também pode usar o recurso Copiar questão, mas ele não será tão rápido quanto a opção sugerida acima.
Isto também mostra como você pode evitar que a mensagem de conclusão apareça até que o inquérito esteja realmente concluído (por exemplo, quando todos os grupos necessários forem preenchidos).
Recursos do EM demonstrados
- Relevância em nível de grupo - Os grupos de acompanhamento (Pessoa 1-5) são exibidos apenas até o número de coabitantes especificado;
- Personalização - O relatório final resume os dados demográficos de cada coabitante;
- Exibição progressiva de perguntas - Seja no modo grupo a grupo ou tudo em um, as perguntas seguintes só são exibidas assim que as anteriores são respondidas.
Capturas de tela
O inquérito gera um relatório personalizado que mostra os dados demográficos do número especificado de coabitantes:

Se você mudar para o modo pergunta a pergunta, verá que o índice personaliza as perguntas. Como o usuário informou que a pessoa é uma mulher, é exibida a pergunta "Qual é o nome dela?". E como respondemos "Mary", a pergunta seguinte diz "Qual é a idade de Mary?".

Download
Para baixar o exemplo de inquérito, clique aqui: LS3_group_relevance.zip.
Filtros de matriz em cascata
Visão geral
Este inquérito é baseado no design de um inquérito cedido pela Joy Lane Research, LLC.
Capturas de tela
A seguir, observe que:
- A Q02 mostra apenas o conjunto de produtos marcados na Q01 (usando array_filter)
- A Q02 também mostra "Another product", o texto digitado no campo "Other electronic" da Q01
- A Q04 mostra apenas os produtos da Q02 que foram marcados (portanto, o filtro da matriz funciona em cascata)
- A Q05 mostra apenas os produtos da Q02 que não foram marcados na Q02 (usando um array_filter_exclude em cascata)


Download
Clique na hiperligação a seguir para baixar o exemplo acima: Exemplo de inquérito LS2_cascading_array_filter.
Piping/Personalização usando todos os tipos de pergunta e atributos
Visão geral
Se você tem dúvidas sobre como nomear suas variáveis (SGQA vs. Qcodes), não está sozinho. Embora a documentação principal descreva como compor os nomes de variáveis Qcode, nada supera ver isso em uma demonstração funcional. Este inquérito mostra como você pode acessar atributos e respostas de perguntas usando o ExpressionScript.
Conteúdo
- Exemplos de todos os tipos de pergunta
- Todos os tipos de pergunta que podem usar "outros" estão incluídos, para que você veja como isso afeta a nomenclatura das variáveis
- Valores padrão para todos os tipos de pergunta que aceitam valores padrão
- Personalização - Relatórios dentro e fora da página mostrando todos os 16 sufixos de notação de ponto do EM disponíveis.
- Esses relatórios mostram todos os dados inseridos até o momento (mostrando como você poderia gerar seus próprios relatórios imprimíveis para os usuários, em vez da tela de impressão de respostas)
- Nomenclatura correta em Qcode e SGQA de todas as variáveis
Capturas de tela
Este é um inquérito enorme, por isso optamos por não incluir capturas de tela. Em vez disso, baixe-o e experimente.
Download
Clique na hiperligação a seguir para baixar o inquérito: LS3_EM_question_attributes.lss
Validação tradicional, reimaginada
Visão geral
Este exemplo demonstra todos os tipos de validação que utilizam expressões e como eles afetam cada um dos tipos de pergunta que oferecem suporte à validação. Em muitos casos, as dicas de validação começam ocultas e só aparecem se uma pergunta não atender aos critérios de validação (voltando a desaparecer assim que a pergunta atender a esses critérios).
Tipos de validação demonstrados
- min_num_value_n - valor mínimo para uma resposta
- max_num_value_n - valor máximo para uma resposta
- min_answers - número mínimo de respostas exigidas
- max_answers - número máximo de respostas permitidas
- multiflexible_min - valor mínimo permitido para uma resposta (para o tipo de pergunta de números multiflexível)
- multiflexible_max - valor máximo permitido para uma resposta (para o tipo de pergunta de números multiflexível)
- min_num_value - soma mínima permitida de todas as respostas da pergunta
- max_num_value - soma máxima permitida de todas as respostas da pergunta
- equals_num_value - a soma de todas as respostas da pergunta deve ser igual a este valor
- validação - esta é a validação por expressão regular da pergunta - pode ser aplicada a células individuais
Capturas de tela
Com os novos estilos CSS, cada tipo de validação exibe uma dica separada. Se forem exibidas, elas podem ser ocultadas por meio da opção hide_tip. A opção padrão é exibi-las em fonte vermelha se a pergunta não atender aos critérios de validação e em verde se os atender:

Um usuário não pode enviar uma página com erros de validação. Ele será avisado imediatamente se inserir informações incorretas:

A validação pode ser aplicada a células individuais de uma matriz, como neste exemplo, em que validações por expressão regular garantem que cada entrada seja um número de telefone dos EUA formatado corretamente, incluindo o código de área.

Download
Para baixar o exemplo acima, clique no seguinte link: LS3_Validation_tests.zip.
Equações de validação
Visão geral
Às vezes, você precisa de uma validação personalizada que não pode ser obtida com os critérios tradicionais de mínimo/máximo. Para isso, você precisará usar as opções em_validation_q e em_validation_sq, que permitem construir equações de validação complexas no nível da pergunta e da pergunta secundária, respectivamente.
Recursos do EM demonstrados
- em_validation_q - esta é uma equação que determina se a pergunta inteira é válida
- em_validation_q_tip - esta é a mensagem a ser exibida se a pergunta não atender aos critérios de em_validation_q
- em_validation_sq - esta é a equação que determina se cada pergunta secundária (célula da matriz) é válida
- em_validation_sq_tip - esta é a mensagem a ser exibida se alguma das perguntas secundárias for inválida.
Em geral, quando em_validation_sq é usada e alguma célula é inválida, a cor de fundo dessa célula fica vermelha para indicar que há um erro.
Capturas de tela

Esta pergunta garante que você insira as idades dos seus filhos em ordem decrescente, aplicando esta equação de validação:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

No exemplo abaixo, a validação garante que no máximo 3 perguntas sejam respondidas em cada linha, aplicando esta equação de validação:
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)
Você também pode escrever isso da seguinte forma; o LimeSurvey a converte automaticamente, em tempo de execução, na expressão listada acima.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

Download
Para baixar o exemplo de inquérito usado nos exemplos acima, clique na seguinte hiperligação: ls2_test_em_sq_validation.lss.
Relevância de perguntas secundárias
Visão geral
Este exemplo mostra como array_filter e os critérios de validação podem interagir. Nas validações que se aplicam a somas, apenas os valores relevantes (visíveis) são considerados.
Recursos do EM demonstrados
Mostra também a apresentação dinâmica do número de perguntas respondidas nas perguntas principais.
Capturas de tela
Alterar o número de linhas visíveis altera dinamicamente a soma. Marcar uma pergunta secundária como irrelevante não apaga o seu valor. Em vez disso, se ela for irrelevante, os seus valores não contribuem para nenhuma equação.


Observe o que acontece quando marcamos a "Quinta pergunta secundária" da primeira pergunta "Which rows should appear below". Note que a soma da segunda pergunta "Enter some numbers" agora é 5. Embora a pergunta secundária 5 dessa pergunta ainda tenha o valor 14 (por exemplo, se você desmarcar a quinta pergunta secundária, verá novamente o valor 14), esse valor não contribui para a soma, pois atualmente é irrelevante. Todos os dados irrelevantes são apagados (definidos como NULL no banco de dados) ao enviar, mas permanecem disponíveis na página caso os participantes queiram ou precisem mudar de ideia sobre as respostas.

Download
Para baixar o nosso exemplo, clique aqui: ls2_subquestion_relevance.lss.
Usando a vírgula como separador decimal (ponto decimal)
Visão geral
O ExpressionScript garante que apenas números válidos possam ser inseridos em campos numéricos. Se você inserir um número inválido, será avisado de que há algo errado (por exemplo, no caso do tema fruity, a pergunta inteira fica "vermelha").
Observe que os valores numéricos são sempre convertidos para usar o ponto como separador decimal no banco de dados. Dessa forma, as análises estatísticas funcionarão corretamente.
Para alterar o separador decimal, acesse as opções de Elementos de texto localizadas na aba Configurações e procure a funcionalidade Marca decimal.
Tipos de pergunta que usam separador decimal
- Entrada numérica [N]
- Entrada numérica múltipla [K]
- Matriz (Números) [:]
- Matriz (Textos) [;], ao usar o atributo numbers_only
- Lista (Rádio) [L], ao usar o atributo other_numbers_only
- Texto livre curto [S], ao usar o atributo numbers_only
- Texto curto múltiplo [Q], ao usar o atributo numbers_only
- Múltipla escolha [M], ao usar o atributo other_numbers_only
- Múltipla escolha com comentário [P], ao usar o atributo other_numbers_only
Capturas de tela
Você pode observar nas capturas de tela abaixo que a vírgula pode ser usada como separador decimal.

Download
Para baixar o exemplo acima, clique na seguinte hiperligação: ls2_comma_as_radix_separator.lss.
Grupos de randomização
Visão geral
Este inquérito demonstra como utilizar o atributo random_group.
Se este atributo for utilizado, a ordem das perguntas é randomizada sempre que você iniciar o inquérito. No entanto, depois que o inquérito é iniciado, a ordem de randomização permanece fixa, mesmo que você altere o idioma.
Capturas de tela
Vamos analisar juntos o exemplo abaixo. A primeira pergunta aleatória da página será Q1, Q4 ou Q7. A segunda pergunta randomizada da página será Q2, Q5 ou Q8.

Esta é a randomização gerada na primeira vez que testei este inquérito.

Uma randomização diferente foi gerada na segunda vez que testei o inquérito.

Porém, quando mudei para o francês (sem reiniciar o inquérito), a ordem de randomização permaneceu intacta.

Download
Para baixar o exemplo acima, clique na seguinte hiperligação: Randomization_Group_Test.lss
Perguntar aleatoriamente uma pergunta por grupo
Visão geral
Este inquérito mostra como configurar um inquérito para exibir aleatoriamente uma pergunta por grupo. Nele, há 5 grupos de 6 perguntas cada. No início, no Grupo 0, são preenchidas cinco perguntas de Equação ocultas, chamadas ask1-ask5. Cada uma tem o valor {floor(rand(1,6.9999))} no campo Texto da pergunta, o que significa que as variáveis ask1-ask5 terão, cada uma, um valor entre 1 e 6. Em seguida, cada pergunta do grupo tem uma equação de relevância como "ask1==N", em que N é a N-ésima pergunta do grupo (assim, a terceira pergunta do grupo 1 tem a equação de relevância "ask1==3").
Este inquérito funciona igualmente bem nos modos todo o inquérito de uma vez, grupo por grupo e pergunta por pergunta. Como a randomização é definida no primeiro grupo, e esse grupo fica efetivamente oculto (já que todas as perguntas ask1-ask5 estão ocultas), a randomização permanece a mesma para o participante; mas cada participante diferente terá uma randomização distinta.
Funcionalidades demonstradas
- Tipo de pergunta Equação
- Funções de randomização
- Função condicional (if)
Capturas de tela
Este é o Grupo0, que utiliza o tipo de pergunta Equação para selecionar valores aleatórios de 1 a 6 para cada grupo (exceto o último grupo, que tem apenas 4 perguntas). Observe que a função "if()" primeiro verifica se ask1 já foi definida e, em caso afirmativo, usa esse valor. Se o valor não tiver sido definido, ela usa um valor aleatório para definir o valor de ask1.

Este grupo mostra como a variável (ask4) do Grupo0 é usada para controlar qual pergunta fica visível no quarto grupo.

Download
Para baixar o exemplo de inquérito acima, clique aqui: Exemplo de inquérito com perguntas aleatórias dentro de um grupo.
Perguntar aleatoriamente um número específico de perguntas em um grupo (um subconjunto das perguntas)
Visão geral
Este inquérito mostra como apresentar um subconjunto aleatório de perguntas em um grupo. Por exemplo, exibir 5 perguntas aleatórias de 10 perguntas localizadas em um grupo.
O inquérito tem um grupo contendo 10 perguntas. Todas as perguntas recebem o mesmo nome do grupo de randomização. Como resultado, elas serão exibidas em ordem aleatória no carregamento da página. Cada pergunta recebe uma equação de relevância segundo a qual a soma do "relevanceStatus" de todas as outras perguntas do grupo é menor que o número de perguntas que você deseja exibir. Como o relevanceStatus é atribuído à medida que as perguntas são renderizadas, isso totaliza, na prática, o número de perguntas anteriores.
Assim, no nosso exemplo de 5 em 10, a equação para a Q1 seria:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Para a Q2, seria:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
E assim por diante...
Recursos demonstrados
Download
Para baixar o exemplo acima, clique na seguinte hiperligação: Exemplo de inquérito com 5 perguntas aleatórias em 10.
Avaliação de uma lista de produtos informada pelo usuário
Visão geral
O exemplo abaixo mostra como você pode pedir aos usuários que listem um conjunto de produtos do seu interesse e, em seguida, que avaliem esses produtos.
Recursos do EM demonstrados
- Personalização de respostas - ao avaliar produtos, os rótulos vêm do campo de comentário da pergunta de múltipla escolha anterior
- Personalização de escalas - muitas opções avançadas de perguntas, como os títulos de escala, também podem ser personalizadas.
Capturas de tela
Esta imagem mostra que, mesmo que apenas os produtos 1, 3 e 5 tenham sido selecionados, somente esses 3 são exibidos (usando o atributo array_filter). Além disso, os rótulos das linhas na segunda pergunta são os números dos produtos (se nada for digitado no campo de comentário) ou o conteúdo dos campos de comentário.

Esta imagem mostra como as respostas personalizadas são especificadas:

Aqui está o arquivo de lógica exibido para essa pergunta, que nos permite verificar se a lógica condicional funciona como desejado (por exemplo, para ver se há erros de sintaxe):

A próxima imagem mostra um grupo no qual você especifica uma escala de avaliação de 5 pontos (opções 1-5), o título da escala e os produtos que deseja avaliar. A última pergunta mostra que cada uma das partes da pergunta de array pode ser personalizada:

A próxima imagem mostra a visualização do arquivo de lógica da última pergunta. Como você pode observar, as subperguntas, as respostas e os cabeçalhos de escala podem ser personalizados.

Download
Para baixar o exemplo de inquérito acima, clique na seguinte hiperligação: Exemplo de inquérito de avaliação de lista de produtos informada pelo usuário.