Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago
Solved

Calcular % diff en una matriz

Hola a todos,

Necesita ayuda con alguna tabla (visual de matriz)

ahora tengo esto visual:

P1P2P3P4
Valor2163

Estoy tratando de añadir una fila para que el objeto visual se vea así:

P1P2P3P4
Valor2163
Cambio en %-50%

Por ejemplo P1 : (1-2)/2= -50%

los datos se toman de este, mientras que en visual estoy haciendo SUM en cada período y hay una segmentación por grupo y nombre

GrupoNombreP1P2P3P4
aAbc10.5
aFd10.5

¡Muchas gracias!

  • @Linoy18 , En potencia bi; a partir de, no tenemos las operaciones de fila o columna. Así que tienes que crear un diff .

    Cree una tabla de períodos o una tabla de período de año separada

    Tener una columna como esta en esa tabla período

    Rango de período = RANKX(all('Period'),'Period'[período del año],,ASC,Dense)

    Calcular medidas como estas y tomar diff
    Este período = CALCULATE(sum('order'[Qty]), FILTER(ALL('Period'),'Period'[Period Rank]=max('Period'[Period Rank])))
    Último período = CALCULATE(sum('order'[Qty]), FILTER(ALL('Period'),'Period'[Period Rank]=max('Period'[Period Rank])-1))

  • No @Linoy18,

    Puede transformar la tabla desoyendo , agregando una columna Nivel por columna Atributo...

    La tabla transformada tiene este aspecto:

    3.11.4.matrix.PNG

    Aquí está toda la sintaxis M:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUUpMSgaShkBsoGcKJI3AvFgdiGxaCoqkCVhBbCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Group = _t, Name = _t, P1 = _t, P2 = _t, P3 = _t, P4 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Group", type text}, {"Name", type text}, {"P1", Int64.Type}, {"P2", type number}, {"P3", Int64.Type}, {"P4", Int64.Type}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Group", "Name"}, "Attribute", "Value"),
        #"Duplicated Column" = Table.DuplicateColumn(#"Unpivoted Other Columns", "Attribute", "Attribute - Copy"),
        #"Replaced Value" = Table.ReplaceValue(#"Duplicated Column","P","",Replacer.ReplaceText,{"Attribute - Copy"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Replaced Value",{{"Attribute - Copy", Int64.Type}}),
        #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Attribute - Copy", "level"}})
    in
        #"Renamed Columns"

    A continuación, puede utilizar la siguiente fórmula para crear una meaure :

    Change in =
    VAR aft =
        CALCULATE (
            SUM ( 'Table2'[Value] ),
            FILTER ( ALL ( 'Table2' ), 'Table2'[level] = MAX ( 'Table2'[level] ) + 1 )
        )
    RETURN
        DIVIDE ( aft - SUM ( Table2[Value] ), SUM ( Table2[Value] ) )

    Espero que esto sea lo que se espera:

    3.11.4.matrix.PNG

    Por favor, eche un vistazo al archivo pbix aquí.

    Saludos
    Párpados Qin
    Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

2 Replies

  • @Linoy18 , En potencia bi; a partir de, no tenemos las operaciones de fila o columna. Así que tienes que crear un diff .

    Cree una tabla de períodos o una tabla de período de año separada

    Tener una columna como esta en esa tabla período

    Rango de período = RANKX(all('Period'),'Period'[período del año],,ASC,Dense)

    Calcular medidas como estas y tomar diff
    Este período = CALCULATE(sum('order'[Qty]), FILTER(ALL('Period'),'Period'[Period Rank]=max('Period'[Period Rank])))
    Último período = CALCULATE(sum('order'[Qty]), FILTER(ALL('Period'),'Period'[Period Rank]=max('Period'[Period Rank])-1))

  • No @Linoy18,

    Puede transformar la tabla desoyendo , agregando una columna Nivel por columna Atributo...

    La tabla transformada tiene este aspecto:

    3.11.4.matrix.PNG

    Aquí está toda la sintaxis M:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUUpMSgaShkBsoGcKJI3AvFgdiGxaCoqkCVhBbCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Group = _t, Name = _t, P1 = _t, P2 = _t, P3 = _t, P4 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Group", type text}, {"Name", type text}, {"P1", Int64.Type}, {"P2", type number}, {"P3", Int64.Type}, {"P4", Int64.Type}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Group", "Name"}, "Attribute", "Value"),
        #"Duplicated Column" = Table.DuplicateColumn(#"Unpivoted Other Columns", "Attribute", "Attribute - Copy"),
        #"Replaced Value" = Table.ReplaceValue(#"Duplicated Column","P","",Replacer.ReplaceText,{"Attribute - Copy"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Replaced Value",{{"Attribute - Copy", Int64.Type}}),
        #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Attribute - Copy", "level"}})
    in
        #"Renamed Columns"

    A continuación, puede utilizar la siguiente fórmula para crear una meaure :

    Change in =
    VAR aft =
        CALCULATE (
            SUM ( 'Table2'[Value] ),
            FILTER ( ALL ( 'Table2' ), 'Table2'[level] = MAX ( 'Table2'[level] ) + 1 )
        )
    RETURN
        DIVIDE ( aft - SUM ( Table2[Value] ), SUM ( Table2[Value] ) )

    Espero que esto sea lo que se espera:

    3.11.4.matrix.PNG

    Por favor, eche un vistazo al archivo pbix aquí.

    Saludos
    Párpados Qin
    Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.