W formularzu XLSForm istnieje możliwość wielokrotnego powtarzania grupy pytań. Poniżej przedstawiono przykłady dotyczące używania powtórzeń:
- Zbieranie wielu odpowiedzi na to samo pytanie w jednej ankiecie.
- Zbieranie osobnych, mniejszych zbiorów rekordów, takich jak imię i nazwisko, wiek oraz płeć każdej osoby w gospodarstwie domowym.
- Zbieranie wielu pytań typu map (mapa) w jednej ankiecie.

Podczas publikowania ankiety zawierającej powtórzenia, każde z nich jest tworzone jako powiązana tabela w warstwie obiektowej lub jako powiązana warstwa, jeśli powtórzenie zawiera pytanie typu geopoint (punkt geograficzny), geotrace (ślad geograficzny) lub geoshape (kształt geograficzny).
Używanie powtórzeń
Aby powtórzyć grupę pytań w aplikacji Survey123 w celu zebrania wielu odpowiedzi, wykonaj następujące czynności na karcie survey (ankieta) w arkuszu kalkulacyjnym:
- W wierszu, w którym ma się rozpocząć powtórzenie, wpisz tekst begin repeat (rozpocznij powtórzenie) w kolumnie type (typ).
- Podaj nazwę powtórzenia w kolumnie name (nazwa).
- W wierszach poniżej wprowadzaj pytania, które mają znaleźć się w powtórzeniu.
- Zaraz po pytaniach wpisz wartość end repeat (zakończ powtórzenie) w kolumnie type (typ).
W ankiecie zostaje utworzona grupa pytań, na które można odpowiadać wiele razy. Domyślnie nie ma żadnych ograniczeń dotyczących tego, ile razy można powtarzać pytania.
Lokalizacje punktów z pierwszego pytania typu geopoint (punkt geograficzny) w powtórzeniu mogą zostać wyświetlone na dowolnej mapie w ankiecie. Więcej informacji zawiera sekcja Nakładanie punktów na mapie.
Określanie liczby rekordów powtórzenia
Aby określić liczbę rekordów powtórzenia w obrębie powtórzenia, należy skonfigurować liczbę powtórzeń, wykonując następujące czynności:
- W wierszu, w którym ma się rozpocząć powtórzenie, wpisz tekst begin repeat (rozpocznij powtórzenie) w kolumnie type (typ) na karcie survey (ankieta).
- Podaj wartość liczbową oznaczającą liczbę powtórzeń w kolumnie repeat_count (liczba powtórzeń). Można także podać nazwę pytania lub obliczenie zwracające wartość liczbową.
- Podaj nazwę powtórzenia w kolumnie name (nazwa).
- W wierszach poniżej wprowadzaj pytania, które mają znaleźć się w powtórzeniu.
- W ostatnim wierszu wpisz wartość end repeat (zakończ powtórzenie) w kolumnie type (type).
Gdy użytkownik otwiera ankietę, powtórzenia są już utworzone w liczbie skonfigurowanej w kolumnie repeat_count (liczba powtórzeń). Użytkownicy nie mogą tworzyć ani usuwać powtórzeń.
Użytkownicy muszą przejść przez wszystkie rekordy powtórzenia określone przez wartość repeat_count (liczba powtórzeń) przed przesłaniem odpowiedzi na ankietę. W przeciwnym razie nie wszystkie rekordy powtórzenia zostaną przesłane, ponieważ wyrażeń i wartości domyślnych nie można stosować do powtórzeń, dopóki użytkownicy nie przejdą do rekordu. Aby mieć pewność, że wszystkie powtórzenia zostaną przesłane, można w powtórzeniach utworzyć pytania wymagane. Należy pamiętać, że pytania w powtórzeniach stosujące odpowiednie lub wymagane warunkowo wyrażenie nie są oceniane przy przesyłaniu.
Notatka:
Zachowanie powtórzenia ze zmieniającą się liczbą powtórzeń może różnić się w zależności od tego, czy tworzona jest odpowiedź na ankietę, czy edytowana jest przesłana wcześniej odpowiedź.
- Podczas tworzenia odpowiedzi na ankietę w aplikacji terenowej wyświetlany jest przycisk w górnej części powtórzenia umożliwiający usunięcie wszystkich rekordów z danymi powyżej nowej liczby powtórzeń. Puste rekordy są usuwane automatycznie. Niezależnie od tego, czy ten przycisk jest naciśnięty, przesłanie odpowiedzi na ankietę powoduje wysłanie wszystkich rekordów z wyjątkiem pustych.
- Podczas edycji istniejącej odpowiedzi na ankietę w aplikacji terenowej wyświetlany jest komunikat w górnej części powtórzenia wskazujący, że liczba rekordów jest niezgodna z liczbą powtórzeń. Nowe rekordy powtórzenia można dodawać tylko wtedy, gdy właściwość allowAdds jest skonfigurowana na wartość true w kolumnie bind::esri:parameters. Rekordów przekraczających liczbę powtórzeń nie można usuwać, ponieważ aplikacja terenowa nie obsługuje usuwania istniejących rekordów powtórzeń. Zmodyfikowane odpowiedzi na ankietę można przesyłać nawet wtedy, gdy liczba rekordów powtórzeń jest niezgodna z liczbą powtórzeń.
Funkcje agregujące
Funkcji agregujących można używać do zwracania wartości pochodzących z odpowiedzi z powtórzeń. W tym celu do pytania w powtórzeniu odwołuje się pytanie spoza powtórzenia. Na przykład następująca formuła liczy odpowiedzi na pojedyncze pytanie w powtórzeniach:
count(${repeated_question})
W celu agregowania odpowiedzi można używać następujących funkcji:
- count
- sum
- min
- max
- join
Te funkcje dotyczą jedynie bieżącej odpowiedzi ankiety. Nie uwzględniają one innych rekordów w warstwie obiektowej. Możliwe jest też umieszczenie pytań używających funkcji sum i count w powtórzeniu. Jednak, o ile wartości funkcji sum i count są obliczane dla każdego nowego rekordu dodanego do powtórzenia, obliczenia przeprowadzone w poprzednich wpisach nie są automatycznie aktualizowane. Obliczenia te można odświeżyć ręcznie, używając przycisku Odśwież znajdującego się obok pytania. Użycie funkcji min i max obsługiwane jest tylko poza powtórzeniem.
Notatka:
W aplikacji terenowej Survey123 funkcje sum, count i join można umieścić w powtórzeniu lub poza nim. Jeśli funkcje sum, count i join mają być używane w aplikacji internetowej Survey123, muszą zostać umieszczone poza powtórzeniem. Wartości funkcji sum, count lub join spoza powtórzenia mogą być przywoływane w obliczeniu wewnątrz powtórzenia.
Funkcja join umożliwia łączenie ze sobą pytań zwracających ciąg znakowy. Funkcja sum umożliwia połączenie pytania typu geopoint (punkt geograficzny) w powtórzeniu jako pytania typu geotrace (ślad geograficzny) lub geoshape (kształt geograficzny) poza powtórzeniem.
Więcej informacji na temat używania tych funkcji można znaleźć w sekcji Formuły.
Zwracanie indeksu rekordu powtórzenia
Za pomocą funkcji position(..) można zwrócić liczbę całkowitą odpowiadającą indeksowi rekordu powtórzenia w powtórzeniu. Na przykład dla pierwszego rekordu w powtórzeniu zostanie zwrócona wartość 1, dla drugiego wartość 2 itd. W następującym przykładzie funkcja position(..) jest używana w ukrytym pytaniu typu integer (liczba całkowita) w powtórzeniu:

Uwaga:
Funkcja position(..) zawsze zwraca wartość 0 w aplikacji terenowej Survey123 lub wartość 1 w aplikacji internetowej Survey123, gdy jest używana poza powtórzeniem lub w grupie znajdującej się w powtórzeniu.
Funkcji position(..) można też użyć w wyrażeniu. W przykładzie poniżej funkcja selected-at() korzysta z funkcji position(..) do zwrócenia wyboru dokonanego w pytaniu typu select_multiple (wybierz wiele) w tej samej pozycji co bieżący rekord powtórzenia i wyświetlenia wyboru w powtórzeniu jako uwagi. Funkcja selected-at() rozpoczyna liczenie wyborów od zera, dlatego od wartości position(..) jest odejmowane jeden, aby dopasować indeksy.
selected-at(${issues}, position(..)-1)

Funkcji position(..) można użyć w połączeniu z funkcją indexed-repeat() w celu wyodrębnienia wartości pytania z określonych rekordów powtórzeń.
Używanie wartości z indeksowanych powtórzeń
Funkcji indexed-repeat() można użyć do zwrócenia wartości z konkretnego pytania w rekordzie powtórzeń. Wymagane są: nazwa pytania, nazwa powtórzenia oraz numer indeksu powtórzenia, w tej kolejności. W poniższym przykładzie zostanie zwrócona odpowiedź na pytanie room_no dla trzeciego rekordu w powtórzeniu floor:
indexed-repeat(${room_no}, ${floor}, 3)
Funkcji indexed-repeat() można użyć dla powtórzeń w obrębie powtórzeń. Jeśli jest ona używana w ten sposób, otrzymuje tylko wartości dostępne z poziomu aktualnie widocznego powtórzenia nadrzędnego.
Uwaga:
Nie można użyć funkcji indexed-repeat() w powtórzeniu, do którego się ona odwołuje, ponieważ powoduje to odwołanie cykliczne. Na przykład następującego wyrażenia nie można użyć do obliczeń w powtórzeniu o nazwie defects:
indexed-repeat(${defect_type}, ${defects}, 3)
Znane ograniczenia
Poniżej wymieniono pewne znane ograniczenia i nieoczekiwane zachowania związane z użyciem powtórzeń w aplikacji Survey123:
- Jeśli ankieta zawiera puste powtórzenie bez żadnych pytań między elementami begin repeat (rozpocznij powtórzenie) i end repeat (zakończ powtórzenie), nie powiedzie się przesłanie żadnych odpowiedzi w ankiecie.
- Jeśli ankieta zawiera wiele powtórzeń, a jedno z nich zawiera pytanie typu geopoint (punkt geograficzny), geotrace (ślad geograficzny) lub geoshape (kształt geograficzny), nazwy relacji mogą być publikowane w niewłaściwej kolejności.
- Zagnieżdżone powtórzenia obsługują tylko relacje jeden do wielu, a każdy element podrzędny może mieć tylko jeden element nadrzędny.
- Zagnieżdżone powtórzenia z wyrażeniem zarówno w kolumnie relevant (odpowiednie), jak i wyrażeniem w kolumnie repeat_count (liczba powtórzeń) powodują wyczyszczenie wszystkich istniejących zapisanych danych w pierwszym rekordzie powtórzenia. Aby tego uniknąć, należy uwzględnić wyrażenie relevant (odpowiednie) w wyrażeniu repeat_count (liczba powtórzeń), aby nie były tworzone żadne rekordy powtórzeń, gdy powtórzenie nie jest istotne.
- Edycja poszczególnych odpowiedzi w aplikacji internetowej lub witrynie Survey123 nie jest obsługiwana w przypadku ankiet zawierających zagnieżdżone powtórzenia.