Suma acumulada por fechas por personas

Un usuario Pregunto ✅

Raphaël

Estimados,

Estoy tratando de generar una suma acumulativa por fecha y por persona, pero no puedo averiguar cómo hacerlo. Lo único que logré hacer es una simple suma acumulativa por fecha.

Dejame explicarte con un ejemplo.

Aquí está mi conjunto de datos:

Fecha Personas Indicador
01/02/2017 Mick 1
01/02/2017 Mick 1
01/02/2017 Mick 1
01/02/2017 David 1
02/02/2017 David 1
02/03/2017 David 1
02/03/2017 Mick 1

Con la siguiente fórmula, esto es lo que obtengo:

Cumul = 
CALCULATE (
    SUM ('Query'[Indicator]),
    FILTER (ALL ('Query' ),'Query'[Date] <= MAX ( 'Query'[Date]))
)
Fecha Personas Indicador Cumul
01/02/2017 Mick 1 1
01/02/2017 Mick 1 2
01/02/2017 Mick 1 3
01/02/2017 David 1 4
02/02/2017 David 1 5
02/03/2017 David 1 6
02/03/2017 Mick 1 7

Pero lo que quiero es:

Fecha Personas Indicador Cumul
01/02/2017 Mick 1 1
01/02/2017 Mick 1 2
01/02/2017 Mick 1 3
01/02/2017 David 1 1
02/02/2017 David 1 2
02/03/2017 David 1 3
02/03/2017 Mick 1 4

Tengo otra pregunta,

Encontré la consulta de Cumul en este foro, pero no entendí exactamente cómo funciona y cómo funciona la parte del archivador, ¿alguien me puede explicar?

Gracias de antemano por su ayuda.

Te deseo un buen día.

Hola @ Raphaël

¡Creo que tiene razón al preguntar no solo la respuesta sino también la lógica que se ejecuta detrás de DAX!

Supongo que la columna ‘Personas’ también proviene de su tabla ‘Consulta’, ¿verdad? En ese caso, intente:

Cumul = 
CALCULATE (
    SUM ('Query'[Indicator]),
    FILTER (ALL ('Query'[Date] ),'Query'[Date] <= MAX ( 'Query'[Date]))
)

Filtrar (Tabla, filtro …) es un función de iterador. Eso itera sobre cada fila de la tabla (1er argumento) en la corriente filtra el contexto y evalúa los condición de filtro.

Y aquí está la explicación en su caso:

los TODOS función básicamente ignora el contexto de filtro actual.

Todo (Tabla) ignora cualquier filtro que vendría de esta ‘Tabla’. Es por eso que su fórmula no calcula lo que quiere aquí.

Al escribir Todo (Consulta), ignora el filtro procedente de la fecha (que está aquí mismo porque desea hacer un total acumulado), pero también el filtro procedente de ‘Personas’ (que NO es lo que quiere aquí) o cualquier otro columnas de la tabla ‘Consulta’ que potencialmente podría traer en su tabla dinámica / segmentaciones, etc.

Todos aceptan una tabla o una columna como argumento.

Mi sugerencia se basa en Todos (Consulta[Date]) que le permite ignorar el contexto del filtro solamente procedente de [Date] columna de la tabla de consulta.

Hola @ Raphaël

¡Creo que tiene razón al preguntar no solo la respuesta sino también la lógica que se ejecuta detrás de DAX!

Supongo que la columna ‘Personas’ también proviene de su tabla ‘Consulta’, ¿verdad? En ese caso, intente:

Cumul = 
CALCULATE (
    SUM ('Query'[Indicator]),
    FILTER (ALL ('Query'[Date] ),'Query'[Date] <= MAX ( 'Query'[Date]))
)

Filtrar (Tabla, filtro …) es un función de iterador. Eso itera sobre cada fila de la tabla (1er argumento) en la corriente filtra el contexto y evalúa los condición de filtro.

Y aquí está la explicación en su caso:

los TODOS función básicamente ignora el contexto de filtro actual.

Todo (Tabla) ignora cualquier filtro que vendría de esta ‘Tabla’. Es por eso que su fórmula no calcula lo que quiere aquí.

Al escribir Todo (Consulta), ignora el filtro procedente de la fecha (que está aquí mismo porque desea hacer un total acumulado), pero también el filtro procedente de ‘Personas’ (que NO es lo que quiere aquí) o cualquier otro columnas de la tabla ‘Consulta’ que potencialmente podría traer en su tabla dinámica / segmentaciones, etc.

Todos aceptan una tabla o una columna como argumento.

Mi sugerencia se basa en Todos (Consulta[Date]) que le permite ignorar el contexto del filtro solamente procedente de [Date] columna de la tabla de consulta.

Raphaël

En respuesta a Datatouille

Hola @Datatouille,

Gracias por tus comentarios. Confirmo que su propuesta es la correcta y se lo agradezco.

Gracias también por tu explicación,

No tuve tiempo suficiente para leer por completo el enlace sobre el contexto de filas y filtros (lo cual es interesante) pero continuaré leyéndolo mañana y les haré más preguntas al respecto. Smiley feliz

También he notado que eres francés (como yo), ¿podemos continuar en francés (no estoy seguro de que esto esté permitido aquí) para asegurarme de una mejor comprensión?

Raphaël

En respuesta a Raphaël

Hola de nuevo @Datatouille,

Leí el artículo completo y ahora entiendo el significado del filtro de fila y contexto.

Así que he entendido lo siguiente desde el formulario siguiente:

FILTER (ALL ('Query'[Date] ),'Query'[Date] <= MAX ( 'Query'[Date]))

TODOS (‘Consulta'[Date] ): me traerá todo [Date] de ‘Consulta’ dependiendo del contexto del filtro (es decir, la fila donde se calcula el valor, por lo que aquí, una persona).

Esta parte, todavía no la entiendo:

'Query'[Date] <= MAX ( 'Query'[Date])

Sé que hace el trabajo correctamente pero

¿Cómo sabe power bi desde qué fecha hasta qué fecha filtrar mis datos para darme el recuento actual que espero?

En respuesta a Raphaël

@ Raphaël

Entonces, como mencioné anteriormente, en esta etapa, la función de filtro está iterando sobre cada fila de la tabla ‘Consulta’ en el contexto de filtro actual.

Esta parte:

'Query'[Date] <= MAX ( 'Query'[Date])

‘Consulta[Date]’usa el contexto de fila generado por Filter. Compara cada fecha (visible en el contexto de filtro actual) con MAX (‘Consulta'[Date]).

Pero que es MAX (‘Consulta'[Date]) haciendo ? Calcula la fecha máxima en el contexto de filtro actual.

Entonces, en su caso, su Max (‘Consulta'[Date] ) siempre es igual a la fecha en su tabla dinámica. El filtro solo mantiene todas las fechas (actualmente visibles en el contexto del filtro) que son menores o iguales a este MaxDate.

Pero tenga cuidado, si tiene varios años en su modelo, este cálculo calculará ‘cumul’ desde el principio del calendario. Si desea realizar cálculos genuinos del año hasta la fecha.

Puedes usar este patrón:

1. Calcular ( [Measure] , FechasYTD (Calendario[Date] )

o

2. TotalYTD ( [Measure] , Calendario[Date] )

Te animo a usar 1. porque puedes cambiar la fecha de finalización del año con el segundo parámetro (opcional) de la función DatesYTD (muy conveniente cuando no estás calculando valores en el calendario sino en años fiscales, por ejemplo) ¡y materializa el cálculo!

vgadang

En respuesta a Datatouille

Hola,
Estoy buscando una comparación acumulativa año tras año.
Tengo datos mensuales de diciembre de 2016 a noviembre de 2018, quiero comparar los acumulados del año pasado con los acumulados de este año.
Sin embargo, la Medida a continuación se calcula para el período completo de dos años.
Importe acumulado pagado Medida =
CALCULAR (
SUM (DuesPayment[Paid Amt] ),
FILTRO (
ALLSELECTED (‘DuesPayment’),
‘DuesPayment'[Weeks Out] <= MAX (Pago de cuotas[Weeks Out] )
¿Puede explicar cómo funciona esto?
1. Calcular ( [Measure] , FechasYTD (Calendario[Date] )
o
2. TotalYTD ( [Measure] , Calendario[Date] )

Muchas gracias,

VG

En respuesta a Raphaël

Sí, claro, ¡te acabo de enviar un mensaje privado!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *