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.
Ograniczanie liczby rekordów powtórzenia
Aby zdefiniować liczbę powtórzeń w aplikacji Survey123, ustaw liczbę powtórzeń, wykonując poniższe 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żytkownik musi przejść przez wszystkie 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. 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ę ze zredukowaną liczbą powtórzeń w górnej części powtórzenia znajduje się przycisk 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ę nie powoduje wysłania rekordów powyżej nowej liczby powtórzeń.
Podczas edytowania istniejącej odpowiedzi na ankietę ze zredukowaną liczbą powtórzeń wyświetlany jest komunikat (w górnej części powtórzenia) z ostrzeżeniem, że liczba rekordów powtórzeń zmieniła się. Użytkownik nie może przesłać edytowanej odpowiedzi z mniejszą niż oryginalna liczbą rekordów powtórzeń. Dodatkowe nowe rekordy powtórzeń są akceptowane tylko wtedy, gdy właściwość allowAdds jest skonfigurowana na wartość true w kolumnie bind::esri:parameters. Jeśli właściwość allowAdds jest skonfigurowana na wartość false, użytkownik nie może wprowadzać większej niż oryginalna liczby rekordów 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 i count można umieścić w powtórzeniu lub poza nim. Jeśli funkcje sum i count mają być używane w aplikacji internetowej Survey123, muszą zostać umieszczone poza powtórzeniem. Wartości funkcji sum lub count 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 łączenie pytań typu geopoint (punkt geograficzny) w powtórzeniu w pytanie 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.