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
Hennadii
Helper IV
Helper IV

Intercambie valores en la misma fila entre dos columnas en función de cierta condición

Hola

Hay un problema similar que encontré, pero hay filas fijas donde intercambiar dos valores. En mi caso, tengo que definir dinámicamente en qué filas intercambiar los valores.

Tengo una tabla Relaciones con 3 columnas donde necesito comprobar 2 columnas(item_id y item_to_id) e intercambiarlas si es necesario.

Tabla de relaciones

Id item_id item_to_id
1 10 51
2 20 61
3 51 20
4 30 20

Una decisión que los valores para intercambiar dependen de los valores de las otras dos tablas (Task y SubTask)

Tabla de tareas

Id Descripción
10 Tarea A
20 Tarea B
30 Tarea C

Tabla de subtareas

Id Descripción
51 Subtarea X
61 Subtarea Y

Me gustaría que la tabla Relation se ordenara para que item_id columna contenga el identificador de la tabla Task y item_to_id columna contiene el identificador de la tabla Subtarea o Tarea. La tabla resultante debe ser similar a continuación

Id item_id item_to_id item_id_swapped item_to_id_swapped
1 10 51 10 51
2 20 61 20 61
3 51 20 20 51
4 30 20 30 20

Espero con ansias cualquier consejo.

1 ACCEPTED SOLUTION

Gracias @MFelix por su respuesta. Sí, entendiste mi problema correctamente.

Hay un resultado inesperado en su captura de pantalla : 1a, 2a y 4a filas no se deben intercambiar.

Mientras tanto, encontré una manera más fácil de resolver eso.

Agregué Columna personalizada con la siguiente fórmula:

por item_id_swapped

= if ( List.Contains (Task[id], [item_id] ) ) then [item_id] else [item_to_id]

y por item_to_id_swapped

= if ( List.Contains (Task[id], [item_id] ) ) then [item_to_id] else [item_id]

El resultado se ve como se esperaba

Screenshot 2020-12-17 164918.png

View solution in original post

3 REPLIES 3
MFelix
Super User
Super User

No @Hennadii ,

No estoy seguro de si esto es lo que necesita, pero asumo que para cada línea que el item_id no está presente en la tarea que desea realizar el cambio.

Lo que hice en el editor de consultas fue lo siguiente:

  • Combinar la tabla de relaciones con la tabla de tareas
    • Full Outer toda la fila de ambos
  • Expanda la columna ID
  • Agregue una nueva columna personalizada y asígnela item_to_id_swapped:
if [Tasks.id] = null then[item_id]else [Tasks.id] 
  • Seleccione un valor nulo en el identificador de tareas y reemplace el valor null por un valor 999
  • Ahora edite el paso acaba de crear de replacemente con el siguiente código:
= Table.ReplaceValue(#"Added Custom",each [Tasks.id],each if [Tasks.id] = null then [item_to_id] else [Tasks.id] ,Replacer.ReplaceValue,{"Tasks.id"})
  • Cambiar el nombre de la columna Tasks.id

Resultado final a continuación y en adjuntar archivo PBIX (versión de diciembre).

MFelix_0-1608212305039.png

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI0ABKmhkqxOtFKRkCmEYhvBuEbQ6TAgiC+CZBpbADlxwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [id = _t, item_id = _t, item_to_id = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"id", Int64.Type}, {"item_id", Int64.Type}, {"item_to_id", Int64.Type}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"item_id"}, Tasks, {"id"}, "Tasks", JoinKind.FullOuter),
    #"Expanded Tasks" = Table.ExpandTableColumn(#"Merged Queries", "Tasks", {"id"}, {"Tasks.id"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Tasks", "item_to_id_swapped", each if [Tasks.id] = null then[item_id]else [Tasks.id] , Int64.Type),
    #"Replaced Value" = Table.ReplaceValue(#"Added Custom",each [Tasks.id],each if [Tasks.id] = null then [item_to_id] else [Tasks.id] ,Replacer.ReplaceValue,{"Tasks.id"}),
    #"Renamed Columns" = Table.RenameColumns(#"Replaced Value",{{"Tasks.id", "item_id_swapped"}})
in
    #"Renamed Columns"


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



Gracias @MFelix por su respuesta. Sí, entendiste mi problema correctamente.

Hay un resultado inesperado en su captura de pantalla : 1a, 2a y 4a filas no se deben intercambiar.

Mientras tanto, encontré una manera más fácil de resolver eso.

Agregué Columna personalizada con la siguiente fórmula:

por item_id_swapped

= if ( List.Contains (Task[id], [item_id] ) ) then [item_id] else [item_to_id]

y por item_to_id_swapped

= if ( List.Contains (Task[id], [item_id] ) ) then [item_to_id] else [item_id]

El resultado se ve como se esperaba

Screenshot 2020-12-17 164918.png

No @Hennadii ,

Mi mal cuando escribí las fórmulas mezclé los dos nombres de columna.

Pero me alegro de que estuvieras abble para encontrar una solución. No olvides marcar la respuesta para ayudar a los demás.


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



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.