Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
mficco
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

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
v-shex-msft
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.
amitchandak
Super User
Super User

@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))

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!

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.