Rolling 12 Monate Durchschnitt in DAXputing der rollende 12-Monats-Durchschnitt in DAX sieht wie eine einfache Aufgabe, aber es verbirgt einige Komplexität Dieser Artikel erklärt, wie man die beste Formel zu vermeiden, die häufige Fallstricke mit Zeit Intelligenz-Funktionen zu vermeiden. Wir beginnen mit dem üblichen AdventureWorks Datenmodell , Mit Produkten, Verkaufs - und Kalendertabelle Der Kalender wurde als Kalendertabelle markiert, es ist notwendig, mit jeder Zeit Intelligenz-Funktion zu arbeiten und wir bauten eine einfache Hierarchie Jahr-Monat-Datum Mit diesem Setup ist es sehr einfach, eine zu erstellen Erste PivotTable zeigt Umsatz im Laufe der Zeit. Wenn Trend Trend Analyse, wenn Verkäufe unterliegen Saisonalität, oder allgemeiner, wenn Sie die Wirkung von Peaks und Tropfen im Vertrieb zu entfernen, eine gemeinsame Technik ist, dass der Berechnung der Wert über einen bestimmten Zeitraum , In der Regel 12 Monate, und durchschnittlich es Der rollende Durchschnitt über 12 Monate bietet einen reibungslosen Indikator für den Trend und es ist sehr nützlich in Charts. Gezigt ein Datum, können wir berechnen die 12-Monats-Roll-Durchschnitt mit dieser Formel, die noch einige hat Probleme, die wir später lösen werden. Das Verhalten der Formel ist einfach, es berechnet den Wert der Verkäufe nach dem Erstellen eines Filters auf dem Kalender, der genau ein ganzes Jahr der Daten zeigt Der Kern der Formel ist die DATESBETWEEN, die einen Inclusive-Satz zurückgibt Daten zwischen den beiden Grenzen Die untere ist. Lesen Sie es von der innersten, wenn wir Daten für einen Monat zeigen, sagen wir Juli 2007, nehmen wir das letzte sichtbare Datum mit LASTDATE, die den letzten Tag im Juli 2007 zurückgibt Dann verwenden wir NEXTDAY zu Nehmen Sie den 1. August 2007 und wir verwenden endlich SAMEPERIODLASTYEAR, um es um ein Jahr zu verschieben, was den 1. August 2006 ergibt. 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 ein Problem für das letzte Datum. In der Tat, wie Sie in der Figur sehen können, wird der Wert korrekt bis 2008 berechnet. Dann gibt es keinen Wert im Jahr 2009, was richtig ist, wir haben keinen Umsatz im Jahr 2009 aber es gibt Ein überraschender Wert im Dezember 2010, wo unsere Formel die Gesamtsumme anstelle eines leeren Wertes zeigt, wie wir erwarten würden. In der Tat, im Dezember, gibt LASTDATE den letzten Tag des Jahres zurück und NEXTDAY sollte den 1. Januar 2011 zurückgeben. Aber NEXTDAY Ist eine Zeit Intelligenz-Funktion und es wird erwartet, dass Sätze von bestehenden Daten zurückgeben Diese Tatsache ist nicht sehr offensichtlich und es ist ein paar Worte mehr wert. Zeit Intelligenz Funktionen nicht durchführen Mathe auf Termine Wenn Sie den Tag nach einem bestimmten Datum nehmen wollen , Können Sie einfach 1 zu jedem Datum Spalte hinzufügen, und das Ergebnis wird am nächsten Tag stattdessen Zeit Intelligenz Funktionen verschieben Sätze von Datum hin und her über die Zeit So, NEXTDAY nimmt seine Eingabe in unserem Fall eine einreihige Tabelle mit dem 31 Von Dezember 2010 und verschiebt es einen Tag später Das Problem ist, dass das Ergebnis der 1. Januar 2011 sein sollte, aber weil die Kalender-Tabelle nicht dieses Datum enthält, ist das Ergebnis BLANK. Thus, unser Ausdruck berechnet Umsatz mit einer leeren unteren Grenze, Was bedeutet der Beginn der Zeit, als Ergebnis der Gesamtsumme der Verkäufe Um die Formel zu korrigieren, genügt es, die Auswertungsreihenfolge der unteren Grenze zu ändern. Wie Sie sehen können, wird jetzt NEXTDAY nach der Verschiebung von einem Jahr zurückgerufen Auf diese Weise nehmen wir den 31. Dezember 2010, verschieben ihn bis zum 31. Dezember 2009 und nehmen am nächsten Tag, der am 1. Januar 2010 ein bestehendes Datum in der Kalendertabelle ist. Das Ergebnis ist nun das erwartete Braucht nur diese Zahl durch 12 zu teilen, um den rollenden Durchschnitt zu erhalten. Aber, wie Sie sich leicht vorstellen können, können wir es nicht immer durch 12 teilen. In der Tat, zu Beginn der Periode gibt es nicht 12 Monate zu aggregieren, aber eine niedrigere Zahl Wir Notwendigkeit, die Anzahl der Monate zu berechnen, für die es Verkäufe gibt Dies kann mit Querfilterung der Kalendertabelle mit der Verkaufstabelle erreicht werden, nachdem wir den neuen 12 Monate Kontext angewendet haben Wir definieren eine neue Maßnahme, die die Anzahl der vorhandenen Monate in der 12 berechnet Monate-Zeitraum. Sie können in der nächsten Abbildung sehen, dass die Months12M-Maßnahme einen korrekten Wert berechnet. Es lohnt sich zu beachten, dass die Formel nicht funktioniert, wenn Sie eine Periode länger als 12 Monate wählen, weil der Kalender-Monat hat nur 12 Werte Wenn Sie Benötigen Sie längere Zeiträume, müssen Sie eine YYYYMM-Spalte verwenden, um mehr als 12 zählen zu können. Der interessante Teil dieser Formel, der Cross-Filter verwendet, ist die Tatsache, dass es die Anzahl der verfügbaren Monate berechnet, auch wenn Sie mit anderen Attributen filtern If , Zum Beispiel, wählen Sie die blaue Farbe mit einem Slicer, dann Umsatz im Juli 2007 nicht im Jahr 2005 beginnen, wie es für viele andere Farben passiert Mit dem Cross-Filter auf Sales, die Formel richtig berechnet, dass im Juli 2007 gibt es einen einzigen Monat Der verfügbaren Verkäufe für Blue. Zu diesem Punkt ist der rollende Durchschnitt nur ein DIVIDE weg. Wenn wir es in einer Pivot-Tabelle verwenden, haben wir immer noch ein kleines Problem in der Tat, der Wert wird 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 zeigt, wenn es keine Verkäufe gibt, die ich nichts gegen IF habe, aber für die leistungsabhängige unter euch ist es immer daran zu erinnern, dass IF eine Leistung sein könnte Killer, weil es DAX-Formel-Engine zwingen könnte In diesem konkreten Fall ist der Unterschied vernachlässigbar, aber in der Regel der beste Weg, um den Wert zu entfernen, wenn es keine Verkäufe gibt, auf reine Speicher-Engine-Formeln wie zu verlassen Dies ist ein Diagramm mit dem Avg12M mit einem anderen, der Verkäufe zeigt, können Sie leicht zu schätzen wissen, wie der rollende Durchschnitt umreißt Trends in einer viel saubereren Weise. Halten Sie mich informiert über kommende Artikel Newsletter Uncheck, um die Datei kostenlos herunterladen. Ich arbeite mit SQL Server 2008 R2, versucht, einen gleitenden Durchschnitt zu berechnen Für jeden Datensatz in meiner Ansicht möchte ich die Werte der 250 vorherigen Aufzeichnungen sammeln und dann den Durchschnitt für diese Auswahl berechnen. Meine Ansichtspalten sind wie folgt. TransactionID ist für jede TransactionID eindeutig Ich möchte den Durchschnitt für Spaltenwert berechnen, über vorherige 250 Datensätze Also für TransactionID 300 sammle alle Werte aus vorherigen 250 Zeilen Ansicht sortiert absteigend von TransactionID und dann in Spalte MovAvg schreiben das Ergebnis des Durchschnitts dieser Werte, die ich suche Um Daten innerhalb einer Reihe von Datensätzen zu sammeln 28. Oktober 14 bei 20 58.Exponentieller gleitender Durchschnitt in T-SQL. Exponentielle gleitende Durchschnitte sind ähnlich wie gewichtete gleitende Durchschnitte, in denen sie weniger Gewicht zu Änderungen vor langer Zeit und mehr Gewicht zu neuem zuweisen Änderungen Die gewichteten Bewegungsdurchschnitte sind linear, aber die exponentiellen Bewegungsdurchschnitte sind exponentiell. Das heißt, das Gewicht kann als Kurve ausgedrückt werden. Es gibt eine großartige Möglichkeit, exponentielle gleitende Mittelwerte in T-SQL zu berechnen, wobei ein undokumentiertes Merkmal über Variablen und laufende Summen in SQL verwendet wird Server In diesem Blog-Post werde ich zeigen, wie man diese Methode verwendet, um exponentiell gleitenden Durchschnitt in T-SQL zu berechnen, aber ich werde auch eine Methode vorstellen, die Standardmerkmale in SQL Server verwendet. Leider bedeutet das, eine Schleife zu verwenden. In den Beispielen I Wird ein 9 Tage exponentieller gleitender Durchschnitt berechnen Die Beispiele verwenden die Datenbank TAdb Ein Skript zur Erstellung von TAdb finden Sie hier. Exponentielle Moving Average EMA Running Totals Methode. Die Theorie hinter den laufenden Total Features in Updates wird im Detail von Jeff Moden in seinem beschrieben Artikel Lösung der laufenden Gesamt - und Ordinal-Rang-Probleme. Weitere Ressourcen, die mit dieser Methode beschreiben, um EMA zu berechnen, sind der Blog-Beitrag Berechnen von Moving Averages mit T-SQL von Gabriel Priester und dem Forum Post Exponential Moving Average Challenge sowohl auf SQL Server Central. Basically, In T-SQL können Sie Variablen sowie Spalten in einer Update-Anweisung aktualisieren Die Updates werden Zeile für Zeile intern von SQL Server durchgeführt Dieses Zeilen-zu-Zeilen-Verhalten ist das, was die Berechnung einer laufenden Summe ermöglicht. Dieses Beispiel zeigt, wie es funktioniert ColumnRunningTotal ist eine laufende Summe von ColumnToSum. Using diese Methode können wir EMA9 mit diesem T-SQL berechnen. Die Berechnung von EMA ist ziemlich einfach Wir verwenden die aktuelle Zeile und die vorherige, aber mit mehr Gewicht auf die aktuelle Zeile Das Gewicht wird berechnet durch Die Formel 2 1 9, wobei 9 der Parameter für die Länge der EMA ist Um EMA9 für Zeile 10 oben zu berechnen, wird die Berechnung in diesem Fall die aktuelle Zeile 20 des Gewichts 2 1 9 0 2 und die vorherige Zeile bekommt 80 des Gewichts 1-2 1 9 0 8.Sie finden diese Berechnung in der obigen Aussage in der CASE-Anweisung. Exponentielle Moving Average EMA Looping Methode. Soweit ich weiß, mit Ausnahme der laufenden Summen Methode oben beschrieben, gibt es keine Weg, um EMA mit einer setbasierten SQL-Anweisung zu berechnen. Daher verwendet das T-SQL unten eine while-Schleife, um EMA9 zu berechnen. Die Ergebnisse sind die gleichen wie im laufenden Summenbeispiel oben. Wie erwartet, ist die setbasierte laufende Summenversion so Schneller als die Loop-Version Auf meiner Maschine war die Set-basierte Lösung ca. 300 ms, im Vergleich zu etwa 1200 mit der Loop-Version Die Loop-Version ist eher mit SQL-Standards konform, aber die Wahl zwischen den Methoden hängt davon ab, was für Sie am wichtigsten ist, Leistung oder Standards. Der exponentielle gleitende Durchschnitt kann in der Trendanalyse verwendet werden, wie bei den anderen Arten von gleitenden Durchschnitten, Simple Moving Average SMA und Weighted Gleitender Durchschnitt WMA. Es gibt auch andere Berechnungen in der technischen Analyse, die die EMA, MACD zum Beispiel verwendet. Dieser Blog-Post ist Teil einer Serie über technische Analyse, TA, in SQL Server Siehe die anderen Beiträge hier. Posted by Tomas Lind. Tomas Lind - Beratungsdienste als SQL Server DBA und Datenbank-Entwickler bei High Coast Database Solutions AB.
Comments
Post a Comment