cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo creo una columna que es la suma de elementos coincidentes en un período de tiempo específico?

He buscado mucho antes de hacer esta pregunta aquí, pero no pude encontrar nada relacionado con mi problema.

Actualmente estoy tratando de obtener un valor específico (llamémoslo "suma en período de referencia") para ser generado en una nueva columna.

Tengo diferentes elementos que están vinculados a un grupo (por ejemplo, el elemento A es del Grupo 1, el elemento B es del Grupo 2, el elemento C es del Grupo 3, etc.) y cada elemento tiene la fecha en que se creó en el siguiente formato: AAAAMM.

¿Cómo creo una columna adicional con la suma de todos los elementos que son del mismo grupo que el elemento de la fila y que se crearon en los últimos 12 meses a partir de la creación del elemento?

Digamos que mi tabla actual se ve así:

| | | Grupo|
| Un          | 202101        | 1     |
|          B | 202101        | 2     |
|          C | 202101        | 3     |
| D          | 202102        | 1     |
|          E | 202001        | 1     |
| F          | 202002        | 1     |
|          G | 202003        | 1     |

Y quiero que el resultado sea así:

| | | Grupo| |
| Un          | 202101        | 1     | 4                       |
|          B | 202101        | 2     | 1                       | 
|          C | 202101        | 3     | 1                       |
| D          | 202102        | 1     | 3                       |
|          E | 202001        | 1     | 1                       |
| F          | 202002        | 1     | 2                       |
|          G | 202003        | 1     | 3                       |

Gracias de antemano.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola

Para cualquiera que tenga el mismo problema que yo, la solución que encontré fue usar CALCULATE con dos filtros de la siguiente manera:

Result = CALCULATE(COUNT(Table[ELEMENT]), FILTER(Table, Table[GROUP] = earlier(Table[GROUP]) && earlier(Table[CREATION_DATE]) <= DATEADD(Table[CREATION_DATE], 12, MONTH)))
¿Por qué puse "anterior(Tabla[CREATION_DATE]) <= DATEADD(Tabla[CREATION_DATE], 12, MES)))" en lugar de simplemente usar "Tabla[CREATION_DATE] >= DATEADD(anterior(Tabla[CREATION_DATE], -12, MES)))"" que es más directo?
Porque las funciones DATE en DAX son súper torpes y solo aceptan columnas como parámetros, lo que significa que earlier(Table[CREATION_DATE]) no es un parámetro válido para la función.

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Hola

Para cualquiera que tenga el mismo problema que yo, la solución que encontré fue usar CALCULATE con dos filtros de la siguiente manera:

Result = CALCULATE(COUNT(Table[ELEMENT]), FILTER(Table, Table[GROUP] = earlier(Table[GROUP]) && earlier(Table[CREATION_DATE]) <= DATEADD(Table[CREATION_DATE], 12, MONTH)))
¿Por qué puse "anterior(Tabla[CREATION_DATE]) <= DATEADD(Tabla[CREATION_DATE], 12, MES)))" en lugar de simplemente usar "Tabla[CREATION_DATE] >= DATEADD(anterior(Tabla[CREATION_DATE], -12, MES)))"" que es más directo?
Porque las funciones DATE en DAX son súper torpes y solo aceptan columnas como parámetros, lo que significa que earlier(Table[CREATION_DATE]) no es un parámetro válido para la función.

View solution in original post

Syndicate_Admin
Administrator
Administrator

@T_von_Axt puede explicar cuál es la lógica detrás de lo siguiente:

Element_Id
Creation_Date
Grupo
deseadoResultar
A
202101
1
3
D
202102
1
3
E
202001
1
1
F
202002
1
2
G
202003
1
3

El resultado deseado es la suma de todos los valores que son del mismo grupo y en el marco de tiempo de hasta un año antes de la fecha de creación del elemento.

Así que para el elemento A tenemos 4, porque los elementos A, E, F y G son del Grupo 1 y tienen su fecha de creación en el intervalo de un año antes de la fecha de creación del elemento A.

Para el elemento D solo tenemos uno, porque a pesar de ser del grupo 1, es el único elemento que se creó en el intervalo de un año antes de su fecha de creación.

Syndicate_Admin
Administrator
Administrator

@T_von_Axt Prueba esto:

Calc_Colum=var CurrentGroup='Tabla'[Grupo]

var CurrentDate='Tabla'[Creation_Date]

var tempTable=SUMMARIZE(FILTER(ALL('Table'),'Table'[Group]=CurrentGroup&&(CurrentDate-'Table'[Creation_Date])<=100),'Table'[Element_Id])

return COUNTROWS(tempTable)

Gracias por su respuesta.

Solo una pregunta: ¿cómo apunta al grupo actual en esa fila? No encontré ninguna manera de hacer referencia a mi grupo actual en esa fila fuera de Table[Group] = Table[Group], pero esto no tendría ningún efecto, ¿verdad?

Se define a través de variables gracias al contexto de fila en columnas calculadas; como resultado, el valor de la variable es fijo y no cambia durante los siguientes cálculos.

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

November Power BI Update 768x460.png

Check it Out!

Click here to read more about the November 2021 Updates!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.