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

Get 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

Reply
Syndicate_Admin
Administrator
Administrator

Concatenar columnas específicas con prefijo sin null

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.

TemaResumenSEARCH_ASEARCH_my_valueSEARCH_textFUNDAR
AUn rápido marrón...nulonulonulonulo
BUn rápido marrón...nuloF1234ABECEDARIOF1234, ABC
CUn rápido marrón...AnulonuloA
DUn rápido marrón...nuloF3465nuloF3465

¿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

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

@MS_pBiAtRB ,

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.

Eyelyn9_0-1652425340173.png

De lo contrario, puede seguir mi solución alternativa, que puede ser un poco compleja.

1. Agregar una columna Índice a la tabla original

Eyelyn9_1-1652425684433.png

2. Duplicar la tabla original para agregar una nueva tabla --> la columna Seleccionar índice, despivot otras columnas

Eyelyn9_2-1652425856307.png

3. Filtre todas las filas cuando la columna Atributo contenga "SEARCH_" y Valor <> "null", luego solo quedan las columnas Índice y Valor

Eyelyn9_3-1652426258637.png

4.Agrupar valores por columna índice y luego renombrado "ENCONTRADO":

Eyelyn9_5-1652426389733.png

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:

Eyelyn9_9-1652426836966.png

Resultado final:

Eyelyn9_8-1652426802614.png

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.

Syndicate_Admin
Administrator
Administrator

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"

CNENFRNL_0-1652234087747.png

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

Syndicate_Admin
Administrator
Administrator

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:

TemaResumenFechaSEARCH_ASEARCH_my_valueSEARCH_text
AUn rápido marrón...01.01.2022nulonulonulo
BUn rápido marrón...01.01.2022nuloF1234ABECEDARIO
CUn rápido marrón...01.01.2022Anulonulo
DUn rápido marrón...01.01.2022nuloF3465nulo

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

TemaResumenFechaSEARCH_ASEARCH_my_valueSEARCH_textFUNDAR
AUn rápido marrón...01.01.2022nulonulonulonulo
BUn rápido marrón...01.01.2022nuloF1234ABECEDARIOF1234, ABC
CUn rápido marrón...01.01.2022AnulonuloA
DUn rápido marrón...01.01.2022nuloF3465nuloF3465

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.

Helpful resources

Announcements
November Carousel

Fabric Community Update - November 2024

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

Live Sessions with Fabric DB

Be one of the first to start using Fabric Databases

Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.

Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.

Nov PBI Update Carousel

Power BI Monthly Update - November 2024

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

Top Solution Authors