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
iamprajot
Responsive Resident
Responsive Resident

M experts - Busque una lista de valores en cada celda de una columna y devuelva un valor determinado.

M expertos por favor ayudan aquí! @ImkeF, @Greg_Deckler

Tengo una columna de Materiales de Papel (abajo) que contiene Peso del Material.

para, por ejemplo, "kreda mat250gsm" está teniendo "250gsm" como peso del material. El orden/secuencia de estas 2 cosas en una celda no es fija.

Id. de trabajoMateriales
1Cable M.S de 2,95 y 2,64 mm
2PVC de 3 mm
8135 grs hv seda mc
10papel 120 g/m2
12PS 2mm
14mat de tiza250gsm
14Material: Papel sin madera FSC de 70gsm
16115gsm de seda
17papel recubierto mate 250GSM
18mat kuse135gr
2380 gsm Ozono fsc crédito mixto
24Cartulina gráfica 400 gr
25Apagón de vinilo blanco 0,10 mm
29SINTRA 3mm
310.6mm Brillo Vinilo Recubierto Magnético
34200 gr/sqm impresión de imagen mate

Luego creé una LISTA de valores (abajo) que necesitan ser buscados en esa columna Material y en base a esto pude extraer el Peso Material. Creé esta LISTA para que se pudiera expandir en función de más valores coincidentes.

Búsqueda
mil
Mm
Gsm
Gr

Ahora con estas 2 cosas (1 tabla y 1 lista), quiero crear una función que tome esta LISTA como entrada y busque los valores de esta LISTA en cada celda de la columna Material y devuelva el peso exacto del material como se muestra a continuación.

Id. de trabajoMaterialesResultado
1Cable M.S de 2,95 y 2,64 mm2,64 mm
2PVC de 3 mm3 mm
8135 grs hv seda mc135 gr
10papel 120 g/m2120 g/m2
12PS 2mm2 mm
14mat de tiza250gsm250 g/m2
14Material: Papel sin madera FSC de 70gsm70 g/m2
16115gsm de seda115gsm
17papel recubierto mate 250GSM250 g/m2
18mat kuse135gr135 gr
2380 gsm Ozono fsc crédito mixto80 g/m2
24Cartulina gráfica 400 gr400 gr
25Apagón de vinilo blanco 0,10 mm0,10 mm
29SINTRA 3mm3 mm
310.6mm Brillo Vinilo Recubierto Magnético0,6 mm
34200 gr/sqm impresión de imagen mate200 gr

1 ACCEPTED SOLUTION
ImkeF
Super User
Super User

Hola @iamprajot

pegue el siguiente código en el editor avanzado y siga los pasos:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PZHNUoMwFIVf5QzrDkIo/XGnzNhxgXbE6abTRRoCZkigBrDq2/gsvpg3hHF5z/1ycnJyPAZxsAhYuE3B2xIsXC1hDPKwwFVZGZwWx4ARkZC4P2TTvKE5TlLUtsfbB3qlGxgxreKIdhd+kRYxi1D3xsvOYl+AmXle0txYWXIYPrA0+gfdIueDtIrrW6zdAg9FhmvXlZWVEpO5Z1cuR5w6pKAMXlyTSJ6DhOjIp/QHQHfsitwjG4+gGXtJ76i9HUtI3kyZ8fzdtRJVL2DUJ3kIiqoGj7mEGbfDqFXLqYPfn0oJjmVER2enlJCDapXG2fJWdDhrLppuHBCFcYS5BLYlrHh8en25QzJrifuNKFxR2zvd9T3I5ksj80/Jed3KQfmqExeETbfevBvcK11KW9pRNK5TCnv6Aw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Job Id" = _t, Materials = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Job Id", Int64.Type}, {"Materials", type text}}),
    #"Search Terms" = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wys3MUYrVAdK5YCq9GEoXKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Search = _t]),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each #"Search Terms"),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Search"}, {"Search"}),
    #"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Position", each Text.PositionOf(Text.Lower([Materials]),Text.Lower([Search]))),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Position] <> -1)),
    #"Added Custom2" = Table.AddColumn(#"Filtered Rows", "Number", each Text.Range([Materials],0,[Position])),
    #"Trimmed Text" = Table.TransformColumns(#"Added Custom2",{{"Number", Text.Trim, type text}}),
    #"Extracted Text After Delimiter" = Table.TransformColumns(#"Trimmed Text", {{"Number", each Text.AfterDelimiter(_, " ", {0, RelativePosition.FromEnd}), type text}}),
    #"Trimmed Text1" = Table.TransformColumns(#"Extracted Text After Delimiter",{{"Number", each Text.Select(_, {"0".."9", ",", "."}), type text}}),
    #"Merged Columns" = Table.CombineColumns(#"Trimmed Text1",{"Number", "Search"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Merged")
in
    #"Merged Columns"

Verás que #24 es un problema. Si se te ocurrir una regla que funcione, avísame.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

M expertos por favor ayudar aquí! @ImkeF , @Greg_Deckler

Tengo una columna de Materiales de papel (abajo) que contiene peso material.

por ejemplo, "kreda mat250gsm" es tener "250gsm" como peso material. El orden/secuencia de estas 2 cosas en una celda no es fijo.

Id. de trabajomateriales
1Alambre M.S de 2,95 y 2,64 mm
2PVC de 3 mm
8135 grs hv seda mc
10papel 120 gsm
12PS 2 mm
14estera de tiza250gsm
14Material: 70gsm PAPEL SIN MADERA FSC
16Seda de 115gsm
17papel recubierto mate 250GSM
18alimentos kuse135gr
2380 gsm Ozono fsc crédito mixto
24Cartulina gráfica 400 gr
25Apagón de vinilo blanco 0,10 mm
29SINTRA 3 mm
310.6mm Vinilo brillante recubierto magnético
34Impresión de imagen de 200 gr/m² mate

Luego creé una LISTA de valores (a continuación) que deben buscarse en esa columna Material y, en base a esto, pude extraer el Peso material. Creé esta LISTA para que pudiera expandirse en función de más valores coincidentes.

buscar
mil
milímetro
gsm
Gr

Ahora con estas 2 cosas (1 tabla y 1 lista), quiero crear una función que tome esta LISTA como entrada y buscar los valores de esta LISTA en cada celda de la columna Material y devolver el peso exacto del material como se indica a continuación.

Id. de trabajomaterialesresultado
1Alambre M.S de 2,95 y 2,64 mm2,64 mm
2PVC de 3 mm3 milímetros
8135 grs hv seda mc135 gr
10papel 120 gsm120 gsm
12PS 2 mm2 milímetros
14estera de tiza250gsm250 gsm
14Material: 70gsm PAPEL SIN MADERA FSC70 gsm
16Seda de 115gsm115gsm
17papel recubierto mate 250GSM250 gsm
18alimentos kuse135gr135 gr
2380 gsm Ozono fsc crédito mixto80 gsm
24Cartulina gráfica 400 gr400 gr
25Apagón de vinilo blanco 0,10 mm0,10 mm
29SINTRA 3 mm3 milímetros
310.6mm Vinilo brillante recubierto magnético0,6 mm
34Impresión de imagen de 200 gr/m² mate200 gr

ImkeF
Super User
Super User

Hola @iamprajot

pegue el siguiente código en el editor avanzado y siga los pasos:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PZHNUoMwFIVf5QzrDkIo/XGnzNhxgXbE6abTRRoCZkigBrDq2/gsvpg3hHF5z/1ycnJyPAZxsAhYuE3B2xIsXC1hDPKwwFVZGZwWx4ARkZC4P2TTvKE5TlLUtsfbB3qlGxgxreKIdhd+kRYxi1D3xsvOYl+AmXle0txYWXIYPrA0+gfdIueDtIrrW6zdAg9FhmvXlZWVEpO5Z1cuR5w6pKAMXlyTSJ6DhOjIp/QHQHfsitwjG4+gGXtJ76i9HUtI3kyZ8fzdtRJVL2DUJ3kIiqoGj7mEGbfDqFXLqYPfn0oJjmVER2enlJCDapXG2fJWdDhrLppuHBCFcYS5BLYlrHh8en25QzJrifuNKFxR2zvd9T3I5ksj80/Jed3KQfmqExeETbfevBvcK11KW9pRNK5TCnv6Aw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Job Id" = _t, Materials = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Job Id", Int64.Type}, {"Materials", type text}}),
    #"Search Terms" = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wys3MUYrVAdK5YCq9GEoXKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Search = _t]),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each #"Search Terms"),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Search"}, {"Search"}),
    #"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Position", each Text.PositionOf(Text.Lower([Materials]),Text.Lower([Search]))),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Position] <> -1)),
    #"Added Custom2" = Table.AddColumn(#"Filtered Rows", "Number", each Text.Range([Materials],0,[Position])),
    #"Trimmed Text" = Table.TransformColumns(#"Added Custom2",{{"Number", Text.Trim, type text}}),
    #"Extracted Text After Delimiter" = Table.TransformColumns(#"Trimmed Text", {{"Number", each Text.AfterDelimiter(_, " ", {0, RelativePosition.FromEnd}), type text}}),
    #"Trimmed Text1" = Table.TransformColumns(#"Extracted Text After Delimiter",{{"Number", each Text.Select(_, {"0".."9", ",", "."}), type text}}),
    #"Merged Columns" = Table.CombineColumns(#"Trimmed Text1",{"Number", "Search"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Merged")
in
    #"Merged Columns"

Verás que #24 es un problema. Si se te ocurrir una regla que funcione, avísame.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

iamprajot
Responsive Resident
Responsive Resident

Muchas @ImkeF.

Mi decisión de buscar tu ayuda fue correcta. Está funcionando, ahora puedo usar esta lógica para modificar y extraer aún más la información requerida.

Pensé que List.Transform y List.Accumulate se usarán aquí y no sé cómo usarlos.

Si eso no es demasiado, entonces lo único que necesito de usted es si usted podría decirme cómo puedo convertir esto a una función ya que estoy usando una lista de valores y no hay ningún parámetro utilizado en esto para convertir esto en una función.

Me alegro de saber que esto ayudó.

Creo que debe haber algunos tutoriales sobre la conversión de la función en el www mientras tanto.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

Para el elemento 24 donde la aparición de la cadena de búsqueda podría ser múltiple.
Arreglaré esto y te lo haré saber.
Estoy pensando en dos maneras, compruebo si el 0..9 está devolviendo cualquier número de no y en caso de que no hay ningún valor entonces voy a quitar / reemplazar la "gr" de Material y repetir los pasos de nuevo para buscar la siguiente "gr". Es por eso que necesito una función que pueda repetir una y otra vez hasta que obtenga el número.

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.