Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Anonymous
Not applicable

Conseguir la fila theud anterior de una tabla dinámica

Hola a todos,

Estoy tratando de entender cómo funciona la función groupBy y summarize, con el fin de crear una medida basada en una tabla calculada dinámica, estoy bien, pero en realidad estoy atascado en cómo obtener el valor de una fila anterior dentro de la tabla temporal "group by".


Aquí está la muestra de datos sin procesar

raw1.png


La estructura de la medida se verá como:

Sumx (

Filtro (

resumir(

grupo anidado por

)

;condiciones de filtro

)

;columnas para sumar

)

El primer paso es crear la tabla temporal para aplicar la suma en ella, que ya hice

raw1.png

Pero todavía me falta una columna para completar esta tarea, así que mi pregunta es cómo agregar una columna con el valor de la fila anterior para el sum_mrr_trans, lo necesito para las condiciones de suma

He intentado utilizar la función anterior, pero no puedo apuntar en las columnas de la tabla temporal

Gracias de antemano por sus respuestas ! 🙂

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hola de nuevo !! 😄
En primer lugar, gracias a todos por sus respuestas, me ayudó mucho.

Encontré una manera de hacerlo combinando la respuesta de @Greg_Deckler y @v-gizhi-msft

tempTable = 
       
VAR a =
    ADDCOLUMNS (
        SUMMARIZE (
            ADDCOLUMNS (
                GROUPBY (
                    'Fact  flat';
                    'Fact  flat'[account_id];
                    'Fact  flat'[po_number];
                    'Fact  flat'[the_month];
                    'Fact  flat'[continuity];
                    'Fact  flat'[mrr_transposed]
                );
                "continuity_new_customers"; IF ( 'Fact  flat'[continuity] = 0; 1; 'Fact  flat'[continuity] )
            );
            [account_id];
            [the_month];
            [continuity_new_customers];
            "sum mrr trans"; SUM ( 'Fact  flat'[mrr_transposed] )
        );
        "RowNumberEmbed"; RANKX (
            FILTER (
                GROUPBY ( 'Fact  flat'; 'Fact  flat'[account_id]; 'Fact  flat'[the_month] );
                'Fact  flat'[account_id] = EARLIER ( 'Fact  flat'[account_id] )
            );
            [the_month];
            ;
            ASC
        )
    )

RETURN
    ADDCOLUMNS( 
        a;
        "Previous Value"; CALCULATE (
    
            MAxX(      SUMMARIZE (
                                        GROUPBY (
                                            'Fact  flat';
                                            'Fact  flat'[account_id];
                                            'Fact  flat'[po_number];
                                            'Fact  flat'[the_month];
                                            'Fact  flat'[mrr_transposed]
                                        );      
                                    [account_id];
                                    [the_month];
                                    "sum mrr trans"; SUM ( 'Fact  flat'[mrr_transposed] )
                                )          
                                ; [sum mrr trans] )

   
                  ; FILTER ( a; [account_id]= EARLIER([account_id])  && [the_month] <   EARLIER([the_month]) && [RowNumberEmbed] = EARLIER([RowNumberEmbed]  ) -1
        ))
)

Así que tuve que usar otro resumen en el último cálculo con la granularidad correcta (igual de la primera tabla), porque si utilizo una suma simple, no se aplicará en el nivel de cuenta, sino en el po_number, y devolver un resultado falso

Hola @darlove, thx para su respuesta, En este caso no puedo usar la consulta de energía, creará una tabla estática pre calculada, que quería evitar porque necesito filtrar con una segmentación en la granularidad más baja "po_number" antes de la primera "groupby"

por lo que la medida lo calculará dinámicamente. @Greg_Deckler explicó muy bien el poder de la medida para este tipo de usos caso en este ARTICULO (thx mucho para este ! 🙂 )

Si usted tiene otros consejos para optimizar el código, Voy a tomarlos ! 😄

Salud

View solution in original post

6 REPLIES 6
v-gizhi-msft
Community Support
Community Support

Hola

Por favor, pruebe esta fórmula de tabla calculada:

Table =
VAR a =
    ADDCOLUMNS (
        SUMMARIZE (
            ADDCOLUMNS (
                GROUPBY (
                    'Fact flat',
                    'Fact flat'[account_id],
                    'Fact flat'[po_number],
                    'Fact flat'[the_month],
                    'Fact flat'[continuity],
                    'Fact flat'[mrr_transposed]
                ),
                "continuity_new_customers", IF ( 'Fact flat'[continuity] = 0, 1, 'Fact flat'[continuity] )
            ),
            [account_id],
            [the_month],
            [continuity_new_customers],
            "sum mrr trans", SUM ( 'Fact flat'[mrr_transposed] )
        ),
        "RowNumberEmbed", RANKX (
            FILTER (
                GROUPBY ( 'Fact flat', 'Fact flat'[account_id], 'Fact flat'[the_month] ),
                'Fact flat'[account_id] = EARLIER ( 'Fact flat'[account_id] )
            ),
            [the_month],
            ,
            ASC
        )
    )
RETURN
    ADDCOLUMNS (
        a,
        "Previous Value", CALCULATE (
            SUM ( 'Fact flat'[mrr_transposed] ),
            FILTER ( a, [RowNumberEmbed] = MAXX ( a, [RowNumberEmbed] ) - 1 )
        )
    )

Espero que esto ayude.

Saludos

Giotto

Anonymous
Not applicable

Hola de nuevo !! 😄
En primer lugar, gracias a todos por sus respuestas, me ayudó mucho.

Encontré una manera de hacerlo combinando la respuesta de @Greg_Deckler y @v-gizhi-msft

tempTable = 
       
VAR a =
    ADDCOLUMNS (
        SUMMARIZE (
            ADDCOLUMNS (
                GROUPBY (
                    'Fact  flat';
                    'Fact  flat'[account_id];
                    'Fact  flat'[po_number];
                    'Fact  flat'[the_month];
                    'Fact  flat'[continuity];
                    'Fact  flat'[mrr_transposed]
                );
                "continuity_new_customers"; IF ( 'Fact  flat'[continuity] = 0; 1; 'Fact  flat'[continuity] )
            );
            [account_id];
            [the_month];
            [continuity_new_customers];
            "sum mrr trans"; SUM ( 'Fact  flat'[mrr_transposed] )
        );
        "RowNumberEmbed"; RANKX (
            FILTER (
                GROUPBY ( 'Fact  flat'; 'Fact  flat'[account_id]; 'Fact  flat'[the_month] );
                'Fact  flat'[account_id] = EARLIER ( 'Fact  flat'[account_id] )
            );
            [the_month];
            ;
            ASC
        )
    )

RETURN
    ADDCOLUMNS( 
        a;
        "Previous Value"; CALCULATE (
    
            MAxX(      SUMMARIZE (
                                        GROUPBY (
                                            'Fact  flat';
                                            'Fact  flat'[account_id];
                                            'Fact  flat'[po_number];
                                            'Fact  flat'[the_month];
                                            'Fact  flat'[mrr_transposed]
                                        );      
                                    [account_id];
                                    [the_month];
                                    "sum mrr trans"; SUM ( 'Fact  flat'[mrr_transposed] )
                                )          
                                ; [sum mrr trans] )

   
                  ; FILTER ( a; [account_id]= EARLIER([account_id])  && [the_month] <   EARLIER([the_month]) && [RowNumberEmbed] = EARLIER([RowNumberEmbed]  ) -1
        ))
)

Así que tuve que usar otro resumen en el último cálculo con la granularidad correcta (igual de la primera tabla), porque si utilizo una suma simple, no se aplicará en el nivel de cuenta, sino en el po_number, y devolver un resultado falso

Hola @darlove, thx para su respuesta, En este caso no puedo usar la consulta de energía, creará una tabla estática pre calculada, que quería evitar porque necesito filtrar con una segmentación en la granularidad más baja "po_number" antes de la primera "groupby"

por lo que la medida lo calculará dinámicamente. @Greg_Deckler explicó muy bien el poder de la medida para este tipo de usos caso en este ARTICULO (thx mucho para este ! 🙂 )

Si usted tiene otros consejos para optimizar el código, Voy a tomarlos ! 😄

Salud

Bueno, para la optimización del rendimiento puede hacer referencia a mi serie aquí:

https://community.powerbi.com/t5/Community-Blog/Performance-Tuning-DAX-Part-1/ba-p/976275

Hay 4 partes.


@ 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!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...
Anonymous
Not applicable

Hola @Yaz.

No puedo imaginar cómo no sería capaz de crear una tabla de este tipo en Power Query. Las tablas creadas con DAX también son STATIC exactamente de la misma manera que las PQ y además, Power Query es más potente que DAX con respecto a dar forma a los datos y es MUUUUUCH más fácil de documentar. Agregar un índice en PQ es una operación de un solo clic. En DAX tienes que crear monstruos como

"RowNumberEmbed"; RANKX (
FILTRO (
GROUPBY ( 'Fact flat'; 'Fact flat'[account_id]; «Fact flat»[the_month] );
«Fact flat»[account_id] - EARLIER ( 'Fact flat'[account_id] )
);
[the_month];
;
Asc
)

Por otra parte, la creación de DAX complejo no es algo que recomendaría a menos que te guste perder el tiempo descifrando dicho código después de un mes o dos...

Pero, por supuesto, tú y tus compañeros tendrán que mantener al monstruo. Es tu decisión 🙂

Mejor
D
Anonymous
Not applicable

Estas cosas deben realizarse en la herramienta adecuada para este tipo de manipulación - Power Query. DAX es el lenguaje de eXpressions de análisis de datos, no un lenguaje de mashup como M. Utilice Power Query y haga su vida (y la de los que tendrán que mantener esto) más fácil.

Mejor
D
Greg_Deckler
Super User
Super User

Utilice otro ADDCOLUMNS y en esta fila use algo como: RowNumberEmbed - EARLIER(RowNumberEmbed) - 1


@ 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!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors