x

주요 장

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. 빠른 시작 가이드 - LimeSurvey 3.0+
  3. 설치 - LimeSurvey CE
  4. 좋은 설문조사를 디자인하는 방법(가이드)
  5. 시작하기
  6. LimeSurvey 관리
  7. 설문조사 - 소개
  8. 설문조사 설정
  9. 설문조사 메뉴
  10. 설문 조사 구조
  11. 질문 - 소개
  12. 질문 그룹 - 소개
  13. 설문조사 관리
  14. 설문조사 도구 모음 옵션
  15. 다국어 설문조사
  16. ExpressionScript 엔진 - 빠른 시작 가이드
  17. 미분류 및 고급 기능
  18. 일반 FAQ
  19. 문제 해결
  20. 해결 방법
  21. 특허
  22. 버전 변경 로그
  23. 플러그인 - 고급
 Actions

ExpressionScript 예제

From LimeSurvey Manual

이 페이지는 기계 번역되었을 수 있으며 오류가 포함되어 있을 수 있습니다. 영어 원문 보기 · 이 번역 개선하기
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
이 문서를 확장하는 데 도움을 주세요. 직접 작성한 예제를 추가해 주시면 다른 사용자가 식 스크립트를 시작하는 데 도움이 됩니다.


구조

이 문서의 첫 번째 부분에서는 식(Expression)을 어떤 용도로 사용할 수 있는지, 그리고 식을 어디에서 찾고 추가할 수 있는지 설명합니다. 두 번째 부분에서는 식을 사용하는 방법에 대한 예제를 제공합니다.


식의 범주

LimeSurvey는 다음과 같은 용도로 식을 사용합니다.


첨부 조건

목적: 질문 그룹/질문 숨기기

첨부 조건은 질문 그룹 또는 질문을 표시할지 숨길지를 제어합니다. 식의 결과가 "true"(즉, 1)이면 해당 요소가 표시됩니다. 그렇지 않으면(식의 결과가 "false"(즉, 0)이면) 해당 요소가 숨겨집니다.

유형 표시/숨김 대상 위치 스크린샷
질문 그룹 첨부 조건 질문 그룹 질문 그룹 생성/편집 -> "관련성 수식:"
질문 첨부 조건 질문 질문 생성/편집 -> "관련성 수식:"
하위 질문 첨부 조건 하위 질문 하위 질문 편집 -> "관련성 수식:"


유효성 검사

목적: 질문/하위 질문/응답에 대한 입력 및 동작 검증

유효성 검사는 질문 또는 동작에 대한 응답자의 입력이 유효한지 여부를 제어합니다. 식의 결과가 "true"(즉, 1)이면 해당 요소와 유효성 검사 메시지에 "good" 클래스가 적용됩니다. 그렇지 않고 식의 결과가 "false"(즉, 0)이면 해당 요소와 유효성 검사 메시지에 "error" 클래스가 적용됩니다. 이 클래스들의 스타일은 template.css에서 선언할 수 있습니다.

유형 검증 대상 위치 스크린샷
질문 유효성 검사 질문 질문 생성/편집 -> "로직 탭" -> "질문 유효성 방정식"
하위 질문 유효성 검사 하위 질문 질문 생성/편집 -> "로직 탭" -> "하위 질문 유효성 검사식" ‎

텍스트 출력

목적: (어떤 작업을 수행하고) 텍스트 출력하기

식을 사용하여 텍스트를 출력할 수 있습니다. 예를 들어 무언가를 테스트하거나 계산한 다음, 그 결과에 따라 출력 내용을 지정할 수 있습니다. 또한 식이 사용되기 전에 나온 질문의 질문 텍스트, 응답, 질문 유형 등을 삽입하는 데에도 사용할 수 있습니다. 텍스트 출력은 텍스트가 표시되는 모든 곳에서 사용할 수 있으며 모든 종류의 결과를 반환할 수 있습니다.

사용 사례 설명
마이크로 테일러링 텍스트를 조정합니다. 예: 앞서 질문한 성별 질문에 따라 "Mr" 또는 "Mrs"를 출력
계산 값을 계산하여 출력합니다. 예: "귀하의 가계 소득은 xxx입니다"
참조 요소의 텍스트를 삽입합니다. 예: "이름은 xxx입니다. 나이가 어떻게 되십니까?"


응답 저장

목적: (어떤 작업을 수행하고) (텍스트를 출력하고) 데이터베이스에 값 저장하기

수식 질문 유형을 사용하여 데이터베이스에 값을 저장할 수 있습니다. 식으로 어떤 작업을 수행하고, 수식 질문(이는 텍스트 디스플레이와 유사합니다)을 표시하며, 식의 결과를 데이터베이스에 저장할 수 있습니다. 응답은 응답 테이블에 저장됩니다. 이후 이 결과는 통계 기능에서 사용하거나 LimeSurvey 내보내기 기능이 제공하는 형식 중 하나로 가져올 수 있습니다.

식 예제

이전 질문의 응답 삽입하기

목적 이전 질문의 응답 삽입하기
유형 참조
예제 질문 1(질문 코드 "Q00"): 어느 도시에 살고 계십니까?
질문 2(질문 코드 "Q01"): CITY에서 얼마나 오래 살았습니까?
해야 할 일: 두 번째 질문의 "CITY" 대신 첫 번째 질문의 응답을 사용합니다.
식 {QOO}
설명 Q00에 입력된 응답이 두 번째 질문의 Q00 필드를 대체합니다.
단계 질문 2 생성/편집
질문 텍스트 필드에 "{QOO}에서 얼마나 오래 살았습니까(년)?"를 입력합니다.

숨겨진 수식 질문을 사용하여 응답 자동 입력하기

문제: Q1과 Q2라는 두 개의 질문이 있다고 가정해 봅시다. Q1은 응답자의 나이를 묻습니다. Q2는 응답자를 세 그룹으로 나눕니다. 나이가 20세 미만, 나이가 20세, 나이가 20세 초과입니다. 따라서 Q2는 위 조건에 해당하는 값 "1", "2", "3"을 사용해야 합니다. 또한 Q2를 보이지 않게 만들어야 합니다(질문은 설문조사에 표시되지 않지만, 값은 "백그라운드 프로세스"를 통해 응답 테이블에 저장됩니다).

수식 질문 유형을 사용하여 데이터베이스 채우기:

  • 먼저 질문 코드가 Q1인 질문을 숫자 입력 질문으로 생성합니다.
  • 그런 다음 질문 코드가 Q2인 다른 질문을 수식 질문으로 생성합니다.
  • Q2의 "디스플레이 설정" 탭에서:
    • "이 질문 항상 숨기기" 필드를 "켜짐"으로 설정합니다.
    • "수식" 필드에 다음 식을 입력합니다.
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

플레이스홀더를 사용하여 요약 페이지 만들기

이 튜토리얼에서는 ExpressionScript 플레이스홀더를 사용하여 설문조사 끝에 모든 질문과 응답을 나열하는 개요를 만드는 방법을 보여 줍니다. 또한 이러한 개요를 응답한 질문으로만 제한하는 방법도 보여 줍니다.

예제는 여기에서 다운로드할 수 있습니다: 설문조사 플레이스홀더 설문조사 예제.


여기에서 사용되는 질문 유형:

1. 단일 선택 질문 / 단일 텍스트/숫자 질문

  • 목록 (드롭다운 메뉴)
  • 목록 (Radio) [L]
  • 예/아니오 [Y]
  • 장문 자유 서술 [T]
  • 짧은 자유 서술 [S]
  • 숫자 입력 [N]
  • 수식 [*]


2. 하위 질문이 있는 질문

  • 짧은 서술 여러 개 [Q]
  • 다수 답안 [M]
  • 배열 [F]
  • 정렬 (예/아니오/불확실) [C]
  • 배열(10점 척도) [B]


3. 척도가 2개인 질문

  • 배열 이중 척도 [1]


4. X 척도와 Y 척도가 있는 질문

  • 배열 (숫자) [:]


5. 질문 표시하기

  • 텍스트 디스플레이 [X]


이 간단한 예제에서 개요는 다음과 같은 단순한 목록입니다:

- 질문 텍스트: 사용자의 응답


단일 선택 질문 / 단일 텍스트/숫자 질문

다음 질문 유형에 대해서는 LimeSurvey가 단일 답변을 저장합니다:

  • 목록 (드롭다운 메뉴)
  • 목록 (Radio)
  • 해설있는 목록
  • 5점 척도
  • 예/아니오
  • 짧은 자유 서술
  • 장문 자유 서술
  • 대량 자유 서술
  • 숫자 입력
  • 수식
  • 날짜
  • 성별

질문의 질문 코드가 q1이라고 가정하면, 다음과 같이 질문 텍스트와 응답을 참조할 수 있습니다:

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

예:

- 나이가 어떻게 되십니까?: 25


해당 질문에 응답했는지 확인하려면 출력 부분을 IF 문으로 감쌀 수 있습니다:

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

이 식은 다음과 같이 "해석"됩니다: 질문 코드가 q1인 질문이 비어 있지 않으면 "- " 그리고 질문 텍스트 그리고 ": " 그리고 응답 텍스트를 출력합니다(join() 함수는 요소들을 하나의 새 문자열로 결합합니다). 그렇지 않으면 아무것도 출력하지 않습니다(""는 빈 문자열을 의미합니다).

하위 질문이 있는 질문

다음 질문 유형에 대해서는 LimeSurvey가 하위 질문을 사용합니다:

  • 짧은 서술 여러 개
  • 다수 답안
  • 해설있는 다중 선택
  • 배열
  • 배열 (5점 척도)
  • 배열(10점 척도)
  • 정렬 (예/아니오/불확실)
  • 배열 (증가, 동일, 감소)
  • 컬럼 별 배열

질문의 질문 코드가 q2이고 하위 질문이 SQ001, SQ002 등으로 번호가 매겨져 있다고 가정하면(번호는 LimeSurvey가 자동으로 지정), 다음과 같이 질문 텍스트와 응답을 참조할 수 있습니다:

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

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

다수 답안 질문의 경우, 선택된 하위 질문의 텍스트를 표시하는 대신 선택된 각 옵션에 Y를 표시하는 것이 좋습니다:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

현재는 하위 질문이 있는 질문의 질문 텍스트를 출력할 수 없습니다. 이 기능 요청을 참조하세요.


예제 1 (질문 유형이 다중 선택이라고 가정)

- 다음 자동차 브랜드를 알고 계십니까?

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


선택된 항목만 출력하려면 출력 내용에 IF 문을 사용하여 체크박스 값을 확인할 수 있습니다:

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


선택된 항목만 목록으로 출력하려면 listifop 함수를 사용하십시오. 예: Mercedes, Volvo

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


여기서  that.q2 는 q2의 모든 하위 질문으로 확장됩니다. 자세한 내용은 self, this 및 that을 참조하십시오.


예제 2 (질문 유형이 배열(10점 척도)이라고 가정)

- 아래 자동차 브랜드의 품질을 1=매우 나쁨에서 10=매우 좋음까지의 척도로 평가해 주십시오.

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


평가된 항목만 출력하려면 출력 내용에 IF 문을 사용하여 현재 하위 질문에 응답했는지 다음과 같이 확인할 수 있습니다:

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


예를 들어 8보다 큰 값으로 선택된 항목만 목록으로 출력하려면 listifop 함수를 사용하십시오. 예: Audi / Volvo

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


두 개의 척도가 있는 질문

이 내용은 이중 척도 질문 유형에만 적용됩니다.


다음 코드를 사용한다고 가정해 보겠습니다:

  • 질문 코드: q4
  • 하위 질문 코드: SQ001, SQ002, ...
  • 척도 1의 응답 코드: A1, A2, ...
  • 척도 2의 응답 코드: B1, B2, ...


특정 척도에서 특정 하위 질문의 결과를 참조하려면 QuestionCode . '_' . SubQuestionCode . '_' . ScaleID 형식을 사용해야 합니다. "ScaleID"는 첫 번째 척도에서는 0, 다른 척도에서는 1입니다!
세 번째 하위 질문과 두 번째 척도의 응답을 참조하는 예: q4_SQ003_1 - 질문 4, 하위 질문 3, 두 번째 척도.


두 척도 모두와 처음 두 하위 질문에 대한 결과를 출력해 보겠습니다:

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

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

하위 질문 텍스트를 출력하려면 플레이스홀더에 척도 ID를 추가해야 합니다(두 척도의 텍스트는 동일합니다). 따라서 {q4_SQ001.question} 대신 {q4_SQ001_0.question} 또는 {q4_SQ001_1.question}을 사용해야 합니다.

응답이 하나 이상 있는 하위 질문의 결과만 내보내거나 표시하려면 각 하위 질문에 다음 구문을 사용하십시오:

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

X 척도와 Y 척도가 있는 질문

이 내용은 (앞에서 본 것처럼 각 행뿐만 아니라) 모든 셀에 응답할 수 있는 모든 매트릭스 질문에 적용됩니다.

  • 배열 (텍스트)
  • 배열 (숫자)


사용하는 코드는 다음과 같다고 가정합니다.

  • 질문 코드: q5
  • 하위 질문 코드: SQ001, SQ002, ...
  • 응답 코드: A1, A2, ...

특정 열의 특정 하위 질문 결과를 참조하려면 QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode 형식을 사용해야 합니다. 예를 들어 세 번째 하위 질문과 두 번째 열의 응답을 참조하려면 q5_SQ003_A2를 사용합니다.

처음 두 하위 질문의 1~3열 결과를 출력해 보겠습니다.

- {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}


이러한 질문 유형에서는 각 셀(X축과 Y축의 조합)이 하나의 응답 옵션에 해당하므로 각 셀마다 데이터가 있는지 확인해야 합니다. 예:

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


하위 질문 텍스트를 출력하려면 플레이스홀더에 응답 코드를 추가해야 합니다(텍스트는 모든 응답 옵션에서 동일합니다). 따라서 {q5_SQ001.question} 대신 {q5_SQ001_A1.question} 또는 {q5_SQ001_A2.question}을 사용해야 합니다.

이전 질문의 응답이 비어 있으면 질문 숨기기

목적 이전 질문의 응답이 비어 있으면 질문 숨기기
유형 질문 관련성
예시 질문 1: 질문 코드 "name", 질문 텍스트 "이름이 무엇입니까?"
질문 2: 질문 텍스트 "{name}님, 나이가 어떻게 되십니까?"
할 일: 질문 1의 텍스트 필드가 비어 있으면 질문 2 숨기기
표현식 !is_empty(name)
설명 is_empty()는 변수가 비어 있는 것으로 간주되는지 확인합니다. "!"는 결과를 부정합니다. 따라서 변수가 비어 있지 않으면 표현식이 참이 되어 질문이 표시됩니다.
단계 질문 2 생성/편집
"관련성 수식"에 "!is_empty(name)" 입력
샘플 파일 Hide_question_if_empty_question_group.zip


이전 질문의 응답이 예 또는 아니요이면 질문 그룹 숨기기

목적 이전 질문의 응답이 예 또는 아니요이면 질문 그룹 숨기기
유형 질문 그룹 관련성
예시 1페이지, 질문 그룹 1, 질문 1: 질문 코드 "PET", 질문 텍스트 "반려동물이 있습니까?" -예 -아니요
2페이지, 질문 그룹 2: 제목 "반려동물에 대하여"
할 일: 질문 1의 응답이 예/아니요인지에 따라 질문 그룹 2 표시/숨기기
표현식 PET == "Y"
설명 PET는 응답을 확인하려는 질문의 질문 코드입니다. 접미사를 사용하지 않으면 EM은 "Qcode.code"를 사용합니다. 따라서 PET 질문의 응답 코드를 값 "Y"와 비교합니다. 참여자가 "예"라고 응답하면 표현식이 참이 되어 "반려동물에 대하여" 질문 그룹이 표시됩니다.
단계 질문 그룹 2 생성/편집
"관련성 수식"에 "PET == "Y"" 입력
샘플 파일 Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


다중 응답 입력 질문 필드의 값 표시

목적 다중 응답 입력 질문 필드의 값 표시
유형 참조
예시 질문 1: 질문 코드 "AskChildAge", 질문 텍스트 "자녀의 나이가 어떻게 되십니까?". 하위 질문 코드 -Child1 -Child2 -Child3 - ChildXXX
질문 2: 질문 코드 "ReportChildAge", 질문 텍스트 "첫째 자녀에 대하여: - CHILD1은(는) AGE1세입니다."
표현식 {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
설명 다음 질문에서 하위 질문의 값을 사용하려고 합니다. 하위 질문의 값은 다음과 같은 표현식으로 접근할 수 있습니다: QcodeQuestion_QcodeSubquestion.value
단계 두 번째 질문 생성/편집
설명에 다음 텍스트 입력: "첫째 자녀에 대하여: - {AskChildAge_Child1.question}은(는) {AskChildAge_Child1.value}세입니다."
샘플 파일 Display_value_of_a_multiple_answer_input_question_field.zip

"배열 (숫자) 체크박스" 질문에서 행당 선택된 상자 수 유효성 검사

목적 행당 선택된 상자 수 유효성 검사
유형 유효성 검사
예시 "배열 (숫자) (체크박스 레이아웃)" 유형의 질문
표현식 sum(...)
설명 (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)는 A행에서 체크박스가 최소 X개 선택되었는지 확인합니다.
세 개의 행(A, B, C)을 모두 확인하려면 "&&"를 사용하여 표현식을 연결할 수 있습니다.
(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)
단계 "배열 (숫자) (체크박스 레이아웃)" 유형의 질문 생성/편집.
위의 표현식을 고급 질문 설정의 "질문 유효성 방정식"에 입력합니다(변수 이름을 조정해야 할 수 있습니다!).
샘플 파일 Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

두 날짜 간의 차이 계산

목적 두 날짜 간의 차이 계산
유형 관련성 / 수식 질문 유형 / 유효성 검사
예시 질문 1 (날짜/시간, 코드: DOB): 생년월일이 어떻게 되십니까?
질문 2 (날짜/시간, 코드: datetoday): 오늘 날짜는 며칠입니까?
질문 3 (boilerplate): 태어난 지 XXXX일이 되었습니다.
할 일: 질문 1에서 입력한 날짜와 질문 2 사이의 일수를 계산하여 표시
표현식 {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
설명 strtotime은 1970년 1월 1일부터 주어진 날짜까지의 초 수를 계산합니다. 위 표현식은 주어진 두 날짜 사이의 초 수를 계산합니다. "/60/60/24"는 초 수를 일수로 변환합니다.
"datetoday"를 묻는 대신 strtotime('now') 또는 간단히 time()을 사용할 수도 있습니다. 이 함수는 1970년 1월부터 현재(즉, 설문조사를 진행한 시간)까지의 초 수를 바로 반환합니다. 따라서 {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} 수식을 사용하면 사람의 나이(연 단위)를 빠르게 알 수 있습니다. 어떤 경우든 날짜를 올바른 형식으로 입력하는 것이 중요합니다. 그렇지 않으면 strtotime() 함수가 제대로 작동하지 않습니다.
단계 날짜 질문 두 개(생년월일과 오늘 날짜용)와 boilerplate 질문 하나를 생성합니다.
boilerplate 질문의 질문 텍스트에 다음을 입력합니다: "{datetoday}에 귀하는 태어난 지 {(strtotime(today)-strtotime(dob))/60/60/24}일이 되었습니다."

참고: strtotime 함수는 많은 날짜 형식을 처리할 수 있지만 모든 형식을 처리하지는 못합니다. 문제가 발생하면 설문조사의 날짜 형식을 mm/dd/yyyy, yyyy-mm-dd 또는 dd.mm.yyyy로 설정하십시오.
샘플 파일 Date_difference.zip

평가에 ExpressionScript 사용

다음은 배열 유형 질문과 평가에서 ExpressionScript를 사용하는 또 다른 예시입니다.</ br>

배열 질문이 2개 있고 계산 결과 데이터를 데이터베이스에 저장하려 한다고 가정해 보겠습니다. 방법은 간단합니다. 배열을 생성하고 테스트한 다음, 더미 응답을 제출하여 제대로 작동하는지, 완료 페이지에 결과가 표시되는지 확인하면 됩니다.


구현 세부 정보:

  • 수식 유형의 질문 추가
  • Q1이 배열 질문 코드이고 Q2가 두 번째 배열 질문 코드라고 가정하고 다음 줄을 추가합니다.
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

SQ001은 모든 하위 질문의 기본 코드입니다. 하위 질문 코드를 변경한 경우 위의 수식을 그에 맞게 조정하십시오.


배열에서 em_validation_q 사용

질문 유효성 방정식을 사용하면 어떤 조건으로든 배열을 제어할 수 있습니다.


구현 세부 정보:

  • 첫 번째 배열: 단일 선택 배열
    • 질문 코드는 ARRAY
    • 하위 질문 코드는 SQ01, SQ02, SQ03, SQ04
    • 전체 질문 유효성 방정식을 업데이트하고 다음을 입력합니다.
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • 두 번째 배열: 텍스트 배열
    • 질문 코드는 ARRAYTEXT
    • Y축의 하위 질문 코드는 SY01, SY02, SY03, SY04
    • 전체 질문 유효성 방정식을 업데이트하고 다음을 입력합니다.
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)