x

Capítulos principais

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Guia de início rápido - LimeSurvey 3.0+
  3. Instalação - LimeSurvey CE
  4. Como criar um bom inquérito (guia)
  5. Iniciando
  6. Administrando o LimeSurvey
  7. Questionários - introdução
  8. Configurações do questionário
  9. Menu da pesquisa
  10. Estrutura da pesquisa
  11. Perguntas - introdução
  12. Grupos de perguntas - introdução
  13. Questionários - gerenciamento
  14. Opções da barra de ferramentas do questionário
  15. Questionário multilíngue
  16. ExpressionScript Engine - Guia de início rápido
  17. Recursos avançados e não categorizados
  18. FAQ geral
  19. Solução de problemas
  20. Soluções alternativas
  21. Licença
  22. Registro de mudanças da versão
  23. Plugins
 Actions

Exemplos de ExpressionScript

From LimeSurvey Manual

Esta página pode ter sido traduzida automaticamente e conter erros. Ver o original em inglês · Melhorar esta tradução
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
Ajude a ampliar este artigo adicionando seus próprios exemplos. Isso ajudará outras pessoas a começarem a usar o Expression Script.


Estrutura

A primeira parte do artigo descreve para que as expressões podem ser usadas e onde encontrar/adicionar uma expressão. A segunda parte apresenta exemplos de como usar expressões.


Categorias de expressões

O LimeSurvey usa expressões para as seguintes finalidades:


Relevância

Finalidade: ocultar grupos de perguntas/perguntas

A relevância controla se um grupo de perguntas ou uma pergunta é exibido ou ocultado. Se o resultado da expressão for "verdadeiro" (ou seja, 1), o elemento será exibido. Caso contrário (se o resultado da expressão for "falso", ou seja, 0), o elemento será ocultado.

Tipo Exibe/oculta Onde encontrar Captura de tela
Relevância do grupo de perguntas grupo de perguntas Criar/Editar grupo de perguntas -> "Equação de relevância:"
Relevância da pergunta pergunta Criar/Editar pergunta -> "Equação de relevância:"
Relevância da pergunta secundária pergunta secundária Editar pergunta secundária -> "Equação de relevância:"


Validação

Finalidade: validar entradas/ações em perguntas/perguntas secundárias/respostas

A validação controla se a entrada ou ação do participante em uma pergunta é válida ou não. Se o resultado da expressão for "verdadeiro" (ou seja, 1), a classe "good" será aplicada ao elemento e à mensagem de validação. Caso contrário, se o resultado da expressão for "falso" (ou seja, 0), a classe "error" será aplicada ao elemento e à mensagem de validação. Você pode declarar um estilo para essas classes no arquivo template.css.

Tipo Valida Onde encontrar Captura de tela
Validação da pergunta pergunta Criar/Editar pergunta -> "Aba Lógica" -> "Fórmula de validação da pergunta"
Validação da pergunta secundária perguntas secundárias Criar/Editar pergunta -> "Aba Lógica" -> "Equação de validação da subpergunta" ‎

Saída de texto

Finalidades: (fazer algo e) escrever algum texto

Uma expressão pode ser usada para escrever algum texto. Por exemplo, você pode testar ou calcular algo e definir a saída de acordo com o resultado do teste ou do cálculo. Ela também pode ser usada para inserir o texto da pergunta, as respostas, os tipos de pergunta etc. de uma pergunta usada antes da expressão. A saída de texto pode ser usada em qualquer lugar em que um texto seja exibido e pode retornar qualquer tipo de resultado.

Caso de uso Descrição
Micropersonalização Ajustar um texto, por exemplo, escrever "Sr." ou "Sra." dependendo de uma pergunta sobre gênero feita anteriormente
Cálculo Calcular um valor e escrevê-lo, por exemplo, "A renda da sua família é xxx"
Referência Inserir um texto de um elemento, por exemplo, "Seu nome é xxx. Qual é a sua idade?"


Armazenamento de respostas

Finalidades: (fazer algo,) (escrever algum texto) e armazenar algo no banco de dados

O tipo de pergunta Fórmula pode ser usado para armazenar algo no banco de dados. Você pode fazer algo com uma expressão, exibir a pergunta de fórmula (que é semelhante a uma exposição do texto) e armazenar o resultado da expressão no banco de dados. A resposta é armazenada na tabela de respostas. Depois, o resultado pode ser usado no recurso de estatísticas ou ser importado em um dos formatos fornecidos pela funcionalidade de exportação do LimeSurvey.

Exemplos de expressões

Inserir uma resposta de uma pergunta anterior

Finalidade Inserir uma resposta de uma pergunta anterior
Tipo Referência
Exemplo Pergunta um (código da pergunta "Q00"): Em que cidade você mora?
Pergunta dois (código da pergunta "Q01"): Há quanto tempo você mora em CIDADE?
A fazer: a resposta da pergunta um deve ser usada no lugar de "CIDADE" na segunda pergunta.
Expressão {QOO}
Descrição A resposta fornecida em Q00 substitui o campo Q00 na segunda pergunta
Etapas Criar/Editar a pergunta dois
Inserir "Há quanto tempo você mora em {QOO} (anos)?" no campo de texto da pergunta

Usar uma pergunta de fórmula oculta para preencher uma resposta automaticamente

Problema: Imagine que você tenha duas perguntas, Q1 e Q2. A Q1 pergunta a idade dos participantes. A Q2 divide os participantes em três grupos: idade abaixo de 20 anos, idade igual a 20 e idade acima de 20. Assim, a Q2 deve usar os valores "1", "2", "3", que correspondem às condições acima. Além disso, não podemos esquecer de tornar a Q2 invisível (a pergunta não será exibida no inquérito, mas os valores serão gravados, via "processo em segundo plano", na tabela de respostas).

Para preencher o banco de dados usando o tipo de pergunta Fórmula:

  • Primeiro, crie uma pergunta com o código Q1 como pergunta de entrada numérica.
  • Em seguida, crie outra pergunta com o código Q2 como pergunta de fórmula.
  • Na aba "Configurações de exibição" da Q2:
    • defina o campo "Sempre ocultar esta questão" como "Ligado"
    • digite no campo "Fórmula" a expressão:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

Criar uma página de resumo usando marcadores

Este tutorial demonstra como criar uma visão geral no final do inquérito, listando todas as perguntas e respostas por meio de marcadores do ExpressionScript. Ele também mostra como limitar essa visão geral apenas às perguntas respondidas.

Nosso exemplo pode ser baixado aqui: Exemplo de inquérito com campos de substituição.


Tipos de pergunta utilizados aqui:

1. Questões de resposta única / perguntas de texto único/numéricas

  • Lista (Dropdown)
  • Lista (Rádio) [L]
  • Sim/Não [Y]
  • Texto livre longo [T]
  • Texto livre curto [S]
  • Entrada numérica [N]
  • Equação [*]


2. Pergunta com perguntas secundárias

  • Texto curto múltiplo [Q]
  • Múltipla escolha [M]
  • Matriz [F]
  • Matriz (Sim/Não/Não sei) [C]
  • Matriz (escolha de 10 pontos) [B]


3. Perguntas com 2 escalas

  • Matriz de dois níveis [1]


4. Perguntas com escalas X e Y

  • Matriz (Números) [:]


5. Máscara da pergunta

  • Exposição do texto [X]


Neste exemplo simples, nossa visão geral será uma lista simples com:

- Texto da pergunta: Resposta do usuário


Questões de resposta única / perguntas de texto único/numéricas

Para todos estes tipos de pergunta, o LimeSurvey armazenará uma única resposta:

  • Lista (Dropdown)
  • Lista (Rádio)
  • Lista com comentários
  • Escolha de 5 pontos
  • Sim/Não
  • Texto livre curto
  • Texto livre longo
  • Texto livre extenso
  • Entrada numérica
  • Equação
  • Data
  • Gênero

Supondo que o código da pergunta seja q1, podemos referenciar o texto da pergunta e a resposta usando:

- {q1.question}: {q1.shown}

Exemplo:

- Quantos anos você tem?: 25


Se você quiser verificar se a pergunta foi respondida, pode colocar uma instrução IF em torno da saída:

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

Isto "se traduz" em: SE a pergunta com o código q1 não estiver vazia, exibir "- " E o texto da pergunta E ": " E o texto da resposta (a função join() une os elementos em uma nova string); SENÃO: não exibir nada ("" significa string vazia).

Pergunta com perguntas secundárias

Para todos estes tipos de pergunta, o LimeSurvey utiliza perguntas secundárias:

  • Texto curto múltiplo
  • Múltipla escolha
  • Múltipla escolha com comentário
  • Matriz
  • Matriz (escolha de 5 pontos)
  • Matriz (escolha de 10 pontos)
  • Matriz (Sim/Não/Não sei)
  • Matriz (Aumentar, Manter, Reduzir)
  • Matriz por coluna

Supondo que o código da pergunta seja q2 e que as perguntas secundárias estejam numeradas como SQ001, SQ002 (numeração automática feita pelo LimeSurvey), podemos referenciar o texto da pergunta e a resposta usando:

- {q2_SQ001.question}: {q2_SQ001.shown}

- {q2_SQ002.question}: {q2_SQ002.shown}

Para perguntas de múltipla escolha, faz sentido não mostrar o texto da pergunta secundária marcada, mas sim exibir um Y para cada opção selecionada:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

Observe que, atualmente, não é possível exibir o texto de perguntas que possuem perguntas secundárias; consulte esta solicitação de recurso.


Exemplo 1 (supondo que o tipo de pergunta seja Múltipla escolha)

- Você conhece estas marcas de carro?

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


Se quiser exibir apenas os itens marcados, você pode colocar uma instrução IF em torno da saída e verificar o valor da caixa de seleção:

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


Use a função listifop se quiser exibir uma lista somente com os itens selecionados, por exemplo: Mercedes, Volvo

{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }


Onde  that.q2  é expandido para todas as perguntas secundárias de q2. Consulte self, this e that para mais detalhes.


Exemplo 2 (supondo que o tipo de pergunta seja Matriz (escolha de 10 pontos))

- Avalie a qualidade das marcas de carro abaixo em uma escala de 1=muito ruim a 10=muito bom?

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


Se quiser exibir apenas os itens avaliados, você pode colocar uma instrução IF em torno da saída e verificar se a pergunta secundária atual foi respondida usando:

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


Use a função listifop se, por exemplo, quiser exibir apenas uma lista dos itens selecionados com valor maior que oito, por exemplo: Audi / Volvo

{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }


Pergunta com duas escalas

Isso se aplica somente ao tipo de pergunta de escala dupla.


Vamos supor que os seguintes códigos estejam sendo usados:

  • Código da pergunta: q4
  • Códigos das perguntas secundárias: SQ001, SQ002, ...
  • Códigos de resposta da escala 1: A1, A2, ...
  • Códigos de resposta da escala 2: B1, B2, ...


Para se referir ao resultado de uma determinada pergunta secundária em uma determinada escala, você precisa usar QuestionCode . '_' . SubQuestionCode . '_' . ScaleID. Observe que "ScaleID" é 0 para a primeira escala e 1 para a outra!
Exemplo para se referir à resposta da terceira pergunta secundária na segunda escala: q4_SQ003_1 - Pergunta 4, pergunta secundária 3, segunda escala.


Vamos exibir os resultados das duas escalas e das duas primeiras perguntas secundárias:

- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

Para exibir o texto da pergunta secundária, você precisa adicionar o ID da escala ao campo de substituição (embora os textos sejam os mesmos para ambas as escalas). Portanto, em vez de {q4_SQ001.question}, temos que usar {q4_SQ001_0.question} ou {q4_SQ001_1.question}.

Se quiser exportar/exibir apenas os resultados das perguntas secundárias com pelo menos uma resposta, use esta sintaxe para cada pergunta secundária:

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

Pergunta com escalas X e Y

Isto se aplica a todas as perguntas de matriz que permitem uma resposta para cada célula (não apenas para cada linha, como mostrado anteriormente):

  • Matriz (Textos)
  • Matriz (Números)


Códigos utilizados como exemplo:

  • Código da pergunta: q5
  • Códigos das perguntas secundárias: SQ001, SQ002, ...
  • Códigos de resposta: A1, A2, ...

Para se referir ao resultado de uma determinada pergunta secundária em uma determinada coluna, você precisa usar CódigoDaPergunta . '_' . CódigoDaPerguntaSecundária . '_' . CódigoDeResposta. Exemplo para se referir à resposta da terceira pergunta secundária e da segunda coluna: q5_SQ003_A2.

Vamos exibir os resultados das colunas 1 a 3 das duas primeiras perguntas secundárias:

- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}

- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}


Como, nesses tipos de pergunta, cada célula (combinação dos eixos X e Y) equivale a uma opção de resposta, é preciso testar a existência de dados para cada célula. Exemplo:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


Para exibir o texto da pergunta secundária, você precisa adicionar o código de resposta ao campo de substituição (embora os textos sejam os mesmos para todas as opções de resposta). Assim, em vez de {q5_SQ001.question}, devemos usar {q5_SQ001_A1.question} ou {q5_SQ001_A2.question}.

Ocultar pergunta se a resposta da pergunta anterior estiver vazia

Finalidade Ocultar pergunta se a resposta da pergunta anterior estiver vazia
Tipo Relevância da pergunta
Exemplo Pergunta um: código da pergunta "name", texto da pergunta "Qual é o seu nome?"
Pergunta dois: texto da pergunta "{name}, quantos anos você tem?"
A fazer: ocultar a pergunta dois se o campo de texto da pergunta um estiver vazio
Expressão !is_empty(name)
Descrição is_empty() determina se uma variável é considerada vazia. O "!" nega o resultado. Assim, se a variável não estiver vazia, a expressão será verdadeira e a pergunta será exibida
Passos Crie/edite a pergunta dois
Insira "!is_empty(name)" em "Equação de relevância:"
Arquivo de exemplo Hide_question_if_empty_question_group.zip


Ocultar grupo de questões se a resposta da pergunta anterior for Sim ou Não

Finalidade Ocultar grupo de questões se a resposta da pergunta anterior for Sim ou Não
Tipo Relevância do grupo de questões
Exemplo Página um, Grupo de questões um, Pergunta um: código da pergunta "PET", texto da pergunta "Você tem um animal de estimação?" -Sim -Não
Página dois, Grupo de questões dois: Título "Sobre o(s) seu(s) animal(is) de estimação"
A fazer: mostrar/ocultar o grupo de questões dois se a resposta da pergunta um for Sim/Não
Expressão PET == "Y"
Descrição PET é o código da pergunta cuja resposta você deseja verificar. Se você não usar um sufixo, o EM usará "Qcode.code". Assim, você compara o código de resposta da pergunta PET com o valor "Y". Se o participante responder "Sim", a expressão será verdadeira e o grupo de questões "Sobre o(s) seu(s) animal(is) de estimação" será exibido.
Passos Crie/edite o grupo de questões dois
Insira "PET == "Y"" em "Equação de relevância:"
Arquivo de exemplo Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Exibir o valor de um campo de pergunta de entrada de várias respostas

Finalidade Exibir o valor de um campo de pergunta de entrada de várias respostas
Tipo Referência
Exemplo Pergunta um: código da pergunta "AskChildAge", texto da pergunta "Quantos anos têm os seus filhos?". Códigos das perguntas secundárias -Child1 -Child2 -Child3 - ChildXXX
Pergunta dois: código da pergunta "ReportChildAge", texto da pergunta "Sobre o seu primeiro filho: - CHILD1 tem AGE1."
Expressão {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Descrição Você deseja usar o valor de uma pergunta secundária em uma pergunta seguinte. Você pode acessar o valor da pergunta secundária com este tipo de expressão: QcodeQuestion_QcodeSubquestion.value
Passos Crie/edite a segunda pergunta
Insira este texto na descrição: "Sobre o seu primeiro filho: - {AskChildAge_Child1.question} tem {AskChildAge_Child1.value}."
Arquivo de exemplo Display_value_of_a_multiple_answer_input_question_field.zip

Validar o número de caixas marcadas por linha em uma pergunta "Matriz (Números) Checkbox"

Finalidade Validar o número de caixas marcadas por linha
Tipo Validação
Exemplo Pergunta do tipo "Matriz (Números) (Layout checkbox)"
Expressão sum(...)
Descrição (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) determina se, no máximo, X caixas de seleção da linha A estão marcadas.
Se você quiser verificar as três linhas (A, B, C), pode conectar a expressão usando "&&":
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)
&& (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)
&& (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X)
Passos Crie/edite uma pergunta do tipo "Matriz (Números) (Layout checkbox)".
Insira a expressão acima em "Fórmula de validação da pergunta" nas configurações avançadas da pergunta (talvez seja necessário ajustar os nomes das variáveis!).
Arquivo de exemplo Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Calcular a diferença entre duas datas

Finalidade Calcular a diferença entre duas datas
Tipo Relevância / Pergunta do tipo Equação / Validação
Exemplo Pergunta um (data/hora, código: DOB): Qual é a sua data de nascimento?
Pergunta dois (data/hora, código: datetoday): Qual é a data de hoje?
Pergunta três (texto padrão): Você tem XXXX dias de vida.
A fazer: calcular e exibir o número de dias entre a data informada na pergunta 1 e a da pergunta 2.
Expressão {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
Descrição strtotime calcula o número de segundos entre 1º de janeiro de 1970 e a data informada. A expressão acima calcula o número de segundos entre as duas datas informadas. O termo "/60/60/24" apenas converte o número de segundos em número de dias.
Em vez de perguntar a "datetoday", você também pode usar strtotime('now') ou simplesmente time(), que retorna diretamente o número de segundos de janeiro de 1970 até agora (ou seja, o momento em que o inquérito foi respondido). Assim, você poderia descobrir rapidamente a idade de uma pessoa em anos com a equação {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25}. Em qualquer um desses casos, é essencial que a data seja informada em um formato adequado; caso contrário, a função strtotime() não funcionará corretamente.
Passos Crie duas perguntas de data (para a data de nascimento e para a data de hoje) e uma pergunta de texto padrão.
No texto da pergunta de texto padrão, insira: "Em {datetoday} você tinha {(strtotime(today)-strtotime(dob))/60/60/24} dias de vida."

Observe: a função strtotime funciona com MUITOS formatos de data, mas não com todos. Se tiver problemas, defina o Formato da data do seu inquérito como mm/dd/aaaa, aaaa-mm-dd ou dd.mm.aaaa"
Arquivo de exemplo Date_difference.zip

Usar o ExpressionScript em avaliações

Aqui está outro exemplo de como usar o ExpressionScript com perguntas do tipo matriz e avaliações:</ br>

Digamos que você tenha 2 perguntas de matriz e queira salvar no banco de dados os resultados do cálculo. Na verdade, é simples: você precisará criar e testar suas matrizes e enviar uma resposta de teste para ver se funciona e se mostra os resultados na página de conclusão.


Detalhes da implementação:

  • adicione uma pergunta do tipo equação
  • adicione a linha a seguir, supondo que Q1 seja o código da sua pergunta de matriz e Q2 seja o da segunda:
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

Observe que SQ001 é o código padrão de qualquer pergunta secundária. Se você alterar o código da pergunta secundária, ajuste a equação acima de acordo.


Usar em_validation_q em uma matriz

Você pode usar a fórmula de validação da pergunta para controlar uma matriz com qualquer condição.


Detalhes da implementação:

  • para a primeira matriz: matriz de escolha única
    • O código da pergunta é ARRAY
    • Os códigos das perguntas secundárias são SQ01, SQ02, SQ03 e SQ04
    • atualize a Fórmula de validação da pergunta inteira e insira
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • para a segunda matriz: matriz de texto
    • O código da pergunta é ARRAYTEXT
    • Os códigos das perguntas secundárias no eixo Y são SY01, SY02, SY03 e SY04
    • Atualize a Fórmula de validação da pergunta inteira e insira
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)