March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Hola
En Excel, tengo una macro vba que básicamente comprime filas en una tabla que tienen los mismos valores
La lógica es ELR, TID, CODE debe coincidir y FM - SM de la siguiente fila
En Excel, actualizo el FM con el FM de la siguiente fila y elimino la siguiente fila, luego hago lo mismo para la siguiente fila, etc.
Buscando hacer lo mismo en el editor de consultas o DAX
He probado un BASIC SUMMARIZE pero MIN (SM) y MAX (FM) no va a funcionar, ya que no tiene en cuenta las diferencias entre FM y SM de la siguiente fila y rollos de datos demasiado y itodoesnt tomar int el código .. devolver 3 filas
La tabla ELR tiene 5000 filas de datos
Tabla: RESUMIR('INM',
'INM'[ELR],
'INM'[TID],
«INM»[Código],
"Start Mileage", MIN('INM'[Start Mileage]),
"Finish Mileage", MAX('INM'[Finish Mileage])
)
Otra idea era usar EARLER y comparar una fila con la siguiente, pero no podía conseguir que funcione
Los datos base y el resultado requerido están a continuación (lo sentimos, no pude pegar una tabla)
Hola @amitche3 ,
Podemos usar los siguientes pasos para cumplir con sus requisitos.
1. Cree una columna calculada.
IsEqualToNextRow =
[Finish Mileage]
= CALCULATE (
SUM ( 'INM'[Start Mileage] ),
'INM',
'INM'[INDEX]
= EARLIER ( 'INM'[INDEX] ) + 1,
'INM'[ELR] = EARLIER ( 'INM'[ELR] ),
INM[CODE] = EARLIER ( 'INM'[CODE] ),
'INM'[Track ID] = EARLIER ( 'INM'[Track ID] )
)
2. Luego podemos crear una columna de cálculo para obtener el resultado.
Group =
VAR temp =
CALCULATE (
MAX ( 'INM'[INDEX] ),
'INM',
NOT ( 'INM'[IsEqualToNextRow] ),
'INM'[INDEX] < EARLIER ( 'INM'[INDEX] ),
'INM'[ELR] = EARLIER ( 'INM'[ELR] ),
INM[CODE] = EARLIER ( 'INM'[CODE] ),
'INM'[Track ID] = EARLIER ( 'INM'[Track ID] )
)
RETURN
IF (
CALCULATE (
COUNTROWS ( 'INM' ),
'INM'[IsEqualToNextRow],
'INM',
'INM'[INDEX]
= EARLIER ( 'INM'[INDEX] ) - 1,
'INM'[ELR] = EARLIER ( 'INM'[ELR] ),
INM[CODE] = EARLIER ( 'INM'[CODE] ),
'INM'[Track ID] = EARLIER ( 'INM'[Track ID] )
) > 0,
CALCULATE (
MIN ( 'INM'[INDEX] ),
'INM',
'INM'[INDEX] < EARLIER ( 'INM'[INDEX] ),
'INM'[INDEX] > temp,
'INM'[ELR] = EARLIER ( 'INM'[ELR] ),
INM[CODE] = EARLIER ( 'INM'[CODE] ),
'INM'[Track ID] = EARLIER ( 'INM'[Track ID] )
),
[INDEX]
)
BTW, pbix como adjunto.
Saludos
Equipo de Apoyo comunitario _ zhenbw
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Muchas gracias. Su solución funcionó perfectamente. Cuando se agrupa, dio el mismo resultado que mi macro vba ... que ahora no necesito ejecutar cada vez que los datos se actualizan
@amitche3 - Así que, muy posible hacer. La técnica básica está aquí: Vea mi artículo sobre el tiempo medio entre el fracaso (MTBF) que utiliza EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/3395...
En su caso parece que podemos usar el kilometraje como nuestro "índice" que define "anterior". Voy a proporcionar una fórmula, hay una alta probabilidad de errores de sintaxis. Para obtener una solución que no tenga errores de sintaxis Consulte esta publicación sobre cómo obtener respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490
Las partes más importantes son:
1. Muestra datos como texto, utilice la herramienta de tabla en la barra de edición
2. Salida esperada a partir de datos de muestra
3. Explicación en palabras de cómo obtener de 1. a 2.
Aquí va:
Result Table =
VAR __Table =
FILTER(
ADDCOLUMNS(
'Table',
"Mod",MOD(COUNTROWS(FILTER('Table',[ELR]=EARLIER('Table'[ELR]) && [TID] = EARLIER('Table'[TID]) && [Code]=EARLIER('Table'[Code]) && [Start Mileage] <= EARLIER('Table'[Start Mileage]))),2) // 1 for odd rows, 0 for even rows
"Next",MINX(FILTER('Table',[ELR]=EARLIER('Table'[ELR]) && [TID] = EARLIER('Table'[TID]) && [Code]=EARLIER('Table'[Code]) && [Start Mileage] < EARLIER('Table'[Start Mileage])),[Finish Mileage])
),
[Mod] = 1
)
RETURN
__Table
Lógica general, agregue la columna "Siguiente" para obtener el kilometraje de finalización de la siguiente línea y cree una columna que rastree la fila impar o par. Filtrar filas uniformes. No lo probé porque no tenía ganas de escribir datos y la solución.
Hola Greg
Muchas gracias por su respuesta Este tipo de funciona, pero no es un dato incluso extraño
He visto su publicación y código como sólo quiero agregar una columna en lugar de crear otra tabla
Todavía no puedo copiar y pasar datos de Excel a aquí por alguna razón, así que han pegado como csv
Tengo una columna Index e intento agregar una columna para pegar el índice para las filas coincidentes
Las reglas son ELR debe coincidir con el rowm anterior TrackID debe coincidir con la fila anterior, el código debe coincidir con la fila anterior,
El kilometraje inicial debe coincidir con la fila anterior
El uso de MINX & FILTER agrupará el índice 10 como parte del índice 1-8 y debe dejarse sin agrupar, ya que la fila anterior tiene un código diferente
Aquí están mis datos de muestra
Datos de muestra
INDEX,ELR,TrackID,StartMileage,FinishMileage,CODE
1,WHL,1900,8.168,9.0029,A
2,WHL,1900,9.0029,9.0103,A
3,WHL,1900,15.0223,15.0602,A
4,WHL,1900,15.0602,15.0643,A
5,WHL,1900,15.0643,15.0965,A
6,WHL,1900,15.0965,15.0994,A
7,WHL,1900,15.0994,15.1016,A
8,WHL,1900,19.0634,19.0763,A
9,WHL,1900,19.0763,19.0787,
10,WHL,1900,19.0787,19.0854,A
11,WHL,1900,36.041,36.0497,A
12.WHL,1900,36.0497,36.0532,A
13,WHL,1900,36.0532,36.0562,A
14,WHL,1900,64.0668,64.0795,B
15,WHL,1900,64.0795,64.0858,B
16,WHL,1900,81.141,81.1508,B
17,WHL,1900,81.1508,81.1591,B
18,WHL,1900,99.0501,99.0765,B
Resultado requerido
INDEX,ELR,TrackID,StartMileage,FinishMileage,CODE,Gr
1,WHL,1900,8.168,9.0029,A,1
2,WHL,1900,9.0029,9.0103,A,1
3,WHL,1900,15.0223,15.0602,A,3
4,WHL,1900,15.0602,15.0643,A,3
5,WHL,1900,15.0643,15.0965,A,3
6,WHL,1900,15.0965,15.0994,A,3
7,WHL,1900,15.0994,15.1016,A,3
8,WHL,1900,19.0634,19.0763,A,8
9,WHL,1900,19.0763,19.0787,,9
10,WHL,1900,19.0787,19.0854,A,10
11,WHL,1900,36.041,36.0497,A,11
12,WHL,1900,36.0497,36.0532,A,11
13,WHL,1900,36.0532,36.0562,A,11
14,WHL,1900,64.0668,64.0795,B,14
15,WHL,1900,64.0795,64.0858,B,14
16,WHL,1900,81.141,81.1508,B,16
17,WHL,1900,81.1508,81.1591,B,16
18,WHL,1900,99.0501,99.0765,B,18
Este es mi código hasta ahora que funciona parcialmente, pero sólo agrupa 2 filas a la vez
Gr
VAR siguiente a MINX(
FILTRO('INM',
[ELR] - EARLIER('INM'[ELR]) &&
[ID de pista] - EARLIER('INM'[ID de pista]) &&
[CODE]-EARLIER('INM'[CODE]) &&
[Iniciar kilometraje] - EARLIER('INM'[Finalizar kilometraje]) ),
'INM'[índice])
devolución
IF (ISBLANK(next),'INM'[Index],next )
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.
Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.