ExpressionScript 샘플 설문조사
From LimeSurvey Manual
소개
ExpressionScript 사용법을 익히는 가장 좋은 방법은 실제 작동하는 예제를 직접 사용해 보고 필요에 맞게 수정해 보는 것입니다.
아래에서 EM을 사용하여 설문조사를 향상시키는 방법을 보여 주고 테스트할 수 있는 샘플 설문조사 모음을 확인할 수 있습니다. 이 설문조사는 배포판의 /docs/demosurveys 폴더에서 찾을 수 있습니다.
첨부 조건, 맞춤화 및 수식
개요
다음 예제는 각 응답자의 BMI(체질량지수)를 계산합니다. 이 예제에서 보여 주는 기능은 아래를 참조하십시오.
시연되는 EM 기능
- 첨부 조건 - 강력한 조건부 로직을 지원합니다.
- 파이핑 / 맞춤화 - 응답과 질문 메타데이터를 파이핑하거나 맞춤화할 수 있습니다.
- 동적 맞춤화 - 질문에 응답하는 동안 페이지의 보고서가 실시간으로 변경됩니다.
- 마이크로 맞춤화 - if() 문을 사용하여 문장 및 보고서 내에서 조건부로 맞춤화합니다.
- 수식 - 계산을 수행하고 계산 과정이 숨겨져 있더라도 그 결과를 데이터베이스에 저장할 수 있는 새로운 질문 유형입니다.
- 조건부 유효성 검사 - 허용되는 최소값과 같은 유효성 검사 기준을 수식 등을 기반으로 조건부로 설정할 수 있습니다.
스크린샷
이 예제는 체중과 키를 계산하여 저체중, 정상 체중, 과체중, 비만 여부를 판단하는 체질량지수(BMI)를 계산합니다. 처음에는 네 개의 필수 질문만 표시됩니다.

정보를 입력하면(미터법 또는 비미터법 단위 중 선택 가능) 입력한 내용을 요약하고 체중 상태를 알려 주는 맞춤형 보고서가 표시됩니다.

다음은 비미터법 단위를 사용하여 결과가 동적으로 변경되는 모습을 보여 주는 다른 예제입니다.

내부적으로 숨겨진 수식 유형 질문이 있어 (필요한 경우) 데이터를 미터법으로 변환하고, 사용자 지정 JavaScript 없이 미터법 키, 체중, BMI 및 체중 상태를 데이터베이스에 저장합니다.
다음 예제 세트에서는 맞춤형 보고서 내에서 수학 함수 및 기타 함수를 사용하는 방법을 확인할 수 있습니다. 아래는 데이터를 입력하기 전의 페이지 모습입니다. 데이터가 입력되지 않았거나 숫자가 아닌 데이터가 입력된 경우 "NaN" 또는 "Divide by Zero"를 표시하는 대신 빈 셀을 표시하는 조건부 로직이 적용되어 있습니다.

숫자를 입력하면 페이지 내 보고서가 변경되어 수행 중인 계산과 그 결과를 보여 줍니다.

이 샘플 설문조사에는 다른 많은 예제가 있습니다. 예를 들어, 아래 스크린샷은 동적 첨부 조건 페이지를 작성할 수 있는 수십 가지 방법 중 하나를 보여 줍니다. 도움말 텍스트에 안내된 대로 다양한 연령을 입력해 보고, 특히 논리적으로 맞지 않는 응답 조합을 입력하여 하단에 생성되는 재미있는 메시지를 확인해 보십시오. 또한 자녀가 한 명보다 많다고 응답하면 "I hope you enjoy playing with your child" 대신 "I hope you enjoy playing with your X children"이라는 메시지가 표시됩니다. 이는 응답자의 성별 및/또는 수에 맞게 문장을 쉽게 마이크로 맞춤화할 수 있음을 보여 줍니다. 성별과 수에 따라 동사를 활용하고 명사를 변화시키는 것도 간단하게 할 수 있습니다.

다운로드
샘플 설문조사를 받으려면 다음 링크를 클릭하십시오: LS3_em_tailoring.zip.
샘플 인구조사
개요
가구 구성원이 몇 명인지 묻는 인구조사 예제입니다.
그룹 수준 첨부 조건을 사용하면 질문의 "반복(loop)"을 더 쉽게 구현할 수 있음을 보여 줍니다. 1번 인물에 대한 그룹을 만든 후 해당 그룹을 내보냈습니다. SGQA 코드 대신 p1_name과 같은 qcode 변수 이름을 사용했기 때문에 텍스트 편집기로 빠르게 편집하고 그룹을 여러 번 다시 가져올 수 있었습니다(예: 반복되는 각 그룹을 편집하고 다시 가져오는 데 약 10초가 걸렸으며, 모든 변수 이름이 고유하고 그룹 수준 로직이 올바르도록 보장했습니다).
질문 복사 기능을 사용할 수도 있지만, 위에서 제안한 방법만큼 빠르지는 않습니다.
또한 설문조사가 실제로 끝날 때까지(예: 필요한 모든 그룹을 완료할 때까지) 완료 메시지가 표시되지 않도록 하는 방법도 보여줍니다.
시연되는 EM 기능
- 그룹 수준 관련성 - 후속 그룹(Person 1-5)은 지정한 동거인 수만큼만 표시됩니다.
- 테일러링 - 최종 보고서에는 각 동거인의 인구통계 데이터가 요약되어 표시됩니다.
- 점진적 질문 표시 - 그룹별 모드이든 한 페이지 모드이든, 이전 질문에 답변하는 즉시 다음 질문이 표시됩니다.
스크린샷
설문조사는 지정한 수의 동거인에 대한 인구통계를 보여주는 맞춤형 보고서를 생성합니다.

한 번에 한 질문씩 표시하는 모드로 전환하면 인덱스에서 질문이 맞춤 적용된 것을 볼 수 있습니다. 사용자가 해당 인물이 여성이라고 답했기 때문에 "What is her name"이라고 묻습니다. 그리고 "Mary"라고 답했기 때문에 다음 질문은 "How old is Mary"가 됩니다.

다운로드
설문조사 샘플을 다운로드하려면 여기를 클릭하십시오: LS3_group_relevance.zip.
계단식 배열 필터
개요
이 설문조사는 Joy Lane Research, LLC에서 제공한 설문조사 디자인을 기반으로 합니다.
스크린샷
다음 내용을 참고하십시오.
- Q02는 Q01에서 선택한 제품만 표시합니다(array_filter 사용).
- Q02는 Q01의 "Other electronic" 필드에 입력한 텍스트인 "Another product"도 표시합니다.
- Q04는 Q02에서 선택한 제품만 표시합니다(따라서 배열 필터가 계단식으로 적용됩니다).
- Q05는 Q02에서 선택하지 않은 Q02의 제품만 표시합니다(계단식 array_filter_exclude 사용).


다운로드
위 예제를 다운로드하려면 다음 링크를 클릭하십시오: LS2_cascading_array_filter 설문조사 예제.
모든 질문 유형과 속성을 사용한 파이핑/테일러링
개요
변수 이름을 어떻게 지정해야 할지(SGQA 또는 Qcode) 헷갈리는 것은 여러분만이 아닙니다. 기본 문서에서 Qcode 변수 이름을 구성하는 방법을 설명하지만, 실제로 작동하는 데모를 보는 것만큼 좋은 방법은 없습니다. 이 설문조사는 ExpressionScript를 사용하여 질문 속성과 응답에 접근하는 방법을 보여줍니다.
내용
- 모든 질문 유형의 예제
- "기타"를 사용할 수 있는 모든 질문 유형이 포함되어 있어, 이것이 변수 이름 지정에 어떤 영향을 미치는지 확인할 수 있습니다.
- 기본값을 허용하는 모든 질문 유형의 기본값
- 테일러링 - 사용 가능한 16개의 EM 점 표기 접미사를 모두 보여주는 페이지 내/외 보고서
- 이 보고서는 현재 입력된 모든 데이터를 표시합니다(따라서 답변 인쇄 화면 대신 사용자를 위한 인쇄용 보고서를 직접 생성하는 방법을 보여줍니다).
- 모든 변수의 올바른 Qcode 및 SGQA 이름 지정
스크린샷
이 설문조사는 규모가 매우 크기 때문에 스크린샷을 포함하지 않았습니다. 대신 직접 다운로드하여 사용해 보십시오.
다운로드
설문조사를 다운로드하려면 다음 링크를 클릭하십시오: LS3_EM_question_attributes.lss
기존 유효성 검사의 재해석
개요
이 예제는 표현식을 사용하는 모든 유효성 검사 유형과 이러한 유형이 유효성 검사를 지원하는 각 질문 유형에 어떤 영향을 미치는지 보여 줍니다. 대부분의 경우 유효성 검사 팁은 처음에는 숨겨져 있다가 질문이 유효성 검사 기준을 충족하지 못할 때만 나타나며, 질문이 기준을 충족하면 다시 사라집니다.
시연되는 유효성 검사 유형
- min_num_value_n - 응답의 최솟값
- max_num_value_n - 응답의 최댓값
- min_answers - 필요한 최소 응답 수
- max_answers - 허용되는 최대 응답 수
- multiflexible_min - 응답에 허용되는 최솟값(다중 유연 숫자 질문 유형용)
- multiflexible_max - 응답에 허용되는 최댓값(다중 유연 숫자 질문 유형용)
- min_num_value - 질문의 모든 응답에 걸쳐 허용되는 최소 합계
- max_num_value - 질문의 모든 응답에 걸쳐 허용되는 최대 합계
- equals_num_value - 질문의 모든 응답 합계가 이 값과 같아야 함
- validation - 질문의 정규표현식 유효성 검사이며, 개별 셀에 적용할 수 있음
스크린샷
새로운 CSS 스타일을 사용하여 각 유효성 검사 유형이 별도의 팁으로 표시됩니다. 팁이 표시된 경우 hide_tip 옵션으로 숨길 수 있습니다. 기본 옵션은 질문이 유효성 검사 기준을 충족하지 못하면 빨간색 글꼴로, 충족하면 녹색으로 표시하는 것입니다.

사용자는 유효성 검사 오류가 있는 페이지를 제출할 수 없습니다. 잘못된 정보를 입력하면 즉시 경고가 표시됩니다.

유효성 검사는 배열 내의 개별 셀에 적용할 수 있습니다. 이 예제에서는 정규표현식 유효성 검사를 통해 각 입력값이 지역 번호를 포함한 올바른 형식의 미국 전화번호인지 확인합니다.

다운로드
위의 예제를 다운로드하려면 다음 링크를 클릭하십시오: LS3_Validation_tests.zip.
유효성 검사 수식
개요
기존의 최소/최대 기준으로는 구현할 수 없는 사용자 지정 유효성 검사가 필요한 경우가 있습니다. 이럴 때는 em_validation_q 및 em_validation_sq 옵션을 사용하면 각각 질문 수준과 하위 질문 수준에서 복잡한 유효성 검사 수식을 작성할 수 있습니다.
시연되는 EM 기능
- em_validation_q - 질문 전체가 유효한지 판단하는 수식입니다.
- em_validation_q_tip - 질문이 em_validation_q 기준을 충족하지 못할 때 표시할 메시지입니다.
- em_validation_sq - 각 하위 질문(배열 셀)이 유효한지 판단하는 수식입니다.
- em_validation_sq_tip - 하위 질문 중 하나라도 유효하지 않을 때 표시할 메시지입니다.
일반적으로 em_validation_sq를 사용하면 유효하지 않은 셀의 배경 색이 빨간색으로 바뀌어 오류가 있음을 나타냅니다.
스크린샷

이 질문은 다음 유효성 검사 수식을 적용하여 자녀의 나이를 내림차순으로 입력하도록 합니다.
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

아래 예제에서는 다음 유효성 검사 수식을 적용하여 각 행에서 3개를 초과하는 질문에 응답하지 못하도록 합니다.
(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)
다음과 같이 작성할 수도 있으며, LimeSurvey가 실행 시 이를 위에 나열된 표현식으로 자동 변환합니다.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

다운로드
위 예제에서 사용한 설문조사 샘플을 다운로드하려면 다음 링크를 클릭하십시오: ls2_test_em_sq_validation.lss.
하위 질문 관련성
개요
이 예제는 array_filter와 유효성 검사 조건이 어떻게 상호작용하는지 보여줍니다. 합계에 적용되는 유효성 검사에서는 관련 있는(표시되는) 값만 고려됩니다.
시연되는 EM 기능
또한 핵심 질문에서 답변된 질문 수를 동적으로 보고하는 방법도 보여줍니다.
스크린샷
표시되는 행의 수를 변경하면 합계가 동적으로 바뀝니다. 하위 질문을 관련 없음으로 표시해도 해당 값이 지워지지는 않습니다. 대신 관련 없는 경우 그 값은 어떤 수식에도 반영되지 않습니다.


첫 번째 질문 "Which rows should appear below"에서 "Fifth subquestion"을 선택하면 어떻게 되는지 살펴보십시오. 두 번째 질문인 "Enter some numbers"의 합계가 이제 5가 됩니다. 해당 질문의 하위 질문 5에는 여전히 14라는 값이 있지만(예: 다섯 번째 하위 질문의 선택을 해제하면 14라는 값이 다시 나타납니다), 현재는 관련이 없으므로 그 값은 합계에 반영되지 않습니다. 관련 없는 모든 데이터는 제출 시 삭제되지만(데이터베이스에서 NULL 처리됨), 사용자가 답변을 바꾸고 싶어 할 경우를 대비해 페이지에는 그대로 남아 있습니다.

다운로드
예제를 다운로드하려면 여기를 클릭하십시오: ls2_subquestion_relevance.lss.
쉼표를 소수점 구분 기호로 사용하기
개요
ExpressionScript는 숫자 필드에 유효한 숫자만 입력할 수 있도록 보장합니다. 잘못된 숫자를 입력하면 문제가 있다는 경고가 표시됩니다(예: fruity 테마의 경우 질문 전체가 빨간색으로 표시됩니다).
숫자 값은 데이터베이스 내에서 항상 마침표를 소수점 구분 기호로 사용하도록 변환됩니다. 이렇게 하면 통계 분석이 올바르게 동작합니다.
소수점 구분 기호를 변경하려면 설정 탭 아래에 있는 텍스트 속성 옵션에 접속하여 소숫점 기능을 찾으십시오.
소수점 구분 기호를 사용하는 질문 유형
- 숫자 입력 [N]
- 여러 숫자 입력 [K]
- 배열 (숫자) [:]
- 배열 (텍스트) [;], numbers_only 속성을 사용하는 경우
- 목록 (Radio) [L], other_numbers_only 속성을 사용하는 경우
- 짧은 자유 서술 [S], numbers_only 속성을 사용하는 경우
- 짧은 서술 여러 개 [Q], numbers_only 속성을 사용하는 경우
- 다수 답안 [M], other_numbers_only 속성을 사용하는 경우
- 해설있는 다중 선택 [P], other_numbers_only 속성을 사용하는 경우
스크린샷
아래 스크린샷에서 쉼표를 소수점 구분 기호로 사용할 수 있음을 확인할 수 있습니다.

다운로드
위 예제를 다운로드하려면 다음 링크를 클릭하십시오: ls2_comma_as_radix_separator.lss.
무작위화 그룹
개요
이 설문조사는 random_group 속성을 사용하는 방법을 보여줍니다.
이 속성을 사용하면 설문조사를 시작할 때마다 질문 순서가 무작위로 정해집니다. 그러나 설문조사가 시작된 후에는 언어를 변경하더라도 무작위 순서가 고정된 상태로 유지됩니다.
스크린샷
아래 예제를 함께 살펴보겠습니다. 페이지의 첫 번째 무작위 질문은 Q1, Q4 또는 Q7 중 하나입니다. 페이지의 두 번째 무작위 질문은 Q2, Q5 또는 Q8 중 하나입니다.

다음은 이 설문조사를 처음 테스트했을 때 생성된 무작위 순서입니다.

설문조사를 두 번째로 테스트했을 때는 다른 무작위 순서가 생성되었습니다.

그러나 설문조사를 다시 시작하지 않고 프랑스어로 전환했을 때는 무작위 순서가 그대로 유지되었습니다.

다운로드
위 예제를 다운로드하려면 다음 링크를 클릭하세요: Randomization_Group_Test.lss
그룹별로 질문 하나씩 무작위로 묻기
개요
이 설문조사는 그룹마다 질문 하나를 무작위로 표시하도록 설문조사를 구성하는 방법을 보여줍니다. 여기에는 각각 6개의 질문으로 이루어진 5개의 그룹이 있습니다. 처음 그룹 0에는 ask1-ask5라는 숨겨진 수식 질문 5개가 있습니다. 각 질문의 질문 텍스트 필드에는 {floor(rand(1,6.9999))} 값이 있으므로 변수 ask1-ask5는 각각 1에서 6 사이의 값을 갖게 됩니다. 그런 다음 그룹의 각 질문에는 "ask1==N"과 같은 관련성 수식이 설정됩니다. 여기서 N은 그룹 내 N번째 질문입니다(따라서 그룹 1의 세 번째 질문의 관련성 수식은 "ask1==3"입니다).
이 설문조사는 한 번에 전체, 그룹별, 질문별 모드에서 모두 똑같이 잘 작동합니다. 무작위화는 첫 번째 그룹에서 설정되고 이 그룹은 사실상 숨겨져 있으므로(ask1-ask5 질문이 모두 숨겨져 있기 때문) 한 응답자에게는 무작위 순서가 동일하게 유지되지만, 응답자마다 서로 다른 무작위 순서가 적용됩니다.
시연되는 기능
- 수식 질문 유형
- 무작위화 함수
- 조건(if) 함수
스크린샷
그룹 0에서는 수식 질문 유형을 사용하여 각 그룹(질문이 4개뿐인 마지막 그룹 제외)에 대해 1에서 6 사이의 무작위 값을 선택합니다. "if()" 함수는 먼저 ask1이 이미 설정되었는지 확인하고, 설정되었다면 그 값을 사용합니다. 값이 설정되지 않았다면 무작위 값을 사용하여 ask1의 값을 설정합니다.

이 그룹은 그룹 0의 변수(ask4)를 사용하여 네 번째 그룹에서 어떤 질문이 표시될지 제어하는 방법을 보여줍니다.

다운로드
위 설문조사 예제를 다운로드하려면 여기를 클릭하세요: 그룹 내 무작위 질문 설문조사 예제.
그룹 내에서 지정된 수의 질문을 무작위로 묻기(질문의 일부)
개요
이 설문조사는 그룹 내 질문의 무작위 하위 집합을 표시하는 방법을 보여줍니다. 예를 들어, 한 그룹에 있는 10개의 질문 중 5개를 무작위로 표시할 수 있습니다.
이 설문조사에는 10개의 질문이 포함된 그룹이 하나 있습니다. 모든 질문에는 동일한 무작위화 그룹 이름이 지정되어 있습니다. 그 결과 페이지가 로드될 때 질문이 무작위 순서로 표시됩니다. 각 질문에는 그룹 내 다른 모든 질문의 "relevanceStatus" 합계가 표시하려는 질문 수보다 작아야 한다는 관련성 수식이 지정됩니다. relevanceStatus는 질문이 렌더링될 때 할당되므로, 이는 사실상 앞서 표시된 질문의 수를 합산하는 것과 같습니다.
따라서 10개 중 5개를 표시하는 이 예제에서 Q1의 수식은 다음과 같습니다.
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Q2의 경우 다음과 같습니다.
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
나머지 질문도 같은 방식으로 작성합니다.
시연되는 기능
다운로드
위 예제를 다운로드하려면 다음 링크를 클릭하십시오: 10개 중 5개 무작위 설문조사 예제.
사용자가 입력한 제품 목록 평가
개요
아래 예제는 사용자에게 관심 있는 제품 목록을 입력하게 한 다음, 해당 제품을 평가하도록 요청하는 방법을 보여줍니다.
시연되는 ES 기능
- 답안 테일러링 - 제품을 평가할 때 레이블은 앞선 다중 선택 질문의 해설 필드에서 가져옵니다.
- 척도 테일러링 - 척도 제목과 같은 많은 고급 질문 옵션도 테일러링할 수 있습니다.
스크린샷
이 이미지는 제품 1, 3, 5만 선택되었기 때문에 array_filter 속성을 사용하여 이 3개의 제품만 표시되는 것을 보여줍니다. 또한 두 번째 질문의 행 레이블은 해설 필드에 아무것도 입력하지 않은 경우 제품 번호이고, 입력한 경우 해설 필드의 내용입니다.

이 이미지는 테일러링된 답안을 지정하는 방법을 보여줍니다.

다음은 해당 질문의 논리 파일 보기로, 조건부 논리가 의도한 대로 작동하는지(예: 구문 오류가 있는지) 확인할 수 있습니다.

다음 이미지는 5점 평가 척도(옵션 1-5), 척도 제목, 평가할 제품을 지정하는 그룹을 보여줍니다. 마지막 질문은 배열 질문의 각 부분을 테일러링할 수 있음을 보여줍니다.

다음 이미지는 마지막 질문의 논리 파일 보기입니다. 보시다시피 하위 질문, 답안, 척도 헤더를 테일러링할 수 있습니다.

다운로드
위의 설문조사 예제를 다운로드하려면 다음 링크를 클릭하십시오: 사용자가 입력한 제품 목록 평가 설문조사 예제.