cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Frequent Visitor

Promedio diario por "semana rodante"

¡Hola!

Necesito calcular el avarege diario de personas usando los datos de la semana. La lógica debe ser así: el cálculo comienza TODAY() y calcula el promedio de los últimos 7 días (incluyendo hoy). Este promedio debería ser el mismo para esa semana. A continuación, debe calcular el mismo promedio para la semana anterior. El gráfico debería parecerse a éste.

mficco_1-1600221642548.png

Me las arreglé para hacer un promedio móvil con esta fórmula

Media Tot Personas =

CALCULATE(AVERAGE(Fechas[Tot Personas]);
FILTER(ALL(Fechas);
Fechas[Fecha] >= MAX(Fechas[Fecha])-7 &&
Fechas[Fecha] < MAX(Fechas[Fecha]) &&
MAX(Fechas[Fecha])<=TODAY())
)

pero necesito que el promedio de la semana sea constante como el gráfico anterior.

Por cierto, mis datos están todos en la misma tabla (fecha y total de personas).

Espero estar siendo lo suficientemente claro.

¡Gracias!

1 ACCEPTED SOLUTION

Accepted Solutions

hola @mficco,

Tal vez pueda agregar una condición en la expresión para configurar un rolling basado en los valores de campo de fecha:

Media Tot Personas =
VAR currDate =
    MAX ( Fechas[Fecha] )
VAR _weeknum =
    WEEKNUM ( currDate )
RETURN
    CALCULATE (
        AVERAGE ( Fechas[Tot Personas] );
        FILTER (
            ALL ( Fechas );
            IF (
                _weeknum > 1;
                WEEKNUM ( Fechas[Fecha] ) = _weeknum - 1
                    && YEAR ( Fechas[Fecha] ) = YEAR ( currDate );
                WEEKNUM ( Fechas[Fecha] )
                    = WEEKNUM ( DATE ( YEAR ( currDate ) - 1; 12; 31 ) )
                    && YEAR ( Fechas[Fecha] )
                        = YEAR ( currDate ) - 1
            )
                && Fechas[Fecha] <= currDate
                && currDate <= TODAY ()
        )
    )

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

View solution in original post

5 REPLIES 5
Super User IV
Super User IV

@mficco, si necesita el mismo promedio para la semana, entonces no se puede hacer rodar 7 días.

Necesita tener tabla de fecha/semana con columna de clasificación de semana

Columna

Rango de la semana - RANKX(all('Date'),'Date'[Week Start date],,ASC,Dense)

Y fórmula como esta. Trazar esto con semana a partir de la semana / tabla de fechas
Esta semana: CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Week Rank]-max('Date'[Week Rank])))
Last Week ? CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Week Rank]-max('Date'[Week Rank])-1))

El peaje 7 sería así, pero eso cambiará en el día a día - Rolling 3 día - CALCULATE(sum(Sales[Sales Amount]),DATESINPERIOD('Date'[Date],MAX(Sales[Sales Date]),-3,Day))



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

Lo siento @amitchandak , Creo que no estoy siguiendo esta solución.

Rango de la semana - RANKX(all('Date'),'Date'[Week Start date],,ASC,Dense)

¿Qué quieres decir con "fecha de inicio de la semana"? Clasiqué las fechas usando esta fórmula:

Week Rank = RANKX(all(Fechas); Fechas[Fecha];; ASC;Dense)
pero esto es sólo clasificar todos los días en mi tabla de citas. ¿No debería el rango de la fórmula 1o para la primera semana, luego 2o para la segunda... para que las medidas que recomendó funcionen correctamente?

pbi rank.PNG

¡Gracias!
Community Support
Community Support

hola @mficco,

Creo que necesita extraer el semana actual y el año como condición para agrupar calcular en lugar de la fecha actual o dinámicará los registros móviles basados en la fecha actual.

Media Tot Personas =
VAR currDate =
    MAX ( Fechas[Fecha] )
VAR _weeknum =
    WEEKNUM ( currDate )
RETURN
    CALCULATE (
        AVERAGE ( Fechas[Tot Personas] );
        FILTER (
            ALL ( Fechas );
            IF (
                _weeknum > 1;
                WEEKNUM ( Fechas[Fecha] ) = _weeknum - 1
                    && YEAR ( Fechas[Fecha] ) = YEAR ( currDate );
                WEEKNUM ( Fechas[Fecha] )
                    = WEEKNUM ( DATE ( YEAR ( currDate ) - 1; 12; 31 ) )
                    && YEAR ( Fechas[Fecha] )
                        = YEAR ( currDate ) - 1
            )
                && currDate <= TODAY ()
        )
    )

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

Hola @v-shex-msft!

Esa es la idea. Necesito que el promedio ruede dinámicamente cada vez que pase un día. WEEKNUM() utiliza el número de semana del año, pero no quiero el promedio de la semana calendario. Necesito la semana para rodar, siempre comenzando la forma HOY().

La solución rápida que se me ocurrió fue hacer 3 medidas (con el fin de mostrar al menos las últimas 3 semanas):

Current week= CALCULATE(SUM(Fechas[Tot Personas]);DATESBETWEEN(Fechas[Fecha]; TODAY()-7; TODAY()))/7
Current week -1 = CALCULATE(SUM(Fechas[Tot Personas]);DATESBETWEEN(Fechas[Fecha]; TODAY()-14; TODAY()-8))/7
Current week -2= CALCULATE(SUM(Fechas[Tot Personas]);DATESBETWEEN(Fechas[Fecha]; TODAY()-21; TODAY()-15))/7
Pero de esta manera no puedo mostrarlos en un gráfico porque sólo muestra una línea constante a través de todas las fechas.

Captura.PNG

hola @mficco,

Tal vez pueda agregar una condición en la expresión para configurar un rolling basado en los valores de campo de fecha:

Media Tot Personas =
VAR currDate =
    MAX ( Fechas[Fecha] )
VAR _weeknum =
    WEEKNUM ( currDate )
RETURN
    CALCULATE (
        AVERAGE ( Fechas[Tot Personas] );
        FILTER (
            ALL ( Fechas );
            IF (
                _weeknum > 1;
                WEEKNUM ( Fechas[Fecha] ) = _weeknum - 1
                    && YEAR ( Fechas[Fecha] ) = YEAR ( currDate );
                WEEKNUM ( Fechas[Fecha] )
                    = WEEKNUM ( DATE ( YEAR ( currDate ) - 1; 12; 31 ) )
                    && YEAR ( Fechas[Fecha] )
                        = YEAR ( currDate ) - 1
            )
                && Fechas[Fecha] <= currDate
                && currDate <= TODAY ()
        )
    )

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

View solution in original post

Helpful resources

Announcements
November Update

Check it Out!

Click here to read more about the November 2020 Updates!

Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

secondImage

Power Platform October Community Highlights

Check out the top community contributors across all of the communities

secondImage

Create an end-to-end data and analytics solution

Learn how Power BI works with the latest Azure data and analytics innovations at the digital event with Microsoft CEO Satya Nadella.

Top Solution Authors
Top Kudoed Authors