DAX FILTROWANIE DWOCH TABEL PRZEZ WIEKSZA LICZBE KOLUMN – TREATAS

Poniższe metody mają zastosowanie nie tylko w przypadku konieczności filtrowania poprzez więcej niż jedną kolumnę, ale także gdzie istnieje konieczność filtrowania w kierunku many to one, albo gdy relacji po prostu nie ma.

Załóżmy, że mamy dwie tabele Sheet1 oraz Archiwum połączone w następujący sposób.

Relacja między nimi powstaje poprzez kolumny period – jest to kolumna o typie – data.

Business Case:

Nie możemy ingerować w model. Musimy utworzyć wizualizację (matrix) w której po stronie wierszy jest period, w kolumnach „s_login”, a jako wartości występuje „total” z tabeli Archiwum oraz „kompetencje” z tabeli Sheet1. Wiemy, że kolumnami po których powinien propagować się filtr, są Agent i s_login – zawierają te same wartości, ale w Power BI nie ma możliwości aktywować więcej niż jednej relacji na raz. Tworząc żądaną tabelę, mamy odpowiednie wartości dla „total” (ponieważ jest filtrowany przez występujące w wizualizacji period i s_login z tej samej tabeli modelu, ale dla „kompetencje” wyniki są co prawda podzielone przez kolumnę „period”, ale dla wszystkich agentów takie same.

Rozwiązanie:

Tworzymy dodatkową, wirtualną relację pomiędzy „Agent” i „s_login”:

kompetencje = CALCULATE(

    AVERAGE(Sheet1[kompetencje]),

    TREATAS(

SUMMARIZE('03_Archwium_Cash_Collected',

'03_Archwium_Cash_Collected'[s_login],'03_Archwium_Cash_Collected'[period]),

        Sheet1[Agent],

        Sheet1[period]))

SUMMARIZE w TREATAS jest zazwyczaj konieczne. Tworzy w nomenklaturze SQL-owej select distinct s_login, period from Archiwum i wartości tych kolumn mapuje na wartości z tabeli sheet1. Innymi słowy, w kolumnach Sheet1 zostają tylko te wartości, które zostały znalezione w kolumnach Archiwum. Dzięki temu tabela Sheet1 jest odpowiednio przefiltrowana i miara w CALCULATE daje pożądane wyniki.

Liczba mapowanych kolumn może być większa, może to też być tylko jedna kolumna.

Przykład użycia TREATAS z góry określonymi wartościami filtrującymi:

SUMMARIZECOLUMNS (

    'Date'[Year],

    "Suma", CALCULATE (

        SUM ( t3[amount] ),

        TREATAS (

            { ( "x1", "x2" ), ( "y1", "y2" ) },

            't1[att],

             t2[btt] )))

W powyższym  przykładzie w modelu t1 i t2 filtrują tabelę t3. Date filtruje także t3. Jak widać w expression w CALCULATE nie muszą występować kolumny i tabele, które brały udział w TREATAS.