Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

¿Está creando una tabla de costos mensuales basada en las fechas de inicio y finalización y el costo promedio por mes?

Tengo una tabla con la siguiente estructura:

CostarFecha de inicioFecha de finalizaciónTotalOtras columnas irrelevantes
Artículo12025/01/012025/12/3112000x
Artículo22025/04/012026/03/016000x
Tema 32025/06/012026/05/0118000x
Artículo42025/07/012026/06/0124000x

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:

CostarEnero 2025Febrero 2025Marzo 2025Abr 2025Mayo 2025Junio 2025Julio 2025Agosto 2025continuado
Artículo110001000100010001000100010001000...
Artículo2000500500500500500...
Tema 300000150015001500...
Artículo400000020002000...

He conseguido que una versión de esto funcione creando:

  • una tabla DateTable con la columna MonthStart, que muestra el día de inicio de cada mes,
  • una columna MonthlyAverageCost en la tabla original,
  • Una medida:

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.

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

¡Gracias bhanu_gautam

Hola, @SevsBo

En función de su descripción, he creado los siguientes datos de ejemplo:

vjianpengmsft_0-1738898647657.png

No hay relación entre las dos tablas:

vjianpengmsft_1-1738898694709.png

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:

vjianpengmsft_2-1738898834855.png

Estos son los resultados:

vjianpengmsft_3-1738898875512.png

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?

Syndicate_Admin
Administrator
Administrator

@SevsBo

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.

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors