Zwiększanie wydajności i rozwiązywanie problemów przy użyciu zmiennych

Ukończone

W formułach języka DAX można używać zmiennych, które ułatwiają pisanie mniej złożonych i bardziej wydajnych obliczeń. Zmienne są niedostatecznie wykorzystywane przez deweloperów rozpoczynających pracę w programie Power BI Desktop, ale są skuteczne i powinno się ich używać domyślnie podczas tworzenia miar.

Niektóre wyrażenia wymagają użycia wielu zagnieżdżonych funkcji i ponownego wykorzystania logiki wyrażeń. Przetwarzanie tych wyrażeń zajmuje więcej czasu i są one trudne do odczytania, a zatem rozwiązywania problemów. Jeśli używasz zmiennych, możesz zaoszczędzić czas przetwarzania zapytania. Ta zmiana jest krokiem we właściwym kierunku w kierunku optymalizacji wydajności modelu semantycznego.

Użycie zmiennych w modelu semantycznym zapewnia następujące korzyści:

  • Zwiększona wydajność — zmienne mogą zwiększyć wydajność miar, ponieważ eliminują potrzebę wielokrotnego szacowania tego samego wyrażenia przez usługę Power BI. Możesz uzyskać te same wyniki w zapytaniu w ciągu około połowy oryginalnego czasu przetwarzania.

  • Poprawiona czytelność — zmienne mają krótkie, samoopisujące nazwy i są używane zamiast niejednoznacznego, wielowyrazowego wyrażenia. Odczytanie i interpretacja formuły mogą być łatwiejsze, gdy używane są zmienne.

  • Uproszczone debugowanie — zmiennych można używać do debugowania formuły i testowania wyrażeń, co może być pomocne podczas rozwiązywania problemów.

  • Zmniejszona złożoność — zmienne nie wymagają używania wcześniejszych lub najwcześniejszych funkcji języka DAX, które są trudne do zrozumienia. Funkcje te były wymagane przed wprowadzeniem zmiennych i zostały napisane w złożonych wyrażeniach, które wprowadziły nowe konteksty filtru. Teraz, gdy możesz używać zmiennych zamiast tych funkcji, możesz pisać mniej złożone formuły.

Używanie zmiennych do zwiększenia wydajności

Aby zilustrować sposób użycia zmiennej do zwiększenia wydajności miary, w poniższej tabeli przedstawiono definicję miary na dwa różne sposoby. Zwróć uwagę, że formuła powtarza wyrażenie, które oblicza „ten sam okres w ubiegłym roku”, ale na dwa różne sposoby: pierwsze wystąpienie używa standardowej metody obliczeń języka DAX, a drugie używa zmiennych w obliczeniach.

W drugim wierszu tabeli przedstawiono ulepszoną definicję miary. Ta definicja używa słowa kluczowego VAR, aby wprowadzić zmienną o nazwie SalesPriorYear, i używa wyrażenia, aby przypisać wynik „ten sam okres w ubiegłym roku” do tej nowej zmiennej. Następnie używa zmiennej dwa razy w wyrażeniu DIVIDE.

Bez zmiennej

Sales YoY Growth =
DIVIDE (
    ( [Sales] - CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) ) ),
    CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) )
)

Za pomocą zmiennej

Sales YoY Growth =
VAR SalesPriorYear =
    CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) )
VAR SalesVariance =
    DIVIDE ( ( [Sales] - SalesPriorYear ), SalesPriorYear )
RETURN
    SalesVariance

W pierwszej definicji miary w tabeli formuła jest nieefektywna, ponieważ wymaga, aby usługa Power BI oceniła to samo wyrażenie dwa razy. Druga definicja jest wydajniejsza, ponieważ ze względu na zmienną usługa Power BI musi tylko raz ocenić wyrażenie PARALLELPERIOD.

Jeśli model semantyczny ma wiele zapytań z wieloma miarami, użycie zmiennych może zmniejszyć całkowity czas przetwarzania zapytań w połowie i poprawić ogólną wydajność modelu semantycznego. Ponadto to rozwiązanie jest proste. Wyobraź sobie oszczędności uzyskiwane, gdy formuły stają się bardziej skomplikowane, na przykład w przypadku obliczania wartości procentowych i sum bieżących.

Używanie zmiennych w celu zwiększenia czytelności

Oprócz podwyższonej wydajności można zauważyć, że użycie zmiennych sprawia, że kod jest łatwiejszy do odczytania.

W przypadku używania zmiennych najlepszym rozwiązaniem jest używanie dla zmiennych opisowych nazw. W poprzednim przykładzie zmienna jest nazwana SalesPriorYear, co jasno wskazuje na to, co oblicza zmienna. Rozważ wynik użycia zmiennej o nazwie X, temp lub zmienna1 — przeznaczenie zmiennej nie jest oczywiste.

Korzystanie z jasnych, zwięzłych i znaczących nazw ułatwia zrozumienie, co jest obliczane, a w przyszłości inni deweloperzy będą mogli znacznie łatwiej konserwować raport.

Używanie zmiennych do rozwiązywania problemów z wieloma krokami

Zmiennych można użyć jako ułatwienia podczas debugowania formuły i identyfikowaniu problemu. Zmienne pomagają uprościć rozwiązywanie problemów z obliczeniami języka DAX przez oddzielnie ocenienie każdej zmiennej i jej przywołanie po wyrażeniu RETURN.

W poniższym przykładzie przetestujesz wyrażenie przypisane do zmiennej. W celu tymczasowego debugowania ponownego zapisywania wyrażenia RETURN w zmiennej. Definicja miary zwraca tylko zmienną SalesPriorYear , ponieważ jest to spowodowane wyrażeniem RETURN.

Sales YoY Growth % =
VAR SalesPriorYear =  CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
VAR SalesPriorYear% = DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)  
RETURN  SalesPriorYear%

Wyrażenie RETURN wyświetli tylko wartość SalesPriorYear%. Ta technika umożliwia przywrócenie wyrażenia po zakończeniu debugowania. Upraszcza także zrozumienie obliczeń ze względu na mniejszą złożoność kodu DAX.