Monday 11 December 2017

Jak obliczyć, a moving average in ms access


Średnia ruchoma Ten przykład pokazuje, jak obliczyć średnią ruchomą szeregu czasowego w Excelu. Średnia ruchoma służy do łagodzenia nieprawidłowości (szczytów i dolin) w celu łatwego rozpoznawania trendów. 1. Najpierw przyjrzyjmy się naszej serii czasowej. 2. Na karcie Dane kliknij Analiza danych. Uwaga: nie można znaleźć przycisku Analiza danych Kliknij tutaj, aby załadować dodatek Analysis ToolPak. 3. Wybierz średnią ruchomą i kliknij OK. 4. Kliknij pole Input Range i wybierz zakres B2: M2. 5. Kliknij w polu Interwał i wpisz 6. 6. Kliknij pole Zakres wyjściowy i wybierz komórkę B3. 8. Narysuj wykres tych wartości. Objaśnienie: ponieważ ustawiliśmy przedział na 6, średnia ruchoma jest średnią z poprzednich 5 punktów danych i bieżącego punktu danych. W rezultacie szczyty i doliny są wygładzone. Wykres pokazuje rosnący trend. Program Excel nie może obliczyć średniej ruchomej dla pierwszych 5 punktów danych, ponieważ nie ma wystarczającej liczby poprzednich punktów danych. 9. Powtórz kroki od 2 do 8 dla przedziału 2 i odstępu 4. Wniosek: Im większy przedział, tym bardziej wygładzone są szczyty i doliny. Im mniejszy przedział czasu, tym bardziej zbliżone są średnie kroczące do rzeczywistych punktów danych. Mam produkcję tabel, która zawiera następującą strukturę: Mam dane dla każdego przedstawiciela od 112017 do 812017. To, co chcę zrobić, to stworzyć 12-miesięczna średnia ruchoma rozpoczynająca się od 112017 dla każdego przedstawiciela, w następujący sposób: gdzie każdy wiersz reprezentuje 12-miesięczną średnią ruchomą dla wymienionego przedstawiciela w ustalonym czasie. Znalazłem kilka przykładów, które były niejasno bliskie i próbowałem ich bezskutecznie. Wydaje się, że dodanie grupy przez element rep jest głównym odstępstwem od innych przykładów. Dotyczy to tak dalece jak to było: zapytanie to wydaje się generować średnią sumę lub sumę, ponieważ nie ma grupowania w skorelowanym podzapytaniu. Kiedy próbuję grupować według, pojawia się błąd, że może wrócić tylko w jednym wierszu. Zapytany 10 października o godzinie 14: 47 Przeprowadzanie średniej obliczeniowej Przeprowadzka średniej obliczenia Przeprowadzka średniej obliczenia Próbuję obliczyć średnią ruchomą dla serii danych. Chcę wygenerować średnią ruchomą dla każdego punktu w danych, aby pokazać go na wykresie. W każdym razie, poniżej znajduje się przykład z MS Support. Podążyłem za tym listem, ale moja nie daje średniej ruchomej. Powtarza ten sam punkt danych (pierwszy punkt danych). Więc nie sądzę, że funkcja znajduje datę rozpoczęcia w linii MyRST. Seek, dlatego właśnie zwraca pierwszy punkt danych. W końcu (może to sprawi, że będzie to naprawdę łatwe) Jestem zdezorientowany, jak działają indeksy. Myślałem, że możesz mieć tylko jeden klucz podstawowy, ale najwyraźniej możesz utworzyć wiele ograniczeń pola. Próbowałem to zrobić za pomocą następującego zapytania definicji danych: ALTER TABLE Table1 ADD CONSTRAINT NoDupes UNIQUE (CurrencyType, TransactionDate) Przepraszamy za długość tego wpisu. Doceniam twoją pomoc. Następująca funkcja przykładowa oblicza średnie ruchome na podstawie tabeli z kluczem podstawowym z wieloma polami. Cotygodniowe wartości walut obcych są używane w tym przykładzie. Aby utworzyć przykładową funkcję, wykonaj następujące kroki: Utwórz poniższą tabelę i zapisz ją jako Tabela1: Tabela: Tabela1 --------------------------- -------------- Nazwa pola: CurrencyType Główny typ danych klucza: Rozmiar pola tekstowego: 25 Nazwa pola: TransactionDate Klucz podstawowy Typ danych: Forma daty Format: Data krótka Nazwa pola: Rodzaj danych: Waluta Miejsca dziesiętne: 4 Wyświetl tabelę w widoku arkusza danych i wprowadź następujące wartości: CurrencyType TransactionDate Rate ------------------------------- ------------- Yen 8693 0,0079 Yen 81393 0,0082 Jen 82093 0,0085 Jen 82793 0,0088 Jen 9393 0,0091 Mark 8693 0,5600 Mark 81393 0,5700 Mark 82093 0,5800 Mark 82793 0,5900 Mark 9393 0,6000 Otwórz nowy moduł i wpisz następujące funkcje: Funkcja MAvgs (Periods Integer, StartDate, TypeName) Dim MyDB jako DATABASE, MyRST As Recordset, MySum jako Double Dim i, x Ustaw MyDB CurrentDb () Ustaw MyRST MyDB. OpenRecordset (Table1) On Error Resume Next MyRST. Index PrimaryKey x Periods - 1 ReDim Store (x) MySum 0 For i 0 To x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Te dwie zmienne powinny być w tej samej kolejności, co pola klucza podstawowego w tabeli. Store (i) MyRSTRate If i lt x Then StartDate StartDate - 7 Tutaj 7 przyjmuje tygodniowe dane 1 dla codziennych danych. Jeśli StartDate lt 8693 Następnie MAvgs Null: Exit Function 8693 zostanie zastąpiony najwcześniejszą datą danych w twojej tabeli. MySum Store (i) MySum Next i MAvgs MySum Periods Funkcja końcowa MyRST. Close Utwórz następującą kwerendę na podstawie tabeli Table1: Query: Query1 --------------------- ---------------------------------- Pole: CurrencyType Pole: TransactionDate Pole: Pole stawki: Expr1: MAvgs (3 , TransactionDate, CurrencyType) UWAGA: To zapytanie wygeneruje trzytygodniową średnią ruchomą danych Rate. Aby obliczyć dłuższą lub krótszą średnią ruchomą, zmień liczbę 3 w kolumnie Zapytania EXTR1 na wartość, którą chcesz obliczyć. Uruchom zapytanie. Zwróć uwagę, że dla każdej waluty widzisz następującą trzytygodniową średnią kroczącą. Wartość Null wskazuje, że nie było wystarczająco dużo wcześniejszych wartości, aby obliczyć średnią tygodniową. CurrencyType TransactionDate Rate Expr1 Mark 080693 0.5600 Mark 081393 0.5700 Mark 082093 0.5800 0.57 Mark 082793 0.5900 0.58 Mark 090393 0.6000 0.59 Yen 080693 0.0079 Yen 081393 0.0082 Yen 082093 0.0085 0.0082 Yen 082793 0.0088 0.0085 Yen 090393 0.0091 0.0088 RE: Przeprowadzka Średnia kalkulacja dhookom (programista) 28 10 czerwca 21:15 Ile lat ma ten kod? Nie robi wyraźnego użytku z DAO i nie wspomina, że ​​to zadziała z połączonymi tabelami. Dim MyDB jako DAO. Database, MyRST jako DAO. Recordset. Chciałbym użyć podzapytania zamiast zestawu rekordów. Może to wyglądać tak: SELECT CurrencyType, TransactionDate, Rate, (SELECT Avg (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType AND A. TransactionDate MIĘDZY B. TransactionDate - 14 AND B. TransactionDate) FROM Table1 A RE: Moving Średnia kalkulacja To jest naprawdę doskonałe. Doceniam twoją pomoc. Jednak kod, który podałeś, oblicza średnią ruchomą z 14-dniowej średniej (umieszczając średnią ruchomą w rekordzie na dzień 1 średniej, gdzie chciałbym, aby była to średnia wsteczna, umieszczona w rejestrze 14). Zmieniłem się nieznacznie w następujący sposób i wygląda na to, że działa SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType AND B. TransactionDate BETWEEN A. TransactionDate - 14 AND A. TransactionDate) AS Expr1 Z tabeli 1 AS A Widzisz, wszystko, co zrobiłem, to wymieniłem A na B w klauzuli where. Jest to dla mnie naprawdę wielka pomoc i naprawdę to doceniam. Nigdy wcześniej nie widziałem takiego kodowania i szczerze mówiąc, naprawdę tego nie rozumiem. Nie wiem, jak SQL rozumie, czym są B i A. Zakładam, że tworzą one jakieś alternatywne odniesienie do Tabeli 1. Jeśli dasz radę, naprawdę to doceniam. Ponadto, być może jakieś odniesienie do materiału, na który mogłem spojrzeć, zawsze jestem bardzo podekscytowany, aby dowiedzieć się czegoś nowego o VBASQL, i naprawdę doceniam twoją pomoc. RE: Przenoszenie średniej kalkulacji PHV (MIS) 29 czerwca 10 12:22 rozumie, co B i A czy są to pseudonimy? RE: Przeprowadzka Średnia kalkulacja Dziękujemy, PHV. Ma to sens już teraz RE: Przeprowadzka Średnia kalkulacja joshery420 (TechnicalUser) 6 lipca 10 15:06 Wow, nigdy nie patrzyłem na widok SQL wcześniej. Niezwykle pomocny. Staram się, aby ten kod działał w moim własnym zbiorze danych i utknąłem na jednym konkretnym problemie. pd2004, nie jestem pewien, czy nowy kod podkwerekcji działa tak samo jak twój stary kod VBA, czy nie, ale z moimi danymi nadal pokazuje średnią kroczącą, nawet jeśli nie ma wystarczającej liczby dni, aby utworzyć taką długość średniej. na przykład Jeśli Im wykonuje 7-dniową średnią kroczącą, dzień 1 pokazuje te same dane w kolumnie 7DayAvg, tak jak ma to miejsce w kolumnie danych dziennych. Dzień 2 pokazuje średnią dni 1 i 2 itd. Czy któryś z was wie, jak to naprawić przez przypadek Również dzięki za świetny poradnik PHV. RE: Przeprowadzka Średnia kalkulacja joshery420 (TechnicalUser) 6 lipca 10 15:08 Woops, ma na celu podziękować dhookom za wskazówkę dotyczącą kodu, a nie PHV. Ale hej, dzięki wam obojgu. XD RE: Przenoszenie średniej kalkulacji Zostawię najlepsze rozwiązania dla profesjonalistów tutaj, ale możesz zobaczyć w moim oryginalnym wpisie, jak przykład pomocy Microsoft próbuje sobie z tym poradzić. Oto kod: Jeśli StartDate lt 8693 Następnie MAvgs Null: Exit Function 8693 zostanie zastąpiony najwcześniejszą datą danych w twojej tabeli. Po prostu wychodzą z funkcji, jeśli data nie spełnia kryteriów. Nie wiem, czy mógłbyś włączyć coś takiego do kodu aliasów dostarczonego przez dhookem. Nie podoba mi się sposób ich obsługi i podejrzewam, że dhookem zapewni znacznie bardziej eleganckie rozwiązanie. Dla moich celów problem, który opisujesz, nie jest problemem, ale będę zainteresowany znalezieniem rozwiązań. RE: Moving Average Calculation dhookom (Programmer) 6 lipca 10 17:05 Możesz spróbować użyć IIf (), aby przetestować liczbę rekordów. Uwaga: nieprzetestowany kod notatnika: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF ((SELECT Count (Rate) FROM Table1 C WHERE A. CurrencyType C. CurrencyType AND C. TransactionDate MIĘDZY A. TransactionDate - 14 AND A. TransactionDate) 7, (SELECT Avg (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType AND B. TransactionDate MIĘDZY A. TransactionDate - 14 AND A. TransactionDate), Null) AS Expr1 FROM Table1 AS A RE: Moving Average Calculation

No comments:

Post a Comment