Monday, October 17, 2016

Bewegende Gemiddelde Sas

Rollende 12 maande gemiddeld in DAX Die berekening van die rollende 12-maande-gemiddelde in DAX lyk soos 'n eenvoudige taak nie, maar dit verberg 'n paar kompleksiteit. Hierdie artikel verduidelik hoe om die beste formule vermy algemene slaggate met behulp van tyd intelligensie funksies te skryf. Ons begin met die gewone AdventureWorks data model, met produkte, verkope en Kalender tafel. Die kalender is gemerk as 'n kalender tafel (dit is nodig om te werk met enige tyd intelligensie funksie) en ons het 'n eenvoudige hiërargie jaar-maand-date. Met die opstel van, is dit baie maklik om 'n eerste PivotTable toon verkope met verloop van tyd te skep: Wanneer doen tendens analise, indien verkope is onderhewig aan seisoenaliteit of, meer algemeen, as jy wil die effek van pieke te verwyder en laat val in verkope, 'n algemene tegniek is dat van die berekening van die waarde oor 'n gegewe tydperk, gewoonlik 12 maande, en gemiddeld nie. Die rol gemiddelde oor 12 maande bied 'n gladde aanwyser van die tendens en dit is baie nuttig in kaarte. Gegewe 'n datum, kan ons bereken die 12-maande rollende gemiddelde met hierdie formule, wat nog 'n paar probleme wat ons later sal oplos: Die gedrag van die formule is eenvoudig: dit die waarde van verkope bere na die skep van 'n filter op die kalender wat toon presies een volle jaar data. Die kern van die formule is die DATESBETWEEN, wat 'n inklusiewe stel datums tussen die twee grense terug. Die onderste een is: Lees dit uit die diepste As ons wys data vir 'n maand, sê Julie 2007 neem ons die laaste sigbare datum met behulp LASTDATE, wat die laaste dag terug in Julie 2007. Dan gebruik ons ​​Nextday die 1ste neem Augustus 2007 het ons uiteindelik gebruik SAMEPERIODLASTYEAR om dit terug te skuif een jaar, opbrengs 1 Augustus 2006. die boonste grens is eenvoudig LASTDATE, dws einde van Julie 2007. Indien ons hierdie formule gebruik in 'n PivotTable, die resultaat lyk goed, maar ons het 'n probleem vir die laaste datum: Trouens, soos jy kan sien in die figuur, die waarde is korrek bereken tot 2008 Dan is daar geen waarde in 2009 (wat korrek is, ons hoef nie verkope in 2009), maar daar is 'n verrassende waarde op Desember 2010 waar ons formule toon die groottotaal in plaas van 'n leë waarde, soos ons sou verwag. Trouens, op Desember LASTDATE gee die laaste dag van die jaar en Nextday moet die 1ste keer van Januarie 2011. Maar Nextday is 'n tyd intelligensie funksie en dit sal na verwagting stelle bestaande datums terugkeer. Hierdie feit is nie baie duidelik en dit is 'n paar woorde meer werd. Tyd intelligensie funksies nie wiskunde presteer op datums. As jy wil hê dat die dag ná 'n gegewe datum, kan jy eenvoudig voeg 1 na enige datum kolom, en die resultaat sal die volgende dag wees. In plaas daarvan, tyd intelligensie funksies skuif stelle datum heen en weer oor 'n tydperk. So, Nextday neem sy insette (in ons geval 'n enkel-ry tafel met die 31 Desember 2010) en verskuif dit 'n dag later. Die probleem is dat die resultaat 1 Januarie 2011 moet wees, maar as gevolg van die kalender tafel daardie datum bevat nie, is die resultaat is leeg. So, ons uitdrukking bere Verkope met 'n leë onderste grens, wat die begin van tyd beteken, opbrengs as gevolg van die groottotaal van verkope. Om die formule is dit genoeg om die evaluering einde van die onderste grens verander regstel: Soos jy kan sien, nou Nextday genoem na die verskuiwing van een jaar terug. Op hierdie manier, neem ons 31 Desember 2010 verhuis hy tot 31 Desember 2009 en neem die volgende dag, wat is 1 Januarie 2010: 'n bestaande datum op die kalender tafel. Die gevolg is nou die verwagte een: Op hierdie punt moet ons net dat die getal verdeel deur 12 tot die rollende gemiddelde behaal. Maar, as jy maklik kan dink, kan ons nie altyd deel dit deur 12 Trouens, aan die begin van die tydperk is daar nie 12 maande om te versamel, maar 'n laer getal. Ons moet die aantal maande waarvoor daar verkope te bereken. Dit kan bereik word deur gebruik te maak kruis filter van die kalender tafel met die verkope tafel nadat ons die nuwe 12 maande konteks toegepas. Ons definieer 'n nuwe maatreël wat die aantal bestaande maande bere in die 12 maande tydperk: Jy kan sien in die volgende figuur wat die Months12M maat bere n korrekte waarde: Dit is die moeite werd om daarop te let dat die formule nie werk as jy 'n periode te kies langer as 12 maande, omdat die CalendarMonthName het net 12 waardes. As jy langer nodig, sal jy nodig het om 'n JJJJMM kolom gebruik om in staat wees om meer as 12. Die interessante deel van hierdie formule wat kruis filter gebruik te tel, is die feit dat dit bere die aantal beskikbare maande, selfs wanneer jy filter met behulp van ander eienskappe. As, byvoorbeeld, jy die blou kleur met behulp van 'n Snijder kies, dan verkope begin in Julie 2007 (nie in 2005, soos dit gebeur vir baie ander kleure). Die gebruik van die kruis filter op verkope, die formule korrek bere wat in Julie 2007 is daar 'n enkele maand beskikbaar verkope vir Blue: Op hierdie punt, die rollende gemiddelde is net 'n DIVIDE weg: Wanneer ons dit gebruik in 'n Pivot Table, het ons nog 'n klein probleem: in werklikheid, is die waarde ook bereken vir maande waarvoor daar geen verkope (dit wil sê die toekoms maande): Dit kan opgelos word met behulp van 'n IF-stelling om die formule vertoon waardes voorkom wanneer daar geen verkope. Ek het niks teen INDIEN maar vir die prestasie verslaaf onder julle, dit is altyd die moeite werd om te onthou dat indien 'n prestasie moordenaar kan wees, want dit DAX formule enjin kan dwing om in te skop. In hierdie spesifieke geval, die verskil is onbeduidend, maar , as 'n algemene reël, die beste manier om die waarde te verwyder wanneer daar geen verkope is om te vertrou op suiwer stoor enjin formules soos hierdie een: Vergelyk 'n grafiek met behulp van die Avg12M met 'n ander een wat verkope toon jy kan maklik verstaan ​​hoe die rollende gemiddelde beskryf tendense in 'n veel skoner manier: Aflaai Hou my op die hoogte oor die komende artikels (nuusbrief). Skakel die boks om vrylik te laai die file. DAX sluit 'n paar statistiese samevoeging funksies, soos gemiddelde, variansie en standaardafwyking. Ander tipiese statistiese berekeninge vereis dat jy meer DAX uitdrukkings skryf. Excel, uit hierdie oogpunt, het 'n veel ryker taal. Die statistiek Patrone is 'n versameling van algemene statistiese berekeninge: mediaan, modus, bewegende gemiddelde, persentiel, en kwartiel. Ons wil graag dankie sê Colin Banfield, Gerard Brueckl, en Javier Guilln, wie se blogs geïnspireer sommige van die volgende patrone. Basiese Patroon Voorbeeld Die formules in hierdie patroon is die oplossings vir spesifieke statistiese berekeninge. Gemiddeld Jy kan standaard DAX funksies gebruik om die gemiddelde (rekenkundige gemiddelde) van 'n stel waardes te bereken. GEMIDDELDE. gee die gemiddeld van al die getalle in 'n numeriese kolom. AVERAGEA. gee die gemiddeld van al die nommers in 'n kolom, die hantering van beide teks en nie-numeriese waardes (nie-numeriese en leë teks waardes tel as 0). AVERAGEX. bereken die gemiddelde op 'n uitdrukking geëvalueer oor 'n tafel. Bewegende gemiddelde Die bewegende gemiddelde is 'n berekening om datapunte te analiseer deur die skep van 'n reeks van gemiddeldes van verskillende onderafdelings van die volle datastel. Jy kan baie DAX tegnieke te gebruik om hierdie berekening te implementeer. Die eenvoudigste tegniek gebruik AVERAGEX, iterating 'n tafel van die gewenste korrelig en berekening vir elke iterasie die uitdrukking dat die enkele datapunt om te gebruik in die gemiddelde genereer. Byvoorbeeld, die volgende formule bereken die bewegende gemiddelde van die afgelope 7 dae, in die veronderstelling dat jy 'n tafel Datum in jou data model. Die gebruik van AVERAGEX, jy outomaties die maatstaf te bereken by elke korrelig vlak. By die gebruik van 'n maatstaf wat gebruik kan word saamgevoeg (soos som), en dan die ander approachbased op CALCULATEmay vinniger wees. Jy kan hierdie alternatiewe benadering in die volledige patroon van bewegende gemiddelde vind. Variansie Jy kan standaard DAX funksies gebruik om die variansie van 'n stel waardes te bereken. VAR. S. terug die variansie van waardes in 'n kolom verteenwoordig 'n monster bevolking. VAR. P. terug die variansie van waardes in 'n kolom wat die hele bevolking. VARX. S. terug die variansie van 'n uitdrukking geëvalueer oor 'n tafel wat 'n monster bevolking. VARX. P. terug die variansie van 'n uitdrukking geëvalueer oor 'n tafel wat die hele bevolking. Standaardafwyking Jy kan standaard DAX funksies gebruik om die standaard afwyking van 'n stel waardes te bereken. STDEV. S. gee die standaardafwyking van waardes in 'n kolom verteenwoordig 'n monster bevolking. STDEV. P. gee die standaardafwyking van waardes in 'n kolom wat die hele bevolking. STDEV. S. gee die standaard afwyking van 'n uitdrukking geëvalueer oor 'n tafel wat 'n monster bevolking. STDEV. P. gee die standaard afwyking van 'n uitdrukking geëvalueer oor 'n tafel wat die hele bevolking. Mediaan Die mediaan is die numeriese waarde skei die hoër helfte van 'n bevolking van die onderste helfte. As daar 'n onewe aantal rye, die mediaan is die middelste waarde (sorteer die rye van die laagste waarde van die hoogste waarde). As daar 'n ewe aantal rye, dit is die gemiddeld van die twee middelste waardes. Die formule ignoreer leeg waardes, wat nie beskou as deel van die bevolking. Die resultaat is identies aan die mediaan funksie in Excel. Figuur 1 toon 'n vergelyking tussen die resultate teruggestuur deur Excel en die ooreenstemmende DAX formule vir die mediaan berekening. Figuur 1 Voorbeeld van mediaan berekening in Excel en DAX. Modus Die modus is die waarde wat die meeste voorkom in 'n stel data. Die formule ignoreer leeg waardes, wat nie beskou as deel van die bevolking. Die resultaat is identies aan die modus en MODE. SNGL funksies in Excel, wat net die minimum waarde wanneer daar is verskeie vorme in die stel waardes beskou terugkeer. Die Excel-funksie MODE. MULT sal al die modes terugkeer, maar jy kan dit nie implementeer as 'n maatstaf in DAX. Figuur 2 vergelyk die resultaat teruggekeer deur Excel met die ooreenstemmende DAX formule vir die modus berekening. Figuur 2 Voorbeeld van af berekening in Excel en DAX. Persentiel Die persentiel is die waarde hieronder wat 'n gegewe persentasie van waardes in 'n groep val. Die formule ignoreer leeg waardes, wat nie beskou as deel van die bevolking. Die berekening in DAX vereis 'n paar stappe, in die volledige Patroon artikel, wat wys hoe om dieselfde resultate van die Excel funksies PERCENTILE, PERCENTILE. INC, en PERCENTILE. EXC verkry beskryf. Kwartiel Die kwartiele is drie punte wat 'n stel waardes verdeel in vier gelyke groepe, elke groep wat bestaan ​​uit 'n kwart van die data. Jy kan die kwartiele met behulp van die Percentile patroon bereken, na aanleiding van hierdie ooreenkomste: Eerste kwartiel onderste kwartiel 25 ste persentiel tweede kwartiel mediaan 50 ste persentiel derde kwartiel boonste kwartiel 75 ste persentiel Volledige Patroon n Paar statistiese berekeninge het 'n langer beskrywing van die volledige patroon, omdat jy dalk verskillende implementering het na gelang van data modelle en ander vereistes. Bewegende gemiddelde Gewoonlik jy die bewegende gemiddelde evalueer deur die verwysing na die dag korrelig vlak. Die algemene sjabloon van die volgende formule het hierdie merkers: ltnumberofdaysgt is die aantal dae vir die bewegende gemiddelde. ltdatecolumngt is die datum kolom van die datum tafel as jy een het, of die datum kolom van die tabel met waardes indien daar geen afsonderlike datum tafel. ltmeasuregt is die maatstaf om te bereken as die bewegende gemiddelde. Die eenvoudigste patroon gebruik die AVERAGEX funksie in DAX, wat outomaties oorweeg slegs die dae waarvoor daar nie 'n waarde. As 'n alternatief, kan jy die volgende sjabloon in datamodelle gebruik sonder 'n datum tafel en met 'n mate dat kan saamgevoeg word (soos som) oor die hele tydperk beskou. Die vorige formule van mening 'n dag met geen ooreenstemmende data as 'n maatstaf wat 0 waarde het. Dit kan net gebeur wanneer jy 'n aparte datum tafel, wat dae waarvoor daar geen ooreenstemmende transaksies kan bevat. Jy kan die deler vir die gemiddelde gebruik van slegs die aantal dae op te los waarvoor daar transaksies met behulp van die volgende patroon, waar: ltfacttablegt is die tafel wat verband hou met die datum tafel en met waardes bereken deur die maatstaf. Jy kan gebruik maak van die DATESBETWEEN of DATESINPERIOD funksies in plaas van FILTER, maar dit werk net in 'n gereelde datum tafel, terwyl jy die bogenoemde ook beskryf om nie-gereelde datum tafels en modelle wat nie 'n datum tafel patroon kan toepas. Byvoorbeeld, kyk na die verskillende resultate wat deur die volgende twee mate. In Figuur 3, kan jy sien dat daar geen verkope op 11 September 2005 is egter hierdie datum ingesluit in die tabel Datum dus is daar 7 dae (vanaf September 11-17 September) dat slegs 6 dae met data het. Figuur 3 Voorbeeld van 'n bewegende gemiddelde berekening oorweeg en ignoreer datums met geen verkope. Die maatreël Moving Gemiddelde 7 Dae het 'n laer getal tussen 11 September en 17 September, want dit is van mening 11 September as 'n dag saam met 0 verkope. As jy wil dae ignoreer sonder verkope, gebruik dan die maatstaf Moving Gemiddelde 7 dae Geen Zero. Dit kan die regte benadering wees wanneer jy 'n volledige datum tafel, maar jy wil dae met geen transaksies ignoreer. Die gebruik van die bewegende gemiddelde 7 Dae formule, die resultaat is korrek, want AVERAGEX mening outomaties enigste nie-leeg waardes. Hou in gedagte dat jy die prestasie van 'n bewegende gemiddelde kan verbeter deur volgehoue ​​waarde in 'n berekende kolom van 'n tafel met die gewenste korrelig, soos datum, of 'n datum en produk. Maar die dinamiese berekening benadering met 'n mate bied die vermoë om 'n parameter gebruik vir die aantal dae van die bewegende gemiddelde (bv vervang ltnumberofdaysgt met 'n mate die implementering van die Parameters Table patroon). Mediaan Die mediaan ooreenstem met die 50 ste persentiel, wat jy kan bereken met behulp van die Percentile patroon. Maar die Mediaan patroon kan jy optimaliseer en vereenvoudig die mediaan berekening met behulp van 'n enkele maatstaf, in plaas van die verskeie maatreëls wat deur die Percentile patroon. Jy kan hierdie benadering gebruik wanneer jy die mediaan te bereken vir waardes in ltvaluecolumngt, soos hieronder getoon: Om prestasie te verbeter, wil jy dalk die waarde van 'n maatstaf volhard in 'n berekende kolom, as jy wil hê dat die mediaan vir die resultate van verkry 'n maatstaf in die data model. Maar, voordat dit te doen optimalisering, jy moet die MedianX berekening gebaseer op die volgende sjabloon te implementeer, met behulp van hierdie merkers: ltgranularitytablegt is die tafel wat die korrelig van die berekening definieer. Byvoorbeeld, kan dit die tafel Datum wees as jy wil hê dat die mediaan van 'n mate bereken teen die dag te bereken, of dit kan waardes (8216DateYearMonth) as jy wil hê dat die mediaan van 'n mate bereken teen die maand vlak te bereken. ltmeasuregt is die maatstaf om te bereken vir elke ry van ltgranularitytablegt vir die mediaan berekening. ltmeasuretablegt is die tafel wat data gebruik word deur ltmeasuregt. Byvoorbeeld, as die ltgranularitytablegt is 'n dimensie soos 8216Date8217, dan is die ltmeasuretablegt sal wees 8216Internet Sales8217 met die Internet verkope Bedrag kolom opgesom deur die Internet Totaal Verkope meet. Byvoorbeeld, kan jy die mediaan van Internet Totaal Verkope skryf vir al die kliënte in Avontuur Werke soos volg: Wenk Die volgende patroon: word gebruik om rye van ltgranularitytablegt dat geen ooreenstemmende data in die huidige seleksie het verwyder. Dit is 'n vinniger manier as die gebruik van die volgende uitdrukking: Maar kan jy die hele CALCULATETABLE uitdrukking te vervang met net ltgranularitytablegt as jy wil leeg waardes van die ltmeasuregt beskou as 0. Die prestasie van die MedianX formule hang af van die aantal rye in die tafel herhaal en op die kompleksiteit van die maatstaf. As prestasie is sleg, kan jy die ltmeasuregt gevolg volhard in 'n berekende kolom van die lttablegt, maar dit sal die vermoë van die toepassing van filters om die mediaan berekening by navraag tyd verwyder. Persentiel Excel het twee verskillende implementering van persentiel berekening met drie funksies: PERCENTILE, PERCENTILE. INC, en PERCENTILE. EXC. Hulle het almal die standaard van die K-ste persentiel van waardes, waar K is in die reeks 0 tot 1. Die verskil is dat PERCENTILE en PERCENTILE. INC oorweeg K as 'n inklusiewe reeks, terwyl PERCENTILE. EXC van mening dat die K-reeks 0-1 as eksklusiewe . Al hierdie funksies en hul DAX implementering ontvang 'n persentiel waarde as parameter, wat ons noem K. ltKgt persentiel waarde is in die reeks 0 tot 1. Die twee DAX implementering van persentiel vereis dat 'n paar maatreëls wat soortgelyk is, maar verskillende genoeg om te vereis twee ander stel formules. Die gedefinieer in elke patroon maatreëls is: KPerc. Die persentiel waarde dit ooreenstem met ltKgt. PercPos. Die posisie van die persentiel in die gesorteerde stel waardes. ValueLow. Die waarde onder die persentiel posisie. ValueHigh. Die waarde bo die persentiel posisie. Persentiel. Die finale berekening van die persentiel. Jy moet die ValueLow en ValueHigh maatreëls in geval die PercPos bevat 'n desimale deel, want dan moet jy interpoleer tussen ValueLow en ValueHigh ten einde die korrekte persentiel waarde terugkeer. Figuur 4 toon 'n voorbeeld van die berekeninge gemaak met Excel en DAX formules, met behulp van beide algoritmes van persentiel (inklusiewe en eksklusiewe). Figuur 4 Percentile berekeninge met behulp van Excel formules en die ekwivalent DAX berekening. In die volgende afdelings, die Percentile formules uit te voer die berekening van waardes gestoor word in 'n tabel kolom, DataValue, terwyl die PercentileX formules uit te voer die berekening van waardes teruggekeer met 'n mate bereken op 'n gegewe korrelig. Persentiel Inklusiewe Die persentiel Inklusiewe implementering is die volgende. Persentiel Exclusive Die persentiel Exclusive implementering is die volgende. PercentileX Inklusiewe Die PercentileX Inklusiewe implementering is gebaseer op die volgende sjabloon, met behulp van hierdie merkers: ltgranularitytablegt is die tafel wat die korrelig van die berekening definieer. Byvoorbeeld, kan dit die tafel Datum wees as jy wil hê dat die persentiel van 'n maatstaf te bereken op die dag vlak, of dit kan waardes (8216DateYearMonth) as jy wil hê dat die persentiel van 'n maatstaf te bereken op die maand vlak. ltmeasuregt is die maatstaf om te bereken vir elke ry van ltgranularitytablegt vir persentiel berekening. ltmeasuretablegt is die tafel wat data gebruik word deur ltmeasuregt. Byvoorbeeld, as die ltgranularitytablegt is 'n dimensie soos 8216Date, 8217 dan die ltmeasuretablegt sal wees 8216Sales8217 met die bedrag kolom opgesom deur die totale bedrag meet. Byvoorbeeld, kan jy die PercentileXInc van totale bedrag van verkope te skryf vir al die datums in die tabel Datum soos volg: PercentileX Exclusive Die PercentileX Exclusive implementering is gebaseer op die volgende sjabloon, met behulp van dieselfde merkers gebruik word in PercentileX Inklusiewe: Byvoorbeeld, jy kan die PercentileXExc van totale bedrag van verkope te skryf vir al die datums in die tabel Datum soos volg: Populariteit Hou my op die hoogte oor die komende patrone (nuusbrief). Ontmerk om die lêer vrylik te laai. Gepubliseer op 17 Maart 2014 deur Ander patrone wat jy kan hou Tyd Patrone Die DAX tyd patrone word gebruik om tydgebonde berekeninge te implementeer sonder om op DAX tyd intelligensie funksies. Dit is nuttig wanneer jy 'n persoonlike agenda, soos 'n ISO 8601 week kalender, of wanneer jy 'n Ontleding Services hellip ouer-kind Hierarchies DAX nie direk ondersteun ouer-kind hiërargieë. Om 'n soekbare hiërargie in die data model te verkry, moet jy 'n ouer-kind hiërargie natuurlik maak. DAX bied spesifieke funksies aan 'n ouer-kind hiërargie behulp bereken kolomme natuurlik maak. Die volledige patroon sluit ook hellip Dax Patrone is vervaardig deur SQLBI. Kopiereg kopie Loader. Alle regte voorbehou. Microsoft Excel Reg en alle ander handelsmerke en kopieregte is die eiendom van hulle onderskeie owners. SQL Server Denali PowerPivot Alberto Ferrari reeds geskryf oor die berekening van bewegende gemiddeldes in DAX deur die gebruik van 'n berekende kolom. I8217d graag 'n ander benadering hier aan te bied deur gebruik te maak van 'n berekende mate. Vir die bewegende gemiddelde I8217m berekening van 'n daaglikse bewegende gemiddelde (oor die afgelope 30 dae) hier. Vir my voorbeeld, I8217m met behulp van die PowerPivot werkboek wat afgelaai kan word as deel van die SSAS Tabulêre Model Projekte van die Denali CTP 3 monsters. In hierdie post, I8217m ontwikkeling van die formule stap vir stap. Maar as jy in 'n haas, jy kan direk wil om te spring na die finale uitslae hieronder. Met kalenderjaar 2003 op die filter, datum kolomme en verkope bedrag (uit tabel Internet verkope) in die besonderhede, die steekproefdata lyk soos volg: In elke row8217s konteks, die uitdrukking DateDate gee die huidige konteks, dit wil sê die datum vir hierdie ry . Maar uit 'n berekende mate kan ons nie na hierdie uitdrukking (want daar is geen huidige ry vir die tafel Datum), in plaas daarvan het ons 'n uitdrukking soos LastDate (DateDate) gebruik. So, ten einde die afgelope dertig dae kan ons hierdie uitdrukking gebruik Ons kan nou 'n opsomming van ons internet verkope vir elk van dié dae met behulp van die som funksie te kry: 'n opsomming (160 DatesInPeriod (DateDate, LastDate (DateDate), - 30, DAG) 160 DateDate 160. quotSalesAmountSumquot 160. Som (Internet SalesSales Bedrag)) En ten slotte, we8217re met behulp van die DAX funksie AverageX om die gemiddelde van die 30 waardes te bereken: verkope Bedrag (30D avg): AverageX (160 Som (160160160 DatesInPeriod (DateDate, LastDate (DateDate), - 30, DAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. Som (Internet SalesSales Bedrag) 160) 160 SalesAmountSum) dit is die berekening dat ons met behulp van ons Internet Sales tafel soos in die kiekie hieronder: wanneer jy hierdie berekening van die spilpunt tafel van bo, die resultaat lyk soos volg: as ons kyk na die resultaat blyk dit dat ons enige inligting voor 1 Januarie 2003 don8217t het: die eerste waarde vir die bewegende gemiddelde is identies aan die dag waarde ( daar is geen rye voor daardie datum). Die tweede waarde vir die bewegende gemiddelde is eintlik die gemiddelde van die eerste twee dae en so aan. Dit is nie heeltemal korrek, maar I8217m om terug na die probleem in 'n tweede. Die kiekie toon die berekening vir die bewegende gemiddeld van 31 Januarie as die gemiddelde van die daaglikse waardes van 2 Januarie tot 31. Ons bereken mate ook werk goed wanneer filters word toegepas. In die volgende kiekie gebruik ek twee produk kategorieë vir die datareeks: Hoe werk ons ​​bereken maat werk op hoër samevoeging vlakke Ten einde vas te stel, I8217m met behulp van die kalender hiërargie op die rye (in plaas van die datum). Vir eenvoud verwyder ek die semester en kwartaal vlakke met behulp van Excel8217s pivottabel opsies (Wys / verberg opsie velde). Soos jy kan sien, die berekening werk nog in orde. Hier is die maandelikse totaal is die bewegende gemiddelde vir die laaste dag van die betrokke maand. Jy kan dit duidelik sien vir Januarie (waarde van 14,215.01 verskyn ook in die kiekie hierbo as die waarde vir 31 Januarie). As dit was die besigheid vereiste (wat redelik vir 'n daaglikse gemiddelde klink), dan is die samevoeging werk goed op 'n maandelikse vlak (anders sal ons moet verfyn ons berekening en dit sal 'n onderwerp van am komende post wees). Maar hoewel die samevoeging sinvol op 'n maandelikse vlak, as ons hierdie oog op die dag vlak uit te brei you8217ll sien dat ons bereken mate bloot die verkope bedrag vir daardie dag, nie die gemiddeld van die afgelope 30 dae nie terug: Hoe kan dit wees. Die probleem ontstaan ​​by die konteks waarin ons bereken ons som, soos uitgelig in die volgende kode: Verkope Bedrag (30D avg): AverageX (160 Som (160160160 datesinperiod (DateDate, LastDate (DateDate), - 30, DAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. Som (Internet SalesSales Bedrag) 160) 160 SalesAmountSum) Aangesien ons hierdie uitdrukking oor die gegewe datums tydperk, die enigste konteks wat hier oorskryf evalueer, is DateDate. In ons hiërargie we8217re met behulp van verskillende eienskappe van ons dimensie (kalenderjaar Maand en dag van die maand). Aangesien hierdie konteks is steeds teenwoordig, is die berekening ook gefiltreer deur daardie eienskappe. En dit verklaar waarom ons die huidige day8217s konteks is nog steeds teenwoordig vir elke lyn. Om dinge duidelik, so lank as wat ons hierdie uitdrukking buite 'n datum te evalueer kry, alles in orde is as die volgende DAX navraag toon wanneer dit uitgevoer word deur Bestuur Studio op die Internet verkope perspektief van ons model (met behulp van die tabel databasis met dieselfde data ): evalueer (160160160 Som (160160160160160160160 datesinperiod (DateDate, datum (2003,1,1), - 5, dAG) 160160160160160160160, DateDate 160160160160160160160. quotSalesAmountSumquot 160160160160160160160. Som (Internet SalesSales Bedrag) 160160160)) Hier verminder ek die tydperk tot 5 dae en ook 'n vasgestelde datum as LastDate (8230) sal lei tot die laaste dag van my datum dimensie tafel waarvoor geen data teenwoordig is in die voorbeeld van die data is. Hier is die resultaat van die navraag: Maar nadat die opstel van 'n filter tot 2003, geen data rye buite 2003 sal ingesluit word in die som. Dit verklaar die opmerking hierbo: Dit het gelyk asof ons net data vanaf 1 Januarie 2003 En nou, ons weet hoekom: Die jaar 2003 was op die filter (soos jy kan sien in die heel eerste kiekie van hierdie post) en daarom was dit teenwoordig by die berekening van die bedrag. Nou, al wat ons hoef te doen is om ontslae te raak van daardie bykomende filters te kry, want we8217re reeds ons resultate te filter deur Datum. Die maklikste manier om dit te doen, is om die Bereken funksie gebruik en nie (8230) is van toepassing vir alle eienskappe waarvoor ons wil hê dat die filter verwyder. Soos ons het 'n paar van daardie kenmerke (jaar, maand, dag, Weekdag, 8230) en ons wil die filter van almal, maar die datum kenmerk verwyder, die kortpad funksie ALLEXCEPT is hier baie handig. As jy nog nie 'n MDX agtergrond sal jy wonder hoekom ons 'n soortgelyke probleem don8217t kry by die gebruik van SSAS in OLAP modus (BISM Multidimensionele). Die rede hiervoor is dat ons OLAP databasis het skryf verhoudings, so na die opstel van die datum (sleutel) kenmerk, is die ander eienskappe outomaties te verander en ons don8217t het om te sorg oor hierdie (sien my post hier). Maar in die tabel model don8217t ons het kenmerk verhoudings (selfs nie 'n ware sleutel kenmerk) en daarom het ons nodig het om ongewenste filters uit te skakel uit ons berekeninge. So hier is ons met die 8230 Verkope Bedrag (30D avg): AverageX (160 Som (160160160 datesinperiod (DateDate, LastDate (DateDate), - 30, DAG) 160160160, DateDate 160160160. quotSalesAmountSumquot 160160160. bereken (Som (Internet SalesSales Bedrag) , ALLEXCEPT (Datum, DateDate)) 160), SalesAmountSum) En dit is ons finale spil tafel in Excel: Om die bewegende gemiddelde illustreer, hier is dieselfde uittreksel van data in 'n tabel oog (Excel): Hoewel ons data op gefiltreer 2003 die bewegende gemiddelde vir die eerste 29 dae van 2003 neem korrek die ooreenstemmende dae van 2002 in ag neem. Jy sal die waardes vir 30 Januarie en 31 erken van ons eerste benadering as dié van die eerste dae waarvoor ons eerste berekening het 'n voldoende bedrag van data (volle 30 dae).Rolling gemiddeldes of bewegende gemiddeldes in SSAS bewegende gemiddeldes glad die prys data was 'n tendens volgende aanwyser vorm. Hulle het nie die prys rigting voorspel nie, maar eerder die huidige rigting met 'n lag te definieer. Bewegende gemiddeldes lag omdat hulle op grond van vorige pryse. Ten spyte hiervan lag, bewegende gemiddeldes te help gladde prys aksie en filter die geraas. Hulle vorm ook die boustene vir baie ander tegniese aanwysers en overlays, soos Bollinger Bands. MACD en die McClellan Ossillator. Die drie mees populêre vorme van bewegende gemiddeldes is die Eenvoudige bewegende gemiddelde (SMA) en geweegde bewegende gemiddelde (WBA) die eksponensiële bewegende gemiddelde (EMA). Hierdie bewegende gemiddeldes gebruik kan word om die rigting van die tendens te identifiseer of definieer potensiaal ondersteuning en weerstand vlakke. Eenvoudige bewegende gemiddelde (SMA) 'n Eenvoudige bewegende gemiddelde is wat gevorm word deur die berekening van die gemiddelde prys van 'n sekuriteit oor 'n spesifieke aantal periodes. Die meeste bewegende gemiddeldes is gebaseer op sluitingstyd pryse. 'N 5-dag eenvoudig bewegende gemiddelde is die vyf dag som van die sluiting pryse gedeel deur vyf. Soos die naam aandui, 'n bewegende gemiddelde is 'n gemiddelde wat beweeg. Ou data laat val as nuwe data kom beskikbaar. Dit veroorsaak dat die gemiddelde om te beweeg langs die tydskaal. Hieronder is 'n voorbeeld van 'n 5-daagse bewegende gemiddelde ontwikkel met verloop van drie dae. Daaglikse sluitingspryse: 11,12,13,14,15,16,17 Eerste dag van 5-dag SMA: (11 12 13 14 15) / 5 13 Tweede dag van 5-dag SMA: (12 13 14 15 16) / 5 14 Derde dag van 5-dag SMA: (13 14 15 16 17) / 5 15 die eerste dag van die bewegende gemiddelde dek net die laaste vyf dae. Die tweede dag van die bewegende gemiddelde daal die eerste data punt (11) en voeg die nuwe data punt (16). Die derde dag van die bewegende gemiddelde voort deur die val van die eerste data punt (12) en die toevoeging van die nuwe data punt (17). In die voorbeeld hierbo, pryse geleidelik verhoog 11-17 oor 'n totaal van sewe dae. Let daarop dat die bewegende gemiddelde styg ook 13-15 oor 'n driedaagse berekening tydperk. Let ook op dat elke bewegende gemiddelde waarde is net onder die laaste prys. Byvoorbeeld, die bewegende gemiddelde vir die eerste dag is gelyk aan 13 en die laaste prys is 15. Pryse die vorige vier dae laer was en dit veroorsaak dat die bewegende gemiddelde te lag. In 'n bewegende samevoeging. die belangrike tegniek is om 'n reeks te bou met die vlak met behulp van eindpunte wat relatief tot die huidige lid kan ons hierdie reeks te skep met behulp van baie funksies in MDX, afhangende van die verskeidenheid Gemiddeldes vir 6 maande wissel Gemiddeldes vir 6 maande reeks Gemiddeld van huidige tydperk is en vorige tydperk gebruik van parallelle tydperke met lid Measures. avg12ms as avg (Date. Month van Year. lag (11): Date. Month van die jaar, Measures. Internet verkope Bedrag) lid Measures. avg6ms as avg (Date. Month van Year. lag (5): Date. Month van die jaar, Measures. Internet verkope Bedrag) lid Measures. avg3ms as avg (Date. Month van Year. lag (2): Date. Month van die jaar, Measures. Internet verkope Bedrag) kies op kolomme uit Avontuur Werke Post navigationThe voorbeeld kode op die blad Full kode illustreer hoe om die bewegende gemiddelde van 'n veranderlike te bereken deur 'n hele datastel, oor die afgelope n waarnemings in 'n datastel, of oor die afgelope n waarnemings binne 'n bY-groep. Hierdie voorbeeld lêers en kode voorbeelde word verskaf deur SAS Institute Inc. soos sonder enige waarborge van enige aard, hetsy uitdruklik of geïmpliseer, insluitend maar nie beperk tot die geïmpliseerde waarborge van verhandelbaarheid en geskiktheid vir 'n spesifieke doel. Ontvangers erken en aanvaar dat SAS Institute nie aanspreeklik sal wees vir enige skade hoegenaamd wat voortspruit uit die gebruik daarvan van hierdie materiaal. Daarbenewens sal SAS Institute geen ondersteuning vir die materiaal wat hierin vervat is voorsien. Hierdie voorbeeld lêers en kode voorbeelde word verskaf deur SAS Institute Inc. soos sonder enige waarborge van enige aard, hetsy uitdruklik of geïmpliseer, insluitend maar nie beperk tot die geïmpliseerde waarborge van verhandelbaarheid en geskiktheid vir 'n spesifieke doel. Ontvangers erken en aanvaar dat SAS Institute nie aanspreeklik sal wees vir enige skade hoegenaamd wat voortspruit uit die gebruik daarvan van hierdie materiaal. Daarbenewens sal SAS Institute geen ondersteuning vir die materiaal wat hierin vervat is voorsien. Bereken die bewegende gemiddelde van 'n veranderlike deur 'n hele datastel, oor die afgelope N waarnemings in 'n datastel, of oor die afgelope N waarnemings binne 'n BY-groep.


No comments:

Post a Comment