Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe 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.
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