DAX – filtrowanie w kierunku wiele do 1

Zwyczajowo w DAX filtrowanie tabel odbywa się w kierunku 1 do wielu, np. customers filtrują tabelę orders:

Liczba wierszy tych tabel prezentuje się następująco:

18869 klientów wykonało 100231 zamówień

Wprowadźmy filtrowanie w tabeli customers, wg płci:

Istotnie, tabela customers filtruje tabelę orders – klienci mężczyzni wykonali 11369 zamówień.

Zgodnie z oczekiwaniami tabela orders nie filtruje jednak tabeli customers:

Jeżeli na potrzeby raportu potrzebujemy takie filtrowanie wprowadzić, mamy następujące opcje:

Zmiana kierunku filtrowania na dwustronny w modelu

Jeżeli w naszym schemacie modelu, tabela customers jest ostatnią tabelą, z którą nie łączy się żadna inna tabela i bezpośrednio łączy się z tabelą „faktów” (czyli orders, tak jak w naszym przykładzie) to rozwiązanie może okazać się wystarczające, nie wprowadzi też circual dependency, które mogłoby prowadzić do nieoczekiwanych wyników. Minusem tego rozwiązania jest obniżona wydajność modelu. Ale istotnie, miara daje oczekiwane rezultaty:

Użycie funkcji CROSSFILTER podczas budowania miary

Takie rozwiązanie jest znacznie bezpieczniejsze, bo nie zmienia postaci modelu, jednak trzeba pamiętać o zastosowaniu tej funkcji w każdej mierze gdzie jest wymagane obustronne filtrowanie.

Użycie NATURALINNERJOIN

W przypadku tej metody należy pamiętać o zerwaniu data lineage (jak powyżej) na kolumnach łączących w modelu przed złączeniem tabel.