Nur noch als Ergänzung:
Es ist doch ganz analog.
Bei einer Frage vom Typ "Einfachnennung". die Q1 heißt, werden die Daten in der Antworttabelle in einer Spalte mit dem Namen "Q1" abgelegt (das sind jetzt die Daten, die die Teilnehmer eingegeben haben)
Bei einer Frage vom Typ "Gleichung", die "XYZ" heißt, werden die Daten ebenfalls in einer Spalte mit dem Namen "XYZ" abgelegt (dies sind jetzt keine von den Teilnehmern eingegebene Daten, sondern von Dir berechnete).
Grundsätzlich gibt es in den Daten keinen Unterschied.
Jetzt noch einmal zu Deiner Mittelwertberechnung.
Ich hatte eine Lösung ja schon gezeigt:
{sum(that.Q1.sq_S1.NAOK)/count(that.Q1.sq_S1.NAOK)}
Bei Deiner Idee gibt es zwei Dinge, die Zu Problemen führen können:
1. Das "+" Zeichen.
Das "+" Zeichen dient auch dazu, Texte zu verbinden. Normalerweise erkennt php zwar, dass hier eine Addition stattfinden soll, manchmal aber auch nicht.
Dann ergibt sich dies: 12 + 23 = 1223
Wie auch hier beschrieben ist.
[url]
www.limesurvey.org/manual/ExpressionScri...ntation/en#Operators
[/url]
sollte man zur Sicherheit zur Verkettung von Texten die Funktion "join()" benutzen, zur Addition die Funktion "sum()"
2. Ein fehlendes ".NAOK"
Sollte aus irgendwelchen Gründen (Filter, Nicht-Pflicht, o.ä.) ein Term der Addition nicht beantwortet sein, wird die gesamte Summe nicht definiert sein und kein Ergebnis bringen.
Aus diesem Grund benutzt man ".NAOK"
[url]
www.limesurvey.org/manual/ExpressionScri...ion/en#Usage_of_NAOK
[/url]
Jetzt etwas zu Deinen 24 Variablen.
Zunächst: Das ist ja nichts Dramatisches.
Aber wie ich schon vor ein paar Tagen schrieb: Durch geschickte Kodierung kannst Du dies immens verkürzen.
Wenn ich zum Beispiel Deine Gleichung einmal so interpretiere
{Skala1RW = round((G02Q01_S101 + G02Q01_S102 + G02Q01_S103 + G02Q02_S104 + G02Q02_S105 + G02Q02_S106)/6,2)}
Es werden aus der Matrix G02Q01 die ersten drei Teilfragen für die Summe benutzt, weitere dort existierende Teilfragen aber nicht.
Ebenso werden die ersten Teilfragen von G02Q02 nicht verwendet, aber die Teilfragen 4, 5 und 6.
Dann könntest Du ja folgendermaßen kodieren (Ich nehme jetzt auch nicht diese von LimeSurvey vorgeschlagenen langen Fragecodes)
Q1 mit den Teilfragen
S11
S12
S13
S24
S25
S26
...
Q2 mit den Teilfragen
S21
S22
S23
S14
S15
S16
...
Soll heißen: Mit S1, S2 bezeichnest Du diverse Subskalen, für die Mittelwerte berechnet werden sollen, mit 1,2,..., 5,6 nummerierst Du einfach durch.
Wenn Du dann noch einmal den Gebrauch von "self" und "that" nachliest,
[url]
www.limesurvey.org/manual/ExpressionScri....22that.22_variables
[/url]
sieht Deine Gleichung für die Skala 1 nur noch so aus (nennen wir sie MWSK1):
{sum(that.Q1.sq_S1.NAOK,that.Q2:sq_S1)/sum(count(that.Q1.sq_S1.NAOK),count(that.Q2.sq_S1.NAOK))}
und für Skala 2 :
{sum(that.Q1.sq_S2.NAOK,that.Q2:sq_S2)/sum(count(that.Q1.sq_S2.NAOK),count(that.Q2.sq_S2.NAOK))}
Bedeutung: Es werden alle Teilfragen (subquestions - sq) der Frage Q1 summiert, die im Code den Text "S1" beinhalten.
Wie auch schon einmal gesagt: Du kannst auch hart kodieren, dass Du immer durch 6 teilst. Aber dann muss sichergestellt sein, dass es immer 6 Werte gibt.
Und als Letztes:
Ich würde die Rundung nicht in dieser Gleichung durchführen.
Du sagtest ja, Du möchtest den Wert für spätere Berechnungen benutzen; da ist der Rohwert sicherlich besser.
Runden würde ich nur, wenn der Wert dem Teilnehmer angezeigt werden soll, also mittels "micro-tayloring" in einer späteren Frage, wie
"Übrigens, der Mittelwert Ihrer Antworten auf Skala 1 ist {round(MWSK1,2)}.
Und noch ein Allerletztes:
Bei solchen Fragen ist es immer gut, Deinen Prototypen als lss-Export zu schicken.
Dann können wir Dir sicherlich noch besser helfen.
Joffm