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
-
Usunięcie filtrów krzyżowych na tabeli: Załóżmy, że mamy model danych z tabelami
Sales(Sprzedaż) iProducts(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 tabeliProducts, możemy użyć funkcjiALLCROSSFILTERED.TotalSalesWithoutCrossFilters = CALCULATE ( SUM(Sales[Amount]), ALLCROSSFILTERED(Products) )W tym przykładzie
ALLCROSSFILTERED(Products)usuwa wszelkie filtry, które pochodzą z relacji między tabeląSalesiProducts. Wynik jest sumą sprzedaży, bez wpływu ograniczeń związanych z produktami. -
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 - SalesWithoutCrossFiltersW 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ż.
-
Zaawansowane raportowanie: W bardziej złożonych modelach, gdzie mamy wiele tabel powiązanych relacjami,
ALLCROSSFILTEREDjest 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 iProducts(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,
ALLCROSSFILTEREDpozwala 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.