Actions

Motor ExpressionScript: guía de inicio rápido

From LimeSurvey Manual

Revision as of 14:39, 6 September 2023 by Maren.fritz (talk | contribs) (Created page with "===Ecuaciones condicionales===")


Guía de inicio rápido

Dentro de LimeSurvey, puede personalizar aún más sus encuestas mediante el uso de ExpressionScript (abreviado: ES). Nota al margen: "ExpressionScript se llamaba Expression Manager (EM) en una versión anterior. Si lees Expression Manager en alguna parte, es solo el antiguo nombre de ES."

ES se puede utilizar para especificar lo siguiente:

  1. Navegación/Bramificación: permite que las respuestas de un encuestado cambien el orden en que se muestran las preguntas;
  2. Sastrería/Piping: le ayuda a formular la pregunta (como referirse a respuestas anteriores o conjugación de oraciones según la edad o el sexo de los sujetos) o cómo generar informes personalizados (como puntuaciones de evaluaciones o consejos personalizados);
  3. Validación: garantiza que las respuestas pasen ciertos criterios, como valores mínimos y máximos o un determinado patrón de entrada.

ES proporciona una forma intuitiva de especificar la lógica para cada una de esas funciones. Casi cualquier cosa que puedas escribir como una ecuación matemática estándar es una expresión válida.

Actualmente, ES proporciona acceso a 70 funciones y se puede ampliar fácilmente para admitir más. También le permite acceder a sus variables utilizando nombres de variables legibles por humanos (en lugar de SGQA nombres).

Las siguientes secciones muestran los principales lugares donde se utiliza el ES.


Relevancia (control de navegación/ramificación)

Algunas encuestas utilizan "Ir a lógica", de modo que si responde la Pregunta 1 con la opción C, será redirigido a la Pregunta 5. Este enfoque es muy limitado ya que es difícil validarlo. Además, se rompe fácilmente cuando hay que reordenar las preguntas. Por otro lado, ES utiliza Ecuaciones de relevancia booleana para especificar todas las condiciones bajo las cuales una pregunta podría ser válida. Si la pregunta es relevante, se muestra; de lo contrario, no es aplicable y el valor "NULL" se almacena en la base de datos.

Nota: Esto es similar a lo que se puede hacer a través del Editor de condiciones, pero ES le permite especificar fácilmente criterios mucho más complejos y poderosos (y le permite usar el nombre de la variable en lugar de identificadores SGQA).




Para comprender mejor el concepto de relevancia, centrémonos en la siguiente encuesta que calcula el índice de masa corporal (IMC) de los encuestados. Para descargarlo, haga clic en el siguiente enlace: Ejemplo de encuesta de índice de masa corporal.

La ecuación de relevancia se muestra a continuación en la columna Relevancia después del nombre de la variable. Los valores de relevancia de peso, unidades_peso, altura y unidades_altura son todos 1 (valor predeterminado), lo que significa que esas preguntas siempre se muestran. Sin embargo, la relevancia para el IMC es {!is_empty(altura) y !is_empty(peso)}, lo que significa que el IMC solo se calculará si el sujeto ingresa un valor tanto para la altura como para el peso (evitando así el riesgo de obtener un error de cero). ). Además, la pregunta "Informe" solo se muestra si el encuestado responde las cuatro preguntas principales (altura, unidades de altura, peso, unidades de peso).



Archivo:help.png Nota: La imagen de arriba proviene del archivo lógico de encuesta que le permite buscar errores de sintaxis antes de activar la encuesta.


La relevancia se muestra y se puede editar cuando:

  • deseas ver/editar la relevancia a nivel de pregunta
  • deseas ver/editar la relevancia a nivel de grupo


Ver/Editar la relevancia a nivel de pregunta

Esta ecuación calcula el índice de masa corporal (IMC). Sólo se pregunta si la persona ingresa su altura y peso.



Esta es la pantalla de edición para la pregunta "IMC".



Tenga en cuenta que no utiliza llaves cuando ingresa una ecuación de relevancia.


Ver/Editar la relevancia a nivel de grupo

Centrémonos ahora en otro ejemplo: una encuesta censal sencilla. Para descargarlo, haga clic en el siguiente enlace: Ejemplo de encuesta del censo.

La primera página pregunta cuántas personas viven con usted y lo almacena en la variable "cohabs". Esta página solo se muestra si tienes más de un conviviente (se muestra para la segunda persona que convive contigo). Además, p2name, p2age. p2sum se muestran solo si la pregunta anterior a cada una de ellas contiene una respuesta.



Por lo tanto, el grupo también tiene criterios de relevancia a nivel de pregunta, de modo que algunas preguntas solo aparecen si usted respondió ciertas preguntas antes (por ejemplo, se muestra p2age si se respondió p2name). ES combina la relevancia a nivel de grupo y de pregunta para usted. Las preguntas en un grupo sólo se hacen si el grupo en su conjunto es relevante. Luego, sólo se formula el subconjunto de preguntas dentro del grupo que sean relevantes".

Aquí está la captura de pantalla para editar la relevancia a nivel de grupo de Cohabitant 2:



Tenga en cuenta que no utiliza llaves cuando ingresa una ecuación de relevancia.

Sastrería/Tuberías

ES le permite realizar fácilmente adaptaciones condicionales simples y complejas. A veces sólo necesitas una simple sustitución, como decir: "Dijiste que compraste [ Producto]. ¿Qué es lo que más te gustó de esto?". A veces necesitas una sustitución condicional como " [ SR Sra.] [ Apellido], ¿estaría dispuesto a completar nuestra encuesta?". En este caso, desea utilizar "Mr. o Sra." según el género de la persona. Otras veces necesita una sustitución aún más compleja (como basada en un cálculo matemático). ES admite cada uno de estos tipos de sastrería/tubería.


Ecuaciones condicionales

The Body Mass Index example shows the ability to compute a person's BMI, even while letting them enter their height and weight in two different units (cms vs inches and kgs vs lbs):



In this case, weightkg is {if(weightunits == "kg", weight, weight * 0.453592)}. This "if()" function means that if the subject enters the weight using kilograms, use that value, otherwise multiply the entered value (pounds is the alternative) by 0.453592 to convert it to kilograms. The heightm variable uses a similar approach to compute the person's height in meters (height in cms/100), even if he has entered his height in inches (1 meter=3.28084 inches).

BMI is computed as: {weightkg / (heightm * heightm)}.

Lastly, the report conditionally tailors the message for the subject, telling her what he entered. (e.g., "You said you are 2 meters tall and weight 70 kg.")

In the below image, weightstatus uses nested "if()" statements to categorize the person as underweight to severely obese. You can see its equation by checking its logic:



From the edit window for this question, you can see two things:

  1. Tailoring must surround expressions with curly braces
  2. Expressions can span multiple lines if, as in this case, you want to make it easier to read the nested conditional logic.



Tailored Questions, Answers, and Reports

Note: Dynamic tailoring may not work if answer options are made available in select boxes on the same question page. This results from the fact that tailoring inserts a <span> tag which is not valid inside select options.

The BMI report looks like this:



Here is the edit window for the same question.



Anything within curly braces is treated as an expression, being syntax-highlighted (color coded) in the prior image. If you have any typos (such as misspelled or undefined variable names or functions), ES would show an error. In our below example:

  • heightunit.shown is an undefined variable name (it is actually heightunits.shown) and
  • "rnd()" is an undefined function (the proper function name is "round()").

In both cases, the errors are located within a red box to make it easier to spot and fix them.



You can also see that you can quickly create complex reports, such as a table of entered values or tailored advice.

Please remember that all tailoring must surround expressions with curly braces so that LimeSurvey knows which parts of the question are free text and which should be parsed by the ExpressionScript engine.


Validation

ES controls how most of the advanced question options work. These control aspects like min/max numbers of answers, min/max individual values, min/max sum values, and checking that entered values match specified string patterns. Any value in one of those fields is considered an expression, so you can have min/max criteria with complex conditional relationships to other questions.

In all of these cases, since the advanced question attribute is always considered an expression, you do not use curly braces when specifying it.

The sample surveys page shows many working examples containing a variety of validation expressions.

ExpressionScript - presentation

To find out more about ExpressionScript and how you can use different expressions to enhance your survey, please click on the following link.