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 [09.09.2022 21:11] – [Funktionsweise Quotierung] adminde:survey:quota [23.06.2025 14:15] (aktuell) – [Zählung und Screenout] admin
Zeile 1: Zeile 1:
 ====== Quotierung ====== ====== Quotierung ======
  
-Bei der [[panels|Zusammenarbeit mit Panel-Anbietern]] werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: Liegen für eine demografische Gruppe also genug Fragebögen vor, werden weitere Teilnehmer dieser Gruppe an eine Quotafull-Adresse des Panel-Anbieters zurück geschickt.+Bei der Zusammenarbeit mit Panel-Anbietern werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: Liegen für eine demografische Gruppe also genug Fragebögen vor, werden weitere Teilnehmer dieser Gruppe an eine QuotaFull-Adresse des Panel-Anbieters zurück geschickt.
  
 **Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt. **Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt.
  
-**Tipp:** Verwenden Sie den Debug-Modus und sehen Sie die Debug-Informationen an, um die Funktion des Quotenstopps zu prüfen und wenn dieser im Test (z.b. mit sehr kleinen Quoten) nicht sofort funktioniert ([[:de:create:filter-solving]]).+===== Übersicht =====
  
 +  - Erstellen Sie einen Baustein "Panel-Redirects" und tragen Sie dort die Redirect-URLs ein, die Sie vom Panel-Anbieter bekommen haben, mindestens eine URL für //QuotaFull// und eine für //Complete// ([[:de:create:tasks:panel-redirects]]).
 +  - Falls Sie die Merkmale für die Quotierung zunächst umkodieren müssen (z.B. eine offene Eingabe des Alters in Kategorien umkodieren), erstellen Sie einen Baustein "Antworten unmkodieren" und tragen Sie dort die Original-Variablen und die Regeln für das Umkodieren ein.
 +  - Erstellen Sie einen Baustein "Quotierung", wählen Sie dort die Merkmale aus, welche für die Quotierung herangezogen werden sollen und tragen Sie nach dem Speichern die Quoten pro Quota-Gruppe ein. Lassen Sie Die Anzahl frei, wenn Personen in der entsprechenden Quota-Gruppe direkt abgewiesen werden sollen (//Screenout//).
 +  - Ziehen Sie den Baustein "Panel-Redirects" unter **Fragebogen zusammenstellen** auf die erste Seite des Fragebogens, den Baustein "Quotierung" (ggf. auch Bausteine zum Umkodieren der Antworten) auf die früheste Seite, auf welcher Teilnehmer:innen abgewiesen werden sollen, wenn die Quota-Gruppe voll ist.
 +  - Fügen Sie vor der "Letzten Seite" des Fragebogens eine zusätzliche Seite ein, ziehen Sie ein Element "PHP-Code" in die Seite und schreiben Sie den folgenden PHP-Code hinein: ''%%setStatus('complete');%%''
 +  - Veröffentlichen Sie den Fragebogen ([[:de:survey:publish]]) und öffnen Sie den anfangs erstellen "Panel-Redirects" Baustein. Sehen Sie in diesem Baustein nach, wie der "Link für das Panel" lautet (inkl. der Parameter für die Panel-ID) und teilen Sie dem Panel-Anbieter diesen Link mit.
 +  - Öffnen Sie den Baustein zur Quotierung, setzen Sie dort die Zählung für die Quoten ggf. auf 0 zurück (rechte Spalte). In diesem Baustein können Sie im Lauf der Erhebung auch nachsehen, wie viele Personen pro Quota-Gruppe den Fragebogen bereits bearbeitet haben.
  
-===== Minimal-Quotierung =====+**Wichtig:** Der Screenout für ungeeignete Teilnehmer:innen funktioniert nur dann, wenn Sie in den "Panel-Redirects" eine Screenout-URL eingetragen oder einen Text für den Screenout ausgewählt haben.
  
-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.+===== Zählung und Screenout =====
  
-<code php> +Wenn Ihre Abfrage des Quoten-Merkmals eine Option "keine Antwort" erlaubtdann können Sie im Quotierungs-Baustein auch dafür eine Anzahl eintragen. 
-// 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 "interviewund FINISHED 1.  Dies können auch Fälle seinbei denen mittels ''redirect()'' ein Screenout erfolgtIm Debug-Modus werden die Fälle unabhängig von der Variable MODE gezählt.+  Wenn Sie eine Zahl eintragen, kann die entsprechende Anzahl Teilnehmer:innen, die "keine Antwortauswählen, teilnehmen. 
 +  * Wenn Sie keine Zahl eintragendann erfolgt ein Screenout. Das heißt, es wird der Screenout-Redirect verwendet, der im [[:de:create:tasks:panel-redirects|Panel-Redirects]]-Baustein angegeben wurde oder der Screenout-Text gezeigt, der dort ausgewählt wurde.
  
-==== Filterung ====+Für die Quotierung gezählt werden alle Fälle, bei denen (a) der Quotierungs-Baustein verwendet wurde und (b) die den Status (''STATUS'') COMPLETE oder FINISHED (und keinen ''STATUS'') haben.
  
-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 wirddann werden nur Fälle gezählt, welche die vorletzte Seite erreichen und bis dorthin mindestens 10 Minuten (600 Sekunden) benötigt haben.+  * Wenn Sie in unterschiedlichen Fragebogen separate Quote zählen möchten, dann legen Sie für jeden Fragebogen einen eigenen Baustein "Quotierungan. 
 +  * Falls Sie die Quotierung nachträglich einfügen, werden nur die Fälle ab diesem Zeitpunkt gezählt - passen Sie die Zählung im Baustein bei Bedarf manuell an.
  
-<code php> +Wenn Sie mehrere Fragebögen mittels [[:de:create:multilevel]] oder ''[[:de:create:functions:gotoquestionnaire]]'' verknüpfensind die "Panel-Redirects" und die "Quotierung" nur einmal erforderlich, üblicherweise im übergeordneten/ersten Fragebogen. Der Aufruf von ''setStatus()'' funktioniert dann auch in einem unter-/nachgeordneten Fragebogen.
-$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> 
  
 +===== Unabhängige und verbundene Quoten =====
  
-===== Funktionsweise Quotierung =====+Wenn Sie mehr als ein Merkmal zur Quotierung heranziehen, gibt es zwei Möglichkeiten: Sie können entweder für jedes Merkmal getrennte (unabhängige) Quoten definieren oder Sie können für alle möglichen Kombinationen aus den Ausprägungen der beiden Merkmale Quoten definieren (verbundene Quoten).
  
-Die Quotierung nach demografischen Gruppen erfolgt in folgenden Schritten:+Wenn Sie in dem Baustein "Quotierung" mehrere Merkmale definieren, werden verbundene Quoten überprüft.
  
-  - Abfrage der Quoten-Merkmale einer Person mittels ''[[:de:create:functions:value]]''. +Wenn Sie mehrere Bausteine "Quotierung" erstellen, und darin jeweils ein Merkmal auswählen, werden die Quoten der Merkmale unabhängig voneinander überprüftIn dem Fall platzieren Sie unter **Fragebogen zusammenstellen** alle Quotierungs-Bausteine (einen pro Merkmal) im Fragebogen.
-  Zählung, wie viele Personen mit dieser Merkmalsausprägung bzw. mit dieser Kombination von Merkmalsausprägungen bereits befragt wurden, mittels ''[[:de:create:functions:statistic]]''+
-  - Vergleich der Zählung mit einer Quotentabelle, wie viele Personen pro demografischer Zelle benötigt werden. +
-  - Abweisen von Personen, wenn für eine demografische Zelle bereits ausreichend Fälle vorliegen, mittels ''[[:de:create:functions:redirect]]''.+
  
-Mit "demografische Zelle" oder "demografische Gruppe" ist jeweils eine Kombination der zu quotierenden Merkmale gemeint (z.B. "männliche Teilnehmer zwischen 15 und 25 Jahre"wenn Alter und Geschlecht quotiert werden).+**Zur Orientierung:** Bei zwei Merkmalen ist die verbundene Quotierung in aller Regel sinnvoll, bei drei oder mehr Merkmalen sind verbundene Quoten eventuell nur schwer zu erfüllenKlären sie mit dem Panel-Anbieter vorabwas Sie brauchen und wofür Sie zahlen.
  
-Prinzipiell kann man unverbundene und verbundenen Quoten prüfen. Bei der unverbundenen Quotierung werden die Merkmale einzeln nacheinander geprüft ("Liegen schon genug Fragebögen von männlichen Teilnehmern vor?" "Liegen schon genug Fragebögen von jungen Teilnehmern vor?"). Hier werden die Randsummen der Verteilung überprüft. Entsprechend wäre es bei der unverbundenen Quotierung möglich, die Quoten mit jungen Frauen und alten Männer zu füllen -- ganz ohne junge Männer.+===== Vollständigkeitsprüfung =====
  
-Bei der verbundenen Quotierung werden die demografischen Zellen überprüft ("Liegen schon genug Fragebögen von jungen männlichen Teilnehmen vor?"). Die verbundene Quotierung ist damit weniger anfällig für systematische Verzerrungen (Konfundierung zwischen den demografischen Merkmalen-- allerdings werden auch mehr potenzielle Teilnehmer abgewiesen.+Standardmäßig werden Fälle für die Quotierung gezählt, wenn der Befehl ''%%setStatus('complete')%%'' aufgerufen wird, also am Ende des Interviews.
  
-Beim Zusammenspiel von ''statistic()'' und ''redirect()'' zu beachtenDer Befehl ''redirect()'' markiert die Fragebögen von abgewiesenen Teilnehmern als "abgeschlossen" (FINISHED=1)sodass sie von ''statistic()'' gezählt werden. Um falsche Zählungen zu vermeidenwerden nicht direkt die Variablen gezählt, welche im Fragebogen abgefragt wurden: Stattdessen werden beim Complete-Redirect die Quotenmerkmale mittels ''[[:de:create:functions:put]]'' in [[:de:create:questions:internal|interne Variablen]] kopiert, die dann gezählt werden könnenFür die Quotierung sind demnach 2 getrennte PHP-Codes erforderlich.+Wenn viele Teilnehmer:innen den Fragebogen gleichzeitig ausfüllenkann es passieren, dass zunächst alle zugelassen werden, weil die Quoten ja noch nicht gezählt wurdenund die Quoten überschritten werden, wenn die Personen das Ende des Fragebogens erreichenAllerdings haben die Panel-Anbieter normalerweise genug Erfahrung, um solche Situationen zu vermeiden.
  
-  - Nach Abfrage der Quotenmerkmale (auf der darauf folgenden Seite) wird die vom Teilnehmer angegeben Ausprägung gegen die Anzahl vorhandener Fälle geprüft. 
-  - Direkt vor dem Complete-Redirect wird die Ausprägung des Quoten-Merkmals in eine interne Variable kopiert. 
  
-Sofern das Quotenmerkmal zunächst umkodiert werden muss, wird dieser PHP-Code in beiden Teilen verwendet.+==== Vorzeitige Zählung ====
  
- +Sie können die Zählung bereits auf einer früheren Seite auslösen, indem Sie dort folgenden PHP-Code platzieren.
-===== Technische Umsetzung (unverbundene Quoten) ===== +
- +
-Die technische Umsetzung erfolgt mittels [[:de:create:php|PHP-Code]] und umfasst mehrere Schritte. Diese werden hier zunächst für die Überprüfung von unverbundenen Quoten erklärt. +
- +
-Im folgenden werden exemplarisch zwei Merkmale quotiert: Alter (offen abgefragt in Variable "SD01_01") und das Geschlecht (geschlossen abgefragt in Variable "SD02"). Es ist zweckmäßig, Qutotenfragen als [[:de:create:checks#antwortzwang|Pflichtfragen]] zu definieren. +
- +
- +
-==== Definition der Quoten ==== +
- +
-Zunächst wird eine Liste ([[:de:create:array|Array]]) benötigt, welches für jede Ausprägung des Merkmals die gewünschte Teilnehmerzahl vorgibt. Bei unverbundenen Quoten ist eine Quotentabelle pro Merkmal erforderlich. +
- +
-Im folgenden Beispiel wird der Screenout direkt in der Quotenprüfung integriert. Es wäre aber genauso ein vorgelagerter Screenout möglich.+
  
 <code php> <code php>
-$quotaAge = [ +setStatus('quota count');
-  2 => 200,  // 200 Personen in Altersgruppe 2 (18-30 Jahre) +
-  3 => 250,  // 250 Personen in Altersgruppe 3 (31-50 Jahre) +
-  4 => 150   // 150 Personen in Altersgruppe 4 (51-68 Jahre) +
-]; +
-$quotaGender = [ +
-  1 => 300,  // 300 Frauen (Code 1) +
-  2 => 300   // 300 Männer (Code 2) +
-];+
 </code> </code>
  
-Beachten Sie, dass für die Altersgruppen 1 (Personen unter 18 Jahre) und 5 (Peronen älter als 68 Jahre) keine Einträge in der Tabelle vorliegen. Ebenso für das Geschlecht 3 (Personen, sie sich einem sonstigen Geschlecht zuordnen). Dies wird im Screenout (unten) durch die Funktion ''[[https://www.php.net/manual/de/function.array-key-exists.php|array_key_exists()]]'' abgebildet. 
  
 +==== Ungültige Fälle aussortieren ====
  
-==== Merkmale auslesen und umkodieren ====+Eventuell möchten Sie Teilnehmer:innen nicht zählen, deren Antworten bestimmte Kriterien nicht erfüllen. Im Idealfall sollten sie vom Panel-Anbieter einen "Low Quality" oder "Quality Fail" Redirect für solche Teilnehmer:innen bekommen und bei den "Panel-Redirects" eingetragen haben.
  
-Die Merkmalsausprägung des aktuellen Teilnehmers wird mittels ''value()'' ausgelesen und bei Bedarf mit einer [[:de:create:php-filters#das_schluesselwort_if|IF-Konstruktion]] umkodiert. Im vorliegenden Fall muss das Alter (offene Eingabe) umkodiert werden.+Platzieren Sie an geeigneter Stelle (z.B. auf der Seite mit einer Kontrollfrage in dem Bereich "Verarbeitung der Antworten mittels PHP" oder auf der nächsten Seite ganz oben als "PHP-Code") etwa folgenden PHP-Code, um Fälle auszufiltern, in denen das Instructed-Response Item SK01_04 nicht mit dem Wert 1 oder das Item SK03_05 nicht mit dem Wert 5 beantwortet wurde.
  
 <code php> <code php>
-// Geschlecht wird direkt ausgelesen +if ( 
-$gender = value('SD02'); +  (value('SK01_04'!= 1) || 
-// Das Alter wird umkodiert +  (value('SK03_05'!5
-$age = value('SD01_01')+) { 
-if ($age < 18) { +  setStatus('quality fail');
-  $ageGroup 1; +
-} elseif ($age <= 30{ +
-  $ageGroup = 2; +
-} elseif ($age <= 50) { +
-  $ageGroup = 3; +
-} elseif ($age <= 68+
-  $ageGroup = 4; +
-} else { +
-  $ageGroup = 5;+
 } }
 </code> </code>
  
 +Um Fälle abzuweisen, die den Fragebogen in welcher als 5 Minuten (300 Sekunden) durchgeklickt haben, würden Sie folgenden PHP-Code oberhalb des ''%%setStatus('complete')%%'' platzieren.
  
-==== Zählung der vorliegenden Fälle ==== 
- 
-Nun wird mitels ''statistic()'' überprüft, wie viele Datensätze mit der Ausprägung der Quotenmerkmale bereits im Datensatz vorliegen. Dieser Wert wird dann mit den oben definierten Quoten verglichen. 
- 
-**Wichtig:** Damit der PHP-Code korrekt funktioniert, müssen alle Teile im selben PHP-Code Block stehen. [[:de:create:variables#php-variablen|PHP-Variablen]] wie ''$quotaAge'' und ''$ageGroup'' sind nur jeweils innerhalb eines Code-Blocks gültig. 
- 
-Im folgenden Code werden __nicht__ die Variablen gezählt, mit denen die Quotenmerkmale abgefragt wurden ("SD01_01" und "SD02"), sondern interne Variablen ("SD03_01" und "SD03_02"). 
- 
-**Wichtig:** Die [[:de:create:questions:internal|internen Variablen]] müssen im **Fragenkatalog** vorab manuell angelegt werden. 
  
 <code php> <code php>
-// Abruf der vorliegenden Fälle für diese Merkmalsausprägung +if (caseTime('hitherto'< 300) { 
-$casesAge    = statistic('count', 'SD03_01', $ageGroup); +  setStatus('quality fail');
-$casesGender = statistic('count', 'SD03_02', $gender); +
- +
-// Screenout +
-if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender)) { +
-  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%')+
-+
- +
-// Auslesen der Quoten für die angegeben Merkmale +
-$maxPerAge    = $quotaAge[$ageGroup]; +
-$maxPerGender = $quotaGender[$gender]; +
- +
-// Quotenstopp +
-if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { +
-  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');+
 } }
 </code> </code>
  
-Der Bool'sche Operator ''||'' ist eine ODER-Verknüpfung zwischen den zwei Bedingungen. Wenn also entweder genug Fälle für das Alter vorliegen __oder__ genug Fälle für das Geschlecht, dann erfolgt ein QuotaFull-Redirect. 
  
-Den Redirect-Link erhalten Sie vom Panel-Anbieter. Wichtig ist, dass Sie die Teilnehmer-ID übermitteln. Im Beispiel kommt der Platzhalter ''%reference%'' zum Einsatz. Details dazu lesen Sie hier: [[:de:survey:panels]].+===== Bereinigte Quotierung =====
  
-**Wichtig:** Die Antwort des Teilnehmers wird erst zum Server übermitteltwenn sie der Teilnehmer mittels "Weiter" abgeschickt hat. Wenn die Fragen "SD01" und "SD02" auf Seite 2 des Fragebogens steht, kann ''value()'' und damit der obige PHP-Code frühestens auf Seite 3 platziert werden.+Nicht alle Befragten füllen den Fragebogen ordentlich aus. Hier wird erklärtwie Sie die Quoten manuell nachjustieren.
  
 +Sie finden im Datensatz unter der Kennung des Quotierungs-Bausteins eine Variable ''_GRP''. Wenn Ihr Baustein die Kennung ''QT01'' hat, heißt die Variable z.B. ''QT01_GRP''. Hier wird eine Zahl oder ein Kürzel für die Quota-Gruppe gespeichert.
  
-==== Kopieren der Quotenmerkmale ==== +  Laden Sie den Datensatz herunter
- +  Bereinigen Sie den Datensatz
-Zuletzt müssen die Quoten-Merkmale noch in die internen Variablen kopiert werden. Das heißt, direkt vor dem Complete-Redirect, welches üblicherweise auf der vorletzten Seite des Fragebogen platziert wird. +  - Erstellen Sie eine Häufigkeitsstatistik für die oben genannte Variable. 
- +  - Tragen Sie im Quotierungs-Baustein ein, wie viele gültige Fälle für jede Quota-Gruppe vorliegen.
-Hierzu benötigen Sie __erneut__ den PHP-Code aus dem Abschnitt [[#Merkmale_auslesen_und_umkodieren|Merkmale auslesen und umkodieren]] (oben) und im selben PHP-Code Block direkt darunter die Funktion ''[[:de:create:functions:put]]'' zum Setzen der internen Variablen+
- +
-<code php> +
-put('SD03_01', $ageGroup); +
-put('SD03_02', $gender); +
-</code> +
- +
-Danach folgt üblicherweise der Complete-Redirect. +
- +
-<code php> +
-redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%'); +
-</code> +
- +
- +
-===== Verbundene Quoten ===== +
- +
-==== Quotenprüfung zu Beginn ==== +
- +
-Wenn Sie mit verbundenen Quoten arbeiten, müssen Sie eine größere Anzahl an Quoten definieren: Ein Grenzwert pro demografischer Zelle. Bei 3 Ausprägungen für das Alter und 2 Ausprägungen für das Geschlecht sind das insgesamt 6 Quoten. +
- +
-Im folgenden PHP-Code wird eine demografische Zelle durch einen Code aus Altersgruppe (2-4) und Geschlecht (1-2) definiert. Die 6 Quoten sind der Übersichtlichkeit halber in 3 Zeilen mit jeweils 2 Quoten notiert -- technisch macht es keinen Unterschied, ob nach dem Komma ein Zeilenumbruch folgt. +
- +
-<code php> +
-$quota = [ +
-  '2-1' => 100, '2-2' => 100,  // 100 Personen pro Geschlecht für die Altersgruppe 1 +
-  '3-1' => 125, '3-2' => 125,  // 125 Personen pro Geschlecht für die Altersgruppe 2 +
-  '4-1' => 75,  '4-2' => 75    //  75 Personen pro Geschlecht für die Altersgruppe 3 +
-]; +
-</code> +
- +
-Das Auslesen der quotenrelevanten Ausprägungen und das Umkodieren erfolgt zunächst genauso wie bei den unverbundenen Quoten. +
- +
-<code php> +
-// Geschlecht wird direkt ausgelesen +
-$gender = value('SD02'); +
-// Das Alter wird umkodiert +
-$age = value('SD01_01'); +
-if ($age < 18) { +
-  $ageGroup = 1; +
-} elseif ($age <= 30) { +
-  $ageGroup = 2; +
-} elseif ($age <= 50) { +
-  $ageGroup = 3; +
-} elseif ($age <= 68) { +
-  $ageGroup = 4; +
-} else { +
-  $ageGroup = 5; +
-+
-</code> +
- +
-Allerdings wird zusätzlich noch eine Variable definiert, welche den Code der demografischen Zelle beinhaltet. Der Punkt (''.'') dient in PHP zum Aneinanderfügen von Texten (Verketten von Strings). +
- +
-<code php> +
-// Definition einer Variable mit Altesgruppe und Geschlecht +
-// Aus 3 und 2 wird hier '3-2' +
-$demGroup = $ageGroup.'-'.$gender; +
-</code> +
- +
-Die Quotenprüfung erfolgt nun für dieses (kombinierte) Merkmal. Erneut wird eine interne Variable (SD04_01) verwendet, die vorab im **Fragenkatalog** definiert werden muss. +
- +
-<code php> +
-// Abruf der vorliegenden Fälle für diese Merkmalsausprägung +
-$cases = statistic('count', 'SD04_01', $demGroup); +
- +
-// Screenout +
-if (!array_key_exists($demGroup, $quota)) { +
-  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%'); +
-+
- +
-// Auslesen der Quote für die demografische Gruppe +
-$maxPerGroup = $quota[$demGroup]; +
- +
-// Quotenstopp +
-if ($cases >= $maxPerGroup) { +
-  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%'); +
-+
-</code> +
- +
- +
-==== Speicherung des Zellen-Codes ==== +
- +
-Vor dem Complete-Redirect muss der Code für die demografische Zelle in die interne Variable gespeichert werden. +
- +
-<code php> +
-// Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01 +
-put('SD04_01', $demGroup); +
-</code> +
- +
-Damit dieser Code funktioniert, müssen auch hier die Quotenausprägungen abgerufen und umkodiert werden. Und natürlich müssen sie zum Zellen-Code ''$demGroup'' verkettet werden. Der vollständige Code für die vorletzte Fragebogen-Seite einschließlich Complete-Redirect sieht demnach wie folgt aus. +
- +
-<code php> +
-// Geschlecht wird direkt ausgelesen +
-$gender = value('SD02'); +
-// Das Alter wird umkodiert +
-$age = value('SD01_01'); +
-if ($age < 18) { +
-  $ageGroup = 1; +
-} elseif ($age <= 30) { +
-  $ageGroup = 2; +
-} elseif ($age <= 50) { +
-  $ageGroup = 3; +
-} elseif ($age <= 68) { +
-  $ageGroup = 4; +
-} else { +
-  $ageGroup = 5; +
-+
- +
-// Definition einer Variable mit Altesgruppe und Geschlecht +
-// Aus 3 und 2 wird hier '3-2' +
-$demGroup = $ageGroup.'-'.$gender; +
- +
-// Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01 +
-put('SD04_01', $demGroup); +
- +
-// Complete-Redirect +
-redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%'); +
-</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 abgewiesenobwohl 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.1662750678.txt.gz · Zuletzt geändert: von admin
 
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