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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

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
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.