W tej sekcji opisano sposób tworzenia filtrów w formułach języka DAX (Data Analysis Expressions). Można tworzyć filtry w formułach, aby ograniczyć wartości z danych źródłowych używanych w obliczeniach. W tym celu należy określić tabelę jako dane wejściowe formuły, a następnie zdefiniować wyrażenie filtru. Podanie wyrażenia filtru służy do wykonywania zapytań dotyczących danych i zwracania tylko podzbioru danych źródłowych. Filtr jest stosowany dynamicznie za każdym razem, gdy aktualizujesz wyniki formuły, w zależności od bieżącego kontekstu danych.
W tym artykule
Tworzenie filtru w tabeli używanej w formule
Filtry można stosować w formułach, które przyjmują tabelę jako dane wejściowe. Zamiast wprowadzania nazwy tabeli należy użyć funkcji FILTRUJ, aby zdefiniować podzbiór wierszy z określonej tabeli. Następnie ten podzbiór jest przekazywany do innej funkcji na potrzeby operacji, takich jak agregacje niestandardowe.
Załóżmy na przykład, że masz tabelę danych zawierającą informacje o zamówieniach odsprzedawców i chcesz obliczyć, ile każdy odsprzedawcy sprzedał. Chcesz jednak pokazać kwotę sprzedaży tylko tym sprzedawcom, którzy sprzedali wiele jednostek Twoich produktów o wyższej wartości. Poniższa formuła oparta na przykładowym skoroszycie języka DAX przedstawia jeden z przykładów tworzenia tego obliczenia przy użyciu filtru:
=SUMA.X(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
Pierwsza część formuły określa jedną z funkcji agregacji Power Pivot, która przyjmuje tabelę jako argument. Funkcja SUMA.X oblicza sumę na tabeli.
-
W drugiej części formuły FILTER(table, expression),SUMX , których danych użyć. SUMX wymaga tabeli lub wyrażenia, które powoduje utworzenie tabeli. W tym miejscu zamiast wszystkich danych w tabeli należy użyć funkcji FILTER , aby określić, które wiersze z tabeli zostaną użyte.
Wyrażenie filtru składa się z dwóch części: pierwsza część nadaje nazwy tabeli, do której ma zastosowanie filtr. Druga część definiuje wyrażenie, które ma zostać użyte jako warunek filtru. W tym przypadku filtrujesz według odsprzedawców, którzy sprzedali więcej niż 5 sztuk i produkty, które kosztują więcej niż 100 USD. Operator, &&, jest operatorem logicznym ORAZ, który wskazuje, że obie części warunku muszą być prawdziwe, aby wiersz należał do filtrowanego podzbioru.
-
Trzecia część formuły informuje funkcję SUMX , które wartości należy zsumować. W takim przypadku używasz tylko kwoty sprzedaży.
Należy pamiętać, że funkcje takie jak FILTRUJ, które zwracają tabelę, nigdy nie zwracają tabeli ani wierszy bezpośrednio, ale zawsze są osadzone w innej funkcji. Aby uzyskać więcej informacji o funkcji FILTRUJ i innych funkcjach używanych do filtrowania, w tym o innych przykładach, zobacz Funkcje filtru (język DAX).
Uwaga: Na wyrażenie filtru wpływa kontekst, w którym jest używane. Jeśli na przykład używasz filtru w miarę i miara jest używana w tabeli przestawnej lub na wykresie przestawnym, na podzbiór zwracanych danych mogą mieć wpływ dodatkowe filtry lub fragmentatory zastosowane przez użytkownika w tabeli przestawnej. Aby uzyskać więcej informacji na temat kontekstu, zobacz Kontekst w formułach języka DAX.
Filtry usuwające duplikaty
Oprócz filtrowania określonych wartości można zwrócić unikatowy zestaw wartości z innej tabeli lub innej kolumny. Może to być przydatne, jeśli chcesz zliczyć liczbę unikatowych wartości w kolumnie lub użyć listy unikatowych wartości w innych operacjach. Język DAX udostępnia dwie funkcje do zwracania unikatowych wartości: funkcja DISTINCT i funkcja WARTOŚCI.
-
Funkcja DISTINCT sprawdza pojedynczą kolumnę określoną jako argument funkcji i zwraca nową kolumnę zawierającą tylko unikatowe wartości.
-
Funkcja WARTOŚCI zwraca również listę unikatowych wartości, ale także zwraca element nieznany. Jest to przydatne, gdy używa się wartości z dwóch tabel połączonych relacją, a w jednej tabeli brakuje wartości i występuje ona w drugiej. Aby uzyskać więcej informacji na temat nieznanego członka, zobacz Kontekst w formułach języka DAX.
Obie te funkcje zwracają całą kolumnę wartości. w związku z tym można użyć funkcji, aby uzyskać listę wartości, które są następnie przekazywane do innej funkcji. Za pomocą poniższej formuły można na przykład uzyskać listę różnych produktów sprzedawanych przez określonego odsprzedawcę przy użyciu unikatowego klucza produktu, a następnie zliczyć produkty na tej liście przy użyciu funkcji ILE.LICZB.
=ILE.LICZB(DISTINCT('ResellerSales_USD'[KluczProduktu]))
Wpływ kontekstu na filtry
Po dodaniu formuły języka DAX do tabeli przestawnej lub wykresu przestawnego kontekst może wpływać na wyniki formuły. Jeśli pracujesz w Power Pivot tabeli, kontekst to bieżący wiersz i jego wartości. Jeśli pracujesz w tabeli przestawnej lub na wykresie przestawnym, kontekst oznacza zestaw lub podzbiór danych zdefiniowany przez operacje, takie jak krojenie lub filtrowanie. Projekt tabeli przestawnej lub wykresu przestawnego również nakłada własny kontekst. Jeśli na przykład utworzysz tabelę przestawną grupową sprzedaż według regionu i roku, w tabeli przestawnej pojawią się tylko dane dotyczące tych regionów i lat. Dlatego wszelkie miary dodawane do tabeli przestawnej są obliczane w kontekście nagłówków kolumn i wierszy oraz wszelkich filtrów w formule miary.
Aby uzyskać więcej informacji, zobacz Kontekst w formułach języka DAX.
Usuwanie filtrów
Podczas pracy ze złożonymi formułami warto dokładnie wiedzieć, jakie są bieżące filtry, lub zmodyfikować część filtru formuły. Język DAX udostępnia kilka funkcji umożliwiających usuwanie filtrów oraz kontrolowanie, które kolumny są zachowywane w ramach bieżącego kontekstu filtru. Ta sekcja zawiera omówienie wpływu tych funkcji na wyniki w formule.
Zastępowanie wszystkich filtrów funkcją ALL
Za pomocą funkcji ALL można zastąpić filtry, które zostały wcześniej zastosowane, i zwrócić wszystkie wiersze w tabeli funkcji wykonującej operację agregowania lub inną operację. Jeśli używasz jednej lub większej liczby kolumn zamiast tabeli jako argumentów do ALL, funkcja ALL zwraca wszystkie wiersze z pominięciem filtrów kontekstowych.
Uwaga: Jeśli znasz terminologię relacyjnej bazy danych, możesz uznać, że ALL generowanie naturalnego lewego sprzężenia zewnętrznego wszystkich tabel.
Załóżmy na przykład, że masz tabele Sprzedaż i Produkty i chcesz utworzyć formułę, która będzie obliczać sumę sprzedaży bieżącego produktu podzieloną przez sprzedaż dla wszystkich produktów. Należy wziąć pod uwagę fakt, że jeśli formuła jest używana w określonej mierze, użytkownik tabeli przestawnej może filtrować według określonego produktu przy użyciu fragmentatora z nazwą produktu w wierszach. Dlatego, aby uzyskać prawdziwą wartość mianownika niezależnie od filtrów lub fragmentatorów, należy dodać funkcję ALL, aby zastąpić filtry. Poniższa formuła przedstawia przykład zastosowania funkcji WSZYSTKIE w celu zastąpienia efektów poprzednich filtrów:
=SUMA (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
-
Pierwsza część formuły SUMA (Sprzedaż[Kwota]) oblicza licznik.
-
Suma uwzględnia bieżący kontekst, co oznacza, że jeśli dodasz formułę do kolumny obliczeniowej, zostanie zastosowany kontekst wiersza, a jeśli dodasz formułę do tabeli przestawnej jako miarę, zostaną zastosowane wszystkie filtry zastosowane w tabeli przestawnej (kontekst filtru).
-
Druga część formuły oblicza mianownik. Funkcja WSZYSTKIE zastępuje wszystkie filtry, które mogą zostać zastosowane do Products tabeli.
Aby uzyskać więcej informacji, w tym szczegółowe przykłady, zobacz ALL, funkcja.
Zastępowanie określonych filtrów funkcją ALLEXCEPT
Funkcja ALLEXCEPT zastępuje również istniejące filtry, ale można określić, że niektóre z istniejących filtrów powinny zostać zachowane. Kolumny, których nazwy są argumentami funkcji ALLEXCEPT, określają, które kolumny będą nadal filtrowane. Jeśli chcesz zastąpić filtry z większości kolumn, ale nie wszystkich, allexcept jest wygodniejszy niż ALL. Funkcja ALLEXCEPT jest szczególnie przydatna podczas tworzenia tabel przestawnych, które mogą być filtrowane według wielu różnych kolumn, i chcesz kontrolować wartości używane w formule. Aby uzyskać więcej informacji, w tym szczegółowy przykład użycia programu ALLEXCEPT w tabeli przestawnej, zobacz ALLEXCEPT, funkcja.