Rzutowanie 12 miesięcznych średnich w DAXputing Walka 12-miesięczna średnia w programie DAX wygląda jak proste zadanie, ale ukrywa złożoność W tym artykule wyjaśniono, jak napisać najlepszą formułę uniknąć typowych pułapek przy użyciu funkcji wywiadowczych. Zaczynamy od zwykłego modelu danych AdventureWorks , z tabelami produktów, sprzedaży i kalendarza Kalendarz został oznaczony jako stół kalendarza, który musi pracować z jakąkolwiek funkcją inteligencji czasowej i zbudowaliśmy prostą hierarchię z rocznym terminem Dzięki tej konfiguracji bardzo łatwe jest utworzenie pierwszy wykres przestawny pokazujący sprzedaż w czasie. Kiedy przeprowadzasz analizę trendów, jeśli sprzedaż podlega sezonowości lub, bardziej ogólnie, jeśli chcesz usunąć efekty szczytów i spadków sprzedaży, wspólną techniką jest obliczanie wartości w danym okresie , zwykle 12 miesięcy i przeciętnie Średni czas przewijania ponad 12 miesięcy zapewnia płynny wskaźnik tendencji i jest bardzo przydatny w wykresach. Dzięki dacie, możemy obliczyć 12-miesięczną średnią kroczącą z ti s, która nadal ma pewne problemy, które później rozwiążemy. Zachowanie formuły jest proste oblicza wartość sprzedaży po utworzeniu filtru w kalendarzu, który pokazuje dokładnie jeden pełny rok danych Podstawą formuły jest DATESBETWEEN , która zwraca zbiorczą datę pomiędzy dwoma granicami. Niższa jest. Odnajdując ją od najbardziej wewnętrznej, jeśli dane są wyświetlane przez miesiąc, powiedzmy, że w lipcu 2007 roku, ostatnia widoczna data jest używana z LASTDATE, która zwraca ostatni dzień w Lipiec 2007 Następnie użyjemy NEXTDAY, aby wziąć udział w 1 sierpnia 2007 r. I wreszcie posłużę się SAMEPERIODLASTYEAR, aby cofnąć go o jeden rok, z dniem 1 sierpnia 2006 r. Górna granica jest po prostu LASTDATE, tj. Z końcem lipca 2007. Jeśli stosujemy tę formułę w PivotTable, wynik wygląda poprawnie, ale mamy problem z ostatnią datą. W rzeczywistości, jak widać na rysunku, wartość jest poprawnie obliczana do 2008 r. Wtedy nie ma w 2009 roku wartości, która jest poprawna, nie don t mają sprzedaż w 2009 roku, ale jest surpri śpiewajmy w grudniu 2017 r., gdzie nasza formuła pokazuje sumę większą niż pustą wartość, jak się spodziewamy. W grudniu grudzień LASTDATE zwraca ostatni dzień roku i NEXTDAY powinien zwrócić 1 stycznia 2017 r. NEXTDAY funkcja inteligencji czasowej i oczekuje się, że zwróci zestawy istniejących dat To nie jest bardzo widoczne i warto kilka słów więcej. Tymczasowe funkcje wywiadowcze nie wykonują matematyki w terminach Jeśli chcesz wziąć dzień po dacie, możesz po prostu dodać 1 do dowolnej kolumny z datą, a wynik będzie następny dzień Zamiast tego czasowe funkcje wywiadowcze zmieniają zestawy dat w przód iw tył w czasie W ten sposób NEXTDAY przyjmuje dane wejściowe w naszym przypadku do pojedynczego wiersza z 31 Grudzień 2017 r. I przesunięcie go jeden dzień później Problem polega na tym, że wynik powinien wynosić 1 stycznia 2017 r., Ale ponieważ stół kalendarza nie zawiera tej daty, wynik to BLANK. Tak, nasz wyrażenie oblicza sprzedaż z pustą dolną granicą, która oznacza początek czasu, dając w wyniku wielką sumę sprzedaży Aby poprawić formułę, wystarczy zmienić kolejność oceny niższej granicy. Jak widać, teraz NEXTDAY jest wywoływana po zmianie rocznego roku wstecz W ten sposób, biorąc pod uwagę 31 grudnia 2017 r., przenieść ją do dnia 31 grudnia 2009 r. i następnego dnia, czyli dnia 1 stycznia 2017 r., istniejącej daty w tabeli kalendarzy. Wynik jest obecnie oczekiwany. W tym punkcie musimy jedynie podzielić liczba ta do 12, aby uzyskać średnią kroczącą Ale, jak można łatwo sobie wyobrazić, nie zawsze możemy ją podzielić przez 12 W rzeczywistości, na początku okresu nie ma 12 miesięcy sumowania, ale mniejsza liczba Musimy obliczyć liczba miesięcy, w których sprzedaje się To można osiągnąć przy użyciu filtrowania krzyżowego tabeli kalendarzy wraz ze stołem sprzedaży po zastosowaniu nowego kontekstu na 12 miesięcy Zdefiniuj nowy środek, który oblicza liczbę istniejących miesięcy w okresie 12 miesięcy. widać w następnej kolejności, że Miesiące 12 M oblicza poprawną wartość. Warto zauważyć, że formuła nie działa, jeśli wybierzesz okres dłuższy niż 12 miesięcy, ponieważ MonthName Kalendarz ma tylko 12 wartości Jeśli potrzebujesz dłuższych okresów, musisz użyć kolumny RRRRMM aby móc liczyć więcej niż 12. Ciekawą częścią tej formuły, która wykorzystuje filtrowanie krzyżowe jest fakt, że oblicza liczbę dostępnych miesięcy, nawet jeśli filtrujesz przy użyciu innych atrybutów Jeśli na przykład wybierzesz niebieski kolor za pomocą krajarki , to sprzedaż zaczyna się w lipcu 2007 r. nie w 2005 r., jak to ma miejsce w przypadku wielu innych kolorów Używając filtru krzyżowego w sprzedaży, formuła prawidłowo oblicza, że w lipcu 2007 r. dostępny jest jeden miesiąc dostępnej sprzedaży dla produktu Blue. At tym momencie toczenie średnia jest po prostu DIVIDE away. When używamy go w tabeli przestawnej, nadal ma małą kwestię w rzeczywistości, wartość jest obliczana również miesięcy, dla których nie ma sprzedaży, tj. przyszłych miesięcy. Można to rozwiązać za pomocą instrukcji IF aby zapobiec formułowaniu pokazując wartości, gdy nie ma sprzedaży Nie mam nic przeciwko IF, ale dla osób uzależnionych od osiągnięć, warto pamiętać, że IF może być killerem wydajności, ponieważ może zmusić silnik formuły DAX do kopnięcia W tym konkretnym przypadku, różnica jest nieistotna, ale ogólnie rzecz biorąc najlepszym sposobem na usunięcie tej wartości, gdy nie ma sprzedaży, jest poleganie na czystych formułach pamięci masowej, takich jak to przy oddzielaniu wykresu przy użyciu Avg12M z inną, która pokazuje sprzedaż, którą można łatwo docenić jak średnie kroczące przedstawiają trendy w znacznie lepszym sposobie. Powiadom mnie o kolejnych biuletynach artykułów Usuń zaznaczenie, aby swobodnie pobrać plik. Jestem pracuje z SQL Server 2008 R2, próbując obliczyć średnią ruchoma Dla każdego rekordu w moim widoku chciałbym jak zebrać wartości z 250 poprzednich rekordów, a następnie obliczyć przeciętną dla tej selekcji. Moje kolumny widoku są następujące. Przykłady unikatowe Dla każdego TransactionID chciałbym obliczyć średnią f lub kolumny w poprzednich 250 rekordach Więc w przypadku TransactionID 300 zebrać wszystkie wartości z poprzednich 250 wierszy jest sortowane sortowanie malejące według TransactionID, a następnie w kolumnie MovAvg zapisać wynik średniej z tych wartości szukam zbierać dane w zakresie records. asked 28 października 2007 at 20 58.Exponential moving average w T-SQL. Exponential ruchomych średnich są podobne do ważonych średnich ruchomych, ponieważ przypisują mniej wagi do zmian dawno temu, a większą wagę do ostatnich zmian Weighted moving average są liniowe, ale wykładnicze średnie ruchome są wykładnicze Oznacza to, że masa może być wyrażona jako krzywa. Jest to świetny sposób obliczania średnich ruchów wykładniczych w T-SQL przy użyciu nieudokumentowanej funkcji dotyczącej zmiennych i działających sum w SQL Server W tym poście blogu będę pokaż jak używać tej metody do obliczania wykładniczej średniej ruchomej w T-SQL, ale przedstawię również metodę używającą standardowych funkcji w programie SQL Server. op. W przykładach obliczę 9-dniową średnią ruchową średnią Przykłady używają bazy danych TAdb A skrypt do tworzenia TAdb można znaleźć tutaj. Exponential Moving Average EMA Całkowita suma Metoda. Niektórej teorii funkcjonowania wszystkich funkcji aktualizacji jest opisany w szczegółowo przez Jeffa Modena w swoim artykule Rozwiązywanie problemów związanych z biegiem Total i Ordinal Rank Problems. Innymi zasobami, które opisują przy użyciu tej metody do obliczania EMA to blog post Obliczanie średnich kroczących przy użyciu T-SQL przez Gabriel Priestera i postu na forum poświęcone średnim wyzwaniom w ruchu średnim zarówno na SQL Server Central. Zasadniczo w T-SQL można aktualizować zmienne, jak również kolumny w instrukcji aktualizacji Aktualizacje są wykonywane wiersz po wierszu wewnętrznie przez program SQL Server To zachowanie wiersz po wierszu jest tym, co umożliwia obliczanie całkowitej liczby możliwych. Ten przykład pokazuje jak to działa. Należy zauważyć, że ColumnRunningTotal jest uruchomiona w sumie ColumnToSum. Using tej metody możemy obliczyć EMA9 z tym T-SQL. Obliczanie EMA jest raczej proste We Użyj bieżącego wiersza i poprzedniego, ale z większą wagą do bieżącego wiersza Masa oblicza się według wzoru 2 1 9, gdzie 9 jest parametrem długości EMA Aby obliczyć EMA9 dla wiersza 10 powyżej, obliczenie jest. W tym przypadku bieżący wiersz pobiera 20 wagi 2 1 9 0 2, a poprzedni wiersz pobiera 80 z wagi 1-2 1 9 0 8. Znajdziesz to obliczenie w powyższym oświadczeniu w instrukcji CASE. Exponential Moving Average EMA Metoda pętli. Jeśli wiem, za wyjątkiem podanej powyżej metody sumy bieżącej, nie ma sposobu obliczania EMA przy użyciu zestawu opartego na tekście SQL W związku z tym poniższy kod T-SQL używa pętli while do obliczania EMA9. tak samo jak w sumie bieżącym przykład powyżej. Jednak oczekiwana, zestaw oparty działa sumy wersji jest szybciej niż wersja pętli Na mojej maszynie zestaw oparte rozwiązanie wynosiła około 300 ms, w porównaniu do około 1200 z wersją pętli Wersja pętli jest bardziej zgodny ze standardami SQL jednak tak wybór n Metody zależą od tego, co jest najważniejsze dla Ciebie, wydajności lub standardów. Mnożona średnia ruchoma może być wykorzystana w analizie trendów, podobnie jak w przypadku innych typów średnich kroczących, Simple Moving Average SMA i Weighted moving average WMA. Są też inne obliczenia w analizie technicznej wykorzystującej EMA, na przykład MACD. Ten blog post jest częścią serii o technicznej analizie, TA, w SQL Server Zobacz inne posty tutaj. Posted by Tomas Lind. Tomas Lind - Usługi konsultingowe jako SQL Server DBA i programista baz danych w firmie High Coast Database Solutions AB.
No comments:
Post a Comment