Mahmud
Hola queridos,
Tengo una columna (como se ve en la foto de abajo) llamada Q, esta pregunta puede almacenar muchos valores. Y estos valores se pueden cambiar en otro momento para tener más opciones (linke alguien puede seleccionar una respuesta para esta pregunta otras opciones entre 6 a 11).
– Me gustaría dividir estos valores en columnas, pero cada valor debe establecerse en la misma columna. Intenté dividir la columna pero no dividió el valor específico en una columna específica. Entonces, ¿cómo puedo arreglar eso?
– Me gustaría que el nuevo valor creara una nueva columna automáticamente o, dado que conozco todas las opciones, ¿es posible crear estas columnas y si alguien seleccionó estos valores, irá a esa columna automáticamente? si no, ¿cuál es la mejor solución para este escenario?
¡Gracias por su apoyo!
Marcel Beug
En respuesta a Phil_Seamark
Una solución en Power Query sería:
- agregar una columna de índice,
- dividir la columna Q en una nueva columna,
- expandir esta nueva columna,
- agregue una nueva columna con el prefijo «V»,
- pivote (incluí un tipo exótico (en la parte del número numérico del valor prefijado),
solo porque se puede y porque hoy es sábado), - ordenar de nuevo a la ordenación original
- eliminar la columna de índice
Este video lo lleva a través de todos los pasos:
let Source = Table1, Indexed = Table.AddIndexColumn(Source, "Index", 0, 1), Splitted = Table.AddColumn(Indexed, "Splitted", each Text.Split([Q], " ")), Expanded = Table.ExpandListColumn(Splitted, "Splitted"), Prefixed = Table.AddColumn(Expanded, "Inserted Prefix", each "V" & [Splitted], type text), Pivoted = Table.Pivot(Prefixed, List.Sort(List.Distinct(Prefixed[#"Inserted Prefix"]), (x,y) => Value.Compare(Number.From(Text.Middle(x,1)), Number.From(Text.Middle(y,1)))), "Inserted Prefix", "Splitted"), OriginalSort = Table.Sort(Pivoted,{{"Index", Order.Ascending}}), RemovedIndex = Table.RemoveColumns(OriginalSort,{"Index"}) in RemovedIndex
Marcel Beug
En respuesta a Mahmud
«Tengo 2 preguntas» seguido de una lista de 5…
De todos modos, si tiene datos mixtos, sugeriría ordenar los datos antes de pivotar.
Ahora el paso de pivote se ve así:
y el código de consulta completo:
let Source = Table1, Indexed = Table.AddIndexColumn(Source, "Index", 0, 1), Splitted = Table.AddColumn(Indexed, "Splitted", each Text.Split([Q], " ")), Expanded = Table.ExpandListColumn(Splitted, "Splitted"), AddedSortColumn = Table.Buffer(Table.AddColumn(Expanded, "SortColumn", each try Number.From([Splitted]) otherwise [Splitted])), Sorted = Table.Sort(AddedSortColumn,{{"SortColumn", Order.Ascending}}), RemovedSortColumn = Table.RemoveColumns(Sorted,{"SortColumn"}), Prefixed = Table.AddColumn(RemovedSortColumn, "Inserted Prefix", each "V" & [Splitted], type text), Pivoted = Table.Pivot(Prefixed, List.Distinct(Prefixed[#"Inserted Prefix"]), "Inserted Prefix", "Splitted"), OriginalSort = Table.Sort(Pivoted,{{"Index", Order.Ascending}}), RemovedIndex = Table.RemoveColumns(OriginalSort,{"Index"}) in RemovedIndex
La solución es dinámica ya que agrega todas las columnas requeridas, también si los datos futuros requieren más o menos columnas.
Entonces, con su último ejemplo agregado, obtuve el siguiente resultado con la columna «Vother» agregada automáticamente:
Phil_Seamark
Hola @mahmoud
¿Cuántas opciones tendrás? Sus datos de muestra solo muestran números hasta 12. Si ese es el caso, puede crear manualmente fórmulas DAX para crear columnas calculadas y solo se completa si encuentra un valor clave en la columna Q.
Algo en la línea de
V12 = Var myVal = "12" RETURN IF(FIND(" " & myVal & " "," " & 'Table1'[Q] & " ",,0)>0,myVal,blank())
que puedes repetir
Mahmud
En respuesta a Phil_Seamark
Hola @Phil_Seamark
Gracias por su sugerencia, tengo 30 preguntas y cada pregunta tiene muchas opciones (en total 244 opciones). Eso significa que tengo que crear 244 columnas. 🙂
La letra «V» solía explicar que los valores de las opciones serían los nombres de las columnas.
Desearía que hubiera otra manera de conseguir eso. :), que Power BI agregue estos futuros a la próxima versión.
Atentamente
mahmud
Marcel Beug
En respuesta a Mahmud
@mahmoud, ¿pasaste por alto mi publicación?
Mahmud
En respuesta a Marcel Beug
Hola @MarcelBeug
Gracias por su ayuda, estoy probando su método, ceré una tabla separada como lo hizo, es un trabajo.
Pero cuando llego a datos reales, se detiene en el paso Columna pivote.
me da error
DataFormat.Error: No pudimos convertir a Número.
Detalles:
3 9 otros
Tengo dos preguntas:
– si la columna Q tiene un valor como «3 9 otro» afectará el proceso, porque estoy trabajando con valores de texto.
– ¿Es posible grabar o mostrar imágenes usando la interfaz de Power Query (pantalla completa para ver si olvidé el paso o cometí errores)
– con esta cantidad de preguntas, ¿tengo que repetir el proceso para cada columna?
– si el nombre de mi columna tiene (/), ¿debería eliminar este / de todos los nombres de las columnas?
– si algunos seleccionaron la opción 7 en el futuro, ¿tendré que repetir el proceso o agregará automáticamente estos nuevos valores como una nueva columna?
¡Gracias por su apoyo!
Atentamente
mahmud
Intenté usar la columna de índice como columna de valores
Marcel Beug
En respuesta a Mahmud
«Tengo 2 preguntas» seguido de una lista de 5…
De todos modos, si tiene datos mixtos, sugeriría ordenar los datos antes de pivotar.
Ahora el paso de pivote se ve así:
y el código de consulta completo:
let Source = Table1, Indexed = Table.AddIndexColumn(Source, "Index", 0, 1), Splitted = Table.AddColumn(Indexed, "Splitted", each Text.Split([Q], " ")), Expanded = Table.ExpandListColumn(Splitted, "Splitted"), AddedSortColumn = Table.Buffer(Table.AddColumn(Expanded, "SortColumn", each try Number.From([Splitted]) otherwise [Splitted])), Sorted = Table.Sort(AddedSortColumn,{{"SortColumn", Order.Ascending}}), RemovedSortColumn = Table.RemoveColumns(Sorted,{"SortColumn"}), Prefixed = Table.AddColumn(RemovedSortColumn, "Inserted Prefix", each "V" & [Splitted], type text), Pivoted = Table.Pivot(Prefixed, List.Distinct(Prefixed[#"Inserted Prefix"]), "Inserted Prefix", "Splitted"), OriginalSort = Table.Sort(Pivoted,{{"Index", Order.Ascending}}), RemovedIndex = Table.RemoveColumns(OriginalSort,{"Index"}) in RemovedIndex
La solución es dinámica ya que agrega todas las columnas requeridas, también si los datos futuros requieren más o menos columnas.
Entonces, con su último ejemplo agregado, obtuve el siguiente resultado con la columna «Vother» agregada automáticamente:
Bepachec
En respuesta a Marcel Beug
¡Hola! @MarcelBeug
Muchas gracias por tu solución. Tengo una pregunta especial con respecto a este tema. Tengo una columna «Etiquetas» donde cada celda que baja por la columna tiene un largo diccionario de elementos, por así decirlo. Una celda de ejemplo sería: {«Centro de costos»: «0000», «Aplicación»: «PowerBI», «Entorno»: «DEV»}. Sin embargo, cada celda tiene un número diferente de etiquetas (una sin centro de costo, etc.).
Mi objetivo es crear una columna de Centro de costos con todos los valores debajo, una Columna de aplicación con todos los valores debajo, etc.
Si es más simple, tengo una lista de encabezados de etiquetas que estoy buscando específicamente para hacer un número específico de columnas en lugar de revisar cada elemento en cada celda (hay mucho texto no deseado en algunos de estos). Entonces, si hay una manera más fácil de extraer solo los valores que necesito y crear columnas, ¡lo agradecería mucho!
También me gustaría eliminar el «» también.
Mahmud
En respuesta a Marcel Beug
@MarcelBeug ¡Muchas gracias! Lamento escribir. Tengo dos preguntas y luego escribí cinco.
Estaba escribiendo las preguntas, durante eso recordé otro escenario pero olvidé corregir el número de preguntas
Intentaré nuevamente para obtener los mismos resultados. Comprobaré los valores.
Atentamente
mahmud
Marcel Beug
En respuesta a Phil_Seamark
Una solución en Power Query sería:
- agregar una columna de índice,
- dividir la columna Q en una nueva columna,
- expandir esta nueva columna,
- agregue una nueva columna con el prefijo «V»,
- pivote (incluí un tipo exótico (en la parte del número numérico del valor prefijado),
solo porque se puede y porque hoy es sábado), - ordenar de nuevo a la ordenación original
- eliminar la columna de índice
Este video lo lleva a través de todos los pasos:
let Source = Table1, Indexed = Table.AddIndexColumn(Source, "Index", 0, 1), Splitted = Table.AddColumn(Indexed, "Splitted", each Text.Split([Q], " ")), Expanded = Table.ExpandListColumn(Splitted, "Splitted"), Prefixed = Table.AddColumn(Expanded, "Inserted Prefix", each "V" & [Splitted], type text), Pivoted = Table.Pivot(Prefixed, List.Sort(List.Distinct(Prefixed[#"Inserted Prefix"]), (x,y) => Value.Compare(Number.From(Text.Middle(x,1)), Number.From(Text.Middle(y,1)))), "Inserted Prefix", "Splitted"), OriginalSort = Table.Sort(Pivoted,{{"Index", Order.Ascending}}), RemovedIndex = Table.RemoveColumns(OriginalSort,{"Index"}) in RemovedIndex