Rolling 12 mesi di media in DAXputing la media mobile di 12 mesi in DAX si presenta come un compito semplice, ma nasconde una certa complessità Questo articolo spiega come scrivere la formula migliore per evitare gli errori più comuni che utilizzano l'intelligenza tempo functions. We iniziare con il consueto modello di dati AdventureWorks , con prodotti, vendite e tavolo Calendario Il Calendario è stato contrassegnato come un tavolo di calendario, è necessario lavorare con qualsiasi funzione di tempo intelligenza e abbiamo costruito un semplice gerarchia di anno-mese-data con questo set up, è molto facile creare un prima tabella pivot che mostra le vendite oltre time. When fare analisi di tendenza, se le vendite sono soggette a stagionalità o, più in generale, se si desidera rimuovere l'effetto di picchi e cali di vendite, una tecnica comune è quella di calcolare il valore in un dato periodo , di solito 12 mesi, ed è media la media mobile su 12 mesi fornisce una superficie liscia indicatore della tendenza ed è molto utile in charts. Given una data, siamo in grado di calcolare la media mobile di 12 mesi con questa formula, che ha ancora un po ' problemi che risolveremo comportamento later. The della formula è semplice calcola il valore delle vendite dopo la creazione di un filtro sul calendario che mostra esattamente un intero anno di dati il nucleo della formula è la DATESBETWEEN, che restituisce un set comprensivo di date tra i due confini quello inferiore is. Reading dal più interno se stiamo dimostrando di dati per un mese, dicono luglio 2007 prendiamo l'ultima data visibile utilizzando ultimoData, che restituisce l'ultimo giorno nel luglio 2007 Poi usiamo NEXTDAY a prendere il 1 ° agosto 2007 e abbiamo finalmente utilizzare SAMEPERIODLASTYEAR per spostare indietro un anno, cedendo 1 Agosto 2006 il limite superiore è semplicemente ultimoData, cioè fine luglio 2007.If usiamo questa formula in una tabella pivot, il risultato sembra bene, ma abbiamo un problema per l'ultimo fatto date. In, come si può vedere in figura, il valore viene calcolato correttamente fino al 2008 poi, non vi è alcun valore nel 2009 che è corretto, non ci sono i le vendite nel 2009, ma non vi è un valore sorprendente dicembre 2010, dove la nostra formula mostra il totale complessivo, invece di un valore vuoto, come ci expect. In infatti, dicembre, ultimoData restituisce l'ultimo giorno dell'anno e NEXTDAY deve restituire dal 1 gennaio 2011, ma NEXTDAY è una funzione di intelligence in tempo e si prevede di restituire set di date esistenti Questo fatto non è molto evidente e vale la pena qualche parola funzioni di intelligence more. Time non eseguire la matematica in date Se si vuole prendere il giorno dopo una data , si può semplicemente aggiungere 1 a qualsiasi colonna della data, e il risultato sarà il giorno successivo, invece, le funzioni di intelligence in tempo spostano set di data avanti e indietro nel tempo Così, NEXTDAY prende il suo ingresso nel nostro caso una tabella di singolo-fila con il 31 dicembre 2010 e lo sposta di un giorno in più il problema è che il risultato dovrebbe essere 1 GENNAIO 2011, ma, perché la tabella calendario non contiene tale data, il risultato è BLANK. Thus, la nostra espressione calcola vendite con un limite inferiore vuoto, il che significa l'inizio del tempo, ottenendo come risultato il totale complessivo delle vendite per correggere la formula è sufficiente cambiare l'ordine di valutazione dei boundary. As inferiori si può vedere, ora NEXTDAY è chiamato dopo il turno di un anno indietro in questo modo, prendiamo il 31 dicembre 2010, si sposta al 31 dicembre 2009 e prendere il giorno successivo, che è 1 gen 2010 una data esistente nel risultato calendario table. The è ora l'atteso one. At questo punto, bisogno solo di dividere quel numero per 12 per ottenere la media mobile, ma, come si può facilmente immaginare, non possiamo sempre dividiamo per 12 infatti, all'inizio del periodo non ci sono 12 mesi di aggregare, ma un numero inferiore noi bisogno di calcolare il numero di mesi per i quali ci sono le vendite questo può essere realizzato utilizzando il filtro trasversale del tavolo calendario con la tabella di vendita dopo abbiamo applicato il nuovo contesto di 12 mesi definiamo una nuova misura che calcola il numero di mesi esistenti nel 12 mesi period. You possono vedere nella figura successiva che la misura Months12M calcola un corretto value. It vale la pena notare che la formula non funziona se si sceglie un periodo superiore a 12 mesi, in quanto il calendario MonthName ha solo 12 valori Se bisogno di periodi più lunghi, è necessario utilizzare una colonna AAAAMM essere in grado di contare più di 12. il parte interessante di questa formula che utilizza il filtraggio croce è il fatto che si calcola il numero di mesi disponibili anche quando si filtro con altri attributi If , per esempio, si seleziona il colore blu con una affettatrice, quindi vendite iniziano nel mese di luglio, non 2007 a 2005, come accade per molti altri colori uso del filtro croce sulle vendite, la formula calcola correttamente che nel luglio 2007 vi è un solo mese delle vendite disponibili per Blue. At questo punto, la media mobile è solo un DIVIDE away. When usiamo in una tabella pivot, abbiamo ancora un piccolo problema, infatti, il valore viene calcolato anche per i mesi per i quali non ci sono vendite cioè months. This future possano essere risolti usando un'istruzione IF per evitare che la formula di mostrare valori quando non ci sono le vendite non ho nulla contro IF, ma, per la prestazione-addicted in mezzo a voi, vale sempre la pena ricordare che se potrebbe essere una performance assassino, perché potrebbe costringere motore di formula DAX a calci nel in questo caso specifico, la differenza è trascurabile, ma, come regola generale, il modo migliore per rimuovere il valore quando non ci sono le vendite è di affidarsi a formule puri motore di storage come questo oneparing un grafico utilizzando il Avg12M con un altro che mostra le vendite si può facilmente apprezzare come le dolci tendenze medie contorni in una molto più pulito way. Keep Inviami articoli prossima newsletter Deselezionare per scaricare gratuitamente il file. I sto lavorando con SQL Server 2008 R2, cercando di calcolare una media mobile per ogni record nel mio punto di vista, vorrei raccogliere i valori dei 250 record precedenti, e quindi calcolare la media per questo selection. My vista colonne sono le follows. TransactionID è unico per ogni TransactionID Vorrei calcolare la media per il valore della colonna, rispetto ai precedenti 250 record Così per TransactionID 300, raccogliere tutti i valori da precedenti 250 righe vista è ordinato decrescente per TransactionID e poi nella colonna MovAvg scrivere il risultato della media di questi valori Cerco per raccogliere i dati in un intervallo di records. asked 28 ottobre 14 ad 20 58.Exponential media mobile a T-SQL. Exponential medie mobili sono simili alle medie ponderate in movimento che assegnano un peso minore a cambiamenti molto tempo fa, e più peso di recente modifiche ponderati medie mobili sono lineari, ma le medie mobili esponenziali sono esponenziali Cioè, il peso può essere espresso come curve. There è un ottimo modo per calcolare le medie mobili esponenziali in T-SQL utilizzando una funzionalità non documentata sulle variabili e totali parziali in SQL Server in questo post del blog vi mostrerò come utilizzare questo metodo per calcolare la media mobile esponenziale a T-SQL, ma presenterà anche un metodo che utilizza le caratteristiche standard in SQL Server Purtroppo, questo significa che utilizzando un loop. In gli esempi i calcolerà una media mobile esponenziale 9 giorni gli esempi utilizzano il database TADB uno script per creare TADB può essere trovato here. Exponential totali mobili di media EMA in corso teoria method. The dietro le eseguono funzioni totali in aggiornamenti è descritto in dettaglio da Jeff Moden nel suo Articolo Risolvere il funzionamento totali e ordinale Classifica Problems. Other risorse che descrivono che utilizzano questo metodo per calcolare EMA sono i post sul blog Calculating medie mobili con T-SQL da Gabriel Priester e il post sul forum media mobile esponenziale sfida sia su SQL Server Central. Basically, in T-SQL è possibile aggiornare le variabili così come le colonne in un'istruzione di aggiornamento Gli aggiornamenti sono fatti riga per riga internamente da SQL Server Questo riga per riga comportamento è ciò che rende il calcolo di un possible. This totale esecuzione esempio mostra come si works. Note che ColumnRunningTotal è un totale parziale di ColumnToSum. Using questo metodo possiamo calcolare EMA9 con questo calcolo T-SQL. The di EMA è piuttosto semplice usiamo la riga corrente e il precedente, ma con un peso maggiore alla riga corrente il peso è calcolato formula 2 1 9, in cui 9 è il parametro per la lunghezza della EMA per calcolare EMA9 per sopra la riga 10, il calcolo is. In questo caso la riga corrente ottiene il 20 del peso 2 1 9 0 2 e la fila precedente ottiene 80 del peso 01-02 gennaio 9 0 8.You trovare questo calcolo nella dichiarazione di cui sopra, nel caso statement. Exponential media mobile EMA Looping Method. As quanto ne so, tranne che per il metodo di totalizzazione in esecuzione di cui sopra, non vi è alcuna modo per calcolare EMA utilizzando un'istruzione SQL set basato Pertanto, il T-SQL di seguito utilizza un ciclo while per calcolare i risultati EMA9.The sono gli stessi nei totali parziali esempio above. As attesi, la versione totali parziali set base è il modo più veloce rispetto alla versione anello sulla mia macchina la soluzione set base è stato di circa 300 ms, rispetto a circa 1200 con la versione ad anello la versione loop è più conforme agli standard SQL tuttavia Quindi la scelta tra i metodi dipende da ciò che s più importante per voi, prestazioni o standards. The media mobile esponenziale possono essere utilizzati in analisi delle tendenze, come con gli altri tipi di medie mobili, media media mobile SMA e ponderata in movimento semplice WMA. There sono anche altri calcoli di analisi tecnica che utilizza l'EMA, MACD per esempio. Questo post è parte di una serie su analisi tecnica, TA, in SQL Server Vedere gli altri posti here. Posted da Tomas Lind. Tomas Lind - servizi di consulenza come DBA di SQL Server e database per sviluppatori a costa alta Solutions Database AB.
No comments:
Post a Comment