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
samroth
Employee
Employee

Crear columnas basadas en subcadenas de diferentes tablas

Tengo dos mesas.


La primera es mi mesa principal con un montón de información sobre los artículos. Una de las columnas es una "Ruta de área". El siguiente es un ejemplo inventado con información similar a lo que se puede encontrar en mi tabla real.

Producir-Fruit-Apples

Producir-Fruit-Apples-Fuji

Producir-Fruit-Apples-Gala

Producir-Fruit-Apples-Gala

Produce-Fruit-Apples-Granny Smith

Producir-Fruit-Grapes-Rojo

Producir-Fruit-Grapes-Verde

Produce-Fruit-Pears

Producir-Vegetales-Squash-Zucchini-Verde

Producir-Vegetales-Squash-Zucchini-Amarillo

Producir-Vegetales-Squash-Acorn

Producir-Vegetales-Squash-Butternut

Producir-Vegetales-Brócoli

Producir-Vegetales-Cauliflower

Producir-Vegetales

Produce "Setas"

Mi segunda tabla tiene una columna "Rutas de acceso raíz". Estas son en su mayoría subcadenas más pequeñas de lo que se puede encontrar en "Ruta de área". Todo en esta tabla será único y esta tabla es estática. Estos son ejemplos:

Producir-Fruit-Apples

Producir-Fruit-Apples-Fuji

Producir-Fruit-Grapes

Produce-Fruit

Producir-Vegetales-Squash-Zucchini

Producir-Vegetales-Squash-Acorn

Producir-Vegetales-Squash

Producir-Vegetales-Brócoli

Producir-Vegetales

Producir-Mushroom-Botón

Quiero agregar una columna a la primera tabla con las rutas raíz correspondientes para cada ruta de acceso de área. La ruta de acceso raíz correspondiente va a ser la ruta de acceso raíz más específica que es una subcadena de la ruta de acceso de área. Así, por ejemplo, para la ruta de acceso de área: Producir-Fruit-Apples-Fuji, la ruta de acceso raíz sería Produce-Fruit-Apples-Fuji. Para la ruta de área, produce, frutas, manzanas, gala, sólo sería producen , frutas , manzanas. Si no hay una coincidencia, la ruta de acceso raíz sería null.

Así que para la primera tabla esto es lo que quiero:

Ruta de área

Ruta de la raíz

Producir-Fruit-Apples

Producir-Fruit-Apples

Producir-Fruit-Apples-Fuji

Producir-Fruit-Apples-Fuji

Producir-Fruit-Apples-Gala

Producir-Fruit-Apples

Producir-Fruit-Apples-Gala

Producir-Fruit-Apples

Produce-Fruit-Apples-Granny Smith

Producir-Fruit-Apples

Producir-Fruit-Grapes-Rojo

Producir-Fruit-Grapes

Producir-Fruit-Grapes-Verde

Producir-Fruit-Grapes

Produce-Fruit-Pears

Produce-Fruit

Producir-Vegetales-Squash-Zucchini-Verde

Producir-Vegetales-Squash-Zucchini

Producir-Vegetales-Squash-Zucchini-Amarillo

Producir-Vegetales-Squash-Zucchini

Producir-Vegetales-Squash-Acorn

Producir-Vegetales-Squash-Acorn

Producir-Vegetales-Squash-Butternut

Producir-Vegetales-Squash

Producir-Vegetales-Brócoli

Producir-Vegetales-Brócoli

Producir-Vegetales-Cauliflower

Producir-Vegetales

Producir-Vegetales

Producir-Vegetales

Produce "Setas"

Null

Intenté usar la consulta Merge con Left Outer (todo desde el primer, haciendo coincidir desde el segundo) con coincidencia difusa. No puedo obtener un valor para la coincidencia difusa que me da resultados precisos. O se pierden las coincidencias correctas o coincide falsamente.

También intenté crear una columna personalizada haciendo lo siguiente:

Table.SelectRows('Rutas de acceso de raíz", (T) '> Text.Contains([Area Path], T[Root Path]))

Esto me dio WAY demasiados valores nulos y se perdió tantas coincidencias por una razón que no puedo determinar.

Por favor, avísame lo que debería estar haciendo.

4 REPLIES 4
Ashish_Mathur
Super User
Super User

Hola

Este código M parece funcionar

let
    Source = Table.NestedJoin(Area_path, {"Text"}, Root_path, {"Text"}, "Root_path", JoinKind.LeftOuter),
    #"Expanded Root_path" = Table.ExpandTableColumn(Source, "Root_path", {"Text"}, {"Text.1"}),
    #"Inserted Text Before Delimiter" = Table.AddColumn(#"Expanded Root_path", "Text Before Delimiter", each Text.BeforeDelimiter([Text], "\", {0, RelativePosition.FromEnd}), type text),
    #"Merged Queries" = Table.NestedJoin(#"Inserted Text Before Delimiter", {"Text Before Delimiter"}, Root_path, {"Text"}, "Root_path", JoinKind.LeftOuter),
    #"Expanded Root_path1" = Table.ExpandTableColumn(#"Merged Queries", "Root_path", {"Text"}, {"Text.2"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Root_path1", "Custom", each if [Text.1]=null then [Text.2] else [Text.1]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Text.1", "Text Before Delimiter", "Text.2"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Text", Order.Ascending}})
in
    #"Sorted Rows"

Espero que esto ayude.

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
Greg_Deckler
Super User
Super User

@samroth - Lo hice de esta manera (abajo). PBIX se adjunta debajo de sig.

Column = 
    VAR __Table = 
        ADDCOLUMNS(
            ALL('Table (4)'[Root Path]),
            "Depth",LEN([Root Path]) - LEN(SUBSTITUTE([Root Path],"\","")),
            "Match",FIND([Root Path],[Area Path],,0)
        )
    VAR __BestDepth = MAXX(FILTER(__Table,[Match]>0),[Depth])
RETURN
    MAXX(FILTER(__Table,[Match]>0 && [Depth] = __BestDepth),[Root Path])


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Gracias Greg, ¿dónde se supone que debo poner este código para ejecutar en el pbix?

Hola , @samroth

Como se muestra en el archivo adjunto proporcionado por @Greg_Deckler , sólo tiene que crear una columna calculada.

50.png

Saludos
Equipo de soporte de la comunidad _ Eason
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

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.