Czy możesz wykonać WYBÓR UNII w Arkuszu Google?

10

Mam Arkusz Google połączony z formularzem, który zbiera odpowiedzi od trzech różnych osób na ten sam temat, używając tego samego formularza i trzy razy edytując. Spowoduje to utworzenie arkusza zawierającego trzy kolumny wskazujące, gdzie znajdują się trzy osoby.

Muszę stworzyć widok / zapytanie, które bierze te trzy kolumny i umieszcza je „pod” sobą, a nie obok siebie. W bazie danych zrobiłbym coś w rodzaju zapytania poniżej, nazwałem mój „arkusz” tblMain i podałem odpowiednie cztery kolumny (potrzebuję również identyfikatora podmiotu).

tblMain:

ID        RALocation        RBLocation        RCLocation

Pytanie:

Select ID, RALocation as Location, 'RA' as Role from tblMain
Union
Select ID, RBLocation as Location, 'RB' as Role from tblMain
Union
Select ID, RCLocation as Location, 'RC' as Role from tblMain

Czy ktoś wie, czy można to zrobić w Arkuszach Google? Nie mam nic przeciwko budowaniu więcej niż jednego arkusza, a następnie łączeniu ich na końcu, ale trochę utknąłem w tym, jak to zrobić.

AnneB
źródło
Czy liczba wierszy jest stała, czy zmieni się z czasem?
Rubén

Odpowiedzi:

3

Oferuję dwie wersje, w zależności od tego, czy należy zachować puste komórki. Podstawowa idea jest taka sama:

  1. Wybierz postać, której nie ma w tabeli (np. Egzotyczną postać Unicode dostępną za pośrednictwem CHAR).
  2. Użyj go w JOINpoleceniu dla każdej z trzech kolumn.
  3. Połącz wyniki, dodając znak pomiędzy.
  4. SPLIT połączony ciąg tego samego znaku.
  5. TRANSPOSE wynik.

Na przykład:

=TRANSPOSE( SPLIT( JOIN(CHAR(57344),A1:A) &CHAR(57344)& JOIN(CHAR(57344),B1:B) &CHAR(57344)& JOIN(CHAR(57344),C1:C), CHAR(57344) ) )

gdzie do łączenia / dzielenia, wybrałem znak CHAR(57344), który jest przeznaczony do użytku prywatnego, a zatem nie powinien być obecny w żadnych prawidłowych danych wejściowych.

Powyższa formuła usuwa puste wpisy , ponieważ tak właśnie SPLITdziała. Może to być wygodne, jeśli dane nie mają pustych miejsc: oszczędza kłopotów ze śledzeniem, gdzie znajduje się ostatni wiersz danych. Ale innym razem należy zachować puste miejsca.

Aby zachować puste miejsca, podążam za odpowiedzią Jacoba Jana Tuinstry, tyle że użyłem innego prywatnego użytku Unicode zamiast spacji (kto wie, może masz jakieś komórki zawierające tylko spację i chcesz je zachować). Wymaga to dwóch dodatkowych kroków: po połączeniu wszystkiego jak poprzednio, używam SUBSTITUTEdo zamiany CHAR(57344)przez CHAR(57344)&CHAR(57345), a następnie dzielę jak poprzednio i zastępuję CHAR(57345)pustym ciągiem.

=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(...joins... , CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "")))

Pełny wynik wygląda tak (zauważ, że teraz określam, gdzie jest ostatni wiersz danych):

=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(JOIN(CHAR(57344),A1:A9) &CHAR(57344)& JOIN(CHAR(57344),B1:B9) &CHAR(57344)& JOIN(CHAR(57344),C1:C9), CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "" )))

Jeszcze jedno zastrzeżenie: ciągi znaków w Arkuszach Google nie mogą przekraczać 50000 znaków. Jeśli twoje dane są zbyt duże, aby można było zastosować podejście oparte na łańcuchach, użyj skryptu ( ten jest dobrym miejscem na rozpoczęcie).

Społeczność
źródło
To działa na ucztę i mogę je połączyć, aby uzyskać właściwy wynik. Jedyne, co teraz próbuję zrobić, to sprawić, by szanowało wartości NULL i je przeciągało, okazało się, że twój FILTR nie był potrzebny, usunie je, jeśli znajdzie wartości NULL. Masz pomysł, jak to zrobić, aby szanować NULL?
AnneB,
1
W rzeczywistości „inna odpowiedź” jest w tej chwili odpowiedzią częściową. Oprócz innych alternatyw istotna brakująca część dotyczy sposobu korzystania z tablic osadzonych zamiast podejścia UNION-SELECT.
Rubén
2
Wspaniale. Prawdopodobnie będę musiał zajrzeć do skryptu, kiedy nasz pilot się skończy, ale na razie mam dość, aby kontynuować. Ludzie tutaj są naprawdę pomocni, dziękuję wszystkim!
AnneB,
3

Obecnie można bardzo łatwo utworzyć związek w Arkuszu kalkulacyjnym Google za pomocą tej formuły:

={'Sheet1'!A2:A;'Sheet2'!A2:A;'Sheet3'!A2:A}

Zobacz więcej informacji w Pomocy Dokumentów Google: Używanie tablic w Arkuszach Google

Emilio Nicolás
źródło
2

Krótka odpowiedź

Arkusze Google to bardzo potężne narzędzie, które ma kilka alternatyw, aby osiągnąć wynik podobny do UNION-SELECT.

Alternatywy

Osadzone tablice

Alternatywą dla użycia metody SPLIT-TRANSPOSE-JOIN-CHAR jest użycie tablic osadzonych. Jedną z zalet tej metody jest to, że nie wymaga ona konstruowania / dekonstruowania ciągów, więc limit liczby znaków nie ma znaczenia.

Emdedded array

Filtracja

Powyższe można zastosować w połączeniu z FILTER () w przypadkach, które wymagają filtrowania, aby mieć podobne zachowanie UNION-SELECT. Przykład

={Filter(A1:B2, B1:B2=2);Filter(D1:E2, E1:E2=6);Filter(G1:H2, H1:H2=12)}

Można go również użyć w połączeniu z QUERY (), ale jego wyniki zawierają wiersz nagłówka. Aby dowiedzieć się, jak pozbyć się nagłówków, zobacz Pozbądź się wiersza w wyniku zapytania do Arkuszy kalkulacyjnych Google .

Jak utworzyć kolumnę wartości

Użyj TRANSPOSE-SPLIT-REPT, aby utworzyć kolumnę wartości.

={Transpose(Split(REPT("RA,",6),","))}

Można również użyć QUERY () do utworzenia kolumny wartości, ale usunięcie wiersza nagłówków może uczynić formułę bardziej złożoną. Używaj go tylko wtedy, gdy ograniczenia długości łańcucha powodują problemy.

Rozwiązanie wykorzystujące macierze wbudowane i TRANSPOSE-SPLIT-REPT

Załóżmy, że zakres tblMain to A1: D7, gdzie A1: D1 to nagłówki tabeli, a dane znajdują się w A2: D7.

={{"ID";A2:A7;A2:A7;A2:A7},
{"Location";B2:B7;C2:C7;D2:D7},{"Role";
Transpose(Split(REPT("RA,",6),","));
Transpose(Split(REPT("RB,",6),","));
Transpose(Split(REPT("RC,",6),","))}}

Bibliografia

Dołączanie tablic arkusza kalkulacyjnego Google - StackOverflow

Ruben
źródło
Musisz przeczytać więcej odpowiedzi ode mnie;). Nie znalazłem jeszcze oficjalnych artykułów na ten temat. Wiem, że na forach produktów Google i w Internecie są wątki, takie jak odniesienie, które już zamieściłem.
Rubén
Dziękuję za to, obecnie patrzę na ostatnie rozwiązanie, myślę, że zadziała bardzo dobrze dla naszego pilota!
AnneB,