Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!Calling all Data Engineers! Fabric Data Engineer (Exam DP-700) live sessions are back! Starting October 16th. Sign up.
Tengo una tabla con dos columnas que definen los elementos principales y secundarios de un producto.
Quiero construir una tabla que contenga TODOS los elementos hasta la capa más baja por elemento principal, o una columna en la tabla existente que calcule a qué "capa" en la jerarquía del elemento principal pertenece.
El problema es que no siempre es una relación 1:1, lo que significa que un subelemento puede formar parte de más de un elemento principal, o que un elemento principal puede tener varios subelementos.
Intenté el cálculo de columnas con PATHITEM y PATH, pero eso me da un error debido a dichos resultados múltiples.
¿Alguna idea?
Hola @zahlenschubser
¿Ha probado esta técnica en el Editor de consultas?
https://www.excelnaccess.com/replicating-path-function-of-dax-in-power-query-m/
Pareció funcionar cuando lo probé.
¡Parece una buena dirección!
Aunque enumera la jerarquía completa en la entrada más baja, ¿no es la más alta?
Supongo que podría contar el | en eso y usar eso como un contador de jerarquía?
Además, mi "objetivo final" para esto era sumar los costos totales de cada elemento de capa de los elementos que se encuentran debajo.
Hola @zahlenschubser
Pido disculpas, no vi la parte de pedir el código M
dejar
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kyJz03MzFPSAbGKS5OUYnWilUyNgHxTAzDbxMQcyDExQeYZmxhDeOamIIVGEI6FGUghUAjBMzeDmmcENsMcmWeBLGdoCDQxFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"(blank)" = _t, #"(blank).1" = _t]),
#"Encabezados promocionados" = Table.PromoteHeaders(Fuente, [PromoteAllScalars=true]),
#"Tipo cambiado1" = Table.TransformColumnTypes(#"Encabezados promocionados",{{"Id_main", Int64.Type}, {"Id_sub", Int64.Type}}),
#"Columnas renombradas" = Table.RenameColumns(#"Tipo cambiado1",{{"Id_sub", "Cuenta secundaria"}, {"Id_main", "Cuenta principal"}}),
#"ChangedType" = Table.TransformColumnTypes(#"Columnas renombradas",{{"Cuenta principal", escriba texto}, {"Cuenta secundaria", escriba texto}})
,
myfunction=(ChildCol,ParentCol,CurrentParent)=>
dejar
mylist=Tabla.Columna(Tabla.SelectRows(TipoCambiado,cada Registro.Campo(_,ChildCol)=PadreActual),ParentCol),
resultado=Texto.Combinar(milista)
en
Texto.TrimEnd(
if resultado ="" then "" else @ resultado & "|" & @ mifunción(ChildCol,ParentCol,resultado),
"|"),
Ruta=Tabla.AgregarColumna(ChangedType,
"Camino", cada uno
Texto.Recortar(
Texto.Combinar(
Lista.Reverse(
List.RemoveItems(
Text.Split(myfunction("Cuenta Infantil","Cuenta Principal",[Cuenta Principal]),"|"),{""}
)
)
&{[Cuenta principal],[Cuenta infantil]}
,
"|"),"|"))
en
Camino
Lo implementé en mi código, pero no se comporta como se esperaba:
myfunction=(ChildCol,ParentCol,CurrentParent)=>
dejar
mylist=Table.Column(Table.SelectRows(#"Columnas Eliminadas",each Record.Field(_,ChildCol)=CurrentParent),ParentCol),
resultado=Texto.Combinar(milista)
en
Texto.TrimEnd(
if resultado ="" then "" else @ resultado & "|" & @ mifunción(ChildCol,ParentCol,resultado),
"|"),
path=Table.AddColumn(#"Columnas eliminadas",
"Camino", cada uno
Texto.Recortar(
Texto.Combinar(
Lista.Reverse(
List.RemoveItems(
Text.Split(myfunction("Id_sub","Id_main",[Id_main]),"|"),{"|"}
)
)
&{[Id_main],[Id_sub]}
,
"|"),"|")),
Ejemplo de la tabla completa donde no funciona correctamente:
Id_main | Id_sub | Camino |
52 | 50 | 25475504500512|52|50 |
500 | 52 | 501502503572574|500|52 |
512 | 52 | 512|52 |
512 | 462 | 512|462 |
Hola @zahlenschubser
¿Los datos se ven así? ¿O los elementos de la columna Sub también aparecen como proyectos principales:
Los elementos pueden aparecer tanto en la columna principal como en la subcolumna, lamentablemente, de lo contrario sería más fácil. Y a veces hay hasta 3 o 4 "profundidades". Y los artículos pueden ser parte de más de un artículo "superior".
La capa más alta solo se mostrará en la principal, la capa más baja solo en la secundaria.
Muestra:
Id_main | Id_sub |
52 | 50 |
447 | 440 |
447 | 343 |
475 | 52 |
486 | 475 |
486 | 76 |
522 | 447 |
522 | 486 |
522 | 113 |
Join the Fabric FabCon Global Hackathon—running virtually through Nov 3. Open to all skill levels. $10,000 in prizes!
Check out the October 2025 Power BI update to learn about new features.