Ulepszanie formuł DAX za pomocą zmiennych
Jako modeler danych pisanie and debugowanie niektórych obliczeń DAX może być trudne. Często złożone wymagania dotyczące obliczeń obejmują pisanie złożonych wyrażeń or. Wyrażenia złożone mogą obejmować użycie wielu zagnieżdżonych funkcji, and prawdopodobnie ponowne użycie logiki wyrażeń.
Używanie zmiennych w formułach DAX może pomóc w pisaniu bardziej złożonych and wydajnych obliczeń. Zmienne mogą zwiększyć wydajność, niezawodność, czytelność, and zmniejszyć złożoność.
W tym artykule przedstawimy first trzy korzyści, na przykładzie measure dla wzrostu sprzedaży year-over-year (YoY). (Formuła wzrostu sprzedaży rok do roku to sprzedaż w okresie, pomniejszona o sprzedaż w tym samym okresie lastyear, podzielona przez sprzedaż w tym samym okresie lastyear).
Zacznijmy od poniższej definicji measure.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
measure generuje prawidłowy wynik, jednak now zobaczmy, jak można go ulepszyć.
Zwiększanie wydajności
Zwróć uwagę, że formuła powtarza wyrażenie, które oblicza "ten sam okres lastyear". Ta formuła jest nieefektywna, ponieważ wymaga Power BI, aby evaluate to samo wyrażenie dwa razy. Definicja measure może być wydajniejsza przy użyciu zmiennej VAR.
Poniższa definicja measure reprezentuje poprawę. Używa wyrażenia , aby przypisać wynik "tego samego okresu lastyear" 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)
measure nadal generuje prawidłowy wynik, and robi to w około połowie zapytania time.
Zwiększanie czytelności
W definicji previousmeasure zwróć uwagę, jak wybór nazwy zmiennej sprawia, że wyrażenie RETURN jest prostsze do zrozumienia. Wyrażenie jest krótkie and 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 measure 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 wersjach earlierDAXzmienne były obsługiwane jeszcze not. Wymagane były wyrażenia złożone, które wprowadzały nowe konteksty filter, aby używać funkcji EARLIERorEARLIESTDAX do odwoływania się do zewnętrznych kontekstów filter. Niestety, modelowanie danych stwierdziło, że te funkcje są trudne do zrozumienia and użycia.
Zmienne są zawsze oceniane poza wyrażeniem RETURN, do którego odnosi się filters. Z tego powodu, gdy używasz zmiennej w zmodyfikowanym kontekście filter, osiąga ten sam wynik co funkcja EARLIEST. W związku z tym można unikać używania funkcji EARLIERorEARLIEST. Oznacza to, że można now pisać formuły, które są mniej złożone, and, 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 kolumny Subcategory Salesvaluew bieżącym kontekście wiersza.
Definicję kolumny obliczeniowej można poprawić przy użyciu zmiennej zamiast funkcji EARLIER. Zmienna CurrentSubcategorySales przechowuje kolumnę Podkategoria Salesvaluew bieżącym kontekście wiersza, and wyrażenie RETURN używa go w zmodyfikowanym kontekście filter.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Related zawartość
- artykuł VARDAX
- Materiały path: użycie DAX w programie Power BI Desktop
- Pytania? Spróbuj zapytać społeczności BI Power