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

DAX. Funkcja ALLCROSSFILTERED

09.2024 | dax | power bi | allcrossfiltered

Funkcja ALLCROSSFILTERED jest używana w kontekście zarządzania relacjami między tabelami w modelu danych. Pozwala nam na usunięcie filtrów krzyżowych (cross-filters), które pochodzą z relacji między tabelami, co jest szczególnie przydatne w bardziej skomplikowanych modelach, gdzie owe relacje mogą mieć istotny wpływ na obliczenia.

Jak działa funkcja ALLCROSSFILTERED?

ALLCROSSFILTERED działa poprzez usuwanie filtrów, które zostały nałożone na tabelę poprzez relacje z innymi tabelami w modelu danych. Dzięki temu funkcja pozwala na ignorowanie filtrów zdefiniowanych przez te relacje, co umożliwia bardziej precyzyjną kontrolę nad kontekstem filtrowania.

Składnia:

ALLCROSSFILTERED ( <Tabela> )
  • Tabela: Tabela, dla której chcemy usunąć filtry krzyżowe wynikające z relacji.

Przykłady zastosowania funkcji ALLCROSSFILTERED

  1. Usunięcie filtrów krzyżowych na tabeli: Załóżmy, że mamy model danych z tabelami Sales (Sprzedaż) i Products (Produkty), które są powiązane relacją. Relacja ta może automatycznie wprowadzać filtry w raportach, ograniczając wyniki do wybranych produktów. Aby obliczyć sumaryczną sprzedaż bez wpływu filtrów pochodzących z tabeli Products, możemy użyć funkcji ALLCROSSFILTERED.

    TotalSalesWithoutCrossFilters = CALCULATE (
        SUM(Sales[Amount]),
        ALLCROSSFILTERED(Products)
    )
    

    W tym przykładzie ALLCROSSFILTERED(Products) usuwa wszelkie filtry, które pochodzą z relacji między tabelą Sales i Products. Wynik jest sumą sprzedaży, bez wpływu ograniczeń związanych z produktami.

  2. Porównanie sprzedaży z i bez filtrów krzyżowych: Możesz użyć tej funkcji, aby porównać sprzedaż z zastosowaniem filtrów krzyżowych z obliczeniami, które tych filtrów nie uwzględniają.

    SalesComparison =
    VAR SalesWithFilters = SUM(Sales[Amount])
    VAR SalesWithoutCrossFilters = CALCULATE(SUM(Sales[Amount]), ALLCROSSFILTERED(Products))
    RETURN SalesWithFilters - SalesWithoutCrossFilters
    
    

    W tym przypadku tworzysz zmienne, które przechowują obie wartości – jedną z filtrami krzyżowymi, a drugą bez nich. Następnie różnicujesz te wartości, aby zobaczyć, jak filtry krzyżowe wpływają na sprzedaż.

  3. Zaawansowane raportowanie: W bardziej złożonych modelach, gdzie mamy wiele tabel powiązanych relacjami, ALLCROSSFILTERED jest przydatne, gdy chcemy kontrolować wpływ relacji między tabelami. Na przykład, gdy dane są silnie zależne od kilku wymiarów (takich jak czas, region, kategoria produktu), możemy precyzyjnie kontrolować, które filtry są aktywne, a które ignorowane.

    TotalSalesWithoutCrossFilters = CALCULATE (
        SUM(Sales[Amount]),
        ALLCROSSFILTERED(Regions),
        ALLCROSSFILTERED(Products)
    )
    

    W tym przykładzie usuwamy filtry zarówno z tabeli Regions (Regiony), jak i Products (Produkty), dzięki czemu nasze obliczenia nie są ograniczone przez te tabele.

Kiedy warto używać funkcji ALLCROSSFILTERED?

Funkcja ALLCROSSFILTERED jest szczególnie przydatna w następujących przypadkach:

  • Kontrola nad filtrowaniem: Gdy chcemy zignorować filtry wynikające z relacji między tabelami, a nie chcemy, aby nasze obliczenia były ograniczone przez te filtry.
  • Zaawansowane analizy: W bardziej złożonych modelach, gdzie relacje między wieloma tabelami mogą tworzyć skomplikowane interakcje filtrów, ALLCROSSFILTERED pozwala na lepszą kontrolę nad tym, które filtry są brane pod uwagę w obliczeniach.
  • Porównania wartości: Możliwość porównania wyników obliczeń z i bez filtrów krzyżowych pomaga lepiej zrozumieć, jak relacje między tabelami wpływają na dane.

Różnica między ALLCROSSFILTERED a ALL i REMOVEFILTERS

  • ALLCROSSFILTERED: Usuwa wyłącznie filtry krzyżowe, czyli te wynikające z relacji między tabelami.
  • ALL: Usuwa wszystkie filtry, niezależnie od ich źródła (w tym filtry krzyżowe, jak i te wynikające z innych elementów raportu).
  • REMOVEFILTERS: Usuwa filtry, ale jest bardziej elastyczna, ponieważ pozwala usuwać filtry z konkretnej tabeli lub kolumny, podobnie jak ALL.

Potencjalne wyzwania

W przypadku skomplikowanych modeli z wieloma relacjami, nieprawidłowe zastosowanie funkcji ALLCROSSFILTERED może prowadzić do wyników, które mogą wydawać się nielogiczne. Ważne jest, aby dobrze rozumieć strukturę modelu danych i interakcje między tabelami, aby funkcja była używana właściwie.

Podsumowanie

Funkcja ALLCROSSFILTERED w DAX pozwala na zarządzanie filtrami wynikającymi z relacji między tabelami w modelu danych. Dzięki niej możemy precyzyjnie kontrolować, jakie filtry są aktywne w kontekście naszych obliczeń, co jest szczególnie przydatne w zaawansowanych modelach danych.

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