Αυτή η σελίδα καλύπτει προχωρημένα μοτίβα για εργασία με ομάδες επανάληψης στο rtSurvey. Για τα βασικά εγκατάστασης ομάδας επανάληψης, δείτε Ομαδοποίηση και Επαναλήψεις.


Δυναμικός αριθμός επαναλήψεων

Από προεπιλογή, ο απογραφέας αποφασίζει πόσες φορές θα επαναληφθεί. Μπορείτε να καθορίσετε τον αριθμό επαναλήψεων χρησιμοποιώντας repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersΜέλος νοικοκυριού${num_members}
textmember_nameΌνομα μέλους
integermember_ageΗλικία
end_repeat

Η επανάληψη εκτελείται ακριβώς ${num_members} φορές, όπου num_members συλλέχθηκε νωρίτερα στη φόρμα. Ο απογραφέας δεν μπορεί να προσθέσει ή να αφαιρέσει παρουσίες.


Δεικτοδοτημένη πρόσβαση: indexed-repeat()

Πρόσβαση στην τιμή πεδίου συγκεκριμένης παρουσίας επανάληψης από έξω από την ομάδα επανάληψης χρησιμοποιώντας indexed-repeat(repeatedField, repeatGroup, index):

typenamelabelcalculation
calculatefirst_nameindexed-repeat(${member_name}, ${household_members}, 1)
calculatesecond_nameindexed-repeat(${member_name}, ${household_members}, 2)

Αυτό είναι χρήσιμο για δημιουργία πεδίων σύνοψης ή αναφορά στα δεδομένα του “κύριου” μέλους μετά την επανάληψη.


Θέση τρέχουσας παρουσίας: index()

Μέσα σε ομάδα επανάληψης, η index() επιστρέφει τη θέση με βάση το 1 της τρέχουσας παρουσίας. Χρησιμοποιείτε την για επισήμανση κάθε επανάληψης ή δημιουργία μοναδικών αναγνωριστικών:

typenamelabel
begin_repeatplotsΑγροτεμάχιο
noteplot_labelΑγροτεμάχιο αριθμός ${index()}
textplot_idID αγροτεμαχίου
end_repeat

Αναφορά πεδίων στην ίδια παρουσία

Μέσα σε επανάληψη, χρησιμοποιήστε ${fieldname} για αναφορά σε άλλο πεδίο στην ίδια παρουσία επανάληψης. Δεν χρειάζεται indexed-repeat() εντός του ίδιου βρόχου:

typenamelabelrelevant
begin_repeatmembersΜέλος
textmember_nameΌνομα
integermember_ageΗλικία
textschool_nameΌνομα σχολείου${member_age} < 18
end_repeat

Αναφορά γονικών πεδίων από μέσα σε επανάληψη

Τα πεδία εκτός (πάνω από) την ομάδα επανάληψης μπορούν να αναφερθούν κανονικά με ${fieldname}:

typenamelabel
textvillageΌνομα χωριού
begin_repeatplotsΑγροτικό αγροτεμάχιο
noteplot_contextΑγροτεμάχια σε ${village}
end_repeat

Σύνοψη δεδομένων επανάληψης

Χρησιμοποιήστε συναρτήσεις συνάθροισης επανάληψης εκτός της ομάδας επανάληψης για σύνοψη:

ΣυνάρτησηΠαράδειγμαΠεριγραφή
count(group)count(${household_members})Αριθμός παρουσιών
sum(field)sum(${loan_amount})Άθροισμα αριθμητικού πεδίου
min(field)min(${member_age})Ελάχιστη τιμή
max(field)max(${member_age})Μέγιστη τιμή
join(sep, field)join(', ', ${member_name})Λίστα διαχωρισμένη με κόμμα
count-if(group, expr)count-if(${members}, ${member_age} < 18)Υπό συνθήκη μέτρηση
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Υπό συνθήκη άθροισμα
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Υπό συνθήκη σύνδεση

Παράδειγμα: Σύνοψη νοικοκυριού

typenamelabelcalculation
integernum_membersΠόσα μέλη;
begin_repeatmembersΜέλος${num_members}
textmember_nameΌνομα
integermember_ageΗλικία
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} μέλη· ${children_count} κάτω των 18. Ενήλικες: ${adult_names}

Ένθετες επαναλήψεις

Μια ομάδα επανάληψης μπορεί να περιέχει άλλη ομάδα επανάληψης. Χρησιμοποιείτε αυτό με προσοχή — οι ένθετες επαναλήψεις προσθέτουν πολυπλοκότητα και μπορεί να είναι συγχυτικές για τους απογραφείς.

typenamelabel
begin_repeathouseholdsΝοικοκυριό
texthh_idID νοικοκυριού
begin_repeathh_membersΜέλος
textmember_nameΌνομα μέλους
end_repeat
end_repeat

Για αναφορά σε πεδίο σε εξωτερική επανάληψη από την εσωτερική επανάληψη, χρησιμοποιήστε ${fieldname} — αναλύεται στον πλησιέστερο αντιστοιχούμενο πρόγονο:

Μέσα στην επανάληψη hh_members, το ${hh_id} επιστρέφει το ID του τρέχοντος νοικοκυριού, όχι όλων των νοικοκυριών.


Κατάταξη μέσα σε ομάδες επανάληψης: rank-index()

Όταν υπάρχει πεδίο rank μέσα σε επανάληψη, χρησιμοποιήστε rank-index(instanceNumber, repeatedField) από έξω για λήψη της τακτικής κατάταξης συγκεκριμένης παρουσίας:

typenamelabelcalculation
calculatetop_scorerrank-index(1, ${score})

Η rank-index(1, ${score}) επιστρέφει τον δείκτη παρουσίας με την υψηλότερη βαθμολογία.


Βέλτιστες πρακτικές

  1. Πάντα χρησιμοποιείτε repeat_count όταν ο αριθμός επαναλήψεων είναι γνωστός εκ των προτέρων — αποτρέπει τους απογραφείς από το να προσθέτουν ή αφαιρούν παρουσίες κατά λάθος.
  2. Διατηρείτε τις ομάδες επανάληψης εστιασμένες — μια επανάληψη με 20+ ερωτήσεις ανά παρουσία είναι δύσκολη στην πλοήγηση.
  3. Ονομάζετε ομάδες επανάληψης ξεκάθαρα (π.χ. household_members, όχι repeat1) — το όνομα εμφανίζεται σε κλήσεις συναρτήσεων και εξαγόμενα δεδομένα.
  4. Δοκιμάστε με τον μέγιστο αναμενόμενο αριθμό παρουσιών για επαλήθευση επιδόσεων.
  5. Χρησιμοποιήστε εμφάνιση field-list στην ομάδα επανάληψης για εμφάνιση όλων των πεδίων σε μία οθόνη ανά παρουσία (κινητό).

Περιορισμοί

  • Η indexed-repeat() απαιτεί έγκυρο δείκτη (1 έως αριθμό παρουσιών) — δείκτες εκτός εύρους επιστρέφουν κενό.
  • Οι ένθετες επαναλήψεις πέρα από 2 επίπεδα δεν συνιστώνται και ενδέχεται να προκαλέσουν προβλήματα εμφάνισης σε ορισμένους πελάτες.
  • Οι συναρτήσεις συνάθροισης (sum, count κ.λπ.) λειτουργούν σε ολόκληρη την ομάδα επανάληψης — δεν μπορείτε να συναθροίσετε υποσύνολο παρουσιών χωρίς παραλλαγές *-if.
Ήταν χρήσιμη αυτή η σελίδα;