Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jako modeler danych pisanie i debugowanie niektórych DAX obliczeń może być trudne. Zwykle złożone wymagania dotyczące obliczeń obejmują pisanie wyrażeń złożonych lub skomplikowanych. Wyrażenia złożone mogą obejmować użycie wielu zagnieżdżonych funkcji i ewentualnie ponowne użycie logiki wyrażeń.
Używanie zmiennych w DAX formułach może pomóc w pisaniu bardziej złożonych i wydajnych obliczeń. Zmienne mogą zwiększyć wydajność, niezawodność, czytelność i zmniejszyć złożoność.
W tym artykule przedstawimy pierwsze trzy korzyści, korzystając z przykładowej miary wzrostu sprzedaży rok do roku (Rok do roku). (Formuła wzrostu sprzedaży rok do roku to sprzedaż w okresie, pomniejszona o sprzedaż w tym samym okresie ubiegłego roku, podzielona przez sprzedaż w tym samym okresie ubiegłego roku).
Zacznijmy od poniższej definicji miary.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
Miara generuje prawidłowy wynik, ale teraz zobaczmy, jak można ją ulepszyć.
Zwiększanie wydajności
Zwróć uwagę, że formuła powtarza wyrażenie, które oblicza "ten sam okres w zeszłym roku". Ta formuła jest nieefektywna, ponieważ wymaga, aby usługa Power BI dwukrotnie oszacowała to samo wyrażenie. Definicja miary może być wydajniejsza przy użyciu zmiennej VAR.
Poniższa definicja miary reprezentuje ulepszenie. Używa wyrażenia do przypisania wyniku "tego samego okresu ubiegłego roku" do zmiennej o nazwie SalesPriorYear. Zmienna jest następnie używana dwa razy w wyrażeniu RETURN.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Miara nadal generuje prawidłowy wynik i robi to w około połowie czasu zapytania.
Zwiększanie czytelności
W poprzedniej definicji miary zwróć uwagę, jak wybór nazwy zmiennej sprawia, że wyrażenie RETURN jest prostsze do zrozumienia. Wyrażenie jest krótkie i samoopisujące.
Uproszczenie debugowania
Zmienne mogą również ułatwić debugowanie formuły. Aby przetestować wyrażenie przypisane do zmiennej, tymczasowo zapisz ponownie wyrażenie RETURN, aby wyświetlić zmienną.
Poniższa definicja miary zwraca tylko zmienną SalesPriorYear . Zwróć uwagę, jak zakomentowane jest zamierzone wyrażenie RETURN. Ta technika umożliwia łatwe przywrócenie go po zakończeniu debugowania.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Zmniejszanie złożoności
W wcześniejszych wersjach DAX, zmienne nie były jeszcze obsługiwane. Wyrażenia złożone, które wprowadziły nowe konteksty filtrów, musiały używać funkcji EARLIER lub EARLIESTDAX w celu odwołania się do kontekstów filtrów zewnętrznych. Niestety, modelowanie danych stwierdziło, że te funkcje są trudne do zrozumienia i użycia.
Zmienne są zawsze ewaluowane przed zastosowaniem filtrów, które stosuje wyrażenie RETURN. Z tego powodu, gdy używasz zmiennej w zmodyfikowanym kontekście filtru EARLIEST , osiąga ten sam wynik co funkcja. Można zatem unikać używania funkcji EARLIER lub EARLIEST. Oznacza to, że można teraz pisać formuły, które są mniej złożone i które są łatwiejsze do zrozumienia.
Rozważmy następującą definicję kolumny obliczeniowej dodaną do tabeli podkategorii
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Funkcja EARLIER służy do odwoływania się do wartości kolumny Subcategory Salesw bieżącym kontekście wiersza.
Definicję kolumny obliczeniowej można poprawić przy użyciu zmiennej zamiast funkcji EARLIER. Zmienna CurrentSubcategorySales przechowuje wartość kolumny Subcategory Salesw bieżącym kontekście wiersza, a wyrażenie RETURN używa go w zmodyfikowanym kontekście filtru.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Powiązana treść
- artykuł VARDAX
- Ścieżka szkoleniowa: Używanie DAX w programie Power BI Desktop
- Pytania? Spróbuj zapytać społeczność usługi Power BI