Welcome to the LimeSurvey Community Forum

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

Matrix filter aus Fragentyp Matrix

  • Wrankmore_A
  • Wrankmore_A's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
7 years 5 months ago #144191 by Wrankmore_A
Replied by Wrankmore_A on topic Matrix filter aus Fragentyp Matrix
Danke, ist leider ähnlich aufwendig (geht bei mir ja immer um die berühmten 41 ;) ) wie meine Variante :)
Ich verstehe einfach nicht, wieso in der Anleitung steht, dass die "that" Funktion auch für Zeilen und Spalten geht.
Attachments:
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 5 months ago - 7 years 5 months ago #144208 by Joffm
Replied by Joffm on topic Matrix filter aus Fragentyp Matrix
Hallo,
ja, da hast Du Recht.

Aber im Grunde ist es zwar umständlich, aber nicht besonders.

Im Programm, das wir professionell nutzen, kommt dies auch häufig vor.
Das machen wir dann in EXCEL mit einer Formel, die dann alle Bedingungen erstellt.
Dann muss man sie nur in LS einkopieren.
Das macht dann weniger Schreibarbeit.

Da dies bei Deinen 41 Kräutern natürlich sehr lang wird, habe ich auch schon darüber nachgedacht, eine dazwischengeschobene Gleichung zu nutzen.


Ich bin inzwischen einen Schritt weiter:
Das "sq" in {sum(that.q4.sq_C.NAOK)} ist nämlich nicht einfach die Bezeichnung der Subquestion, also "sq_C", sondern es ist Bestandteil der Funktion.
Darauf muss man erst einmal kommen.

Ich kann also in einer Matrix (Zahlen) die Zeilensumme ausrechen durch: "sum(that.D1.sq_SQ001.NAOK)"

Und um zu gucken, ob in einer Zeile irgendetwas steht, habe ich mal versucht:
if(!is_empty(that.D1.sq_SQ001.NAOK),1,0).Um eine Variable zu haben, die anzeigt "steht was drin oder nicht".
Klappt aber nicht.

Dann ist mir die Funktion "implode" untergekommen.
Diese macht aus einem Array einen String.
Also:
{if(implode(that.D1.sq_SQ001.NAOK)!="",1,0)}
Klappt: Da kommt 1 oder 0 raus, je nachdem , ob in der Zeile etwas steht oder nicht.

So weit, so gut; nur Du brauchst Spalten.

Das ist eigentlich dasselbe:
{if(implode(that.D1.sq_A1.NAOK)!="",1,0)} Bei mir heißt die erste Spalte "A1".
Dies wird von LS aufgelöst zu:
if(implode(D1_Zeile1_A1.NAOK, D1_Zeile2_A1.NAOK, D1_Zeile3_A1.NAOK, D1_Zeile4_A1.NAOK, D1_Zeile5_A1.NAOK) != "", 1, 0)


Damit erhälst Du eine Variable, die anzeigt, ob in der Spalte etwas steht.

Und angehängt das Beispiel:

Bis dann
Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 7 years 5 months ago by Joffm. Reason: datei angehängt
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 5 months ago #144219 by Joffm
Replied by Joffm on topic Matrix filter aus Fragentyp Matrix
Hallo, Wrankmore,

und es geht noch einfacher:
Teilfragen-Relevanz:
count(that.D1.sq_A1) >= 1, usw.

Mit Beispiel.

Im vorigen Beispiel steht übrigens noch ein blödsinniger Matrix-Filter in D2 und eine alte Relevanzgleichung - auch in D2. Müssen beide weg.

Der ganze vorige Text ist also ein bisschen als "Grundlagenforschung" anzusehen.

Viele Grüße
Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose