Welcome to the LimeSurvey Community Forum

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

Vorbelegung in einer Matrix mit Werten aus Attribut, Abfrage eines Teilwertes

  • bambam
  • bambam's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 years 1 month ago #239620 by bambam
Ihre LimeSurvey-Version: [3.90]
Eigener Server oder LimeSurvey-Cloud: Eigener
Genutzte Designvorlage: bootswatch
==================
Hallo zusammen,

ich möchte einen Teilnehmer fragen, ob er
1. mit den Angeboten von uns zufrieden ist und
2. ob er noch Interesse an anderen Angeboten hat, die er noch nicht nutzt.

Dazu habe ich zu 1. und 2. jeweils eine Matrix erstellt.
Die Angebote die genutzt werden möchte ich mit
{angebotvorbelegung_SQ001_x006="Angebot1"}
{angebotvorbelegung_SQ002_x006="Angebot2"}
{angebotvorbelegung_SQ003_x006="Angebot3"}
vorbelegen, was so über eine Gleichung auch gut klappt.

Nun wollte ich die vom Teilnehmer bereits genutzten Angebote in Teilnehmerattribute erfassen um nur diese auch anzeigen und stellte fest, das hier maximal 66 möglich sind (DB-Seitig).
Also dachte ich, ich erstelle nur ein paar Attributfelder und schreibe da rein "a1,a2,a3," bis a100 und frage es so ab, da wir über 100 im Angebot haben.
Das geht auch noch, wenn ich aber in einer dazu neuen Gleichung mit der ich aus den Attributen selektieren will
{angebotvorbelegung_SQ001_x006 = (if(is_empty(aangebotvorbelegung_SQ001_x006) AND TOKEN:ATTRIBUTE_2 =='a1', 'Angebotsnahme1'))}
{angebotvorbelegung_SQ002_x006 = (if(is_empty(aangebotvorbelegung_SQ002_x006) AND TOKEN:ATTRIBUTE_2 =='a2', 'Angebotsnahme2'))} usw usw.
es versuche, bewirkt wohl das ==, das der Wert exakt stimmen muss.
Z.B. wird (wenn ich a1 einzeln in das Attribut schreibe) der Wert "Angebotsnahme1" in der Matrix ausgegeben, aber sobald ich es mit Komma trenne, oder hintereinander mit Leerzeichen schreibe,
kein Wert mehr ausgegeben, das hatte ich mit
{angebotvorbelegung_SQ001_x006 = (if(is_empty(aangebotvorbelegung_SQ001_x006) AND TOKEN:ATTRIBUTE_2 =='a1', 'Angebotsnahme1', 'Nicht gefunden'))} rausgefunden, da wurde dann "Nicht gefunden" in der Zeile der Matrix ausgegeben.

Nun die Frage:
Wie kann ich einen Teilwert aus dem Teilnehmerattribut abfragen?
Oder kann ich einen anderen Weg gehen, z.B. die Angebote pro Teilnehmer in eine Art array schreiben und abfragen?
Ich habe es schon mit 
{angebotvorbelegung_SQ001_x006 = (if(is_empty(aangebotvorbelegung_SQ001_x006) AND TOKEN:ATTRIBUTE_2 like 'a1', 'Angebotsnahme1'))}
{angebotvorbelegung_SQ001_x006 = (if(is_empty(aangebotvorbelegung_SQ001_x006) AND TOKEN:ATTRIBUTE_2 =='%a1%', 'Angebotsnahme1'))}
{angebotvorbelegung_SQ001_x006 = (if(is_empty(aangebotvorbelegung_SQ001_x006) AND TOKEN:ATTRIBUTE_2 =='*a1*', 'Angebotsnahme1'))}
versucht, habe aber keinen Erfolg :-(

Könnt Ihr mir helfen?
Vielen Dank!

 

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 1 month ago #239628 by Joffm
Hallo,
helfen kann ich noch nicht so richtig, da mir das Design nicht ganz klar ist.

Gut, Du benutzt offensichtlich keine Matrix, sondern eine Matrix(Texte), wo möglicherweise in der 6. Spalte diese Angebote stehen.
Wenn ich aber Deine Fragen anschaue

1. mit den Angeboten von uns zufrieden ist und
2. ob er noch Interesse an anderen Angeboten hat, die er noch nicht nutzt.

würde ich wirklich eher an eine Matrix denken
Einmal mit einer Skala der Zufriedenheit und als Teilfragen die bereits benutzten Angebote und zum zweiten vielleicht so etwas wie eine Mehrfachnennung, wo der Teilnehmer sein Interesse kundtut und meinetwegen nachgeschaltet (mittels Matrixfilter) Fragen speziell über die interessierenden Angebote.

Gut, jetzt zu Deiner Idee mit den Attributen.
Hier verstehe ich nicht, warum Du so viele Attribute verwenden willst/musst. Jeder Teilnehmer hat doch sicherlich nur eine kleine Anzahl bereits benutzt, oder? Dann würde doch die maximale Anzahl benutzter Angebote ausreichen?

Du willst anscheinend für jedes existierende Angebot ein Attribut erstellen und dort hinterlegen, ob bereits genutzt oder nicht.
Und wegen der von Dir beschriebenen Beschränkung - die ich nicht ganz nachvollziehen kann, denn hier bin ich schon bei 120
 
willst Du mehrere Attribute in eine Zelle schreiben.

Okay, Deine Ideen mit wildcards kann nicht funktionieren, da es entweder Windows- oder SQL-wildcards sind,
Du musst schon mit den in LimeSurvey implementierten Funktionen arbeiten.
Und da bietet sich zum Beispiel die Funktion "strpos" an, welche testet, ob ein String in einem anderen enthalten ist.
Beachte: Ein simples "strpos(TOKEN:ATTRIBUTE_1,'a1')" geht in die Hose, da damit auch "a10", "a11", gefunden wird.

Wenn ich Deine Idee richtig interpretiere, genügt ja ein einziges Attribut, in welchem für jedes Eurer Angebote gekennzeichnet wird, ob es benutzt wurde oder nicht.
Etwas so: "01100000100110001..."
1 bedeutet also, dass das Angebot an dieser Stelle bereits benutzt wurde.
Hier würde man die Funktion "substr" benutzen, um zu sehen, ob der Wert an dieser Stelle "0" oder "1" ist.

bewirkt wohl das ==, das der Wert exakt stimmen muss.

Das ist ja wohl klar. Es ist schließlich der "Gleichheitsoperator"


Langer Rede, kurzer Sinn.
Schicke einmal diese relevanten Fragen als lss Export.
Dann sehen wir weiter.

Joffm

Und welche Version benutzt Du wirklich?
3.90 gibt es nicht.

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

Please Log in to join the conversation.

  • bambam
  • bambam's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 years 4 weeks ago #239690 by bambam
Hallo Joffm,

vorab vielen Dank für deine (wie immer) schnelle und sehr hilfreiche Antwort.

Richtig, ich benutze Matrix(Texte) und habe darin zusätzlich auch Dropdownfelder erstellt, da ich auf einem Dropdownfeld je nach Auswahl später noch weitere Fragen stelle.

Da Du geschrieben hast, dass Du ohne Probleme 120 Attribute anlegen konntest, habe ich mir nun LimeSurvey in der Version 5.6.0+230116 einmal installiert und siehe da, nun kann ich auch die entsprechende Anzahl an Attributen anlegen, hier habe ich MyIsam genommen, in der anderen Version  3.9.0+180604 und 3.24.1+201014 konnte ich es nicht, was aber offenbar daran liegt, das mir hier InnoDB vorgegeben wurde.

Ich habe also nun alle Attribute als Vorlage vorbereitet und über CSV beim Teilnehmer importiert, nun kann ich sie auch in der Matrix verwenden.
Jetzt habe ich ein anderes "Problem" mit der Ansicht, was irgendwie für den ausfüllenden blöd aussieht:
Ich habe mir denjenigen selektiert, der am meisten Angebote hat (65).
Dazu müsste ich ja, um bei der Frage mindestens die 65 möglichen Angebote darstellen können, also muss ich ja auch 65 Zeilen bei bei der Y Skala bereitstellen.
Hat ein anderer aber z.B. nur 10 Angebote, dann werden aber weitere zusätzliche 55 Zeilen eingeblendet, da ich das ja so vorgegeben habe.
Gibt es eigentlich eine Möglichkeit die Anzahl der Zeilen der Y Skala dynamisch, z.B. nach vorgeschalteter Gleichung oder einem Wert aufzubauen?
Das würde ja sonst andersrum, wenn ich Frage, ob an bestimmten, bisher noch nicht genutzten Angeboten Interesse hat, ja auch so aussehen..

Vielen Dank!

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 4 weeks ago #239695 by Joffm
Hallo,
bevor ich wieder herumspekuliere,
schicke einfach den lss Export.

Joffm 

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

Please Log in to join the conversation.

  • bambam
  • bambam's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 years 4 weeks ago #239711 by bambam
Hallo Joffm,
die eigentliche .lsa habe ich nicht angefügt, aber ein konkretes Beispiel, wie es aussehen würde, wenn man die Matrix anpasst, so dass alle Varianten passen würden.
Ich habe in der Matrix jeweils 60 y Möglichkeiten vorgeben müssen, damit wie Werte aus den Attributen ausgegeben werden.
Dabei habe ich es aufgeteilt, dass von 1-60 die genutzten Angebote und von 60-120 die ungenutzten Angebote dargestellt werden.
Ich würde dann immer je nach Teilnehmer in der CSV die Werte einfügen und importieren.
Bei dem Teilnehmer mit dem Zugangsschlüssel "tester" sieht man auf der zweiten Seite mit den ungenutzten Angebote, dass die Tabelle kleiner sein müsste, aber halt durch die Vorgabe nicht geht.
Bei dem Teilnehmer mit dem Zugangsschlüssel "doe" sieht man es gleich bei der ersten Seite, das meinte ich, ob es evtl. "dynamisch" geht, je nachdem, ob bei den Attributen ein Feld gefüllt ist oder leer ist.

Die lsa Datei habe ich angehängt (in der lsa sollten ja eigentlich auch die Teilnehmer enthalten sein).
Ich habe nun aus der Version 5.6.0+230116 exportiert.

Viele Grüße
Attachments:

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 4 weeks ago #239721 by Joffm
Hallo,
ich frage mich im Moment, ob es für den Teilnehmer möglich sein soll, diesen Angebotsnamen zu ändern.
Ich sehe darin jetzt noch nicht den tieferen Sinn.

Warum steht er denn in einem Feld der Matrix und dient nicht als Teilfrage?

Die Lösung für Dein Problem der leeren Zeilen ist natürlich die Teilfragenrelevanz.
Z.B. Zeile 17 wird angezeigt, wenn das Attribut17 nicht leer ist, also
!is_empty(TOKEN:ATTRIBUTE_17)

Ich werde aber trotzdem einmal meine Idee des Ganzen zeigen (morgen).

Bis dann
Joffm

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

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 3 weeks ago #239748 by Joffm
Hallo,
etwas später als versprochen:
Hier ein kleines Beispiel (nur 10 Angebote - der Rest war mir zu viel Schreibarbeit)

 

File Attachment:

File Name: survey_arc...5361.lsa
File Size:6 KB


Bis dann

Joffm

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

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose