Sunday, 26 November 2017

Ssis glidande medelvärde


Rollande 12 månaders genomsnitt i DAXputing det rullande 12-månadersmedlet i DAX ser ut som en enkel uppgift, men det döljer viss komplexitet Denna artikel förklarar hur man skriver den bästa formeln för att undvika vanliga fallgropar med hjälp av tidsintelligensfunktioner. Vi börjar med den vanliga AdventureWorks datamodellen , Med produkt-, försäljnings - och kalendertabellen Kalenderen har markerats som ett kalenderbord. Det är nödvändigt att arbeta med vilken som helst tidsintelligensfunktion och vi byggde en enkel hierarki årsmånadersdatum. Med denna inställning är det väldigt lätt att skapa en första PivotTable som visar försäljningen över tiden. När en trendanalys görs, om försäljningen är utsatt för säsongsmässighet eller, i allmänhet, om du vill ta bort effekten av toppar och droppar i försäljningen, är en vanlig teknik att beräkna värdet under en viss period , vanligtvis 12 månader och genomsnittet Det rullande genomsnittet över 12 månader ger en jämn indikator på trenden och det är mycket användbart i diagrammen. Given ett datum, vi kan beräkna 12-månaders rullande medelvärde med thi S-formuläret, som fortfarande har några problem som vi kommer att lösa senare. Beteendet hos formeln är enkelt det beräknar värdet av Försäljningen efter att ha skapat ett filter i kalendern som visar exakt ett helt år med data Kärnan i formeln är DATESBETWEEN , Som returnerar en inkluderande uppsättning datum mellan de två gränserna. Den nedre är. Raddering från det innersta om vi visar data i en månad, säg juli 2007 tar vi det sista synliga datumet med LASTDATE, som returnerar den sista dagen i Juli 2007 Då använder vi NÄSTA DAG för att ta 1 augusti 2007 och vi använder slutligen SAMEPERIODLASTYEAR för att flytta tillbaka det ett år, vilket ger 1 augusti 2006 Övre gränsen är helt enkelt LASTDATE, dvs slutet av juli 2007. Om vi ​​använder denna formel i en PivotTable, resultatet ser bra ut, men vi har ett problem för den sista datumen. Faktum är att värdet är korrekt beräknat till 2008, så att värdet är korrekt beräknat till 2008 Då finns det inget värde 2009 som är korrekt, vi gör inte Har försäljning under 2009 men det finns en surpri sjungande värde i december 2010, där vår formel visar totalvärdet istället för ett tomt värde, vilket vi skulle förvänta oss. I december återkommer LASTDATE sista dagen på året och nästa dag ska returnera 1 januari 2011 men nästa dag är En tid intelligens funktion och det förväntas återställa uppsättningar av befintliga datum Detta faktum är inte mycket uppenbart och det är värt ett par ord more. Time Intelligence funktioner utför inte matte på datum Om du vill ta dagen efter ett visst datum, du kan helt enkelt lägga till 1 till en datumkolumn och resultatet kommer att bli nästa dag I stället förflyttar tidsintelligensen skiftuppsättningarna datum fram och tillbaka över tiden Således tar NEXTDAY inmatningen i vårt fall ett enda radbord med 31 av December 2010 och skiftar den en dag senare Problemet är att resultatet ska vara 1 januari 2011, men eftersom Kalender-tabellen inte innehåller det datumet, är resultatet BLANK. Thus, vårt uttryck beräknar Försäljningen med en tom nedre gräns som betyder början av tid, vilket resulterar i att totalomsättningen av försäljningen För att korrigera formeln räcker det med att ändra utvärderingsordern i den nedre gränsen. Som ni kan se, kallas nu NÄSTA DAG efter övergången på ett år tillbaka. På detta sätt, vi tar 31 december 2010, flyttar den till 31 december 2009 och tar nästa dag, vilket är den 1 januari 2010 ett befintligt datum i kalenderbordet. Resultatet är nu den förväntade. På den här punkten behöver vi bara dela upp det numret med 12 för att få det rullande genomsnittet Men som du lätt kan föreställa oss kan vi inte alltid dela upp det med 12 Faktum är att i början av perioden inte är 12 månader att samla men ett lägre antal Vi behöver beräkna antal månader för vilka det finns försäljning Detta kan åstadkommas med hjälp av kryssfiltrering av kalenderbordet med försäljningsbordet efter att vi tillämpat det nya 12-månaders-sammanhanget. Vi definierar en ny åtgärd som beräknar antalet befintliga månader under 12 månadersperioden. Kan se i nästa bild att månaderna12 M-mätningen beräknar ett korrekt värde. Det är värt att notera att formeln inte fungerar om du väljer en period längre än 12 månader, eftersom kalendermånadnamnet bara har 12 värden. Om du behöver längre perioder måste du använda en YYYYMM kolumn för att kunna räkna mer än 12. Den intressanta delen av denna formel som använder korsfiltrering är det faktum att det beräknar antalet tillgängliga månader även när du filtrerar med andra attribut Om du till exempel väljer den blå färgen med en skivare , då börjar försäljningen i juli 2007 inte 2005, vilket händer för många andra färger Med hjälp av korsfiltret vid försäljning beräknar formeln korrekt att i juli 2007 finns en enda månad tillgänglig försäljning för Blue. At denna punkt rullar den rullande genomsnittet är bara en DIVIDE away. When vi använder det i ett pivottabell, har vi fortfarande en liten fråga faktiskt, värdet beräknas också i månader för vilka det inte finns några försäljningar dvs framtida månader. Detta kan lösas med hjälp av ett IF-uttalande för att förhindra formeln från visar värden när det inte finns någon försäljning jag har inget emot IF men för prestanda-beroende av dig är det alltid värt att komma ihåg att IF kan vara en prestandamördare eftersom det skulle kunna tvinga DAX-formulärsmotorn att sparka in I det här specifika fallet, skillnaden är försumbar men som vanligt är det bästa sättet att ta bort värdet när det inte finns någon försäljning att förlita sig på rena lagringsmotorformler som att härmed avbryta ett diagram med hjälp av Avg12M med en annan som visar Försäljning du lätt kan uppskatta hur det rullande genomsnittet skisserar trender på ett mycket renare sätt. Håll mig informerad om kommande artiklar nyhetsbrev Avmarkera för att ladda ner filen fritt. Jag jobbar med SQL Server 2008 R2 och försöker beräkna ett glidande medelvärde. För varje post enligt min uppfattning skulle jag gillar att samla värdena för de 250 föregående posterna och sedan beräkna medelvärdet för det här valet. Mina synkolonner är enligt följande. TransaktionsID är unik För varje TransaktionsID vill jag beräkna medelvärdet f eller kolumnvärde, över tidigare 250 poster Så för TransactionID 300, samla alla värden från tidigare 250 rader syn sorteras nedåt av TransactionID och sedan i kolumnen MovAvg skriv resultatet av genomsnittet av dessa värden jag letar för att samla in data inom ett område av records. asked 28 oktober 14 på 20 58. Exponentialt glidande medelvärde i T-SQL. Exponentiala glidande medelvärden liknar vägda glidmedelvärden genom att de tilldelar mindre vikt att förändras för länge sedan och större vikt vid senaste förändringar. Viktiga glidmedel är linjära, men exponentiella glidande medelvärden är exponentiella Det vill säga vikten kan uttryckas som en kurva. Det finns ett bra sätt att beräkna exponentiella glidande medelvärden i T-SQL med hjälp av en obodifierad funktion om variabler och löpande totals i SQL Server I detta blogginlägg kommer jag visa hur man använder den metoden för att beräkna exponentiell glidande medelvärde i T-SQL, men jag kommer också presentera en metod som använder standardfunktioner i SQL Server. Tyvärr betyder det att du använder en lo op. I exemplen kommer jag att beräkna ett 9-dagars exponentiellt glidande medelvärde. Exemplen använder databasen TAdb Ett skript för att skapa TAdb kan hittas här. Exponential Moving Average EMA Running Totals Method. Teorin bakom de totala funktionerna i uppdateringar beskrivs i detaljer av Jeff Moden i sin artikel Lösning av löpande totala och ordinära rankproblem. Övriga resurser som beskriver hur man använder denna metod för att beräkna EMA är bloggposten Beräkning av rörliga genomsnittsvärden med T-SQL av Gabriel Priester och forumet Post Exponential Moving Average Challenge både på SQL Server Central. I T-SQL kan du uppdatera variabler såväl som kolumner i en uppdateringsuppsättning. Uppdateringarna görs rad för rad internt av SQL Server. Denna rad för radbeteende är det som gör att man kan beräkna en löpande total. Detta exempel visar hur det fungerar. Notera att ColumnRunningTotal är en löpande summa av ColumnToSum. Med denna metod kan vi beräkna EMA9 med denna T-SQL. Beräkningen av EMA är ganska enkel Vi använd nuvarande rad och föregående men med större vikt till den aktuella raden. Vikten beräknas med formeln 2 1 9, där 9 är parametern för längden på EMA För att beräkna EMA9 för rad 10 ovan är beräkningen. I det här fallet får den nuvarande raden 20 av vikten 2 1 9 0 2 och den föregående raden får 80 av vikten 1-2 1 9 0 8. Du hittar denna beräkning i ovanstående uttalande i CASE-satsen. Exponential Moving Average EMA Looping Method. As långt som jag vet, med undantag för den löpande totalsmetoden som skisseras ovan, finns det inget sätt att beräkna EMA med hjälp av ett setbaserat SQL-uttalande. Därför använder T-SQL nedan en stundslinga för att beräkna EMA9. Resultaten är samma som i löpande totalvärden exemplet ovan. Som förväntat är den uppsättning baserade löpande totalversionen mycket snabbare än loopversionen. På min maskin var den baserade lösningen cirka 300 ms jämfört med omkring 1200 med loopversionen. mer i överensstämmelse med SQL-standarder men så valet betwee n metoderna beror på vad som är viktigast för dig, prestanda eller standards. Det exponentiella glidande medlet kan användas i trendanalys, som med de andra typerna av glidande medelvärden, Simple Moving Average SMA och Weighted moving average WMA. Det finns också andra beräkningar i teknisk analys som använder EMA, MACD till exempel. Denna blogginlägg är en del av en serie om teknisk analys, TA, i SQL Server Se de andra inläggen här. Postad av Tomas Lind. Tomas Lind - Konsulttjänster som SQL Server DBA och databasutvecklare på High Coast Database Solutions AB.

No comments:

Post a Comment