Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:survey:quota [20.03.2021 13:55] – [Technische Umsetzung (unverbundene Quoten)] sophia.schauerde:survey:quota [09.01.2023 22:25] (aktuell) – [Minimal-Quotierung] admin
Zeile 8: Zeile 8:
  
  
-===== Funktionsweise=====+===== Minimal-Quotierung =====
  
-Die Quotierung erfolgt in folgenden Schritten:+Mitunter soll eine Erhebung mit dem Erreichen einer bestimmten Anzahl von Fällen beendet werden. 
 + 
 +Legen Sie im Fragenkatalog einen Text an, welcher nach Erreichen der Fallzahl angezeigt werden soll und fügen Sie auf der ersten Seite des Fragebogens ganz oben folgenden PHP-Code ein. Der Beispiel-Code geht davon aus, dass der Text die Kennung "QS01" hat und die Erhebung nach 250 ausgefüllten Fragebögen enden soll. 
 + 
 +<code php> 
 +// Abgeschlossene Fragebögen zählen 
 +$finished = statistic('count', 'FINISHED'); 
 +// Filter zum Quotenstopp 
 +if ($finished >= 250) { 
 +  // Text anzeigen 
 +  text('QS01'); 
 +  // Weiter-Knopf ausblenden 
 +  buttonHide(); 
 +  // Keine weiteren Inhalte dieser Seite zeigen 
 +  pageStop(); 
 +
 +</code> 
 + 
 +**Hinweis:** Dieser PHP-Code zähle alle Fälle mit MODE "interview" und FINISHED 1. Dies können auch Fälle sein, bei denen mittels ''redirect()'' ein Screenout erfolgt. Im Debug-Modus werden die Fälle unabhängig von der Variable MODE gezählt. 
 + 
 +Setzen Sie die Zählung abgeschlossener Fälle mittels ''%%'FINISHED'%%'' __nicht__ zusätzlich zu einer differenzierteren Quotierung ein. Fälle, die aufgrund eines Quota-Out mittels ''redirect()'' abgewiesen wurden, werden von ''statistic('count', 'FINISHED')'' als abgeschlossene Fälle gezählt. In solchen Fällen können Sie stattdessen mit der Häufigkeit von LASTPAGE arbeiten. Wenn der ''redirect()''-Befehl auf Seite 25 steht und alle Befragten vorher Seite 24 beantworten, könnte der Code wie folgt aussehen. 
 + 
 +<code php> 
 +// Relevante Fragebögen zählen 
 +$finished = statistic('count', 'LASTPAGE', 24); 
 +// Filter zum Quotenstopp 
 +// (weiter wie oben) 
 +</code> 
 + 
 + 
 +==== Filterung ==== 
 + 
 +Falls Sie sicherstellen möchten, dass nur Fälle mit bestimmten Eigenschaften gezählt werden, legen Sie eine [[:de:create:questions:internal|interne Variable]] an (im folgenden Beispiel "QS02_01") und geben Sie dieser Variable nur dann den Wert 2, wenn ein Fall die gewünschten Kriterien erfüllt. Wenn zum Beispiel der folgende PHP-Code auf der vorletzten Seite des Fragebogens platziert wird, dann werden nur Fälle gezählt, welche die vorletzte Seite erreichen und bis dorthin mindestens 10 Minuten (600 Sekunden) benötigt haben. 
 + 
 +<code php> 
 +$time = caseTime('hitherto'); 
 +if ($time >= 600) { 
 +  put('QS02_01', 2); 
 +
 +</code> 
 + 
 +Der eigentliche Quotestopp bezieht sich dann nicht mehr auf die Variable "FINISHED", sondern auf die interne Variable. Auf der ersten Seite des Fragebogens würde dann z.B. der folgende PHP-Code platziert. 
 + 
 +<code php> 
 +// Gültige Fragebögen zählen 
 +$valid = statistic('count', 'QS02_01', 2); 
 +// Filter wie oben 
 +if ($valid >= 250) { 
 +  text('QS01'); 
 +  buttonHide(); 
 +  pageStop(); 
 +
 +</code> 
 + 
 + 
 +===== Funktionsweise Quotierung ===== 
 + 
 +Die Quotierung nach demografischen Gruppen erfolgt in folgenden Schritten:
  
   - Abfrage der Quoten-Merkmale einer Person mittels ''[[:de:create:functions:value]]''.   - Abfrage der Quoten-Merkmale einer Person mittels ''[[:de:create:functions:value]]''.
Zeile 240: Zeile 297:
 redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%'); redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%');
 </code> </code>
 +
 +
 +===== Fehlersuche =====
 +
 +Die Implementierung einer Quotierung ist im Moment nicht ganz trivial (Optimierung in Arbeit) -- und es schleichen sich immer mal wieder Fehler im Code ein. Zum Beispiel werden Fälle abgewiesen, obwohl die Quoten noch nicht erfüllt sind.
 +
 +Wir setzen voraus, dass Sie mir der Funktion der Debug-Information (siehe [[:de:create:debugging]]) vertraut sind.
 +
 +Damit alle für die Fehlersuche notwendigen Informationen angezeigt werden, sind zwei Modifikationen sehr hilfreich.
 +
 +==== (1) Redirect zweitweise deaktivieren ====
 +
 +Deaktivieren Sie die Redirects, sodass die Debug-Informationen überhaupt angezeigt werden. Sie können das ''redirect()'' mit zwei Schrägstrichen (''%%//%%'') auskommentieren und damit deaktivieren. Ergänzen Sie stattdessen ein ''[[:de:create:functions:pagestop]]'', damit auf der Seite keine weiteren Inhalte ausgeführt werden. Mittels ''html()'' können Sie auch noch eine kurze Information anzeigen. Wenn Ihr IF-Filter also im Produktiv-Betrieb wie folgt aussieht...
 +
 +<code php>
 +// Quotenstopp
 +if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) {
 +  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
 +}
 +</code>
 +
 +... dann ändern Sie den Code zur Fehlersuche wie folgt.
 +
 +<code php>
 +// Quotenstopp
 +if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) {
 +  // redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
 +  html('<p>Redirect ausgelöst</p>');
 +  pageStop();
 +}
 +</code>
 +
 +==== (2) Quoten-Zählung anzeigen ====
 +
 +In der Debug-Information sehen Sie beriets, welche Werte ''statistic()'' liefert. Aber mit der Funktion ''[[:de:create:functions:debug]]'' können Sie auch anzeigen, welche Werte Ihre Quotierung (das Array mit den Quoten) für den aktuellen Fall liefert.
 +
 +Ergänzen Sie einfach für alle Filter-relevanten Variablen eine Zeile ''debug()''. Für den obigen Filter würde das dann wie folgt aussehen.
 +
 +<code php>
 +// Zusätze Informationen anzeigen
 +debug($casesAge);
 +debug($maxPerAge);
 +debug($casesGender);
 +debug($maxPerGender);
 +
 +// Quotenstopp
 +if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) {
 +  // redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
 +  html('<p>Redirect ausgelöst</p>');
 +  pageStop();
 +}
 +</code>
 +
 +Damit können Sie unmittelbar nachvollziehen, warum ein Redirect ausgelöst wird. Wenn Sie dann noch nicht nachvollziehen können, warum diese (evtl. falschen) Werte wemittelt werden, lassen Sie sich weitere Variablen anzeigen, z.B. dort wo die Quotenlimits ausgelesen werden. Der Code oben im Beispiel lautet wie folgt.
 +
 +<code php>
 +// Auslesen der Quoten für die angegeben Merkmale
 +$maxPerAge    = $quotaAge[$ageGroup];
 +$maxPerGender = $quotaGender[$gender];
 +</code>
 +
 +Wenn z.B. unklar ist, woher der Wert für ''$maxPerAge'' kommt, kann man sich das Array und die Alterskategorie anzeigen lassen.
 +
 +<code php>
 +// Auslesen der Quoten für die angegeben Merkmale
 +$maxPerAge    = $quotaAge[$ageGroup];
 +$maxPerGender = $quotaGender[$gender];
 +
 +// Zusätzliche Informationen anzeigen
 +debug($ageGroup);
 +debug($quotaAge);
 +debug($maxPerAge);
 +</code>
 +
 +Diese Informationen helfen auch im [[https://support.soscisurvey.de/|Online-Support]], wenn Sie Unterstützung bei der Implementierung Ihrer Filter benötigen.
de/survey/quota.1616244953.txt.gz · Zuletzt geändert: 20.03.2021 13:55 von sophia.schauer
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki