cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Cómo crear Rolling Average con +/-St. Dev. Band

Hola

Tengo una columna de serie temporal (por ejemplo, fecha con el precio del índice bursátil). Quiero mostrar este índice bursátil como gráfico de líneas, con promedio móvil de 365 días y +/- 1 std. dev. Creé 3 medidas en este índice: la media móvil (MA); el MA+1 std. dev; y MA-1 std. dev. Así que al gráfico le debería gustar esto:

wlf0032_0-1633736925875.png

Además, quiero que el eje de fecha responda a una segmentación de datos de fecha. Pero cuando cambio la segmentación de fechas, el gráfico se convierte en el siguiente. El eje de fecha no respondió, solo el índice bursátil desapareció parcialmente y las 3 medidas también se comportaron con timez.

(P.D. el valor de la medida para cada día no debe cambiar cuando cambia la segmentación de datos de fecha)

wlf0032_1-1633737090664.png

Entonces, ¿cómo modifico mi fórmula para que esto funcione? Aquí está la fórmula para la medida MA+1 std. dev.

¡Muchas gracias! ¡Agradezco mucho que ayudes!

StockIndex_1YMA+sd = 
VAR __LAST_DATE = LASTDATE('Data'[Dates].[Date])
RETURN
	AVERAGEX(
		DATESBETWEEN(
			'Data'[Dates].[Date],
			DATEADD(__LAST_DATE, -365, DAY),
			DATEADD(__LAST_DATE, 365, DAY)
			),
		CALCULATE(AVERAGE('Data'[StockIndex]))
       )
    + CALCULATE(STDEVX.S('Data','Data'[StockIndex]),ALL())

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hay @wlf0032

¿Desea mantener el visual en un cuadro rojo y mostrar otros en blanco?

1.png

Creo que puede agregar una función If en su medida.

New = 
If (Date[Dates]>= MIN(Date[Dates])&&Date[Dates]<=MAX(Date[Dates]),[StockIndex_1YMA+sd],blank())

O bien, puede intentar crear una tabla de fechas no relacionada para crear la segmentación de datos. A continuación, cree Nueva medida basada en una tabla de fechas no relacionada.

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

Hay @wlf0032

¿Desea mantener el visual en un cuadro rojo y mostrar otros en blanco?

1.png

Creo que puede agregar una función If en su medida.

New = 
If (Date[Dates]>= MIN(Date[Dates])&&Date[Dates]<=MAX(Date[Dates]),[StockIndex_1YMA+sd],blank())

O bien, puede intentar crear una tabla de fechas no relacionada para crear la segmentación de datos. A continuación, cree Nueva medida basada en una tabla de fechas no relacionada.

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

View solution in original post

¡gracias! ¡Las funciones IF funcionan! pero lo hice de la siguiente manera (1Y MA está en blanco cuando las fechas no están seleccionadas):

IF(ISBLANK([Índice 1YMA]),"",[Índice 1YMA] - CALCULATE(STDEVX. S('Datos','Datos'[Índice]),ALLSELECTED()))
Syndicate_Admin
Administrator
Administrator

@wlf0032

Creé un archivo de Power BI con el valor de cierre msft, compruebe si se ajusta a sus requisitos. No entendí muy bien +1 y -1 aquí.

MA 365 = 
CALCULATE(
    AVERAGE(MSFT[Close]),
    DATESINPERIOD( Dates[Date] , MAX(Dates[Date]) , -365 , DAY )
)
Std + 1 = 
[MA 365] + 
STDEVX.S(
    DATESINPERIOD( Dates[Date] , MAX(Dates[Date]) , -365 , DAY ),
    [Close Value]
)
Std - 1 = 
[MA 365] - 
STDEVX.S(
    DATESINPERIOD( Dates[Date] , MAX(Dates[Date]) , -365 , DAY ),
    [Close Value]
) 

Fowmy_0-1633774706038.png

Revisa el archivo adjunto debajo de mi firma

¡Realmente apreciamos su solución! Intenté tu camino, pero esto parece que no resuelve mi problema.

1. la medida std dev no debe ser una medida en movimiento. Debe ser estático, es decir, std dev de todos los datos disponibles.

2. esto no ayudará con el problema de la segmentación de datos de fecha. cuando filtro la segmentación de datos, este desarrollador de std todavía se muestra en el gráfico para las fechas que se filtran.

¡Gracias de todos modos!

@wlf0032

Lo tienes, puedes calcular el STDEV de la siguiente manera. No entendí lo que quisiste decir con "y +/- 1 std. dev. "

Std + 1 = [MA 365] + STDEVX.S( ALL( Dates[Date] ) ,  [Close Value] )


Std - 1  = [MA 365] + STDEVX.S( ALL( Dates[Date] ) ,  [Close Value] )

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

November Power BI Update 768x460.png

Check it Out!

Click here to read more about the November 2021 Updates!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.