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

The Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.

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
Feb2025 Sticker Challenge

Join our Community Sticker Challenge 2025

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

Jan NL Carousel

Fabric Community Update - January 2025

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

Top Solution Authors