ebeauchamp
Hola a todos,
En Power BI, actualmente estoy usando una tabla con aproximadamente 8 millones de transacciones de una consulta SQL. Para una transacción muy específica, quiero cambiar el nombre de SKU y reemplazarlo con un nombre de SKU diferente. Con Power Query Editor, puedo lograrlo filtrando las transacciones para identificar la fila en cuestión (filtrar por nombre de cliente y la cantidad específica), y luego usar la opción «Reemplazar valores», con la columna SKU seleccionada. Pero luego no puedo volver atrás y eliminar el filtro de la tabla, por lo que este método no funciona.
¿Qué otros métodos están disponibles para encontrar una fila específica y luego reemplazar el valor original solo en esa fila? Con la restricción de que este mismo valor original está presente en miles de otras filas donde debe permanecer como está y no verse afectado por el reemplazo.
Gracias por tu ayuda,
Erik
Rocco_sprmnt21
En respuesta a ebeauchamp
Si está seguro de que solo hay un criterio de coincidencia de registros, puede usar esta línea de código:
= Table.ReplaceMatchingRows(yourTab, {Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610){0},[name="Client3",amount=610,SKU=newValue]})
De lo contrario, en caso de que haya varias filas que coincidan con los criterios, intente esto:
Table.ReplaceMatchingRows(yourTab, List.Zip({Table.ToRecords(Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610)), List.Repeat({[name="Client3",amount=610,SKU=newValue]}, List.Count(Table.ToRecords(Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610))))}))
PD
En caso de filas duplicadas, parece que hay algunos problemas. Pero no investigué más.
Mariusz
Hola @ebeauchamp
¿Puede proporcionar una muestra de datos para que se pueda recrear el escenario?
Mariusz
Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.
No dude en conectarse conmigo.
LinkedIn
ebeauchamp
En respuesta a Mariusz
Este es un ejemplo muy simplificado de una tabla con 30 columnas y ms de filas. Pero básicamente, necesito aplicar una transformación después de la consulta donde puedo encontrar la fila con la cantidad «5787» y reemplazar el SKU «ProductABC», por otro SKU, por ejemplo, «ProductXYZ», solo para esa fila, sin afectar el otras filas. Gracias
Instantánea | Cliente | SKU | Monto |
2020-06-09 | Cliente1 | Producto ABC | 100 |
2020-06-09 | Cliente2 | Producto ABC | 120 |
2020-06-09 | Cliente3 | Producto ABC | 90 |
2020-06-08 | Cliente1 | Producto ABC | 130 |
2020-06-08 | Cliente2 | Producto ABC | 5787 |
2020-06-08 | Cliente3 | Producto ABC | 100 |
2020-06-07 | Cliente1 | Producto ABC | 392 |
2020-06-07 | Cliente2 | Producto ABC | 400 |
2020-06-07 | Cliente3 | Producto ABC | 110 |
Rocco_sprmnt21
En respuesta a ebeauchamp
Si está seguro de que solo hay un criterio de coincidencia de registros, puede usar esta línea de código:
= Table.ReplaceMatchingRows(yourTab, {Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610){0},[name="Client3",amount=610,SKU=newValue]})
De lo contrario, en caso de que haya varias filas que coincidan con los criterios, intente esto:
Table.ReplaceMatchingRows(yourTab, List.Zip({Table.ToRecords(Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610)), List.Repeat({[name="Client3",amount=610,SKU=newValue]}, List.Count(Table.ToRecords(Table.SelectRows(yourTab, each [name]="Client3" and [amount]=610))))}))
PD
En caso de filas duplicadas, parece que hay algunos problemas. Pero no investigué más.
Rocco_sprmnt21
En respuesta a Rocco_sprmnt21
Esto debería funcionar en ambos casos:
Table.FromRecords(Table.TransformRows(yourTab, each if ([name]="nome3" and [amount]=5787) then Record.TransformFields(_,{"SKU", (_)=> newValue}) else _))
Rocco_sprmnt21
En respuesta a Rocco_sprmnt21
y otra forma más de establecer un campo en un valor específico:
Table.FromRecords(Table.TransformRows(yourTab, each if ([name]="nome3" and [amount]=5787) then Record.Combine({_,[SKU=newValue]}) else _))
Además, esta solución parece válida tanto en caso de coincidencia única, múltiple o nula