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
kormosb
Helper III
Helper III

Crear columnas de jerarquía a partir de una columna

Hola

Me gustaría crear una jerarquía a partir de la tabla siguiente en Power BI para poder usarla en un objeto visual de matriz:

Jerarquía20172018
1. Cuenta corriente, neto (1.1.+1.2.+1.3.)2 937-21
1.1. Bienes y servicios, netos9 1536 000
1.1.1. Mercancías,1 909-1 688
1.1.1.A Exportación85 55588 659
1.1.1.B Importación83 64690 346
1.1.2. Servicios, netos7 2447 687
1.1.2.A Exportación23 86225 359
1.1.2.B Importación16 61817 671
1.2. Ingresos primarios, netos-5 066-5 195
1.2.1. Compensación de los empleados,2 6242 322
1.2.2. Ingresos de inversión, netos-8 911-8 716
1.2.2.1. Ingresos directos de inversión, netos-7 392-7 402
1.2.2.2. Ingresos de inversión en cartera, netos-1 469-1 315
1.2.2.3. Otros ingresos de inversión, netos-238-192
1.2.2.4. Activos de reserva, netos187192
1.2.3. Otros ingresos primarios, netos1 2211 200
1.2.3.1. de los cuales: transferencias de la UE1 2211 200
1.3. Ingresos secundarios, netos-1 151-826
1.3.1. de los cuales: transferencias de la UE103487
2. Cuenta de capital, neta1 0752 996
2.1. de los cuales: transferencias de la UE1 3532 188
3. Cuenta financiera (activos netos) (3.1+3.2+3.3+3.4+3.5)1 8801 168
3.1. Inversión directa (activos netos)-2 044-2 781
3.1.1. En el extranjero (activos netos)1 0794 267
3.1.1.1. Patrimonio (activos netos)2154 819
3.1.1.1.1. Capital distinto de la reinversión de beneficios (activos netos)-8554 015
3.1.1.1.2. Reinversión de los beneficios (activos netos)1 070804
3.1.1.2. Instrumentos de deuda (activos netos)864-552
3.1.1.2.1. Activos867144
3.1.1.2.2. Pasivos4696
3.1.2 En Hungría (pasivos netos)3 1237 048
3.1.2.1. Patrimonio (pasivos netos)8 4586 487
3.1.2.1.1. Capital distinto de la reinversión de beneficios (pasivos netos)2 320845
3.1.2.1.2. Reinversión de beneficios (pasivos netos)6 1375 641
3.1.2.2. Instrumentos de deuda (pasivos netos)-5 335561
3.1.2.2.1. Activos3 9271 078
3.1.2.2.2. Liabilies-1 4081 639
3.2. Inversión en cartera (activos netos)3 774-185
3.2.k Activos1 916-140
3.2.t Pasivos-1 85744
3.3. Derivados financieros (distintos de las reservas), activos netos-1 050-933
3.3.k Activos-4 616-4 432
3.3.t Pasivos-3 567-3 499
3.4. Otras inversiones (activos netos)1 1721 469
3.4.k Activos1 7532 437
3.4.t Pasivos580969
3.5. Activos de reserva283 598

Creo que tengo que dividir las jerarquías en diferentes columnas, así que tengo lo siguiente:

Primera jerarquíaSegunda jerarquíaTercera jerarquíaCuarta jerarquía
1. Cuenta corriente, neta1.1. Bienes y servicios, netos1.1.1. Mercancías,1.1.1.A Exportación
1. Cuenta corriente, neta1.1. Bienes y servicios, netos1.1.1. Mercancías,1.1.1.B Importación
1. Cuenta corriente, neta1.1. Bienes y servicios, netos1.1.2. Servicios, netos1.1.2.A Exportación
1. Cuenta corriente, neta1.1. Bienes y servicios, netos1.1.2. Servicios, netos1.1.2.B Importación
............

Me pregunto si puedo hacerlo en Power BI con DAX o debería hacer algo en Power Query/Excel?

Gracias por adelantado,

Benjamin

5 REPLIES 5

Hola

Gracias por los consejos. Creo que necesito resolverlo con la jerarquía padre-hijo con las funciones PATH y PATHITEM, ¿puede ayudar con esto?

Enlace al archivo PBI.

Ben

Hola @kormosb ,

Perdón por responder tarde. Debe tener en cuenta que las funciones PATH() y PATHITEM() necesitan dos columnas differend como parámetros. En el archivo de ejemplo, solo tiene una sola columna que necesita una jerarquía, por lo que estas funciones no son adecuadas.

He creado una columna de índice para marcar cada jerarquía de 0 a 5:

Index = 
IF (
    CONTAINSSTRING ( LEFT ( 'Table'[Hierarchy], 1 ), "M" ),
    0,
    IF (
        CONTAINSSTRING ( LEFT ( 'Table'[Hierarchy], 3 ), " " ),
        1,
        IF (
            CONTAINSSTRING ( LEFT ( 'Table'[Hierarchy], 5 ), " " ),
            2,
            IF (
                CONTAINSSTRING ( LEFT ( 'Table'[Hierarchy], 7 ), " " ),
                3,
                IF ( CONTAINSSTRING ( LEFT ( 'Table'[Hierarchy], 9 ), " " ), 4, 5 )
            )
        )
    )
)

A continuación, se creó la columna de cuatro jerarquías utilizando las funciones containstring() y la izquierda con la columna de índice para buscar cadenas en la columna. Bajo esta lógica, si la fila solo tiene tres o menos jerarquías, mostrará la jerarquía anterior en la siguiente columna de jerarquía:

First hierarchy = 
IF(
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1"),
    "1. Current account,net",
    IF(
        CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"2"),
        "2. Capital account, net",
        IF(
            CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3"),
            "3. Financial account (net assets)",
            "Memo item"
        )
    )
)
Second hierarchy = 
SWITCH(
    TRUE(),
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "1. Current account, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"1.1"), "1.1 Goods and Services, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.2"), "1.2 Primary income, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.3"), "1.3 Secondary income, net",
    //end of 1

    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"2") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "2. Captital account, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"2") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"2.1"), "2.1 of which: EU transfers",
    //end of 2
    
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "3. Financial account (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.1"), "3.1 Direct investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.2"), "3.2 Portfolio investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.3"), "3.3 Financial derivatives (other than reserves) investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.4"), "3.4 Other investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.5"), "3.5 Reserve assets",
    //end of 3

    "Memo item"
)
Third hierarchy = 
SWITCH(
    TRUE(),
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "1. Current account, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.1") && [Index] = 2, "1.1 Goods and Services, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.1.1"), "1.1.1 Goods, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.1.2"), "1.1.2 Services, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.2") && [Index] = 2, "1.2 Primary income, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.2.1"), "1.2.1 Compensation of employees, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.2.2"), "1.2.2 Investment income, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.2.3"), "1.2.3 Other primary income, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.3") && [Index] = 2, "1.3 Secondary income, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.3.1"), "1.3.1 of which:EU transfers",
    //end of 1


    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"2") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "2. Captital account, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"2.1") && [Index] = 2, "2.1 of which:EU transfers",
    //end of 2


    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "3. Financial account (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.1") && [Index] = 2, "3.1 Direct investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.1.1"), "3.1.1 Abroad (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.1.2"), "3.1.2 In Hungary (net liabilities)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.2") && [Index] = 2, "3.2 Portfolio investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.2.k"), "3.2.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.2.t"), "3.2.t Liabilities",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.3") && [Index] = 2, "3.3 Financial derivatives (other than reserves) investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.3.k"), "3.3.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.3.t"), "3.3.t Liabilities",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.4") && [Index] = 2, "3.4 Other investment (net assets)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.4.k"), "3.4.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.4.t"), "3.4.t Liabilities",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.5") && [Index] = 2, "3.5 Reserve assets",
    //end of 3

    "Memo item"
)
Cuarta jerarquía ? 
SWITCH(
    TRUE(),
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && [Index] á 1, "1. Cuenta corriente, neta",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.1") && [Index] á 2, "1.1 Bienes y Servicios, neto",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"1.1.1") && [Index] á 3, "1.1.1 Goods, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.1.1.A"), "1.1.1.A Export",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.1.1.B"), "1.1.1.B Import",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"1.1.2") && [Index] á 3, "1.1.2 Services, net",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.1.2.A"), "1.1.2.A Export",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.1.2.B"), "1.1.2.B Import",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.2") && [Index] á 2, "1.2 Ingreso primario, neto",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"1.2.1") && [Index] á 3, "1.2.1 Compensación de empleados, neto",
    CONTAINSSTRING(LEFT('Table'[Jerarquía],5),"1.2.2") && [Index] á 3, "1.2.2 Ingresos de inversión, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.2.2.1"), "1.2.2.1 Ingresos directos de inversión, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.2.2.2"), "1.2.2.2 Ingresos de inversión en cartera, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.2.2.3"), "1.2.2.3 Otros ingresos de inversión, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.2.2.4"), "1.2.2.4 Activos de reserva, neto",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"1.2.3") && [Index] á 3, "1.2.3 Otros ingresos primarios, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"1.2.3.1"), "1.2.3.1. de los cuales: transferencias de la UE",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"1.3") && [Index] á 2, "1.3 Ingresos secundarios, netos",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"1") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"1.3.1"), "1.3.1 de los cuales:TRANSFERENCIAs de la UE",
    finales de 1

CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"2") && CONTAINSSTRING(LEFT('Table'[Hierarchy],3)," "), "2. Cuenta captital, neta",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"2.1") && [Index] á 2, "2.1 de los cuales:Transferencias de la UE",
    finales de 2

CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && [Index] á 1, "3. Cuenta financiera (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.1") && [Index] á 2, "3.1 Inversión directa (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.1.1") && [Index] á 3, "3.1.1 En el extranjero (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],5),"3.1.2") && [Index] á 3, "3.1.2 En Hungría (pasivos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"3.1.1.1"), "3.1.1.1. Patrimonio (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"3.1.1.2"), "3.1.1.2. Instrumentos de deuda (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"3.1.2.1"), "3.1.2.1. Patrimonio (pasivos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],9),"3.1.2.2"), "3.1.2.2. Instrumentos de deuda (pasivos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.2") && [Index] á 2, "3.2 Inversión en cartera (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.2.k"), "3.2.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.2.t"), "3.2.t Liabilities",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.3") && [Index] á 2, "3.3 Inversión en derivados financieros (excepto reservas) (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.3.k"), "3.3.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.3.t"), "3.3.t Liabilities",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.4") && [Index] á 2, "3.4 Otras inversiones (activos netos)",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.4.k"), "3.4.k Assets",
    CONTAINSSTRING(LEFT('Table'[Hierarchy],1),"3") && CONTAINSSTRING(LEFT('Table'[Hierarchy],7),"3.4.t"), "3.4.t Liabilities",CONTAINSSTRING(LEFT('Table'[Hierarchy],3),"3.5") && [Index] á 2, "3.5 Activos de reserva",
    finales de 3

"Memo item"
)

El resultado final será así:

hierarchy columns.png

Adjunto mi relleno de muestra que espera ayudarle: crear columnas de jerarquía a partir de una columna.pbix

Best Looks,
Yingjie Li

Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola

gracias por la solución. Generalmente funciona bien, aunque cuando quiero ponerlos en una matriz con los números no se agrega correctamente, incluso si elimino la agregación de los subtotales. (Básicamente es una declaración p'n'l)

Gracias por los enlaces, aunque me temo que no puedo usarlos.

Necesito crear nuevas columnas a partir de una columna como mostré en mi mensaje.

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.