Jeśli zobaczysz ten komunikat, Twoja przeglądarka wyłączyła lub nie obsługuje JavaScript. Aby korzystać z pełnych funkcji tego systemu pomocy, takich jak wyszukiwanie, twoja przeglądarka musi mieć włączoną obsługę JavaScript. Ważone średnie kroczące z prostymi średnimi kroczącymi, każda wartość danych w quotwindowquot, w którym wykonywane są obliczenia, ma takie samo znaczenie lub wagę. Często zdarza się, zwłaszcza w analizie danych finansowych, że więcej chronologicznie aktualnych danych powinno mieć większą wagę. W takich przypadkach często preferowana jest funkcja ważonej średniej ruchomej (lub wykładniczej średniej ruchomej - patrz poniższy temat). Rozważ tę samą tabelę wartości danych dotyczących sprzedaży za dwanaście miesięcy: Aby obliczyć średnią ważoną ruchomą: obliczyć, ile przedziałów danych bierze udział w obliczeniach średniej ruchomej (to jest wielkości obliczonej wartości). Jeśli okno obliczeń ma wartość n, to najnowsza wartość danych w oknie jest mnożona przez n, następna ostatnia pomnożona przez n-1, wartość przed tą pomnożona przez n-2 i tak dalej dla wszystkich wartości w oknie. Podziel sumę wszystkich pomnożonych wartości przez sumę wag, aby uzyskać ważoną średnią ruchomą w tym oknie. Umieść wartość ważonej średniej ruchomej w nowej kolumnie zgodnie z opisanymi powyżej pozycjami średnich średnich wleczonych. Aby zilustrować te kroki, należy rozważyć, czy wymagana jest trzymiesięczna ważona ruchomej średniej sprzedaży w grudniu (przy użyciu powyższej tabeli wartości sprzedaży). Termin quot3-monthquot oznacza, że obliczona wartość jest równa 3, dlatego algorytm obliczania ważonej średniej ruchomej dla tego przypadku powinien być: lub, jeśli ważona średnia ważona 3-miesięczna była oceniana w całym oryginalnym zakresie danych, wyniki byłyby następujące: : 3-miesięczna ważona średnia ruchoma Muszę utworzyć raport wyświetlający kroczącą średnią przychodów. Raport zawiera dwie kolumny tygodni i średni przychód. Muszę wyświetlić tylko dziesięć tygodni od bieżącego tygodnia. Dla każdego tygodnia dochód powinna być obliczona w następujący sposób weeks160160160160160actual wpływów revenue160160160160160Avg 11601601601601601016016016016016016016016016016010160160160160160 216016016016016020180160160160160160160160160160 (1020) 2 316016016016016030160160160160160160160160160160 (102030) 3160160160160160 416016016016016040160160160160160160160160160160 (10203040) 4 516016016016016050160160160160160160160160160160 (20304050) 4 616016016016016060160160160160160160160160160160 (30405060) 4. (bieżący tydzień - 10 tygodni). . w bieżącym tygodniu użyłem Mavga (rzeczywisty przychód, 4), aby obliczyć średni przychód. Otrzymuję prawidłowe wartości. Jednak jeśli zastosuję filtr powiedzmy tygodnie między bieżącym tygodniem a (bieżącym tygodniem-10 tygodni), mam do czynienia z problemem. Mój (obecny tydzień-10 tygodni) pokazuje teraz średnie przychody jako 10, co jest moją rzeczywistą kwotą przychodów. Ale chciałbym pokazać kwotę rewindu jako średnią (bieżący tydzień - 10 tygodni) i poprzednie trzy tygodnie. Filtr ograniczający liczbę tygodni jest stosowany przed obliczeniem średniej kroczącej. Czy mimo to najpierw obliczyć średnią ruchomą, a następnie zastosować filtr tygodniowy do raportu. Pls pomóż mi rozwiązać ten problem. . : 5 Czy próbowałeś utworzyć kolumnę obliczeniową zamiast używać tylko funkcji W ten sposób masz większą kontrolę przy NULL itd. Co pokazuje dziennik - w jaki sposób tworzy zapytanie Czy miara to: case when Periods. Weekdate gt TIMESTAMPADD (SQLTSIWEEK, -10. CURRENTDATE), następnie MAVG (Sales Measures. Units, 4) else 999999999 end A następnie zastosuj filtr w powyższej kolumnie pomiaru jako: Case when Periods. Weekdate gt TIMESTAM. nie jest równy nie jest w 999999999 Daj nam znać, jak to działa. PS. Aby zapobiec kwarantannie, możesz chcieć filtrować je dalej według okresów. Weekend gt TIMESTAMPADD (SQLTSIWEEK, -15. CURRENTDATE) Dzięki temu otrzymuję ruchome średnie przez 10 tygodni. jednak wciąż mam jeden problem. Mam podpowiedź panelu czasowego okresu. więc kiedy wybiorę okres czasu, powiedzmy od stycznia 2008 do maja 2008, jeśli 20 tygodni przypadnie na ten okres. raport pokazuje 999999 dla wszystkich tygodni od (bieżącego-11) tygodnia do (bieżący tydzień-20). a także mój (obecny tydzień 20) pokazuje teraz moje rzeczywiste przychody i nie przenosi średniego przychodu. oto moje wymaganie: domyślnie raport powinien wyświetlać tylko 10 tygodni. ale mam monit o desce rozdzielczej, daydim. calendardate. gdy użytkownik wybierze 01 stycznia 2008 r. do 19 maja 2008 r., raport powinien zawierać wszystkie tygodnie, które mieszczą się w tym przedziale okresu. Mam też inne podpowiedzi, takie jak region, kraj. Witaj, chciałbym mieć zapytanie o znalezienie średniej kroczącej. na podstawie pewnych warunków. Napisałem zapytanie w następujący sposób: SELECT Column1, MONTHENDDATE, (AVG (suma (Col2 (przypadek gdy (Col3 XYZ), a następnie 1 else 0 koniec))) PONAD (PARTYCJA WEDŁUG KOLUMNY1 ZAMÓWIENIE WG MONTHENDDATE ROWS 5 PRECEDING)) AS AVGXYZ, suma (Col2 (przypadek, gdy (Col3 XYZ), a następnie 1 koniec 0)) jako CummXYZ Z Tablecd WHERE Column1 1234567 GROUP BY column1, MONTHENDDATE. Mój problem polega na tym, że jeśli nie ma danych w ciągu miesiąca, średnia obliczona będzie różnić się od wymaganej. Na przykład Jeśli muszę znaleźć średnią miesięcy między LIPCEM a GRUDZIEŃem i jeśli tabela nie zawiera danych w miesiącu PAŹDZIERNIKU, LISTOPAD, to podczas ustalania średniej uwzględni tylko 4 miesiące zamiast 6 miesięcy .. Czy możliwe jest pisanie Zapytanie takie, że jeśli nie ma danych w miesiącu, wtedy rozważ wartości dla tego miesiąca jako zero, a następnie znajdź średnią. Jeśli ktokolwiek może mi pomóc w tym zakresie, będzie bardzo przydatny. : 11 Musisz wygenerować wiersze na brakujące miesiące. Jako podpowiedź. Spróbuj dopasować to do własnego zapytania. Nie zwraca mi żadnych wyników. Zmanipulowałem zapytanie w następujący sposób: SELECT b. Tab3Col1, j. MONTHENDDATE, (AVG (NVL ((suma (cd. Col1 (przypadek gdy (m. Col1 XYZ) to 1 inny 0 koniec ))), 0)) OVER (PARTYCJA BY b. Col1 ORDER BY j. MONTHENDDATE ROWS 5 PRECEDING)) jako AvgXYZ Z Tab3 b, TIMETABLE j, Tab4 k, Tab5 l, Tab2 m, Tab1 cd, (wybierz addmonths (todate) (31072007, DDMMRRRR), rownum-1) jako dt z podwójnego połączenia rownum lt 6) m GDZIE m. dt cd. DATEID () I cd. Col1 b. Col1 AND cd. DATEID j. MONTHID I cd. Col3 k. Col1 AND cd. Col4 l. Col1 AND cd. Col5 m. Col1 AND j. MONTHENDDATE między 30-APR-07 a 30-SEP-07 ORAZ b. Col1 123456789 GROUP BY b. Col1, j. MONTHENDDATE Ale nie zwrócono żadnych wydziwianie. jest typem daty j. MONTHENDDATE Jeśli tak, musisz przekształcić ciągi dat w daty przy użyciu todate: między todate (30-APR-07, dd-MON-yy) i todate (30-SEP-07, dd-MON - yy) Chociaż jeszcze jedna rzecz: dlaczego podajesz dwucyfrowe lata? Po co wyrzucać wyrocznię, aby odgadnąć, jakie są pozostałe dwie cyfry? Nie pamiętasz problemów y2k. Użyj 4-cyfrowych lat - jego ZAWSZE lepiej być wyraźnym w swoim kodowaniu. Im mniej pozostawiasz do zgadywania, tym mniej podatny jest kod na błędy. Myślę, że Todate nie stanowi problemu. Jak mogę sprawdzić, czy zawiera on zera w funkcji średniej, gdy nie ma wartości. Załączam funkcję todate, ale wciąż nie zwraca ona żadnych wierszy. Myślę, że twój problem polega prawdopodobnie na tym, że tworzysz listę dat monthend w widoku śródmiarze oznaczonym m (kiedy już masz tabelkę oznaczoną jako m), ale wybierasz j. monthenddate. Łączymy również m. dt ze stołem Tab1. spróbuj zamiast tego: Wiadomość została edytowana przez: Boneist poprawiono klauzulę whereExponential Moving Average W dniu dzisiejszym OTN było miłe pytanie o to, czy istnieje standardowa funkcja Oracle do obliczania wykładniczej średniej kroczącej. Odpowiedź brzmi, że nie ma takiej funkcji, ale z klauzulą modelową można ją bardzo łatwo obliczyć. Jest to świetny przykład na to, co rozumiem przez zmienną liczbę obliczeń opartych na obliczonych wartościach, napisanych w mojej trzeciej części samouczka modelowania. Przedtem nie wiedziałem nawet, czym dokładnie była wykładnicza średnia krocząca. Możesz przeczytać więcej na ten temat tutaj na Wikipedii lub tutaj z ładnym przykładem. Od pierwszego łącza: wykładnicza średnia ruchoma (EMA), stosuje współczynniki ważące, które zmniejszają się wykładniczo. Wagi dla każdego starszego punktu danych zmniejsza się wykładniczo, dając znacznie większe znaczenie dla ostatnich obserwacji, a jednocześnie nie odrzucając całkowicie starszych obserwacji. Z drugiego łącza: Formuła obliczania wykładniczej średniej kroczącej (EMA) to: X Bieżąca EMA (tj. Obliczana EMA) C Aktualna oryginalna wartość danych K Wygładzanie Stała P Poprzednia EMA (Pierwsza EMA w zakresie, który ma zostać obliczony, dowolna i może być odpowiednią oryginalną wartością danych lub często wartością Prostej Wartości Ruchomej K Stała Wygładzania 2 (1 n) Po tej formule następuje przykład, który nieco rozszerzyłem, korzystając z poniższej tabeli: Zapisy z produktu A pasuje do przykładu w łączu. Zrobiłem liczby z produktu B. Oto kwerendy modelu klauzuli, które implementuje formułę. Zauważ, jak formuła bezpośrednio przekłada się na jedną i jedyną regułę klauzuli modelu. Ustawiono stałą wygładzania K do .5, na podstawie okna wartości (n) równego 3. Wyzwanie: wypróbuj to bez klauzuli model i sprawdź, czy możesz wymyślić coś bardziej kompleksowego 5 komentarzy: 11.2 funkcji w użyciu z dat jako (wybierz produkt 39A39 data 392009-01-0139 miesiąc, 10 kwota z podwójnego związku wszystkie wybierz 39A39, data 392009-02-0139, 15 z podwójnego związku wszystkie wybierz 39A39, data 392009-03-0139, 17 z podwójnego związku wszystkie wybierz 39A39, data 392009-04-0139, 20 z podwójnego związku wszystko wybierz 39A39, data 392009-05-0139, 22 z dual union wszystko wybierz 39A39, data 392009-06-0139, 20 z dual union wszystko wybierz 39A39, data 392009-07-0139, 25 z dual union wszystko wybierz 39A39, data 392009-08-0139, 27 od dual union all wybierz 39A39, data 392009-09-0139, 30 od dual union wszystko wybierz 39A39, data 392009-10-0139, 35 od dual union wszystko wybierz 39A39, data 392009-11-0139 , 37 od dual union wszystko wybierz 39A39, data 392009-12-0139, 40 od dual union wszystko wybierz 39B39, data 392009-01-0139, 0 od dual union wszystko wybierz 39B39, data 392009-02-0139, 50 od dual union wszystko wybierz 39B39, data 392009-03-0139, 10 z dual union wszystko wybierz 39B39, data 392009-04-0139, 40 z dual union wszystko wybierz 39B39, data 392009-05-0139, 15 z dual union wszystko wybierz 39B39, data 392009-06-0139, 35 z dual union all wybierz 39B39, data 392009-07-0139, 30 z dual union wszystko wybierz 39B39, data 392009-08-0139, 30 z dual union wszystko wybierz 39B39, data 392009-09-0139, 20 z dual union wszystko wybierz 39B39 , data 392009-10-0139, 20 z dual union wszystko wybierz 39B39, data 392009-11-0139, 20 z dual union wszystko wybierz 39B39, data 392009-12-0139, 20 z dual), rns jako (wybierz dat. . rownumber () over (partycja według zamówienia produktu według miesiąca) rn -. 2 (1 count () over (partycja według produktu)) k. 0,5 k od dat), res (iloczyn, miesiąc, ilość, rn, x) jako (wybierz r. produkt, r. miesiąc, r. amount, r. rn, r. amount x od rns r, gdzie rn 1 union all select ns. product, ns. month, ns. amount, ns. rn, ns. k (ns. amount - es. x) es. xx z rns ns, res es gdzie ns. rn es. rn 1 i ns. product es. product) wybierz produkt, miesiąc, ilość, rn, rundę (x, 3) EMA od komendy res według produktu, miesiąc po obliczeniu zamkniętej wersji wymyśliłem następujący kod, który bardziej przypomina zaciemnienie niż cokolwiek obszerniejszego. Chodzi o to, aby utworzyć wielokrotności za pomocą łączenia ciągów i funkcji xml-eval. Zamknięte formularze specjalnych przypadków wymagają jedynie kwot bieżących. Oto ogólny przypadek i dwa specjalne przypadki, które są o wiele łatwiejsze: z t1 jako (wybierz produkt, miesiąc, kwotę, kwotę ci, rownumber () ponad (partycja według zamówienia produktu według miesiąca) rn, - 2 (1 rownumber () ponad (partycja według zamówienia produktu według miesiąca)) ki 0,5 ki od sprzedaży), t2 as (wybierz produkt, miesiąc, ilość, (przypadek, gdy rn 1 to 1 inny koniec ki ko) ai, przypadek, gdy rn 1 to 1 inny (1 - ki) end bi z t1), t3 as (WYBIERZ produkt, MIESIĄC, ilość, ai, xmlquery (REPLACE (wmconcat (bi) over (PARTYZJA PRZEZ produkt ORDER BY MONTH rows MIĘDZY nieograniczone poprzedzające AND BIEŻĄCE WIERSZE), 39,39, 3939 ) ZWRACAJ zawartość).getnumberval () mi FROM t2), t4 as (wybierz produkt, miesiąc, ilość, mi, (ai mi) xi z t3) WYBIERZ produkt, MIESIĄC, kwotę, okrągłą (mi SUM (xi) powyżej (PARTYCJA) Wg rzędów PRODUKT PRZEZ MIESIĄC POMIĘDZY niezaburzonym poprzedzającym I BIEŻĄCYM RZĘDZIEM), 3) ema Z t4 Szczególny przypadek K 0,5: z t1 jako (wybierz produkt, miesiąc, kwotę, rownumber () ponad (podział według zamówienia produktu według miesiąca) rn, kwota moc (2, nvl (nullif (r ownumber () over (partycja według zamówienia produktu według miesiąca) - 1, 0), 1)) ci ze sprzedaży) wybierz produkt, miesiąc, kwotę, rundę (sumę (ci) powyżej (partycja według zamówienia produktu według wierszy miesiąca między nieograniczoną liczbą poprzedzającą i bieżący wiersz) moc (2, rn), 3) ema z t1 Przypadek specjalny K 2 (1 i): z t1 jako (wybierz produkt, miesiąc, ilość, rownumber () powyżej (partycja według zamówienia produktu według miesiąca) rn, ilość rownumber () over (partycja według zamówienia produktu według miesiąca) ci ze sprzedaży) wybierz produkt, miesiąc, kwotę, rundę (sumę (ci) powyżej (partycja według zamówienia produktu według wierszy miesiąca między nieograniczonym poprzedzającym i bieżącym wierszem) 2 (rn ( rn 1)), 3) ema z t1 I39ll opublikuj dowód zamknięcia formularza, jeśli ktokolwiek jest nim zainteresowany. Jest to świetny przykład quotfun z SQLquot :-) Kombinacja XMLQuery, nieudokumentowanego wmconcat i funkcji analitycznych z klauzulą windowing. Lubię to. Chociaż nie jest tak obszerny, jak wariant wariantu modelu i rekurencyjny Rafu z jednym, jak sam powiedziałeś. I na pewno chciałbym zobaczyć dowód zamkniętej formy. Zajęło mi się inne pytanie: jak zoptymalizować stałą wygładzania SELECT k - stałą wygładzania. mse - średni błąd kwadratowy OD (WYBIERZ Z WYMIARU MODELOWEGO WYMIAR PRZEZ PRODUKT (RUPUMBER () PONAD (PARTYDA POPRZEZ PRODUKT PRZEZ miesiąc ASC) rn) ŚRODKI (kwota - kwota sprzedaży miesiąc - miesiąc 0 AS C. 0 AS P. 0 AS X. 0 AS SE - do kwadratu błędu - - wiersz roboczy i atrybuty - a) wiersz roboczy to produkt 39X39, rn 1 - b) atrybuty robocze są następujące:. 0 AS SSE - suma SE dla wszystkich produktów miesięcznych. 0 AS MSE - średnia SSE dla wszystkich produktów miesięcznych. 0 AS k - dla wszystkich produktów miesięcznych. 0 AS PreMSE - wcześniejszy MSR K39 dla wszystkich produktów miesięcznych. 0 AS diff - między aktualnym MSE a wcześniejszym. 0,1 AS delta - początkowy przyrost. 0 AS priorpt - początkowy punkt początkowy -) ZASADY ITERATE (99) DO DOLNEGO (abs (diff39A39,1) lt 0.00010) (Cany, rn amountcv (), cv (). K39A39,1 priorpt39A39,1 delta39A39,1. , rn ORDER BY product, rn ASC COALESCE (K39A39,1 Ccv (), cv () (1-K39A39,1) Xcv (), cv () - 1, Ccv (), cv ()). Pproduct, rn Xcv (), cv () - 1. SEproduct, rn POWER (Ccv (), cv () - Xcv (), cv () - 1, 2) SSE39A39,1 SUMA (SE) dowolna, dowolna. (SE) dowolne, dowolne 24. Diff39A39,1 CASE iterationnumber KIEDY 0 to NULL ELSE preMSE39A39,1 - MSE39A39,1 END. PreMSE39A39,1 MSE39A39,1. Delta39A39,9 CASE WHEN diff39A39,1 lt 0 THEN - abs (delta39A39, 12) ELSE abs (delta39A39, 1) END. Priorpt39A39, 1 K39A39,1)) gdzie produkt 39A39 i rn 1 K MSE ----------------------. 599999237 174.016094
Comments
Post a Comment