Skip to main content

Ssis Gleitender Durchschnitt


Exponentieller gleitender Durchschnitt in T-SQL Exponentielle gleitende Durchschnittswerte sind ähnlich gewichteten gleitenden Durchschnittswerten, da sie den Änderungen vor langer Zeit weniger Gewicht zuordnen und den jüngsten Änderungen mehr Gewicht verleihen. Die gewichteten gleitenden Mittelwerte sind linear, aber exponentielle gleitende Mittelwerte sind exponentiell. Das heißt, das Gewicht kann als Kurve ausgedrückt werden: Es gibt eine große Möglichkeit, exponentielle gleitende Mittelwerte in T-SQL zu berechnen, indem Sie ein undokumentiertes Feature über Variablen und laufende Summen in SQL Server verwenden. In diesem Blogpfosten werde ich zeigen, wie man diese Methode verwendet, um exponentiellen gleitenden Durchschnitt in T-SQL zu berechnen, aber ich werde auch eine Methode vorstellen, die Standardfunktionen in SQL Server verwendet. Leider bedeutet das, mit einer Schleife. In den Beispielen werde ich einen 9 Tage exponentiellen gleitenden Durchschnitt berechnen. Die Beispiele verwenden die Datenbank TAdb. Ein Skript zur Erstellung von TAdb finden Sie hier. Exponential Moving Average (EMA): Laufende Totals-Methode Die Theorie hinter den laufenden Total Features in Updates wird ausführlich von Jeff Moden in seinem Artikel Solving the Running Total und Ordinal Rang Probleme beschrieben. Weitere Ressourcen, die diese Methode zur Berechnung von EMA beschreiben, sind der Blogpfosten, der die gleitenden Durchschnitte mit T-SQL von Gabriel Priester berechnet und dem Forumsbeitrag Exponential Moving Average Challenge. Beide auf SQL Server Central. Grundsätzlich können Sie in T-SQL sowohl Variablen als auch Spalten in einer update - Anweisung aktualisieren. Die Aktualisierungen werden Zeile für Zeile intern von SQL Server ausgeführt. Dieses Zeilen-für-Zeile-Verhalten macht die Berechnung einer laufenden Summe möglich. Dieses Beispiel zeigt, wie es funktioniert: Beachten Sie, dass 8220ColumnRunningTotal8221 eine laufende Summe von 8220ColumnToSum8221 ist. Mit dieser Methode können wir EMA9 mit diesem T-SQL berechnen: Die Berechnung von EMA ist recht einfach. Wir verwenden die aktuelle Zeile und die vorherige, aber mit mehr Gewicht auf die aktuelle Zeile. Das Gewicht wird nach der Formel 2 (19) berechnet, wobei 822098221 der Parameter für die Länge der EMA ist. Zur Berechnung von EMA9 für Zeile 10 oben ist die Berechnung: In diesem Fall erhält die aktuelle Zeile 20 des Gewichts (2 (19) 0,2) und die vorherige Zeile erhält 80 des Gewichts (1-2 (19) 0,8). Sie finden diese Berechnung in der Anweisung oben in der CASE-Anweisung: Exponential Moving Average (EMA): Looping-Methode Soweit ich weiß, mit Ausnahme der laufenden Summenmethode oben skizziert, gibt es keine Möglichkeit, EMA mit einer setbasierten SQL-Anweisung zu berechnen . Daher verwendet die T-SQL unten eine while-Schleife, um EMA9 zu berechnen: Die Ergebnisse sind die gleichen wie in den laufenden Summen Beispiel oben. Leistung Wie erwartet, ist die set based running sumals-Version viel schneller als die Loop-Version. Auf meiner Maschine lag die setbasierte Lösung bei ca. 300 ms, verglichen mit ca. 1200 bei der Loop-Version. Die Schleifenversion entspricht jedoch mehr den SQL-Standards. Also die Wahl zwischen den Methoden hängt von what8217s am wichtigsten für Sie, Leistung oder Standards. Der exponentielle gleitende Durchschnitt kann in der Trendanalyse verwendet werden, wie bei den anderen Arten von gleitenden Durchschnitten, dem Simple Moving Average (SMA) und dem gewichteten gleitenden Durchschnitt (WMA). Es gibt auch andere Berechnungen in der technischen Analyse, die die EMA, MACD zum Beispiel verwendet. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas Lind Tomas Lind - Consulting als SQL Server DBA und Database Developer bei High Coast Database Solutions AB. Rolling 12 Monate Durchschnitt in DAX Die Berechnung der rollenden 12-Monats-Durchschnitt in DAX sieht aus wie eine einfache Aufgabe, aber es verbirgt sich etwas Komplexität. Dieser Artikel beschreibt, wie die beste Formel zu schreiben, um häufige Fallstricke mit Zeit Intelligenz Funktionen zu vermeiden. Wir beginnen mit dem üblichen AdventureWorks Datenmodell mit Produkten, Verkauf und Kalender Tabelle. Der Kalender wurde als Kalender-Tabelle markiert (es ist notwendig, mit jeder Zeit Intelligenz-Funktion zu arbeiten) und wir bauten eine einfache Hierarchie Jahr-Monat-Datum. Mit dieser Einrichtung ist es sehr einfach, eine erste PivotTable zu erstellen, die den Umsatz im Laufe der Zeit zeigt: Wenn Trendanalysen durchgeführt werden, wenn die Verkäufe saisonal bedingt sind oder allgemeiner, wenn Sie den Effekt von Spitzen und Tropfen im Verkauf entfernen möchten, Gemeinsame Technik ist, dass der Berechnung der Wert über einen bestimmten Zeitraum, in der Regel 12 Monate, und durchschnittlich. Der rollende Durchschnitt über 12 Monate bietet einen reibungslosen Indikator für den Trend und ist sehr nützlich in Charts. Angesichts eines Datums können wir den zwölfmonatigen fortlaufenden Durchschnitt mit dieser Formel berechnen, die noch einige Probleme aufweist, die wir später lösen werden: Das Verhalten der Formel ist einfach: Sie berechnet den Wert des Umsatzes nach dem Erstellen eines Filters auf dem Kalender Zeigt genau ein Jahr voller Daten. Der Kern der Formel ist das DATESBETWEEN, das einen inklusiven Satz von Daten zwischen den beiden Grenzen zurückgibt. Der untere Punkt lautet: Lesen aus dem Innersten: Wenn wir Daten für einen Monat zeigen, sagen wir Juli 2007, nehmen wir das letzte sichtbare Datum mit LASTDATE, das den letzten Tag im Juli 2007 zurückgibt. Dann benutzen wir NEXTDAY, um den 1. zu nehmen Von August 2007 und wir verwenden schließlich SAMEPERIODLASTYEAR, um es zurück zu verschieben ein Jahr, mit dem 1. August 2006. Die obere Grenze ist einfach LASTDATE, dh Ende Juli 2007. Wenn wir diese Formel in einer PivotTable verwenden, sieht das Ergebnis gut aus, aber wir Haben Sie ein Problem für das letzte Datum: In der Tat, wie Sie in der Figur sehen können, wird der Wert bis 2008 korrekt berechnet. Dann gibt es keinen Wert im Jahr 2009 (was richtig ist, haben wir nicht Umsatz im Jahr 2009), aber es gibt Ein überraschender Wert im Dezember 2010, wo unsere Formel zeigt die Gesamtsumme statt einen leeren Wert, wie wir erwarten würden. In der Tat, am Dezember gibt LASTDATE den letzten Tag des Jahres und NEXTDAY sollte am 1. Januar 2011 zurückgegeben werden. Aber NEXTDAY ist eine Zeit-Intelligenz-Funktion und es wird erwartet, dass Sätze von bestehenden Daten zurückzugeben. Diese Tatsache ist nicht sehr offensichtlich und es ist ein paar Worte mehr wert. Zeit-Intelligenz-Funktionen führen keine mathematische Daten aus. Wenn Sie den Tag nach einem bestimmten Datum nehmen möchten, können Sie einfach 1 zu einer beliebigen Datumsspalte hinzufügen und das Ergebnis ist der nächste Tag. Stattdessen verschieben Zeit-Intelligenz-Funktionen Mengen von Datum hin und her im Laufe der Zeit. So nimmt NEXTDAY seine Eingabe (in unserem Fall eine einreihige Tabelle mit dem 31. Dezember 2010) auf und verschiebt es einen Tag später. Das Problem ist, dass das Ergebnis 1. Januar 2011 sein sollte, aber da die Kalendertabelle dieses Datum nicht enthält, ist das Ergebnis BLANK. So berechnet unser Ausdruck Umsatz mit einem leeren unteren Grenze, die den Beginn der Zeit bedeutet, was als Ergebnis der Gesamtsumme der Verkäufe bedeutet. Um die Formel zu korrigieren, genügt es, die Auswertungsreihenfolge der unteren Grenze zu ändern: Wie Sie sehen können, wird NEXTDAY nach der Umschaltung von einem Jahr aufgerufen. Auf diese Weise nehmen wir 31 Dezember 2010, verschieben Sie es auf 31 Dezember 2009 und nehmen Sie am nächsten Tag, der 1. Januar 2010 ist: ein vorhandenes Datum in der Kalender-Tabelle. Das Ergebnis ist nun das Erwartete: An dieser Stelle müssen wir nur diese Zahl durch 12 dividieren, um den rollenden Durchschnitt zu erhalten. Aber, wie Sie sich leicht vorstellen können, können wir nicht immer durch 12 teilen. In der Tat, am Anfang der Zeit gibt es nicht 12 Monate zu aggregieren, sondern eine niedrigere Zahl. Wir müssen die Anzahl der Monate berechnen, für die es Verkäufe gibt. Dies kann durch Cross-Filterung der Kalender-Tabelle mit der Verkaufstabelle, nachdem wir den neuen 12 Monate Kontext angewendet werden, erreicht werden. Wir definieren eine neue Kennzahl, die die Anzahl der bestehenden Monate im Zeitraum von 12 Monaten berechnet: Sie können in der nächsten Abbildung sehen, dass die Months12M-Kennzahl einen korrekten Wert berechnet: Es ist zu beachten, dass die Formel nicht funktioniert, wenn Sie einen Zeitraum wählen Länger als 12 Monate, da der CalendarMonthName nur 12 Werte hat. Wenn Sie längere Zeiträume benötigen, müssen Sie eine YYYYMM-Spalte verwenden, um mehr als 12 zählen zu können. Der interessante Teil dieser Formel, die die Kreuzfilterung verwendet, ist die Tatsache, dass sie die Anzahl der verfügbaren Monate berechnet, auch wenn Sie andere Filter verwenden Attribute. Wenn Sie zum Beispiel die blaue Farbe mit einem Slicer auswählen, dann starten Sie im Juli 2007 (nicht im Jahr 2005, wie es für viele andere Farben passiert). Mit dem Cross-Filter von Sales berechnet die Formel korrekt, dass es im Juli 2007 einen einmonatigen Verkaufsumsatz für Blue gibt: An diesem Punkt ist der rollende Durchschnitt nur ein DIVIDE weg: Wenn wir ihn in einer Pivot-Tabelle verwenden, sind wir noch Haben ein kleines Problem: Tatsächlich wird der Wert auch für Monate berechnet, für die es keine Verkäufe gibt (dh zukünftige Monate): Dies kann mit einer IF-Anweisung gelöst werden, um zu verhindern, dass die Formel Werte anzeigt, wenn es keine Verkäufe gibt. Ich habe nichts gegen IF, aber für die Performance-süchtig unter euch, es ist immer daran zu erinnern, dass IF ein Performance-Killer sein könnte, denn es könnte DAX Formel Motor Kraft treten in. In diesem speziellen Fall ist der Unterschied vernachlässigbar, aber , In der Regel der beste Weg, um den Wert zu entfernen, wenn es keine Verkäufe gibt, ist auf reine Speicher-Engine-Formeln wie folgt verlassen: Vergleich eines Diagramms mit dem Avg12M mit einem anderen, die Verkäufe zeigt, können Sie leicht zu schätzen wissen, wie der rollende Durchschnitt Umreißt Trends in viel sauberer Weise: Halten Sie mich informiert über kommende Artikel (Newsletter). Deaktivieren Sie, um die Datei frei herunterzuladen. Moving Durchschnitt in T-SQL Eine gemeinsame Berechnung in Trend-Analyse ist die bewegte (oder rollende) Durchschnitt. Ein gleitender Durchschnitt ist der Durchschnitt der letzten 10 Zeilen. Der gleitende Durchschnitt zeigt eine glattere Kurve als die tatsächlichen Werte, mehr also mit einer längeren Periode für den gleitenden Durchschnitt, was es zu einem guten Werkzeug für die Trendanalyse macht. Dieser Blogpfosten zeigt, wie man den gleitenden Durchschnitt in T-SQL berechnet. Abhängig von der Version von SQL Server werden unterschiedliche Methoden verwendet. Die nachstehende Tabelle zeigt den Glättungseffekt (rote Linie) mit einem 200 Tage gleitenden Durchschnitt. Die Aktienkurse sind die blaue Linie. Der langfristige Trend ist deutlich sichtbar. T-SQL Moving Avergage 200 Tage Die folgende Demonstration benötigt die TAdb-Datenbank, die mit dem hier befindlichen Skript erstellt werden kann. Im nächsten Beispiel wird ein gleitender Durchschnitt für die letzten 20 Tage berechnet. Abhängig von der Version von SQL Server gibt es eine andere Methode, um die Berechnung durchzuführen. Und, wie wir später sehen werden, haben die neueren Versionen von SQL Server Funktionen, die eine viel effektivere Berechnung ermöglichen. SQL Server 2012 und höher Moving Average Diese Version verwendet eine aggregierte Fensterfunktion. Was ist neu in SQL 2012 ist die Möglichkeit, die Größe des Fensters zu beschränken, indem Sie angeben, wie viele Zeilen vor dem Fenster enthalten sollten: Zeilen vorangegangen ist 19, weil wir die aktuelle Zeile auch in die Berechnung enthalten. Wie Sie sehen können, ist die Berechnung der gleitenden Durchschnitt in SQL Server 2012 ziemlich einfach. Die Abbildung unten zeigt das Fensterprinzip. Die aktuelle Zeile ist mit gelb markiert. Das Fenster ist blau markiert. Der gleitende Durchschnitt ist einfach der Durchschnitt von QuoteClose in den blauen Linien: T-SQL Moving Average Fenster. Die Ergebnisse der Berechnungen in älteren Versionen von SQL Server sind identisch, so dass sie nicht erneut angezeigt werden. SQL Server 2005 8211 2008R2 Moving Average Diese Version verwendet einen gemeinsamen Tabellenausdruck. Der CTE wird referenziert, um die letzten 20 Zeilen für jede Zeile zu erhalten: Moving Average vor SQL Server 2005 Die pre 2005-Version wird eine linke äußere Verknüpfung zu der gleichen Tabelle verwenden, um die letzten 20 Zeilen zu erhalten. Die äußere Tabelle kann gesagt werden, um das Fenster, das wir wollen, um einen Durchschnitt zu berechnen: Performance-Vergleich Wenn wir die drei verschiedenen Methoden gleichzeitig und überprüfen Sie die resultierende Ausführung Plan, gibt es einen dramatischen Unterschied in der Leistung zwischen den Methoden: Vergleich von drei Verschiedene Methoden, um den gleitenden Durchschnitt zu berechnen Wie Sie sehen können, macht die Verbesserung der Fensterfunktion in SQL 2012 einen großen Unterschied in der Leistung. Wie bereits am Anfang dieses Beitrags erwähnt, werden gleitende Durchschnittswerte als Trends verwendet. Ein gemeinsamer Ansatz besteht darin, Bewegungsdurchschnitte verschiedener Längen zu kombinieren, um Veränderungen in der kurz-, mittel - und langfristigen Entwicklung zu erkennen. Von besonderem Interesse sind die Übergänge der Trendlinien. Zum Beispiel, wenn sich der kurze Trend über den langen oder mittleren Trend bewegt, kann dieser als Kaufsignal in der technischen Analyse interpretiert werden. Und wenn sich der kurze Trend unter einer längeren Trendlinie bewegt, kann dies als Verkaufssignal interpretiert werden. Die folgende Tabelle zeigt Quotes, Ma20, Ma50 und Ma200. T-SQL Ma20, Ma50, Ma200 kaufen und verkaufen Signale. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas Lind

Comments