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.
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).