Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
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
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
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 ! 🙂
Solved! Go to Solution.
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
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
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.
Utilice otro ADDCOLUMNS y en esta fila use algo como: RowNumberEmbed - EARLIER(RowNumberEmbed) - 1