Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
Tengo una tabla con la siguiente estructura:
Costar | Fecha de inicio | Fecha de finalización | Total | Otras columnas irrelevantes |
Artículo1 | 2025/01/01 | 2025/12/31 | 12000 | x |
Artículo2 | 2025/04/01 | 2026/03/01 | 6000 | x |
Tema 3 | 2025/06/01 | 2026/05/01 | 18000 | x |
Artículo4 | 2025/07/01 | 2026/06/01 | 24000 | x |
El resultado deseado es poder calcular cuánto gasto incurriremos en cada mes del año. En un formato de tabla, se vería algo como esto:
Costar | Enero 2025 | Febrero 2025 | Marzo 2025 | Abr 2025 | Mayo 2025 | Junio 2025 | Julio 2025 | Agosto 2025 | continuado |
Artículo1 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | ... |
Artículo2 | 0 | 0 | 0 | 500 | 500 | 500 | 500 | 500 | ... |
Tema 3 | 0 | 0 | 0 | 0 | 0 | 1500 | 1500 | 1500 | ... |
Artículo4 | 0 | 0 | 0 | 0 | 0 | 0 | 2000 | 2000 | ... |
He conseguido que una versión de esto funcione creando:
CALCULAR(
SUM('Tabla'[MonthlyAverageCost]),
FILTER('Tabla', 'Tabla'[FechaFinal] >= MIN('TablaFecha'[InicioMes] &&; 'Tabla', 'Tabla'[FechaInicio] <= MAX('TablaFecha'[InicioMensual])
))
Los resultados son correctos, pero todo se hace dentro de DAX en lugar de una nueva tabla, así que me pregunto si hay una mejor manera de hacer esto.
¡Gracias bhanu_gautam
Hola, @SevsBo
En función de su descripción, he creado los siguientes datos de ejemplo:
No hay relación entre las dos tablas:
He establecido las siguientes dos medidas:
Measure 2 =
VAR _a = CALCULATE(SUM('Table'[MonthlyAverageCost]),'Date'[Date]>=SELECTEDVALUE('Table'[StartDate])&&'Date'[Date]<=SELECTEDVALUE('Table'[EndDate]))
RETURN IF(ISINSCOPE('Date'[YearMonth]), IF(MIN('Date'[Date])>=SELECTEDVALUE('Table'[StartDate])&&MIN('Date'[Date])<=SELECTEDVALUE('Table'[EndDate]),_a,0),_a)
Measure 4 = SUMX(VALUES('Table'[Cost]),[Measure 2])
Por último, use el objeto visual de matriz para configurarlo de la siguiente manera:
Estos son los resultados:
Saludos
Jianpeng Leer
Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.
Hola @v-jianpeng-msft,
¡Gracias por eso, funciona! La única advertencia es que me di cuenta de que tengo que marcar explícitamente la columna Año-Mes como Fecha y luego obtengo los resultados que coinciden.
Una pregunta que tendría, para continuar con este trabajo, es que ahora tengo que acumular estos datos para crear comparaciones mensuales y YTD entre los costos y los costos esperados.
Supongamos que los costos totales de junio en su escenario muestran 3000 costos y los de julio 5000. Tendría que calcular lo que eso significa para un costo mensual total y YTD al observar estos datos en junio o julio y compararlo con lo que esperábamos ver para determinar los KPI.
Digamos que el costo total visto en junio (según los datos que proporcionó) sería de 3000 en el mes y 9000 en lo que va de año. En julio serían 5000 en el mes y 14000 en lo que va de año. Luego, para compararlo con nuestros costos esperados para esos meses.
¿Sería mejor crear una tabla calculada de Fechas y Valores por Costo en lugar de hacerlo con Medidas?
Crea una tabla de fechas que incluya todos los meses que necesitas:
Tabla de fechas =
ADDCOLUMNS (
CALENDARIO (FECHA(2025, 1, 1), FECHA(2026, 12, 31)),
"MonthStart", EOMONTH([Fecha], -1) + 1
)
Agregue una columna calculada a la tabla original para calcular el costo promedio mensual:
MonthlyAverageCost =
DIVIDIR (
'Tabla'[Total],
DATEDIFF('Tabla' [Fecha de inicio], 'Tabla' [Fecha de finalización], MES)
)
Agregue una columna calculada para determinar si un mes determinado se encuentra dentro de las fechas de inicio y finalización:
IsInMonth =
SI (
'DateTable'[MonthStart] >= 'Tabla'[StartDate] &&
'DateTable'[MonthStart] <= 'Tabla'[EndDate],
1,
0
)
Cree una medida para calcular el costo mensual total:
Dax
CostoMensual Total =
CALCULAR (
SUM('Tabla'[MonthlyAverageCost]),
FILTRO (
'Mesa',
'Tabla'[IsInMonth] = 1
)
)
Agregue una visualización de matriz a su informe.
Agregue la columna Costo de la tabla original a las filas de la matriz.
Agregue la columna MonthStart de la tabla de fechas a las columnas de la matriz.
Agregue la medida TotalMonthlyCost a los valores de la matriz.
¡Gracias, eso es bastante similar al enfoque que estoy usando en este momento!
Solo algunas preguntas, para la última columna y medida, ¿las estoy agregando a la DateTable o a la tabla original?
¿Supongo que tiene que existir una relación entre los dos a pesar de todo?
EDITAR: Después de intentar implementar el paso "Agregar una columna calculada para determinar si un mes determinado se encuentra dentro de las fechas de inicio y finalización:" Me doy cuenta de que no me permite seleccionar las columnas StartDate o EndDate de la tabla original. Si intento compilarlo en la tabla original, no reconoce DateTable.