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

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

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

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

숫자를 입력하면 페이지의 보고서가 바뀌면서 수행 중인 계산과 그 결과를 표시합니다.

이 샘플 설문조사에는 다른 많은 예제도 있습니다. 예를 들어, 아래 스크린샷은 Dynamic Relevance 페이지를 작성하는 수십 가지 방법 중 하나를 보여 줍니다. 도움말 텍스트에 나와 있듯이 다양한 나이를 입력해 보고, 특히 비논리적인 응답 조합을 시도하여 하단에 생성되는 재미있는 메시지를 확인해 보십시오. 또한 자녀가 한 명보다 많다고 응답하면 "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)은 지정한 동거인 수만큼만 표시됩니다.
- 테일러링 - 최종 보고서는 각 동거인의 인구통계 데이터를 요약합니다.
- 점진적 질문 표시 - 그룹별 모드이든 한 페이지 모드이든, 앞선 질문에 답해야만 다음 질문이 표시됩니다.
스크린샷
설문조사는 지정한 동거인 수에 대한 인구통계를 보여 주는 맞춤형 보고서를 생성합니다:

질문별 표시 모드로 전환하면 색인이 질문을 맞춤화하는 것을 볼 수 있습니다. 사용자가 해당 인물이 여성이라고 답했으므로 "그녀의 이름은 무엇입니까"라고 묻습니다. 그리고 "Mary"라고 답했으므로 다음 질문은 "Mary는 몇 살입니까?"가 됩니다.

다운로드
설문조사 샘플을 다운로드하려면 여기를 클릭하십시오: LS3_group_relevance.zip.
연쇄 배열 필터
개요
이 설문조사는 Joy Lane Research, LLC에서 제공한 설문조사 설계를 기반으로 합니다.
스크린샷
다음 사항에 유의하십시오:
- Q02는 Q01에서 선택한 제품만 표시합니다(array_filter 사용).
- Q02는 또한 Q01의 "Other electronic" 필드에 입력한 텍스트인 "Another product"도 표시합니다.
- Q04는 Q02에서 선택한 제품만 표시합니다(따라서 배열 필터가 연쇄적으로 적용됩니다).
- Q05는 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 - 질문의 모든 응답을 합산한 값이 이 값과 같아야 함
- 유효성 - 질문에 대한 정규표현식 유효성 검사이며, 개별 셀에 적용할 수 있음
스크린샷
새로운 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) 함수
스크린샷
이것은 수식 질문 유형을 사용하여 각 그룹에 대해 1에서 6 사이의 무작위 값을 선택하는 그룹 0입니다(질문이 4개뿐인 마지막 그룹은 제외). "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개 무작위 설문조사 예제.
사용자가 입력한 제품 목록 평가
개요
아래 예제는 사용자에게 관심 있는 제품 목록을 입력하게 한 다음, 해당 제품을 평가하도록 하는 방법을 보여줍니다.
시연되는 EM 기능
- 답변 맞춤화 - 제품을 평가할 때 레이블은 앞선 다중 선택 질문의 해설 필드에서 가져옵니다.
- 척도 맞춤화 - 척도 제목과 같은 많은 고급 질문 옵션도 맞춤화할 수 있습니다.
스크린샷
이 이미지는 제품 1, 3, 5만 선택했을 때 array_filter 속성을 사용하여 해당 3개의 제품만 표시되는 것을 보여줍니다. 또한 두 번째 질문의 행 레이블은 해설 필드에 아무것도 입력하지 않은 경우 제품 번호로, 입력한 경우 해설 필드의 내용으로 표시됩니다.

이 이미지는 맞춤화된 답변을 지정하는 방법을 보여줍니다.

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

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

다음 이미지는 마지막 질문의 논리 파일 보기입니다. 보시는 것처럼 하위 질문, 답변, 척도 제목을 맞춤화할 수 있습니다.

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