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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
amitche3
Frequent Visitor

Comprimir filas en una tabla

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)

INM ELR TID Maintenance Responsibility.jpg

4 REPLIES 4
v-zhenbw-msft
Community Support
Community Support

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] )
)

Com 2.jpg

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]
)

Com 1.jpg

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

Greg_Deckler
Super User
Super User

@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.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

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 )

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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

Top Solution Authors