Calculate-Fragen in XLSForms und rtSurvey werden verwendet, um Berechnungen basierend auf anderen Feldern oder Werten in Ihrem Formular durchzuführen. Diese Fragen werden dem Benutzer nicht angezeigt, sondern laufen im Hintergrund und speichern ihre Ergebnisse für die spätere Verwendung oder Übermittlung.

Syntax

In der XLSForm wird eine calculate-Frage wie folgt definiert:

typenamelabelcalculation
calculatecalc_q1${q1} + ${q2}
  • type: Für diesen Fragetyp immer calculate.
  • name: Ein eindeutiger Name für die calculate-Frage.
  • label: Wird normalerweise leer gelassen, da calculate-Fragen den Benutzern nicht angezeigt werden.
  • calculation: Die auszuwertende Formel.

Anwendungen

Calculate-Fragen werden häufig verwendet für:

  1. Durchführung arithmetischer Operationen
  2. Verknüpfung von Zeichenfolgen (Strings)
  3. Anwendung komplexer Logik oder Funktionen
  4. Speicherung von Zwischenergebnissen für die spätere Verwendung

Beispiele

Grundlegende Arithmetik

  | type      | name     | calculation |
|-----------|----------|-------------|
| calculate | total    | ${price} * ${quantity} |
  

Zeichenfolgenverknüpfung (String Concatenation)

  | type      | name     | calculation |
|-----------|----------|-------------|
| calculate | full_name| concat(${first_name}, ' ', ${last_name}) |
  

Verwendung von Funktionen

  | type      | name     | calculation |
|-----------|----------|-------------|
| calculate | age      | int((today() - ${date_of_birth}) / 365.25) |
  

Fortgeschrittene Verwendung in rtSurvey

pulldata() Funktion

rtSurvey unterstützt die Funktion pulldata() in calculate-Feldern, mit der Sie Daten aus externen CSV-Dateien abrufen können:

  | type      | name     | calculation |
|-----------|----------|-------------|
| calculate | city     | pulldata('cities', 'city_name', 'zip_code', ${zip_input}) |
  

Syntax

Die grundlegende Syntax für pulldata() ist:

  pulldata('csv_filename', 'column_to_return', 'key_column', ${matching_value})
  
  • ‘csv_filename’: Name der CSV-Datei (ohne die Erweiterung .csv)
  • ‘column_to_return’: Spaltenname, der die Daten enthält, die Sie abrufen möchten
  • ‘key_column’: Spaltenname, der für den Abgleich verwendet werden soll
  • ${matching_value}: Wert, nach dem in der Schlüsselspalte gesucht werden soll (oft eine Variable aus dem Formular)

Wichtige Hinweise

  1. Die CSV-Datei muss zusammen mit Ihrer XLSForm hochgeladen werden, wenn Sie die Umfrage bereitstellen.
  2. Verwenden Sie in Ihrer CSV-Datei Kommas als Trennzeichen, keine Semikolons.
  3. Vermeiden Sie Kommas innerhalb der Datenfelder Ihrer CSV-Datei, da diese Probleme beim Parsen verursachen können.
  4. pulldata() unterstützt nur 1-zu-1-Beziehungen. Wenn mehrere Übereinstimmungen gefunden werden, wird nur die erste zurückgegeben.
  5. Es kann Einschränkungen bei der Textlänge geben, die abgerufen werden kann (ca. 76 Zeichen).
  6. Sie können pulldata() in Constraints verwenden, um Eingaben gegen die CSV-Daten zu validieren.

Bedingte Berechnungen

Sie können if()-Anweisungen für bedingte Berechnungen verwenden:

  | type      | name     | calculation |
|-----------|----------|-------------|
| calculate | discount | if(${total} > 1000, ${total} * 0.1, 0) |
  

Best Practices

  1. Verwenden Sie aussagekräftige Namen für calculate-Felder, um die Lesbarkeit des Formulars zu verbessern.
  2. Vermeiden Sie zu komplexe Berechnungen in einem einzigen Feld; unterteilen Sie sie bei Bedarf.
  3. Testen Sie Ihre Berechnungen gründlich, insbesondere wenn Sie komplexe Formeln oder externe Daten verwenden.
  4. Denken Sie daran, dass calculate-Felder jedes Mal ausgeführt werden, wenn das Formular ausgewertet wird, was bei sehr komplexen oder zahlreichen Berechnungen die Leistung beeinträchtigen kann.
  5. Stellen Sie bei der Verwendung von pulldata() sicher, dass Ihre CSV-Dateien korrekt formatiert sind, und testen Sie gründlich mit Ihren spezifischen Daten und der Formularstruktur.

Einschränkungen

  • Calculate-Felder sind von den Benutzern nicht direkt bearbeitbar.
  • Das Ergebnis eines calculate-Feldes ist nicht sofort sichtbar, es sei denn, es wird in einem Anzeigefeld referenziert oder in der Formularlogik verwendet.
War diese Seite hilfreich?