Excel spopularyzował Tabele Przestawne – świetne do ad-hoc, ale martwe i kruche przy dynamicznych danych. Jeśli pracujesz na Google Workspace i chcesz arkusz, który sam się aktualizuje, filtruje i agreguje bez ręcznego klikania – masz 5 funkcji, które zmieniają Sheets w prawdziwe środowisko analityczne.

1. QUERY() – SQL bezpośrednio w arkuszu

Zamiast dziesiątek filtrów i kolumn pomocniczych, QUERY() pozwala napisać zapytanie podobne do SQL i dostać wynik jako dynamiczną tabelę. Przy każdym nowym wierszu w źródle – wynik aktualizuje się automatycznie.

Przykład: wyciąg zamówień ze statusem „Zrealizowany" o wartości powyżej 1000 zł, posortowany malejąco:

=QUERY(Baza!A:F;
  "SELECT A, B, SUM(F)
   WHERE C = 'Zrealizowany' AND F > 1000
   GROUP BY A, B
   ORDER BY SUM(F) DESC
   LABEL SUM(F) 'Łączny Przychód'")

Przykład 2: suma sprzedaży per miesiąc z tabeli transakcji (kolumna A = data, kolumna F = kwota):

=QUERY(Transakcje!A:F;
  "SELECT MONTH(A), SUM(F)
   GROUP BY MONTH(A)
   ORDER BY MONTH(A)
   LABEL MONTH(A) 'Miesiąc', SUM(F) 'Przychód'")

QUERY() zastępuje Tabelę Przestawną tam, gdzie wynik musi być żywy i powiązany z innymi formułami.

2. ARRAYFORMULA() – jedna formuła zamiast 1000 wierszy

Klasyczny problem: wpisujesz formułę w B2, ciągniesz w dół do B1000. Nowy pracownik wstawia wiersz 501 i niechcący przerywa zakres. ARRAYFORMULA() rozwiązuje to raz na zawsze.

=ARRAYFORMULA(A2:A * B2:B)          -- mnożenie kolumn
=ARRAYFORMULA(IF(C2:C=""; ""; C2:C * 0.23))  -- VAT tylko dla niepustych

Formuła wpisana raz w B2 automatycznie wypełni B3:Binfinity dla każdego nowego wiersza. Jedno miejsce, zero ryzyka uszkodzenia przez kopiowanie.

3. FILTER() – dynamiczne wyciąganie wierszy z warunkami

FILTER() zwraca tylko te wiersze, które spełniają warunek – i odświeża się automatycznie. Przewaga nad autofilterem: wynik jest formułą, można go zagnieżdżać.

-- Klienci z Polski lub Niemiec z zamówieniem > 500 zł
=FILTER(Baza!A:F;
  (Baza!C:C="Polska") + (Baza!C:C="Niemcy");
  Baza!F:F > 500)

-- Maile firmowe (końcówka .pl lub .com)
=FILTER(Kontakty!A:B;
  REGEXMATCH(Kontakty!B:B; "\.pl$|\.com$"))

Połączenie FILTER() + REGEXMATCH() to potężne narzędzie do czyszczenia baz kontaktów i wyciągania leadów spełniających wiele kryteriów jednocześnie.

4. IMPORTRANGE() – live feed między arkuszami

IMPORTRANGE() pozwala pobrać zakres z innego arkusza Google (nawet z innego konta) w czasie rzeczywistym. Podstawa architektury „Master + Client Sheets": jeden arkusz główny z surowymi danymi, wiele arkuszy raportowych pobierających z niego dane przez IMPORTRANGE().

=IMPORTRANGE("URL_arkusza_master"; "Sprzedaz!A:F")

Praktyczne zastosowanie: arkusz główny z pełnymi danymi sprzedaży (dostęp tylko dla managera) + arkusz handlowca pobierający przez IMPORTRANGE tylko jego własny region. Handlowiec nie widzi cudzych danych, ale ma aktualne swoje. Przy połączeniu z QUERY() można jeszcze filtrować po regionie bezpośrednio w formule.

5. XLOOKUP() – następca VLOOKUP bez jego wad

VLOOKUP() ma trzy klasyczne problemy: szuka tylko w lewo→prawo, indeks kolumny jest sztywny (przesuwa się przy dodaniu nowej kolumny), zwraca błąd zamiast pustego przy braku dopasowania. XLOOKUP() rozwiązuje wszystkie trzy.

-- VLOOKUP (stary sposób – kruchy)
=VLOOKUP(E2; A:C; 3; 0)

-- XLOOKUP (nowoczesny – odporny)
=XLOOKUP(E2; A:A; C:C; "Brak"; 0)
--         ^szukaj  ^gdzie  ^zwróć  ^gdy brak  ^dokładne dopasowanie

Kluczowa różnica: czwarty argument "Brak" zastępuje IFERROR(VLOOKUP(...);"Brak"). Szukanie może działać w obu kierunkach. Zakres zwracany to osobna kolumna – dodanie nowej kolumny do tabeli nie przesuwa indeksu.

Pięć funkcji: QUERY, ARRAYFORMULA, FILTER, IMPORTRANGE, XLOOKUP – to kompletny zestaw do budowy dynamicznego systemu raportowania w Google Sheets bez SQL Server, bez ETL, bez programisty. Wystarczy arkusz i zrozumienie jak je ze sobą łączyć.