Funkcja DAX: ALLEXCEPT – Usuwanie filtrów z wyjątkami
Funkcja ALLEXCEPT w języku DAX pozwala na usunięcie wszystkich filtrów z tabeli, z wyjątkiem tych, które dotyczą określonych kolumn.
Jak działa funkcja ALLEXCEPT?
Funkcja ALLEXCEPT usuwa wszystkie filtry z tabeli, pozostawiając aktywne filtry na wybranych kolumnach. W praktyce oznacza to, że możesz usunąć filtry na wszystkich innych kolumnach tabeli, z wyjątkiem tych, które wyraźnie wskażesz. Dzięki temu masz możliwość zachowania kontekstu filtrowania dla określonych kolumn, podczas gdy inne wymiary są ignorowane.
Składnia:
DAXCopy code
ALLEXCEPT ( <Tabela>, <Kolumna1>, <Kolumna2>, ... )
- Tabela: Tabela, w której chcesz usunąć filtry.
- Kolumna1, Kolumna2, ...: Kolumny, które chcesz wykluczyć z usunięcia filtrów. Filtry te pozostaną aktywne.
Przykłady zastosowania funkcji ALLEXCEPT
-
Usuwanie filtrów z wyjątkiem jednej kolumny: Wyobraźmy sobie, że mamy tabelę
Sales(Sprzedaż) z kolumnamiRegion,Product,Amount. Chcemy obliczyć sumaryczną sprzedaż, ignorując wszystkie filtry z wyjątkiem filtrów naRegion.DAXCopy code TotalSalesByRegion = CALCULATE ( SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Region]) )W tym przypadku funkcja
ALLEXCEPTusuwa wszystkie filtry w tabeliSales, ale pozostawia filtry dotyczące kolumnyRegion. Oznacza to, że sprzedaż będzie sumowana tylko w odniesieniu do regionu, bez uwzględniania innych filtrów. -
Użycie ALLEXCEPT z kilkoma kolumnami: Możemy również zachować filtry na więcej niż jednej kolumnie, np. chcemy obliczyć sprzedaż, uwzględniając filtry na kolumny
RegioniProduct, ale ignorując inne filtry.DAXCopy code TotalSalesByRegionAndProduct = CALCULATE ( SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Region], Sales[Product]) )Tutaj pozostawiamy aktywne filtry na dwóch kolumnach (
RegioniProduct), co oznacza, że sprzedaż będzie sumowana z uwzględnieniem wyłącznie tych filtrów, ignorując filtry na innych kolumnach, takich jak np.CustomerczyDate. -
Zaawansowane scenariusze z kalkulacjami procentowymi: Funkcja
ALLEXCEPTjest również przydatna w przypadku obliczeń udziału procentowego, gdzie chcemy, aby filtr działał tylko na wybranych kolumnach. Załóżmy, że chcemy obliczyć procentowy udział sprzedaży produktu w danym regionie.DAXCopy code SalesPctByRegion = DIVIDE( SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Region])) )W tym przykładzie wyliczamy udział procentowy sprzedaży produktu w danym regionie, ignorując filtry na inne kolumny niż
Region.
Kiedy warto używać funkcji ALLEXCEPT?
- Zaawansowane raportowanie: Kiedy potrzebujesz bardziej precyzyjnej kontroli nad tym, które kolumny są filtrowane, a które nie,
ALLEXCEPTpozwala na pozostawienie aktywnych filtrów na wybranych kolumnach. - Porównanie w różnych wymiarach: Funkcja ta jest przydatna, kiedy chcemy porównać różne wyniki, np. sprzedaż w danym regionie w porównaniu z ogólną sprzedażą. Zachowując filtr na region, możesz uzyskać sprzedaż w tym regionie bez wpływu innych wymiarów.
- Dynamiczne raporty:
ALLEXCEPTdaje możliwość tworzenia bardziej dynamicznych raportów, które reagują na interakcje użytkownika z raportem, zachowując filtry na najważniejszych kolumnach.
Różnica między ALLEXCEPT, ALL i REMOVEFILTERS
- ALLEXCEPT: Usuwa wszystkie filtry z tabeli, z wyjątkiem tych, które odnoszą się do wskazanych kolumn.
- ALL: Usuwa wszystkie filtry, niezależnie od kolumny lub tabeli. W kontekście całej tabeli
ALLdziała na wszystkie kolumny, bez wyjątków. - REMOVEFILTERS: Usuwa filtry z określonych kolumn lub tabel, ale nie daje możliwości pozostawienia wybranych kolumn z aktywnymi filtrami, jak w przypadku
ALLEXCEPT.
Praktyczne uwagi
Podczas używania funkcji ALLEXCEPT w bardziej złożonych modelach danych warto upewnić się, że dobrze rozumiemy wpływ filtrów na raporty. W modelach z wieloma tabelami i relacjami, precyzyjne zarządzanie filtrami przy użyciu ALLEXCEPT może zapewnić lepszą kontrolę nad wynikami obliczeń.
Podsumowanie
Funkcja ALLEXCEPT w DAX pozwala na selektywne usuwanie filtrów z tabeli, z zachowaniem filtrów dla wybranych kolumn. Daje zatem kontrolę nad kontekstem filtrowania.