Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
Sign up nowGet Fabric certified for FREE! Don't miss your chance! Learn more
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
| Fecha | Cantidad | Tipodedía | Cantidad media |
| 1/01/2019 0:00 | 1 | Día laborable | |
| 2/01/2019 0:00 | 2 | Día laborable | |
| 3/01/2019 0:00 | 3 | Día laborable | (1+2)/2 |
| 4/01/2019 0:00 | 4 | Día laborable | (2+3)/2 |
| 5/01/2019 0:00 | 5 | Fin de semana | |
| 6/01/2019 0:00 | 6 | Fin de semana | |
| 7/01/2019 0:00 | 7 | Día laborable | (3+4)/2 |
| 8/01/2019 0:00 | 8 | Día laborable | (4+7)/2 |
| 9/01/2019 0:00 | 9 | Día laborable | (7+8)/2 |
| 10/01/2019 0:00 | 10 | Día laborable | (8+9)/2 |
| 11/01/2019 0:00 | 11 | Día laborable | (9+10)/2 |
| 12/01/2019 0:00 | 12 | Fin de semana | (5+6)/2 |
| 13/01/2019 0:00 | 13 | Fin de semana | (6+12)/2 |
Gracias de antemano
@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.
Hi, @thanhqccn124
Puede considerar ordenar y agrupar los datos por "Tipodedía" y crear la siguiente columna de índice.
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 ()
)
Saludos
Equipo de Apoyo a la Comunidad _ Eason
If you love stickers, then you will definitely want to check out our Community Sticker Challenge!
Check out the January 2026 Power BI update to learn about new features.