Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola, chicos
Tengo un conjunto de datos enorme y debo resumir algunos de sus valores en una tabla similar a un calendario para realizar mejor los cálculos con mis medidas. En este archivo he creado uno más pequeño solo para ejemplificar lo que pretendo hacer.
La tabla que se genera a partir de la medida SUMMARIZE trae el resultado correcto, como se indica a continuación:
@Summarized_tbl =
SUMMARIZE(F_Table,
d_Calendario[Date],
"@count", VAR MAXDATE = MAX(d_Calendario[Date])
VAR MINDATE = MIN(d_Calendario[Date])
VAR CALCULO = COUNTROWS(FILTER(ALL(F_Table),
[start] <= MAXDATE &&
[end] >= MINDATE))
RETURN CALCULO)
Fecha | @count
1/1/2018 | 5 |
1/2/2018 | 14 |
1/3/2018 | 19 |
1/4/2018 | 30 |
1/5/2018 | 37 |
1/6/2018 | 43 |
1/7/2018 | 51 |
1/8/2018 | 58 |
1/9/2018 | 67 |
1/10/2018 | 73 |
1/11/2018 | 84 |
1/12/2018 | 93 |
1/13/2018 | 96 |
1/14/2018 | 99 |
1/15/2018 | 108 |
Sin embargo, en mi conjunto de datos real no puedo construir esta tabla usando SUMMARIZE debido a problemas de rendimiento (cada vez que necesito crear una columna o una medida, tarda casi dos minutos), por lo que esa es la razón por la que estoy tratando de crear esta tabla usando ADDCOLUMNS, que a su vez trae el resultado incorrecto, de la siguiente manera:
@AddC_tbl =
ADDCOLUMNS(
VALUES(d_Calendario[Date]),
"@count", VAR MAXDATE = MAX(d_Calendario[Date])
VAR MINDATE = MIN(d_Calendario[Date])
VAR CALCULO = CALCULATE(
COUNTROWS(
FILTER(F_Table,
[start] <= MAXDATE &&
[end] >= MINDATE)))
RETURN CALCULO)
Fecha | @count
01/01/2018 | 5 |
02/01/2018 | 9 |
03/01/2018 | 6 |
04/01/2018 | 11 |
05/01/2018 | 7 |
06/01/2018 | 7 |
07/01/2018 | 9 |
08/01/2018 | 7 |
09/01/2018 | 9 |
10/01/2018 | 6 |
11/01/2018 | 11 |
12/01/2018 | 9 |
13/01/2018 | 3 |
14/01/2018 | 3 |
15/01/2018 | 9 |
Este cálculo es simplemente contar cuántos registros comenzaron en la fecha de contexto de fila, pero lo que quiero hacer es contar cuántos registros estaban activos cada mes, de la siguiente manera:
¿Alguna idea sobre lo que estoy haciendo mal sobre la medida ADDCOLUMNS DAX mostrada anteriormente?
Solved! Go to Solution.
La solución fue envolver las fórmulas MAX y MIN en CALCULATE y en el filtro dentro de COUNTROWS poner un ALL.
@AddC_tbl =
ADDCOLUMNS(
VALUES(d_Calendario[Date]),
"@count", VAR MAXDATE = CALCULATE(MAX(d_Calendario[Date]))
VAR MINDATE = CALCULATE(MIN(d_Calendario[Date]))
VAR CALCULO = CALCULATE(
COUNTROWS(
FILTER(ALL(F_Table),
[start] <= MAXDATE &&
[end] >= MINDATE)))
RETURN CALCULO)
No sé lo que está pasando, pero no puedo pegar el enlace aquí, pero la segunda línea contiene el enlace
¿Puede mostrar el modelo de datos y los datos de muestra?
Porque si no me pierdo algo, entonces la siguiente medida debería traer el mismo resultado que la primera medida y si lo hace, entonces también debería ser más eficiente.
@Summarized_tbl =
SUMMARIZE(
d_Calendario,
d_Calendario[Date],
"@count",
COUNTROWS(F_Table)
)
Llego a esta conclusión porque calculas un min y un max en la misma columna que usas para tu resumen y luego haces otro cálculo usando el min y el max. A mi entender, tiene una tabla de fechas y una tabla de hechos con una relación 1: n y desea el recuento de filas por fecha. Si ese es el caso, la medida anterior debería hacer el trabajo y debería ser más eficiente.
¿O me falta algo aquí?
Saludos
Miguel
-----------------------------------------------------
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente. ¡Aprecio su pulgar hacia arriba!
@me en las respuestas o perderé tu hilo.
-----------------------------------------------------
La solución fue envolver las fórmulas MAX y MIN en CALCULATE y en el filtro dentro de COUNTROWS poner un ALL.
@AddC_tbl =
ADDCOLUMNS(
VALUES(d_Calendario[Date]),
"@count", VAR MAXDATE = CALCULATE(MAX(d_Calendario[Date]))
VAR MINDATE = CALCULATE(MIN(d_Calendario[Date]))
VAR CALCULO = CALCULATE(
COUNTROWS(
FILTER(ALL(F_Table),
[start] <= MAXDATE &&
[end] >= MINDATE)))
RETURN CALCULO)
Gracias por tu respuesta
El archivo está en la segunda línea. En realidad, lo que pretendo hacer es contar cuántos registros existen cada mes, no necesariamente contar solo las filas.
Por ejemplo, algunos Id comenzaron el 01/01/2018 y estuvieron activos hasta el 10/01/2018. Quiero indicar que en todos los meses de enero a octubre esta suscripción estuvo activa.
Ene | 1 |
Feb | 1 |
Estropear | 1 |
Apr | 1 |
Mayo | 1 |
Jun | 1 |
Jul | 1 |
Ago | 1 |
Sep | 1 |
Oct | 1 |
Para ello, calculo la siguiente medida de Dax:
COUNTROWS(
FILTER(ALL(F_Table),
[start] <= MAXDATE &&
[end] >= MINDATE))
¿Sabe cómo mejorar su rendimiento utilizando ADDCOLUMNS?
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |