Thursday 13 July 2017

Moving Average Powerpivot

SQL Server Denali PowerPivot Alberto Ferrari schrieb bereits über die Berechnung der gleitenden Durchschnittswerte im DAX mit einer berechneten Spalte. Ich möchte hier einen anderen Ansatz unter Verwendung einer berechneten Maßnahme vorstellen. Für den gleitenden Durchschnitt I8217m berechnen einen täglich gleitenden Durchschnitt (in den letzten 30 Tagen) hier. Für mein Beispiel, I8217m mit der PowerPivot-Arbeitsmappe, die als Teil der SSAS-Tabellarischen Model-Projekte aus den Denali CTP 3 Proben heruntergeladen werden können. In diesem Beitrag, I8217m Entwicklung der Formel Schritt für Schritt. Allerdings, wenn Sie in Eile sind, könnten Sie direkt auf die endgültigen Ergebnisse unten zu springen. In den Details sehen die Beispieldaten folgendermaßen aus: In jedem row8217s-Kontext gibt der Ausdruck DateDate den aktuellen Kontext an, dh das Datum für diese Zeile . Aber aus einer berechneten Maßnahme können wir nicht auf diesen Ausdruck verweisen (da es keine aktuelle Zeile für die Date-Tabelle gibt), stattdessen müssen wir einen Ausdruck wie LastDate (DateDate) verwenden. Also, um die letzten 30 Tage zu erhalten, können wir diesen Ausdruck verwenden Wir können jetzt unsere Internetverkäufe für jeden jener Tage zusammenfassen, indem wir die Zusammenfassungsfunktion verwenden: Summarize (160 DatesInPeriod (DateDate, LastDate (DateDate), - 30, DAY) 160, DateDate 160 quotSalesAmountSumquot 160 Sum (Internet SalesSales Amount)) Und schließlich we8217re die DAX-Funktion AverageX mit dem Mittelwert dieser 30 Werte zu berechnen: Verkaufsbetrag (30d avg): AverageX (160 Summarize (160.160.160 DatesInPeriod (DateDate, lastdate (DateDate), - 30, TAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. Sum (Internet SalesSales Betrag) 160) 160, SalesAmountSum) Dies ist die Berechnung, die in unserem Internet-Sales-Tabelle verwenden, wie unten im Screenshot zu sehen: Beim Hinzufügen dieser Berechnung zu der Pivot-Tabelle von oben sieht das Ergebnis folgendermaßen aus: Betrachtet man das Ergebnis, so scheint es, dass wir vor dem 1. Januar 2003 Daten haben: Der erste Wert für den gleitenden Durchschnitt ist identisch mit dem Tageswert Es gibt keine Zeilen vor diesem Datum). Der zweite Wert für den gleitenden Durchschnitt ist tatsächlich der Durchschnitt der ersten beiden Tage und so weiter. Dies ist nicht ganz richtig, aber I8217m immer wieder auf dieses Problem in einer Sekunde. Der Screenshot zeigt die Berechnung für den gleitenden Durchschnitt vom 31. Januar als Durchschnitt der täglichen Werte vom 2. bis 31. Januar. Unsere errechnete Maßnahme funktioniert auch, wenn Filter angewendet werden. Im folgenden Screenshot habe ich zwei Produktkategorien für die Datenreihe verwendet: Wie funktioniert unsere berechnete Messung auf höheren Aggregationsebenen Um herauszufinden, I8217m mit der Kalenderhierarchie auf die Zeilen (anstelle des Datums). Zur Vereinfachung habe ich die Semester - und Viertelniveaus mit Hilfe der Excel8217s-Pivot-Tabellenoptionen (Option ShowHide fields) entfernt. Wie Sie sehen können, funktioniert die Berechnung immer noch gut. Hier ist das monatliche Aggregat der gleitende Durchschnitt für den letzten Tag des jeweiligen Monats. Sie sehen das deutlich für Januar (Wert von 14.215.01 erscheint auch im Screenshot oben als Wert für den 31. Januar). Wenn dies die Geschäftsanforderung (die vernünftig für einen täglichen Durchschnitt klingt), dann die Aggregation funktioniert auf monatlicher Ebene (sonst müssen wir Feinabstimmung unserer Berechnung und das wird ein Thema der kommenden Post sein). Aber obwohl die Aggregation auf monatlicher Ebene sinnvoll ist, wenn wir diese Ansicht auf den Tagespegel erweitern, sehen wir, dass unsere berechnete Maßnahme einfach den Umsatz für diesen Tag, nicht den Durchschnitt der letzten 30 Tage, zurückgibt: Wie kann das sein? Das Problem ergibt sich aus dem Kontext, in dem wir unsere Summe zu berechnen, wie im folgenden Code hervorgehoben: Verkaufsbetrag (30d avg): AverageX (160 Summarize (160.160.160 datesinperiod (DateDate, lastdate (DateDate), - 30, TAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. Summe (Internet SalesSales Amount) 160) 160, SalesAmountSum) Da wir diesen Ausdruck über den angegebenen Zeitraum auswerten, ist der einzige Kontext, der hier überschrieben wird, DateDate. In unserer Hierarchie verwenden wir verschiedene Attribute aus unserer Dimension (Kalenderjahr, Monat und Tag des Monats). Da dieser Kontext noch vorhanden ist, wird die Berechnung auch durch diese Attribute gefiltert. Und dies erklärt, warum wir den aktuellen tag8217s Kontext immer noch für jede Zeile vorhanden ist. Um Dinge klar zu machen, solange wir diesen Ausdruck außerhalb eines Datumskontexts auswerten, ist alles in Ordnung, wie die folgende DAX-Abfrage bei der Ausführung von Management Studio im Internet Vertriebsperspektive unseres Modells (unter Verwendung der tabellarischen Datenbank mit denselben Daten) zeigt ): evaluate (160.160.160 Summarize (160160160160160160160 datesinperiod (DateDate, Datum (2003,1,1), - 5, DAY) 160160160160160160160, DateDate 160160160160160160160. quotSalesAmountSumquot 160160160160160160160. Sum (Internet SalesSales Betrag) 160160160)) Hier reduzierte ich die Zeitperiode Auf 5 Tage setzen und auch ein festes Datum festlegen, da LastDate (8230) das letzte Datum meiner Datendimensionstabelle ergeben würde, für die in den Beispieldaten keine Daten vorhanden sind. Hier ist das Ergebnis aus der Abfrage: Nach dem Setzen eines Filters auf 2003 werden jedoch keine Datenzeilen außerhalb von 2003 in die Summe aufgenommen. Das erklärt die oben stehende Bemerkung: Es sah so aus, als hätten wir erst ab dem 1. Januar 2003 Daten. Und jetzt wissen wir, warum: Das Jahr 2003 war auf dem Filter (wie man im ersten Screenshot dieses Beitrags sehen kann) und Daher war es bei der Berechnung der Summe vorhanden. Jetzt müssen wir nur noch diese zusätzlichen Filter loswerden, weil wir schon unsere Ergebnisse nach Datum filtern. Der einfachste Weg, dies zu tun, besteht darin, die Berechnungsfunktion zu verwenden und ALL (8230) für alle Attribute anzuwenden, für die wir den Filter entfernen möchten. Da wir einige dieser Attribute (Jahr, Monat, Tag, Wochentag, 8230) haben und wir den Filter von allen entfernen wollen, aber das Datumsattribut, ist die Verknüpfungsfunktion ALLEXCEPT hier sehr nützlich. Wenn Sie einen MDX-Hintergrund haben, werden Sie sich fragen, warum wir don8217t ein ähnliches Problem bei der Verwendung von SSAS im OLAP-Modus (BISM Multidimensional) erhalten. Der Grund ist, dass unsere OLAP-Datenbank Attributbeziehungen hat, also nach der Einstellung des Attributs date (key) werden die anderen Attribute automatisch auch geändert und wir müssen uns darum kümmern (siehe mein Beitrag hier). Aber im tabellarischen Modell haben wir Attributbeziehungen (nicht einmal ein echtes Schlüsselattribut) und deshalb müssen wir unerwünschte Filter aus unseren Berechnungen eliminieren. So, hier sind wir mit dem 8230 Verkaufsbetrag (30d avg): AverageX (160 Summarize (160.160.160 datesinperiod (DateDate, lastdate (DateDate), - 30, TAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. berechnen (Sum (Internet SalesSales Betrag) , ALLEXCEPT (Date, DateDate) 160), SalesAmountSum) Und dies ist unsere letzte Pivot-Tabelle in Excel: Um den gleitenden Durchschnitt darzustellen, ist hier der gleiche Datenauszug in einer Diagrammansicht (Excel): Obwohl wir unsere Daten auf gefiltert haben 2003 berücksichtigt der gleitende Durchschnitt für die ersten 29 Tage des Jahres 2003 die entsprechenden Tage des Jahres 2002 korrekt. Sie werden die Werte für den 30. Januar und 31. Januar aus unserem ersten Ansatz zu erkennen, da diese waren die ersten Tage, für die unsere erste Berechnung hatte eine ausreichende Menge an Daten (volle 30 Tage).Im versuchen, einen gleitenden Durchschnitt in meinem Modell zu schaffen. Ich suche Hilfe. Ich habe versucht, die Details im Alberto Ferraris Blog hier. Aber ich konnte nicht die DayNumber Maßnahme arbeiten, die Syntax nicht richtig scheinen und ich konnte es nicht korrigieren. Mein Modell hat eine Faktentabelle, die eine Liste der Fälle enthält und sich zu einer Datumstabelle über Erstellungsdatum verbindet. Ich habe eine zweite Beziehung (Inaktiv) auf die Datum-Tabelle in der Spalte ClosedDate. Ich habe eine Maßnahme: Case Closed Count: CALCULATE (COUNTROWS (Fall), USERELATIONSHIP (CaseClosedDateKey, DateDateKey)). Ich möchte eine Maßnahme, die die Summe von Case Closed Count für die letzten drei Tage des aktuellen Kontexts erhält. Ich habe dann geplant, diese Zahl durch 3 zu teilen, um den bewegten 3-Tage-Durchschnitt zu erhalten. Ein anderes Stück Logik möchte ich in Betracht ziehen - wenn der letzte Tag HEUTE ist, dann werden die vorherigen 3 Tage verwendet - die Daten werden alle 15 Minuten aktualisiert, so dass dies um 09:00 Uhr morgens den Durchschnitt verkleinern würde Es ist kein vollendeter Tag. Jede Hilfe wird geschätzt. Sonntag, 17. Februar 2013 17.25 Uhr Heres ein Link zu einem Ansatz mit nur ein berechnetes Maß, dass Javier Guillen schrieb eine Weile zurück. Ich hoffe, das hilft. Brent Greenwood, MS, MCITP, CBIP Bitte markieren Sie richtige Antworten und hilfreiche Beiträge brentgreenwood. blogspot Bearbeitet von Brent Greenwood Editor Montag, Februar 18, 2013 4:08 PM Vorgeschlagen als Antwort von Ed Price - MSFT Microsoft Mitarbeiter, Besitzer Thursday, August 22, 2012 7:39 PM In seinem Beitrag nutzt Alberto die EARLIER-Funktion, die zurückgibt Ein Wert aus einem früheren Zeilenkontext. Dies funktioniert nur in einem iterativen Ausdruck, wenn dieser Ausdruck in einem vorhandenen Zeilenkontext (einem anderen Iterationsausdruck oder einer berechneten Spalte) ausgewertet wird. Entspricht folgende Voraussetzung (nicht getestet) Fall Geschlossener Count - Letzte 3 Tage: CALCULATE ( (DATEADD (DateDateKey, -3, Day) DateDateKey)) Das letzte kann mit einem IF-Ausdruck mit TODAY () - Funktion und Anpassung des obigen Musters getan werden. Vorgeschlagen als Antwort von Ed Price - MSFT Microsoft Mitarbeiter, Besitzer Donnerstag, 22. August 2013 07:40 Uhr Heres eine Verbindung zu einem Ansatz mit nur ein berechnetes Maß, dass Javier Guillen schrieb eine Weile zurück . Ich hoffe, das hilft. Brent Greenwood, MS, MCITP, CBIP Bitte markieren Sie richtige Antworten und hilfreiche Beiträge brentgreenwood. blogspot Bearbeitet von Brent Greenwood Editor Montag, Februar 18, 2013 4:08 PM Vorgeschlagen als Antwort von Ed Price - MSFT Microsoft Mitarbeiter, Besitzer Thursday, August 22, 2012 7:39 PM Als Antwort markiert von Ed Price - MSFT Microsoft Mitarbeiter, Besitzer Dienstag, 17. September 2013 6:39 PMPost navigation Berechnen eines Moving Average in PowerPivot Vor zwei Wochen habe ich versprochen Darüber, wie man einen gleitenden Durchschnitt in PowerPivot zu generieren, aber dann letzte Woche habe ich abgelenkt, indem ich Ihnen sagen, über eine coole Art und Weise zu zeigen, YouTube-Videos auf Ihrem SharePoint-Seiten mit einem Web-Teil auf CodePlex gefunden, dass einige meiner Arbeitsteammitglieder gefunden. Es war so einfach zu implementieren, ich musste es nur mit euch allen teilen. Allerdings kehrt zurück auf das Thema der Berechnung eines gleitenden Durchschnitt, könnte die erste Frage, was ist ein gleitender Durchschnitt und warum sollten Sie dann eine verwenden möchten. Ein gleitender Durchschnitt ist einfach die Summe von zwei oder mehr zeitabhängigen Werten, in denen die Summe dann durch die Anzahl der verwendeten Werte dividiert wird. Zum Beispiel, wenn ich über Aktienkurse reden, möchte ich vielleicht etwas wie ein 7-Tage gleitenden Durchschnitt verwenden, um den Effekt der einzelnen Tagesspitzen oder Tropfen in den Aktienkurs zu dämpfen, die nicht indikativ für die gesamte Aktienentwicklung sind. (Manche Langzeitinvestoren verwenden sogar längerfristig gleitende Durchschnitte.) Das bedeutet nicht, dass wenn eine Aktie stürzt oder steigt, würde ich mich zurücklehnen, bis der gleitende Durchschnitt mir sagt, dass ich handeln soll. Jeder gute Aktieninvestor wird Ihnen sagen, es gibt viele andere Faktoren sowohl intern als auch extern zu einer Firma, die Ihre Hand könnte zum Verkauf oder Kauf einer bestimmten Aktie. Aber der Punkt ist, und dies ist die Antwort auf die zweite Frage, ein gleitender Durchschnitt dämpft Zufälligkeit, so kann ich leichter sehen das allgemeine Muster der Zahlen, die ich verfolgen. Ok, so nehme ich an, für Contoso zu arbeiten und wollte wissen, ob die Verkäufe steigen, fallen oder allgemein flach sind. Wenn ich tägliche Verkäufe betrachte, sind die Zahlen wahrscheinlich, oben und unten in keinem bestimmten Muster zu schwanken, das mich vom Aufflackern eines Gesamttrends hindert. Die folgende Abbildung zeigt Contoso täglichen Contoso-Umsatz über einen Zeitraum von 3 Monaten im Sommer 2008. Ich beschloss, die Daten als Diagramm zeigen, um zu zeigen, wie Umsatz schwankt am Tag zeigen Informationen, die ich nicht in der Lage, so leicht zu sehen war Eine Tabelle mit denselben Werten erstellt. Natürlich könnte ich ein ganzes Jahr oder mehr einplanen, aber um einzelne Tage zu sehen, müsste ich das Diagramm wesentlich erweitern. Doch auch mit dieser kleineren Zeit, kann ich sehen, dass der Umsatz sehr schön schwanken. Aber ich könnte fragen, sind die Umsätze steigen, sinken oder bleiben die gleichen. Wenn ich ein gutes Auge habe, könnte ich sagen, dass Verkäufe Spitze gegen Ende Juli und dann fallen ein wenig zurück, wie das Diagramm in August geht. Aber das ist nicht so offensichtlich wie die Tatsache, dass es viel Tagesfluktuation gibt. Also, wie kann ich visuell anzeigen Trends mit Moving Average Sales. Jetzt für den Zweck dieser Illustration, Im gehend, einen viertägigen gleitenden Durchschnitt zu schaffen, aber ehrlich, gibt es keine eine richtige Anzahl von Perioden in einem gleitenden Durchschnitt. In der Tat, ich sollte mit verschiedenen Zeitperioden zu experimentieren, um zu sehen, welche Zeitspanne kann ich nicht nur die gesamte Trends, sondern auch in diesem Fall, wo ich bin Ladenverkauf, bei saisonalen Veränderungen. Ich weiß bereits, dass, wenn ich Daten von Tag anzeigen, kann ich die folgende Formel verwenden, um die täglichen Verkäufe von nur unseren Filialkanal zu berechnen. (Ja, ich könnte einfach verwenden SalesAmount und wenden Sie einen Kanal Slicer nur Store Sales verwenden, aber lässt sich mit dem Beispiel.) Ich kann dann mit diesem berechneten Maßstab, um die vorherigen Tage Umsatz für jeden Tag durch die Schaffung der folgenden Maßnahme zu berechnen. StoreSales1DayAgo: CALCULATE (StoreSales, DATEADD (DimDateDateKey, -1, Tag)) Sie können vermuten, dass die Formel für die Berechnung der Verkäufe vor zwei Tagen und drei Tagen jeweils sind: StoreSales2DayAgo: CALCULATE (StoreSales, DATEADD (DimDateDateKey, 2, Tag)) StoreSales3DayAgo: CALCULATE (StoreSales, DATEADD (DimDateDateKey, -3, Tag)) Mit diesen vier für jeden Tag berechneten Werten kann ich die Summe dieser Werte berechnen und durch 4 dividieren Den folgenden berechneten Wert: FourDayAverage: (StoreSales StoreSales1DayAgo StoreSales2DayAgo StoreSales3DayAgo) 4.0 Nun, wenn ich wieder auf meiner Kartenseite, sollte ich sehen, dass Excel die Feldliste aktualisiert, um die neuen berechneten Maßnahmen enthalten. Wenn ich dann das Feld FourDayAverage zu dem Feld Werte hinzufügen, um eine zweite Serie im Diagramm zu erstellen, habe ich jetzt sowohl den tatsächlichen täglichen Umsatz als auch den viertägigen gleitenden Durchschnitt in demselben Diagramm angezeigt. Das einzige Problem ist, ich möchte auch das Diagrammformat ändern, um den täglichen Verkauf (meine erste Datenreihe) als Spalten und meinen gleitenden Durchschnitt (meine zweite Datenreihe) als Linie anzuzeigen. Wenn ich mit der rechten Maustaste auf das Diagramm und wählen Sie Diagrammtyp ändern, kann ich Combo als Diagrammtyp wählen, wie in der folgenden Abbildung gezeigt. In diesem Fall ist das Clustered Column Line Diagramm genau das, was ich möchte. Da ich die gleitende mittlere Reihe dem Values-Bereich zuletzt hinzugefügt habe, werden sie standardmäßig die Zeile und alle anderen Datenreihen als gruppierte Spalten angezeigt. Da ich nur einen Wert für jeden Tag habe, zeigt das Diagramm eine individuelle Spalte pro Tag. Wenn ich meine Datenreihe in den Wertebereich in der falschen Reihenfolge eingetragen hatte, konnte ich einfach diesen Dialog verwenden, um den Diagrammtyp für jede Serie auszuwählen. Wenn ich in diesem Dialog auf OK klicke, sieht mein Diagramm nun wie das Folgende aus, was deutlich mehr den Gesamttrend und weniger Tagesfluktuation zeigt. Aber warten, gibt es einen einfacheren Weg, dies zu tun Warum ja gibt es. Aber um zu lernen, wie man das macht, musst du bis nächste Woche warten. Post navigation Mein Archiv E-Mail-Abonnement Themen, über die ich rede


No comments:

Post a Comment