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.
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.
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.
@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])
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.
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.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |