Προχωρημένες επαναλήψεις
Προχωρημένα μοτίβα για ομάδες επανάληψης: δυναμικές μετρήσεις, ένθετες επαναλήψεις, σύνοψη δεδομένων επανάληψης και αναφορά τιμών σε επαναλήψεις.
Αυτή η σελίδα καλύπτει προχωρημένα μοτίβα για εργασία με ομάδες επανάληψης στο rtSurvey. Για τα βασικά εγκατάστασης ομάδας επανάληψης, δείτε Ομαδοποίηση και Επαναλήψεις.
Δυναμικός αριθμός επαναλήψεων
Από προεπιλογή, ο απογραφέας αποφασίζει πόσες φορές θα επαναληφθεί. Μπορείτε να καθορίσετε τον αριθμό επαναλήψεων χρησιμοποιώντας repeat_count:
| type | name | label | repeat_count |
|---|---|---|---|
| begin_repeat | household_members | Μέλος νοικοκυριού | ${num_members} |
| text | member_name | Όνομα μέλους | |
| integer | member_age | Ηλικία | |
| end_repeat |
Η επανάληψη εκτελείται ακριβώς ${num_members} φορές, όπου num_members συλλέχθηκε νωρίτερα στη φόρμα. Ο απογραφέας δεν μπορεί να προσθέσει ή να αφαιρέσει παρουσίες.
Δεικτοδοτημένη πρόσβαση: indexed-repeat()
Πρόσβαση στην τιμή πεδίου συγκεκριμένης παρουσίας επανάληψης από έξω από την ομάδα επανάληψης χρησιμοποιώντας indexed-repeat(repeatedField, repeatGroup, index):
| type | name | label | calculation |
|---|---|---|---|
| calculate | first_name | indexed-repeat(${member_name}, ${household_members}, 1) | |
| calculate | second_name | indexed-repeat(${member_name}, ${household_members}, 2) |
Αυτό είναι χρήσιμο για δημιουργία πεδίων σύνοψης ή αναφορά στα δεδομένα του “κύριου” μέλους μετά την επανάληψη.
Θέση τρέχουσας παρουσίας: index()
Μέσα σε ομάδα επανάληψης, η index() επιστρέφει τη θέση με βάση το 1 της τρέχουσας παρουσίας. Χρησιμοποιείτε την για επισήμανση κάθε επανάληψης ή δημιουργία μοναδικών αναγνωριστικών:
| type | name | label |
|---|---|---|
| begin_repeat | plots | Αγροτεμάχιο |
| note | plot_label | Αγροτεμάχιο αριθμός ${index()} |
| text | plot_id | ID αγροτεμαχίου |
| end_repeat |
Αναφορά πεδίων στην ίδια παρουσία
Μέσα σε επανάληψη, χρησιμοποιήστε ${fieldname} για αναφορά σε άλλο πεδίο στην ίδια παρουσία επανάληψης. Δεν χρειάζεται indexed-repeat() εντός του ίδιου βρόχου:
| type | name | label | relevant |
|---|---|---|---|
| begin_repeat | members | Μέλος | |
| text | member_name | Όνομα | |
| integer | member_age | Ηλικία | |
| text | school_name | Όνομα σχολείου | ${member_age} < 18 |
| end_repeat |
Αναφορά γονικών πεδίων από μέσα σε επανάληψη
Τα πεδία εκτός (πάνω από) την ομάδα επανάληψης μπορούν να αναφερθούν κανονικά με ${fieldname}:
| type | name | label |
|---|---|---|
| text | village | Όνομα χωριού |
| begin_repeat | plots | Αγροτικό αγροτεμάχιο |
| note | plot_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) | Υπό συνθήκη σύνδεση |
Παράδειγμα: Σύνοψη νοικοκυριού
| type | name | label | calculation |
|---|---|---|---|
| integer | num_members | Πόσα μέλη; | |
| begin_repeat | members | Μέλος | ${num_members} |
| text | member_name | Όνομα | |
| integer | member_age | Ηλικία | |
| end_repeat | |||
| calculate | total_members | count(${members}) | |
| calculate | children_count | count-if(${members}, ${member_age} < 18) | |
| calculate | adult_names | join-if(', ', ${member_name}, ${member_age} >= 18) | |
| note | summary | ${total_members} μέλη· ${children_count} κάτω των 18. Ενήλικες: ${adult_names} |
Ένθετες επαναλήψεις
Μια ομάδα επανάληψης μπορεί να περιέχει άλλη ομάδα επανάληψης. Χρησιμοποιείτε αυτό με προσοχή — οι ένθετες επαναλήψεις προσθέτουν πολυπλοκότητα και μπορεί να είναι συγχυτικές για τους απογραφείς.
| type | name | label |
|---|---|---|
| begin_repeat | households | Νοικοκυριό |
| text | hh_id | ID νοικοκυριού |
| begin_repeat | hh_members | Μέλος |
| text | member_name | Όνομα μέλους |
| end_repeat | ||
| end_repeat |
Για αναφορά σε πεδίο σε εξωτερική επανάληψη από την εσωτερική επανάληψη, χρησιμοποιήστε ${fieldname} — αναλύεται στον πλησιέστερο αντιστοιχούμενο πρόγονο:
Μέσα στην επανάληψη hh_members, το ${hh_id} επιστρέφει το ID του τρέχοντος νοικοκυριού, όχι όλων των νοικοκυριών.
Κατάταξη μέσα σε ομάδες επανάληψης: rank-index()
Όταν υπάρχει πεδίο rank μέσα σε επανάληψη, χρησιμοποιήστε rank-index(instanceNumber, repeatedField) από έξω για λήψη της τακτικής κατάταξης συγκεκριμένης παρουσίας:
| type | name | label | calculation |
|---|---|---|---|
| calculate | top_scorer | rank-index(1, ${score}) |
Η rank-index(1, ${score}) επιστρέφει τον δείκτη παρουσίας με την υψηλότερη βαθμολογία.
Βέλτιστες πρακτικές
- Πάντα χρησιμοποιείτε
repeat_countόταν ο αριθμός επαναλήψεων είναι γνωστός εκ των προτέρων — αποτρέπει τους απογραφείς από το να προσθέτουν ή αφαιρούν παρουσίες κατά λάθος. - Διατηρείτε τις ομάδες επανάληψης εστιασμένες — μια επανάληψη με 20+ ερωτήσεις ανά παρουσία είναι δύσκολη στην πλοήγηση.
- Ονομάζετε ομάδες επανάληψης ξεκάθαρα (π.χ.
household_members, όχιrepeat1) — το όνομα εμφανίζεται σε κλήσεις συναρτήσεων και εξαγόμενα δεδομένα. - Δοκιμάστε με τον μέγιστο αναμενόμενο αριθμό παρουσιών για επαλήθευση επιδόσεων.
- Χρησιμοποιήστε εμφάνιση
field-listστην ομάδα επανάληψης για εμφάνιση όλων των πεδίων σε μία οθόνη ανά παρουσία (κινητό).
Περιορισμοί
- Η
indexed-repeat()απαιτεί έγκυρο δείκτη (1 έως αριθμό παρουσιών) — δείκτες εκτός εύρους επιστρέφουν κενό. - Οι ένθετες επαναλήψεις πέρα από 2 επίπεδα δεν συνιστώνται και ενδέχεται να προκαλέσουν προβλήματα εμφάνισης σε ορισμένους πελάτες.
- Οι συναρτήσεις συνάθροισης (
sum,countκ.λπ.) λειτουργούν σε ολόκληρη την ομάδα επανάληψης — δεν μπορείτε να συναθροίσετε υποσύνολο παρουσιών χωρίς παραλλαγές*-if.