ExpressionScriptサンプルアンケート
From LimeSurvey Manual
はじめに
ExpressionScriptの使い方を学ぶ最も良い方法は、実際の例を試して、必要に応じて修正することです。
次のサンプルアンケートは、EMを使ってアンケートを強化する方法を確認し、テストするためのものです。これらのアンケートは、ディストリビューションの/docs/demosurveysフォルダーにあります。
出現条件、文言調整、式
概要
次の例では、回答者のBMI(体格指数)を計算します。 この例で使われている機能は以下のとおりです。
EM機能のデモ
- 出現条件 - 強力な条件付きロジックのサポート。
- パイピング/文言調整 - 回答と質問のメタデータをパイピングまたは調整する機能を提供します。
- 動的文言調整 - 質問に答えると、ページ上のレポートが変更されます。
- 条件付き文言調整 - if()ステートメントを使用した文やレポート内の条件付き文言調整
- 式 - 計算が非表示の場合でも、計算を実行して結果をデータベースに保存できる新しい質問タイプ。
- 条件付き検証 - 最小許容値などの検証基準は、式などに基づいて、条件付きにすることができます。
スクリーンショット
この例では、体重と身長から、やせ気味、標準的、太り気味、肥満を判断する体格指数を計算します。最初は、次の4つの必須質問が表示されます。
情報を入力すると(メートル法またはそれ以外の単位を使用するかどうかも選択)、入力した内容の要約と体重の状態を示すレポートが表示されます。
ここでは、メートル法以外の単位を使用して、結果がどのように動的に変化するかを示す例を紹介します。
カスタムJavaScriptを使わず、データを必要に応じてメートル法に変換し、メートル法で身長、体重、BMI、および体重の状態をデータベースに格納する式タイプの質問があります。
次の例では、レポート内で数学およびその他の関数を使用する方法を確認できます。これは、データを入力する前のページの様子です。未入力または数値以外が入力されている場合に"NaN"または"ゼロ除算エラー"を表示するのではなく、空白のセルを表示するための条件付きロジックがあります。
数字が入力されると、ページ上のレポートが変化して、実行した計算とその結果が表示されます。
このサンプルアンケートには他にも多くの例があります。たとえば、次のスクリーンショットでは、表示条件が動的に変化する入力ページの1例です。ヘルプテキストが示すように、さまざまな年齢、特に矛盾する回答の組み合わせを試し、下部に表示される面白いメッセージを確認してください。また、複数の子供がいると回答した場合は、"X人の子供と楽しく過ごしてください」ではなく、"Xの子供たちと楽しく過ごしてください"というメッセージが表示されることに注目してください。性別や数に応じて文言を調整できるだけでなく、簡単に動詞を活用させたり、性別や数に基づいて名詞を変化させたりすることもできます。
ダウンロード
サンプルアンケートにアクセスするには、LS3_em_tailoring.zipリンクをクリックしてください。
サンプル調査
概要
これは、世帯に何人の人がいるかを尋ねる調査の例です。
グループレベルの出現条件を使って質問の"ループ"を簡単に実装する例を示しています。Person 1のグループを作成した後、そのグループをエクスポートします。SGQAコードの代わりにp1_nameのようなqcode変数名を使用していたので、テキストエディタを使ってグループを何度も素早く編集して再インポートできます(例えば、すべての変数に一意の変数名があり、グループレベルのロジックが正しくなるよう、繰り返しグループを編集して再インポートするのに約10秒かかります)。
質問のコピー機能もありますが、上記のオプションとほど速くはできません。
これは、アンケートが本当に終了するまで(たとえば、必要なすべてのグループが完了するまで)、終了メッセージが表示されないようにする方法も示しています。
EM機能のデモ
- グループレベルの出現条件 - フォローアップグループ(Person 1〜5)は、指定された同居人の数までしか表示されません。
- 文言調整 - 最終レポートでは、同居者それぞれの統計データを要約します。
- 質問の段階的表示 - グループモードでもオールインワンモードでも、後続の質問は、前の質問に回答するまで表示されません。
スクリーンショット
アンケートから、指定された数の同居者の統計情報が表示されるよう調整されたレポートが生成されます。
一度にすべての質問を表示するモードに切り替えると、インデックスによって質問が調整されていることがわかります。回答者がその人が女性であるとしたので、"彼女の名前は何ですか"と尋ねます。 そして、"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 - 質問に対する全回答の合計と一致すべき数値
- 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機能のデモ
また、コアの質問で回答された質問の数を動的にレポートします。
スクリーンショット
可視行の数を変更すると、合計が動的に変更されます。サブ質問を出現条件を満たさないとマークしても、値はクリアされませんが、いかなる式にも影響しません。
最初の質問"どの行が下に表示されるべきか"について、"5番目のサブ質問"をチェックするとどうなるか確認してください。 2番目の"Enter some numbers(何か数字を入力してください)"という質問の合計が5になっていることに注意してください。その質問のサブ質問5の値はまだ14です(ここで、サブ質問5のチェックを外すと、14の値が再び表示されます)。その値は現在のところ出現条件を満たさないので合計に寄与しません。送信時に出現していないとき項目のデータはすべてクリアされますが(データベースではNULLに設定されます)、ユーザーが回答を変更する必要がある場合に備えて、ページ内で保持されています。
ダウンロード
この例をダウンロードするにはここをクリックしてください。 ls2_subquestion_relevance.lss
カンマを小数点として使用する
概要
ExpressionScriptは、有効な数値のみを数値フィールドに入力できるようにします。無効な数値を入力すると、何かが間違っていることが警告されます(fruityテーマの場合、質問全体が「赤色」になります)。
数値は常に、データベース内の小数点記号としてピリオドを使用したものに変換されることに注意してください。これにより、統計分析が適切に機能します。
小数点記号を変更するには、設定タブにあるテキストエレメントオプションにアクセスし、小数点で設定してください。
小数点記号を使用する質問の種類
- 数値入力 [N]
- 複数数値入力 [K]
- 配列(数値) [:]
- 配列(テキスト) [;]でnumbers_only属性を使用する場合
- リスト(ラジオ) [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になります。2番目のページのランダム化された質問は、Q2、Q5、Q8になります。
このアンケートを初めてテストしたときにランダム化が行われました。
2回目にアンケートをテストしたときは、ランダム化の結果が異なります。
しかし、(アンケートを再開せずに)フランス語に切り替えても、ランダム化された順序はそのまま残りました。
ダウンロード
上記の例をダウンロードするには、次のリンクをクリックしてください。 Randomization_Group_Test.lss
グループごとにランダムに質問する
概要
このアンケートでは、グループごとに質問をランダムに表示するようにアンケートを設定する方法を示します。アンケートの中にはそれぞれ6つの質問からなる5つのグループがあります。当初、グループ0には、ask1-ask5と呼ばれる隠された式タイプの質問が5つ設定されています。それぞれの質問テキストフィールドには{floor(rand(1,6.9999))}という値が設定されています。つまり、ask1-ask5変数の値はそれぞれ1〜6になります。次に、グループ内の各質問には"ask1==N"(Nはグループ内のN番目の質問を指す)のような出現条件の式があります(グループ1の3番目の質問は出現条件の式"ask1==3"を持つ)。
このアンケートは、1ページにすべての質問を配置するモード、グループごとにページを変えるモード、質問ごとにページを変えるモードそれぞれで同じように機能します。ランダム化は最初のグループに設定され、そのグループは実際は隠されており(ask1-ask5の質問のすべてが隠されているため)、ランダム化は回答者ごとに同じままです。別の回答者は、これとは異なるランダム化が実行されます。
機能のデモ
- 式質問タイプ
- ランダム化関数
- 条件(if)関数
スクリーンショット
これはGroup0で、式質問タイプを使用して、各グループ(4つの質問のみを持つ最後のグループを除く)ごとに1から6までのランダム値を選択します。"if()"関数は、まずask1がすでに設定されているかどうかをチェックし、そうであれば、その値を使用することに注意してください。値が設定されていない場合は、ランダム値を使用してask1の値を設定します。
このグループは、Group0の変数(ask4)を使用して、4つめのグループ内でどの質問が表示されるかを制御する方法を示しています。
ダウンロード
このアンケートの例をダウンロードするには、こちらをクリックしてください。 Random questions within a group survey example
グループ(質問のサブセット)内の特定の数の質問をランダムに質問する
概要
このアンケートでは、グループ内の質問のサブセットからランダムに尋ねる方法を示します。たとえば、グループ内にある10の質問のうち5つをランダムに質問します。
アンケートには10の質問を含む1つのグループがあります。すべての質問には同じランダム化グループ名が割り当てられます。これにより、ページの読み込み時にランダムな順序で表示されます。各質問には、グループ内の他のすべての質問の"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
以下同様。
機能のデモ
ダウンロード
この例をダウンロードするには、次のリンクをクリックしてください。 Random 5 out of 10 survey example
ユーザが入力した商品リストの順位付け
概要
以下の例は、ユーザーが関心を持つであろう一連の製品をリストとして提示し、それらの製品を評価(順位付け)させる方法を示しています。
ES機能のデモ
- 回答の文言調整 - 商品を評価するとき、ラベルは前の複数選択質問のコメントフィールドから引用します
- 尺度の調整 - 尺度の見出しのような高度な質問オプションの文言の調整できます。
スクリーンショット
この画像は、前の質問で製品1、3、5が選択されているとき、array_filter属性を使用してその3つしか表示されないことを示しています。さらに、2番目の質問の行ラベルは、製品番号(コメントフィールドに何も入力されていない場合)またはコメントフィールドの内容になっています。
この画像は、質問文がどのように調整されるかを示しています。
これは、その質問に対するロジックファイルの表示です。これにより、条件付きロジックが必要に応じて動作することを確認できます(構文エラーがないかどうかなど)。
次の画像には、5点の評価尺度(オプション1-5)、尺度のタイトル、および評価したい製品を指定したグループが表示されています。最後の質問は、配列の質問の各々を調整できることを示しています。
次の画像は、最後の質問の論理ファイルビューを示しています。ご覧のように、サブ質問、回答、尺度のヘッダーを調整することができます。
ダウンロード
この例をダウンロードするには、次のリンクをクリックしてください。Rating user-entered list of products survey example