Ssis Moving Average
Rullende 12 måneders gjennomsnitt i DAXputing det rullende 12-måneders gjennomsnittet i DAX ser ut som en enkel oppgave, men det skjuler litt kompleksitet Denne artikkelen forklarer hvordan man skriver den beste formelen som unngår vanlige fallgruver ved hjelp av tid intelligensfunksjoner. Vi starter med den vanlige AdventureWorks datamodellen , med produkt-, salgs - og kalendertabellen Kalenderen er merket som kalendertabell. Det er nødvendig å arbeide med hvilken som helst tidssvarsfunksjon, og vi har bygget et enkelt hierarki årsmåneddato. Med denne oppsettet er det veldig enkelt å lage en Første PivotTable viser salg over tid. Når du gjør trendanalyse, hvis salg er utsatt for sesongmessighet eller, mer generelt, hvis du vil fjerne effekten av topper og dråper i salget, er en vanlig teknikk å beregne verdien over en gitt periode , vanligvis 12 måneder, og gjennomsnittlig Det rullende gjennomsnittet over 12 måneder gir en jevn indikator på trenden, og det er veldig nyttig i diagrammer. Giver en dato, kan vi beregne 12-måneders rullende gjennomsnitt med thi s-formelen, som fortsatt har noen problemer som vi vil løse senere. Oppførelsen av formelen er enkel, det beregner verdien av Salg etter å ha opprettet et filter på kalenderen som viser nøyaktig ett helår med data Kjernen i formelen er DATESBETWEEN , som returnerer et inklusivt sett med datoer mellom de to grensene. Den nedre er. Leser det fra det innerste hvis vi viser data for en måned, sier juli 2007, tar vi siste synlige dato ved hjelp av LASTDATE, som returnerer den siste dagen i Juli 2007 Så bruker vi NEDDAG til 1. august 2007, og vi bruker endelig SAMEPERIODLASTYEAR til å skifte den tilbake ett år, og gir 1. august 2006. Den øvre grensen er bare LASTDATE, dvs. slutten av juli 2007. Hvis vi bruker denne formelen i en PivotTable, resultatet ser bra ut, men vi har et problem for den siste datoen. Faktisk, som du ser på figuren, er verdien riktig beregnet til 2008 Da er det ingen verdi i 2009 som er riktig, vi gjør det ikke har salg i 2009, men det er en surpri syng verdi i desember 2010, hvor vår formel viser totalummen i stedet for en tom verdi, som vi ville forvente. Faktisk returnerer LASTDATE den siste dagen i året, og NESTDAG skal returnere 1. januar 2011, men NESTDAG er en tid intelligens funksjon og det forventes å returnere sett med eksisterende datoer Dette faktum er ikke veldig tydelig og det er verdt noen få ord more. Time intelligence funksjoner utfører ikke matte på datoer Hvis du vil ta dagen etter en bestemt dato, du kan ganske enkelt legge til 1 i en hvilken som helst datakolonne, og resultatet blir neste dag. I stedet bruker tid intelligens skiftsettene dato frem og tilbake over tid. NEXTDAY tar derfor inn i vårt tilfelle et enkelt rad bord med 31 av Desember 2010 og skifter det en dag senere Problemet er at resultatet skal være 1. januar 2011, men fordi Kalender-tabellen ikke inneholder den datoen, er resultatet BLANK. Thus, vårt uttrykk beregner Salg med en tom nedre grense som betyr begynnelsen av tid, noe som resulterer i summen av salget For å rette opp formelen er det nok å endre evalueringsordren til den nedre grensen. Som du kan se, kalles NESTDAG etter skiftet på ett år tilbake. På denne måten, vi tar 31 desember 2010, flytt den til 31. desember 2009 og ta neste dag, som er 1. januar 2010 en eksisterende dato i kalenderbordet. Resultatet er nå den forventede. På dette punktet trenger vi bare å dele det nummeret med 12 for å oppnå det rullende gjennomsnittet Men som du lett kan forestille oss, kan vi ikke alltid dele det med 12 Faktisk er det i begynnelsen av perioden ikke 12 måneder å samle, men et lavere tall. Vi må beregne Antall måneder som det er salg Dette kan oppnås ved å bruke kryssfiltrering av kalenderbordet med salgstabellen etter at vi har brukt den nye 12 måneders konteksten. Vi definerer et nytt mål som beregner antall eksisterende måneder i 12 måneders perioden. kan se i neste figur at månedene12 M-mål beregner en korrekt verdi. Det er verdt å merke seg at formelen ikke fungerer hvis du velger en periode som er lengre enn 12 måneder, fordi Kalendermånednavnet har bare 12 verdier. Hvis du trenger lengre perioder, må du bruke en YYYYMM kolonne for å kunne telle mer enn 12.Den interessante delen av denne formelen som bruker kryssfiltrering er det faktum at det beregner antall tilgjengelige måneder, selv når du filtrerer med andre attributter. Hvis du for eksempel velger den blå farge ved hjelp av en skiver , så begynner salget i juli 2007 ikke i 2005, som det skjer for mange andre farger. Ved å bruke kryssfiltret på salg, beregner formelen riktig at i juli 2007 er det en enkelt måned med tilgjengelig salg for Blue. At dette punktet rullende gjennomsnittet er bare en DIVIDE away. When vi bruker det i et pivottabell, har vi fortsatt et lite problem faktisk verdien beregnes også i måneder som det ikke er salg for, dvs fremtidige måneder. Dette kan løses ved hjelp av en IF-erklæring for å forhindre formelen fra viser verdier når det ikke er noe salg jeg har ingenting mot IF, men for prestasjonene avhengige blant deg, er det alltid verdt å huske at IF kan være en ytelsesmord, fordi det kunne tvinge DAX-formelmotor til å sparke inn i dette spesielle tilfellet, forskjellen er ubetydelig, men som en generell regel er den beste måten å fjerne verdien når det ikke er salg, å stole på rene lagringsmotorformler som dette, og avgir et diagram ved hjelp av Avg12M med en annen som viser Salg du lett kan sette pris på. hvordan rullende gjennomsnitt skisserer trender på en mye renere måte. Hent meg informert om kommende artikler nyhetsbrev Fjern merket for å laste ned filen fritt. Jeg jobber med SQL Server 2008 R2, og prøver å beregne et glidende gjennomsnitt. For hver post i mitt syn ville jeg liker å samle verdiene til de 250 tidligere postene, og deretter beregne gjennomsnittet for dette valget. Mine synkolonner er som følger. TransaksjonsID er unikt For hvert TransaksjonsID vil jeg gjerne beregne gjennomsnittet f eller kolonneverdi over forrige 250 poster. Så for TransactionID 300, samle alle verdier fra forrige 250 rader visningen sorteres synkende av TransactionID og deretter i kolonne MovAvg skriv resultatet av gjennomsnittet av disse verdiene jeg ser for å samle inn data innen en rekke records. asked 28 oktober 14 på 20 58. Eksponentielt glidende gjennomsnitt i T-SQL. Eksponentielle glidende gjennomsnitt er lik veide glidende gjennomsnitt ved at de tilordner mindre vekt til endringer lenge siden, og mer vekt på de siste endringene. Veidede glidende gjennomsnitt er lineære, men eksponentielle glidende gjennomsnitt er eksponentielle Det vil si at vekten kan uttrykkes som en kurve. Det er en fin måte å beregne eksponentielle glidende gjennomsnitt i T-SQL ved hjelp av en utokumentert funksjon om variabler og kjører totals i SQL Server I dette blogginnlegget vil jeg vis hvordan du bruker den metoden til å beregne eksponentiell glidende gjennomsnitt i T-SQL, men jeg vil også presentere en metode som bruker standardfunksjoner i SQL Server. Dessverre betyr det at du bruker en lo op. I eksemplene vil jeg beregne et 9-dagers eksponentielt glidende gjennomsnitt. Eksemplene bruker databasen TAdb Et skript for å opprette TAdb kan bli funnet her. Eksponentiell Moving Average EMA Running Totals Method. Teorien bak de løpende totalfunksjonene i oppdateringer er beskrevet i detalj av Jeff Moden i sin artikkel Løse løpende og ordinære rangproblemer. Andre ressurser som beskriver bruk av denne metoden for å beregne EMA, er blogginnlegget. Beregning av bevegelige gjennomsnitt med T-SQL av Gabriel Priester og forumet Post Exponential Moving Average Challenge både på SQL Server Central. Basisk, i T-SQL kan du oppdatere variabler samt kolonner i en oppdateringsoppgave. Oppdateringene er gjort rad for rad internt av SQL Server. Denne raden etter radadferdighet er det som gjør beregning av en løpende total mulig. Dette eksemplet viser hvordan det fungerer. Merk at ColumnRunningTotal er en løpende sum av ColumnToSum. Ved hjelp av denne metoden kan vi beregne EMA9 med denne T-SQL. Beregningen av EMA er ganske enkel Vi bruk nåværende rad og forrige, men med mer vekt til den nåværende raden. Vekten beregnes med formelen 2 1 9, hvor 9 er parameteren for lengden av EMA. For å beregne EMA9 for rad 10 ovenfor, er beregningen. I dette tilfellet får den nåværende raden 20 av vekten 2 1 9 0 2 og forrige rad får 80 av vekten 1-2 1 9 0 8.Du finner denne beregningen i setningen ovenfor i CASE-setningen. Eksponentiell flytende gjennomsnittlig EMA Looping Method. As langt som jeg vet, med unntak av løpende totals metode som er skissert ovenfor, er det ingen måte å beregne EMA ved hjelp av et sett basert SQL-setning. Derfor bruker T-SQL nedenfor en stundsløyfe for å beregne EMA9. Resultatene er det samme som i løpende totaleksempel ovenfor. Som forventet er den settbaserte løpende totalversjonen mye raskere enn loopversjonen. På min maskin var den settbaserte løsningen ca. 300 ms, sammenlignet med omtrent 1200 med loop-versjonen. Sløyfe-versjonen er mer i samsvar med SQL-standarder, men så valget mellom n metodene avhenger av hva som er viktigst for deg, ytelse eller standarder. Det eksponentielle glidende gjennomsnittet kan brukes i trendanalyse, som med andre typer bevegelige gjennomsnitt, Simple Moving Average SMA og Weighted moving average WMA. Det er også andre beregninger i teknisk analyse som bruker EMA, MACD for eksempel. Dette blogginnlegget er en del av en serie om teknisk analyse, TA, i SQL Server Se de andre innleggene her. Postet av Tomas Lind. Tomas Lind - Konsulenttjenester som SQL Server DBA og Database Developer på High Coast Database Solutions AB.
Comments
Post a Comment