Porady. Pandas. Python. Django. Microsoft Power BI. Tableau.

DAX. Funcja ALLEXCEPT

09.2024 | dax | power bi | dax allexcept

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

  1. Usuwanie filtrów z wyjątkiem jednej kolumny: Wyobraźmy sobie, że mamy tabelę Sales (Sprzedaż) z kolumnami Region, Product, Amount. Chcemy obliczyć sumaryczną sprzedaż, ignorując wszystkie filtry z wyjątkiem filtrów na Region.

    DAXCopy code
    TotalSalesByRegion = CALCULATE (
        SUM(Sales[Amount]),
        ALLEXCEPT(Sales, Sales[Region])
    )
    
    

    W tym przypadku funkcja ALLEXCEPT usuwa wszystkie filtry w tabeli Sales, ale pozostawia filtry dotyczące kolumny Region. Oznacza to, że sprzedaż będzie sumowana tylko w odniesieniu do regionu, bez uwzględniania innych filtrów.

  2. 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 Region i Product, 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 (Region i Product), co oznacza, że sprzedaż będzie sumowana z uwzględnieniem wyłącznie tych filtrów, ignorując filtry na innych kolumnach, takich jak np. Customer czy Date.

  3. Zaawansowane scenariusze z kalkulacjami procentowymi: Funkcja ALLEXCEPT jest 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, ALLEXCEPT pozwala 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: ALLEXCEPT daje 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 ALL dział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.

Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.

Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.

Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.

Jestem współtwórcą grupy Hexe Capital SA.

Zapraszam do lektury i współpracy.

Krzysztof Surowiecki

Chcę porozmawiać o współpracy →

Moje certyfikaty