Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
Tengo una tabla donde los valores se almacenan en columnas con el prefijo "SEARCH_" (el número y el nombre de las columnas pueden cambiar) y quiero agregar una columna concatenada "FOUND". Los valores nulos deben ignorarse.
Tema | Resumen | SEARCH_A | SEARCH_my_value | SEARCH_text | FUNDAR |
A | Un rápido marrón... | nulo | nulo | nulo | nulo |
B | Un rápido marrón... | nulo | F1234 | ABECEDARIO | F1234, ABC |
C | Un rápido marrón... | A | nulo | nulo | A |
D | Un rápido marrón... | nulo | F3465 | nulo | F3465 |
¿Cuál es el código M de Power Query adecuado para resolver este problema?
Ya pensé en algo como esto, pero tuve problemas para descubrir cómo definir el tipo de columnas dinámicas.
"Added Custom" = Table.AddColumn(#"Previous Step", "FOUND", each Text.Combine(
List.Select( Record.FieldValues( Record.FromList(
List.Select(Table.ColumnNames(fileBinary as table) as list, each Text.Contains(_, "SEARCH_")) as list, type text)), each _<> "" and _ <> null)
,", "))
Gracias
Moritz
Si pudiera contar cuántas columnas tienen el prefijo "SEARCH_" y asegurarse de que estén ordenadas antes de las columnas que tienen el prefijo "SEARCH_", le sugiero que use el método de @CNENFRNL simplemente cambie el número en la función List.Skip, como se muestra a continuación. Creo que es el más eficiente.
De lo contrario, puede seguir mi solución alternativa, que puede ser un poco compleja.
1. Agregar una columna Índice a la tabla original
2. Duplicar la tabla original para agregar una nueva tabla --> la columna Seleccionar índice, despivot otras columnas
3. Filtre todas las filas cuando la columna Atributo contenga "SEARCH_" y Valor <> "null", luego solo quedan las columnas Índice y Valor
4.Agrupar valores por columna índice y luego renombrado "ENCONTRADO":
Aquí está toda la sintaxis M de la nueva tabla:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUXJUKCzNTM5WSCrKL8/T09MDChkY6gGRkYGREZCTV5qTg0bF6kQrORGv1c3QyNgEpNzJGazVmQitjlisdCHBSmMTM1O43lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Topic = _t, Summary = _t, Date = _t, SEARCH_A = _t, SEARCH_my_value = _t, SEARCH_text = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Topic", type text}, {"Summary", type text}, {"Date", type date}, {"SEARCH_A", type text}, {"SEARCH_my_value", type text}, {"SEARCH_text", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1, Int64.Type),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
#"Added Custom1" = Table.AddColumn(#"Unpivoted Other Columns", "Custom", each Text.Contains([Attribute],"SEARCH") and [Value]<>"null"),
#"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Custom] = true)),
#"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Custom","Attribute"}),
#"Grouped Rows" = Table.Group(#"Removed Columns1", {"Index"}, {{"Count", each Text.Combine([Value] , ","), type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Grouped Rows",{{"Count", "FOUND"}})
in
#"Renamed Columns"
5. De vuelta a la tabla original, Combinar consultas --> Expandir columnas:
Resultado final:
Saludos
Eyelyn Qin
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUXJUKCzNTM5WSCrKL8/T09MDCkFRrE60khNOFW6GRsYmIFknZ7BKZ+wqHZEMc8FtmLGJmSlYWSwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Topic = _t, Summary = _t, SEARCH_A = _t, SEARCH_my_value = _t, SEARCH_text = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Topic", type text}, {"Summary", type text}, {"SEARCH_A", type text}, {"SEARCH_my_value", type text}, {"SEARCH_text", type text}}),
#"Combined Text" = Table.AddColumn(#"Changed Type", "FOUND", each Text.Combine(List.Select(List.Skip(Record.ToList(_),2), each Text.Length(_)>0), ", "))
in
#"Combined Text"
En ella @CNENFRNL,
Esto no pudo resolver mi problema, porque puede haber más de dos columnas descriptivas. Para obtener más información, consulte mi respuesta a @speedramps.
Gracias
Moritz
No desapruebo lo que quieres, pero me gustaría ayudarte 😀
Proporcione un ejemplo de sus datos de entrada
y un ejemplo de los datos de salida deseados
con una descipción muy clara de lo que necesitas.
Por favor, proporciónelos en formato de tabla que podamos importar para construir una solución. No envíe capturas de pantalla.
Ocultar cualquier dato privado.
¡Gracias!
En ella @speedramps,
perdón por no ser muy preciso al escribir mi pregunta.
Los datos de entrada serían algo como esto:
Tema | Resumen | Fecha | SEARCH_A | SEARCH_my_value | SEARCH_text |
A | Un rápido marrón... | 01.01.2022 | nulo | nulo | nulo |
B | Un rápido marrón... | 01.01.2022 | nulo | F1234 | ABECEDARIO |
C | Un rápido marrón... | 01.01.2022 | A | nulo | nulo |
D | Un rápido marrón... | 01.01.2022 | nulo | F3465 | nulo |
Tenga en cuenta: El número, el nombre de la columna y el tipo de columnas descriptivas (sin el prefijo "SEARCH_") pueden variar y el número y el nombre de las columnas de búsqueda (con el prefijo "SEARCH_") también pueden variar, pero siempre son texto de tipo.
Los datos de salida deseados serían una nueva columna "FOUND", que debería contener la lista concatenada y espaciada por comas de todas las columnas de búsqueda disponibles (se debe ignorar null):
Tema | Resumen | Fecha | SEARCH_A | SEARCH_my_value | SEARCH_text | FUNDAR |
A | Un rápido marrón... | 01.01.2022 | nulo | nulo | nulo | nulo |
B | Un rápido marrón... | 01.01.2022 | nulo | F1234 | ABECEDARIO | F1234, ABC |
C | Un rápido marrón... | 01.01.2022 | A | nulo | nulo | A |
D | Un rápido marrón... | 01.01.2022 | nulo | F3465 | nulo | F3465 |
Gracias por su ayuda, no dude en preguntar si algo no está claro.
Moritz
Hola @speedramps
No podría estar más de acuerdo.
Hola @MS_pBiAtRB ,
¿Podría por favor explicar su problema? Como qué columnas tienen que ser concatenadas y en base a qué condiciones.
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.