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

Get Fabric certified for FREE! Don't miss your chance! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

Promedio de los últimos N días dependiendo del día de la semana

Hola

Actualmente estoy tratando de obtener el promedio de los últimos 2 días dependiendo del tipo de día (es decir, día de la semana o fin de semana).

Tengo una relación de tabla de fechas establecida con mi tabla de valores.

El resultado deseado es crear una medida de cantidad promedio como se muestra a continuación

FechaCantidadTipodedíaCantidad media
1/01/2019 0:001Día laborable
2/01/2019 0:002Día laborable
3/01/2019 0:003Día laborable(1+2)/2
4/01/2019 0:004Día laborable(2+3)/2
5/01/2019 0:005Fin de semana
6/01/2019 0:006Fin de semana
7/01/2019 0:007Día laborable(3+4)/2
8/01/2019 0:008Día laborable(4+7)/2
9/01/2019 0:009Día laborable(7+8)/2
10/01/2019 0:0010Día laborable(8+9)/2
11/01/2019 0:0011Día laborable(9+10)/2
12/01/2019 0:0012Fin de semana(5+6)/2
13/01/2019 0:0013Fin de semana(6+12)/2

thanhqccn124_0-1668138774971.png

Gracias de antemano

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@thanhqccn124 , el rango del día de trabajo continuo ayudará

Nuevas columnas en la tabla de fechas

Día laborable = si(WEEKDAY([Fecha],2)>=6,0,1)
Fecha de trabajo = if(WEEKDAY([Fecha],2)>=6,BLANK(),[Fecha])
Fecha de trabajo Cont = if([Día laborable]=0,maxx(FILTRO('Fecha',[Fecha] ANTERIOR([Día laborable]),[Fecha]),[Fecha] )
Fecha de trabajo cont Rank = RANKX(ALL('Date'),[Work Date Cont],,ASC,Dense)

Este día = CALCULATE(sum('Table'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]=max('Date'[Work Date cont Rank]) && not(isblank('Date'[Work Date cont Rank]))
Último día = CALCULATE(sum('Table'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]=max('Date'[Work Date cont Rank])-1 && not(isblank('Date'[Work Date cont Rank]))))

Últimos 2 días laborables = CALCULATE(sum('Table'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]>=max('Date'[Work Date cont Rank])-2 && 'Date'[Work Date cont Rank]<=max('Date'[Work Date cont Rank])))

Promedio de los últimos 2

Últimos 2 días laborables = CALCULATE(averagex(Values('Date'[Date]), calculate(sum('Table'[Qty])) ), FILTER(ALL('Date'),'Date'[Work Date cont Rank]>=max('Date'[Work Date cont Rank])-2 && 'Date'[Work Date cont Rank]<=max('Date'[Work Date cont Rank]) && not(isblank('Date'[Work Date cont Rank])) ))

Ver video

Power BI Workday frente a Last Workday- https://youtu.be/MkYLT_GYIbM

Gracias @amitchandak

¿Esto también cubriría los días de fin de semana? Como se muestra en mi resultado deseado, si una fecha determinada es un fin de semana, se requiere el promedio de la cantidad de 2 días de fin de semana anteriores como se resalta a continuación.

thanhqccn124_0-1668143125791.png

Hi, @thanhqccn124

Puede considerar ordenar y agrupar los datos por "Tipodedía" y crear la siguiente columna de índice.

veasonfmsft_1-1669616612945.jpeg

Código M:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZdA9CoUwEEXhrTymFpyb+Je3EYtgIZhKsHf3iljISTHdB8M9OZtaVxtc6ed/d2tM982l7Nt62tJkCwQBIBJEgI6gA+gJ+heUY3vAQDAAjAQjXkwEE0AiSADyqpST1DFZU1VOBWxRFVTxS5YL", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Quantity = _t, Typeofday = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Quantity", Int64.Type}, {"Date", type datetime}},"en-GB"
),
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Date", Order.Ascending}}),
    #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Typeofday"}, {{"All", each _, type table [Date=nullable datetime, Quantity=nullable text, Typeofday=nullable text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([All],"Index",0,1)),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Custom"}),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Removed Other Columns", "Custom", {"Date", "Quantity", "Typeofday", "Index"}, {"Date", "Quantity", "Typeofday", "Index"})
in
    #"Expanded Custom"

Luego pruebe la siguiente fórmula para calcular el promedio:

Aveerage Quantity = 
VAR _previous1 =
    CALCULATE (
        MAX ( 'Table'[Quantity] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Typeofday] = EARLIER ( 'Table'[Typeofday] )
                && 'Table'[Index]
                    = EARLIER ( 'Table'[Index] ) - 1
        )
    )
VAR _previous2 =
    CALCULATE (
        MAX ( 'Table'[Quantity] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Typeofday] = EARLIER ( 'Table'[Typeofday] )
                && 'Table'[Index]
                    = EARLIER ( 'Table'[Index] ) - 2
        )
    )
RETURN
    IF (
        NOT ( 'Table'[Index] ) IN { 0, 1 },
        ( _previous1 + _previous2 ) / 2,
        BLANK ()
    )

veasonfmsft_2-1669618265169.png

Saludos
Equipo de Apoyo a la Comunidad _ Eason

Helpful resources

Announcements
Sticker Challenge 2026 Carousel

Join our Community Sticker Challenge 2026

If you love stickers, then you will definitely want to check out our Community Sticker Challenge!

January Power BI Update Carousel

Power BI Monthly Update - January 2026

Check out the January 2026 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.

Top Kudoed Authors