Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Auslesen / Auswerten von Fragebogen

More
6 months 2 weeks ago #269255 by Solander
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version: Community Edition Version 6.10.0+250106
Eigener Server oder LimeSurvey-Cloud: gehosted bei Manitu
Genutzte Designvorlage: Bootswatch
==================

Hi, ich würde gerne für einen bestimmten Fragebogen die Ergebnisse in einer bestimmten Art und Weise ausgeben und berechnen lassen und dachte, das sollte mit PHP recht einfach machbar sein. Leider weiß ich nicht, wo ich starten soll. Wäre das LSRC2?

Ps.: vielen Dank nochmals für die Hilfe bei meiner letzten Frage. Leider konnte ich nicht antworten, da der Spamcheck nie funktionierte.

Please Log in to join the conversation.

More
6 months 2 weeks ago - 6 months 2 weeks ago #269260 by Joffm
Hallo,
mir fiel beim Lesen folgendes Analogon ein.
"Ich möchte irgendeinen Wanderweg abgehen, weiß abe rnicht, wo ich starten soll. Wäre Lissabon in Ordnung?"

Sorry, musste sein.
Natürlich kannst Du dazu die API benutzen.
Du bekommst ein schönes array der gegebenen Antworten und kannst dann die Auswertung machen.
 
Persönlich bevorzuge ich allerdings den direkten Zugriff auf die Datenbank.
Hier hat man aber das kleine Problem, dass die Spaltennamen in SGQ-Syntax vorliegen.
Dazu mache ich mir meist eine kleine Übersetzungs "Include"-Datei, die mir bessere Namen liefert.
Irgendwie so etwas
Code:
$survey=113161;
$tbl_daten='lime_survey_'.$survey;
$tbl_timing='lime_survey_'.$survey.'_timings';
$col_name=$survey.'X42X545';
$col_dob=$survey.'X42X546';
$col_gender=$survey.'X42X554';
$col_schul=$survey.'X42X547';
$col_taet=$survey.'X42X548';
$col_erf=$survey.'X42X549';
$col_upload=$survey.'X43X550';
$col_cv=$survey.'X43X551';

Dann hat man einfach mehr Möglichkeiten eine Abfrage zu starten.
Beispielsweise:
Code:
$daten1=DB::query("SELECT {$col_gender},count({$col_gender}) as gender FROM {$tbl_daten} WHERE lastpage=36 GROUP BY {$col_gender}");
 
$daten2=DB::query("SELECT {$col_gender},
    SUM(IF({$col_age} BETWEEN 18 and 24, 1, 0)) AS A1,
    SUM(IF({$col_age} BETWEEN 25 and 34, 1, 0)) AS A2,
    SUM(IF({$col_age} BETWEEN 35 and 44, 1, 0)) AS A3,
    SUM(IF({$col_age} BETWEEN 45 and 54, 1, 0)) AS A4,
    SUM(IF({$col_age} BETWEEN 55 and 65, 1, 0)) AS A5
FROM {$tbl_daten} WHERE lastpage=36 GROUP BY {$col_gender}");


Wenn Deine Beschreibung nicht so "schwammig" gewesen wäre, hätte es sicher noch andere Ideen gegeben,.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 6 months 2 weeks ago by Joffm.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269262 by Solander
Hey, vielen Dank! Damit werd ich mal starten und mich gern melden, wenn ich Hilfe brauche mit mehr Details ;)
Aber das war tatsächlich eine der Fragen, ob best practice die API ist oder der direkte Zugriff.

Please Log in to join the conversation.

More
6 months 2 weeks ago - 6 months 2 weeks ago #269270 by Solander
Soweit hab ich mich schon mal ganz gut reingefuchst. Was ich noch gar nicht zuordnen kann sind manche Einträge / Antworten in dem folgenden Format: dqGCJFkSq/Hn3aL9sWJ+Ok0=
Wie sind die zu verstehen? Ist das ein verschlüsselter Wert?

Edit: Ok, habs selbst herausgefunden, dass es verschlüsselt ist. Gibt es dennoch eine Möglichkeit "damit zu arbeiten", der unverschlüsselte Export in Excel geht ja auch..
Last edit: 6 months 2 weeks ago by Solander.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269272 by Joffm
Hallo,
1. Die Verschlüsselung dient gerade dazu, Daten nicht zu veröffentlichen, wenn ein Zugriff "hintenherum" auf die Datenbank geschieht.
D.h. wenn ich mit irgendeinem Tool (phpMyAdmin, HeidiSQL, etc,) die Datenbank anschaue oder mit php eine Query darauf abschieße, sehe ich nur die verschlüsselten Daten.
Es muss noch nicht einmal ein böswilliger Angriff sein. Durch das Setup des Tools, oder auch der Struktur der Datenbank könnte jemand völlig legitim darauf zugreifen, der aber Deine LimeSurvey-Daten trotzdem nicht sehen soll.
Je nach Vertrag hat man vielleicht nur wenige (oder nur eine) Datenbank zur Verfügung. (Ist etwas hypothetisch, selbst im kleinsten Manitu-Paket sind es ja 25)
Dann würden beispielsweise Tabellen von LimeSurvey (prefix: lime_), OsTicket (prefix: ost_) und LiveHelperchat (prefix: lhc_) friedlich nebeneinander existieren. Und derjenige, der schnell einmal in OsTicket hineinschauen will, sieht auch die anderen Tabellen.

2. Dass Du bei einem Datenexport (oder dem Anschauen der Antworttabelle) in LimeSurvey die entschlüsselten Daten siehst, ist ja verschieden davon. In diesen Fällen hast Du Dich ja beim System als legitimer Benutzer ausgewiesen und bleibst innerhalb von LimeSurvey.
Es geht eben nur um die Daten in der Datenbank.

Wenn Du also der Sicherheit von "Manitu" misstraust und weiterhin die Daten in der Datenbank verschlüsseln willst, musst Du Dir etwas überlegen.

In Deinem ersten Post steht etwas sehr allgemein "in einer bestimmten Art und Weise ausgeben und berechnen lassen".
Da stelle ich mir natürlich die Frage "Was bedeutet das?" Was ist die "bestimmte Art und Weise" der Ausgabe und die der Berechnung?
Was ist es überhaupt? Eine Auswertung pro Teilnehmer, oder eine Gesamtauswertung?

A. Kann man es nicht innerhalb LimeSurvey realisieren?
Klar, wenn ich einen BIP (Bochumer Inventar zur berufsbezogenen Persönlichkeitsbeschreibung) auswerten will, wird es mit ExpressionScript etwas aufwendig (aber sicherlich möglich), da es für jede Subskala unterschiedliche Grenzwerte gibt. Mit php ist es deutlich einfacher.
Gilt sicher für fast jeden psychologischen Test, aber dieser fiel mir gerade ein, weil ich ihn auch schon einmal "verwurstet" habe..

B. Dann kannst Du natürlich einfach einen Export nach Excel oder csv machen, diesen dann in Deinem php-script einlesen.

C. Oder aber, Du fummelst Dich einmal durch den Quellcode und suchst die Ver-/Entschlüsselungsfunktion.
Den Schlüssel selbst hast Du ja (in "application/config/security.php").
Und des Entschlüsseln geht wohl in "application/core/LSSodium.php" vonstatten, wo auf die Dateien im Ordner "vendor/paragonie" zugegriffen wird.
Dieses Letzte ist nicht ganz ernst gemeint. Oder Du kennst Dich wirklich gut damit aus.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
6 months 2 weeks ago #269274 by Solander
Hi Joffm,
danke für die ausführliche Antwort!
Es geht um eine Auswertung auf Individuumsebene um herauszufinden, welche Ergebnisse die betreffende Person hat.

Es sind verschiedene Fragebögen mit 20-100 Fragen (teilweise fasse ich verschiedene Fragebögen zu einer Testbatterie zusammen). Die Verschlüsselung hatte ich wohl zu Beginn mal testweise aktiviert, da ich noch nicht genau wusste, ob ich personenbezogene Daten mit erhebe. Jetzt habe ich als einzige Zurdnungsmöglichkeit den Token, den ich von den Dummyteilnehmern per Mail versende. Wahrscheinlich könnte ich die Umfrage einfach nochmal neu starten, dann aber nicht verschlüsselt.

ExpressionScript würde bestimmt auch irgendwie gehen, aber da hab ich einfach gar keine Erfahrung drin, in PHP zumindest Grundkenntnisse (+AI :)).

LG

Please Log in to join the conversation.

More
6 months 2 weeks ago #269288 by Joffm
Hallo,

Es geht um eine Auswertung auf Individuumsebene um herauszufinden, welche Ergebnisse die betreffende Person hat.
 

da ist ExpressionScript doch prädestiniert.
Hier hast Du doch alle (fast alle) Möglichkeiten:
  • Du kannst dem Teilnehmer sein Ergebnis sofort anzeigen.
  • Du kannst Diagramme der Ergebnisse zeigen. Siehe mein "Tutorial 3: Gimmicks", Kap. 3. Es ist jetzt auf Seite 18+- dieses Forenteils.
  • Du hast das Ergebnis zusammen mit den übrigen Daten gespeichert.
  • Du kannst mit dem Plugin "pdfReport" das Ganze auch "aufgehübscht" dem Teilnehmer zukommen lassen.
 

aber da hab ich einfach gar keine Erfahrung

Dann mal nichts wie ran. Es ist nicht so schwer wie es klingt.
Einfach einmal die entsprechenden Beispielstudien aus dem Handbuch anschauen - und natürlich einfach hier fragen.
Das Beste - wie immer: Erstelle einen Prototypen Deiner Umfrage, erkläre, was, wie wo ausgewertet werden soll, und schicke den lss Export.

Samsung
Joffm


 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
6 months 2 weeks ago #269296 by holch
Ich würde da auch nicht mit einem externen PHP-Script arbeiten. Das sollte wohl so ziemlich alles sehr gut innerhalb von Limesurvey gehen, mit Expression Script.

Das ist eigentlich ziemlich einfach und erinnert an Excel-Formeln. Wenn du Grundkenntnisse in irgendeiner Programmiersprache hast (selbst Excel-Formeln), hast du das Ruckzuck gelernt und dann ist auch die Verschlüsselung egal.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269306 by Solander
Vielen Dank für die Ermutigung. Leider scheitere ich gerade bei Schritt 1: wo schreibe ich den Code überhaupt hin, wenn ich einen Fragebogen nach Abschluss als auswerten möchte?

Please Log in to join the conversation.

More
6 months 2 weeks ago - 6 months 2 weeks ago #269308 by Joffm
Hallo,
Schau Dir einmal mein "Tutorial 4: Gleichungen, Zufall" an! (Auch hier auf Seite 18+-)
In den "Begriffserklärungen", speziell Kap. 1.3. findest Du etwas.
Es ist nur eine kurze Einführung; sollte Dich aber auf den richtigen Weg bringen.

Und natütlich auch im Handbuch "Fragetypen"
[url] www.limesurvey.org/manual/Question_type_-_Equation/de [/url]
Nur die ersten beiden Abschnitte.

Ich kann es nur wiederholen: Erstelle einen Prototypen und zeige uns, was Du machen willst.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 6 months 2 weeks ago by Joffm.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269310 by Solander
Ok, ich habe mal einen Fragebogen angehängt. Das Auswertungsschema ist:

Total Score Sum scores (0, 1, 2, or 3) for all 14 items
Mentalizing deficits Sum items 1, 4, 9, 11, 12, 13, 14
Social anxiety Sum items 3, 5, 6, 8
Sensory reactivity Sum items 2, 7, 10
Note: Item 6 is reverse-scored.

Das Ergebnis soll dabei nicht dem Teilnehmer angezeigt werden, sondern ich würde es mir gerne im Backend ansehen.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269319 by Joffm
Hallo,
ich habe es ja befürchtet - es ist simples Summieren von Codes.
Soll heißen, Du rechnest einfach "sum(Q1_SQ001,Q1_SQ002,...)
Das ist trivial.
Daher werde ich Dir einmal ein paar Techniken zeigen, die solche Sachen eben vereinfachen.

Kleine Sache vorweg. Etwas, das ich so oft hier lese.
Deine Frage hat den Code "RAAD14", die Teilfragen wiederum "RAAD1", "RAAD2",...
Das heißt, Du erhältst beim Export Spaltenbeschriftungen wie "RAAD14_RAAD1", "RAAD14_RAAD2",...
Ich frage mich immer, warum dieses Doppelt-Gemoppelt sein muss.

Deine Umfrage bekommst Du dann morgen zurück; jetzt muss ich das Abendessen zubereiten.

Der Teilnehmer soll diese Dinge also nicht sehen.
Gut. Wie wäre es denn, wenn Du Dir diese kleine  Auflistung per Mail schicken ließest?
Ist klar, ist auch nur ein Gimmick; aber warum nicht?

Bis dann
Joffm



 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
6 months 2 weeks ago #269322 by holch

Gut. Wie wäre es denn, wenn Du Dir diese kleine Auflistung per Mail schicken ließest?


Nur weil es vielleicht falsch rüber kommt: Das zusenden per Email wäre nur ein Extra. Du kannst es natürlich auch in einer Equation/Formel-Frage in der Datenbank ablegen, und dann zusätzlich per Email verschicken (Admin Notification).

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
6 months 2 weeks ago #269323 by Joffm

(Admin Notification)

Die meinte ich auch.
Das Einzige wäre, die Standard-Vorlage etwas zu modifizieren, um die Ergebnisse etwas anschaulicher rüberzubringen.

Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
6 months 2 weeks ago - 6 months 2 weeks ago #269339 by Joffm
So, wie versprochen:

Inzwischen hast Du sicher gelesen, dass man zum Berechnen von irgendwelchen Dingen eine Frage vom Typ "Gleichung" benutzt (mittels ExpressionScript), und dass dann das Ergebnis der Berechnung in der Datenbank unter dem Fragencode dieser "Gleichungsfrage" auftaucht.
Außerdem weißt Du, dass diese Berechnungen mit geschweiften Klammern umschlossen werden.

Haben wir also eine "Gleichungsfrage" mit dem Code "eqErgebnis" und schreiben dort die Funktion {6*Q1}, so steht in der Datenbank in der Spalte "eqErgebnis" das Sechsfache der Antwort auf Frage "Q1".


1. Die Lösung "zu Fuß"
Du willst einfach die Codes der gegebenen Antworten aufsummieren.
Zunächst die abzulehnende Lösung, nämlich zu schreiben {Q1+Q2+Q3}
Der "+" Operator hat nämlich eine doppelte Bedeutung:
a. Summierung zweier Zahlen
b. Verkettung von Texten
Die zugrundeliegende Programmiersprache (php) ist zwar so schlau zu erkennen, on es sich um Zahlen oder Texte handelt; trotzdem gibt es pathologische Fälle, dass 14+32 nicht 46 ergibt, sondern 1432.

Aber schließlich gibt es die Funktion "sum()"
Alle Funktionen findet man hier:
[url] www.limesurvey.org/manual/ExpressionScri...mplemented_functions [/url]

Und als Argumente werden alle Summanden eingetragen.
Daher erstellsr Du vier Fragen vom Typ "Gleichung", nennst sie entsprechend (müssen ja nicht die von mir gewählten Codes sein), und trägst einfach als Fragetext ein:

In "scoreTotA"
{sum(RAADS14_RAAD1.NAOK, RAADS14_RAAD2.NAOK, RAADS14_RAAD3.NAOK, RAADS14_RAAD4.NAOK, RAADS14_RAAD5.NAOK, (4-RAADS14_RAAD6. NAOK),RAADS14_RAAD7. NAOK,RAADS14_RAAD8. NAOK,RAADS14_RAAD9. NAOK,RAADS14_RAA10.NAOK, RAADS14_RAA11.NAOK, RAADS14_RAA12.NAOK, RAADS14_RAA13.NAOK, RAADS14_RAA14.NAOK)}

In "scoreMDA":
{sum(RAADS14_RAAD1.NAOK, RAADS14_RAAD4.NAOK, RAADS14_RAAD9.NAOK, RAADS14_RAA11.NAOK, RAADS14_RAA12.NAOK, RAADS14_RAA13.NAOK, RAADS14_RAA14.NAOK)}

In "scoreSAA":
{sum(RAADS14_RAAD3.NAOK,RAADS14_RAAD5.NAOK,(4-RAADS14_RAAD6.NAOK),RAADS14_RAAD8.NAOK)}

In "scoreSRA":
{sum(RAADS14_RAAD2.NAOK,RAADS14_RAAD7.NAOK,RAADS14_RAA10.NAOK)}

Du siehst im Total wie auch in SAA dass der Wert von  Item 6 von 4 subtrahiert wurde, da dieses ein reverses Item sein soll.

B. Die Lösung mithilfe der "that"-Variablen.
Was macht diese?
Im Grunde genommen ist es eine Kurzschreibweise, um eine Frage über alle Teilfragen zu expandieren.
Um dies sinnvoll zu nutzen, sollten die Teilfragen "geschickt" gecodet werden.
Daher habe ich die drei Gruppen einmal "D", "A" und "S" und jeweils ein "N" (normal) bzw. "R" (reverse) angehängt und die Nummerierung gelassen
Damit verkürzen sich die Funktionen:

In "scoreTotB":
{sum(sum(that.RAAD.sq_N.NAOK),4*count(that.RAAD.sq_R.NAOK),-1*sum(that.RAAD.sq_R.NAOK))}
Was macht diese Funktion?
Im ersten Term sum(that.RAAD.sq_N.NAOK) werden alle Items summiert, deren Code ein "N" enthält (sq_N), die "normalen".
Der zweite und dritte Term sorgen für die Reversierung der entsprechenden Items (es werden alle berücksichtigt, deren Code ein "R" enthält.
Zugegeben: Da es hier nur ein einziges Item dieser Art gibt, hätte man sich diese allgemeine Lösung sparen können (4-that.RAAD.sq_R.NAOK hätte genügt)
Aber dies ist die allgemeine Lösung, egal wie viele reverse Items es gibt; einzig die Konstante (4), von der abgezogen wird, muss angepasst werden.

Weiter geht's
In "scoreMDB":
{sum(that.RAAD.sq_D.NAOK)}

In "scoreSAB":
{sum(sum(that.RAAD.sq_AN.NAOK),4*count(that.RAAD.sq_AR.NAOK),-1*sum(that.RAAD.sq_AR.NAOK))}

In "scoreSRB":
{sum(that.RAAD.sq_S.NAOK)}

C. Noch eine Verkürzung, diesmal die Anzahl der Fragen betreffend.
Um bei vielen dieser Gleichungen nicht für jede eine separate Gleichungsfrage anlegen zu müssen, erstelle ich gerne einen "Container", der die Ergebnisse dann enthält.
Kann eine "mehrfache numerische Frage" sein, oder (wie ich hier) eine Matrix(Zahlen); ich möchte nämlich noch zusätzlich den Prozentwert berechnen und speichern
Also eine solche Matrix (RC, für Resiltatscontainer)
 

Und vorher wird in einer einzigen Gleichungsfrage dieser "Container" gefüllt
{RC_1_1=sum(sum(that.RAAD.sq_N.NAOK),4*count(that.RAAD.sq_R.NAOK),-1*sum(that.RAAD.sq_R.NAOK))}{RC_2_1=sum(that.RAAD.sq_D.NAOK)}{RC_3_1=sum(sum(that.RAAD.sq_AN.NAOK),4*count(that.RAAD.sq_AR.NAOK),-1*sum(that.RAAD.sq_AR.NAOK))}{RC_4_1=sum(that.RAAD.sq_S.NAOK)}
{RC_1_2=100*RC_1_1/(4*count(that.RAAD.NAOK))}
{RC_2_2=100*RC_2_1/(4*count(that.RAAD.sq_D.NAOK))}
{RC_3_2=100*RC_3_1/(4*count(that.RAAD.sq_A.NAOK))}
{RC_4_2=100*RC_4_1/(4*count(that.RAAD.sq_S.NAOK))}


Du siehst, hier wird das einfache Gleichheitszeichen benutzt, da es sich hier um eine Zuweisung an die jeweilige Zelle von RC handelt.
Da ergibt sich dies
 
Kann man noch verschönern mit Funktionen wie "number_format, um die Kommastellen anzupassen. Aber dies sol ja nur exemplarisch sein.

Diese Fragen werden natürlich alle versteckt.
Und in der Antworttabelle ist entweder dies
 
oder dies
 

In der Umfrage sind zusätzlich zwei Textanzeigen, um die Ergebnis sofort zu Testzwecken anzuzeigen; die können dann später weg.
 

File Attachment:

File Name: limesurvey...2322.lss
File Size:104.26 KB


Viel Erfolg

Joffm

P.S.
Dié Benutzung von "NAOK" ist in Deinem Falle unnötig, da es sich um eine Pflichtfrage handelt.
NAOK ist dann anzuwenden, wenn es Teilfragen geben kann, die nicht beantwortet sind. Da diese Werte dann gar nicht definiert sind, geht die Summierung "in die Hose" und liefert ... nix. Dann nimmt man NAOK (No answer is OK).

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 6 months 2 weeks ago by Joffm.

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose