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

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. 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
Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

February 2024 Update Carousel

Power BI Monthly Update - February 2024

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

Fabric Career Hub

Microsoft Fabric Career Hub

Explore career paths and learn resources in Fabric.

Fabric Partner Community

Microsoft Fabric Partner Community

Engage with the Fabric engineering team, hear of product updates, business opportunities, and resources in the Fabric Partner Community.

Top Solution Authors
Top Kudoed Authors