JBeyers
Me preguntaba cómo debo construir un gráfico que se vea como el siguiente:
Quiero hacer una suma y mostrarla en todos los meses. No puedo hacer esto con la función «SUMA» o «SUMX», porque si la distribuyera entre todos los meses, la suma se rompería.
¿Alguien tiene una idea?
konstantinos
En respuesta a JBeyers
Primero necesita tener una tabla de fechas separada para realizar cálculos de fechas…
Paso 1: Cree una tabla de fechas -> Vaya a Modelado, haga clic en Nueva tabla -> ingrese Fechas = CALENDARAUTO(). Ahora tiene una tabla de fechas llamada Fechas..-> Nueva columna en esta tabla Mes = MES (Fechas[Date])
Paso 2: Crea una relación entre tu tabla[Dates] (las nuevas fechas únicas que creó) y Fechas[Date] (la tabla calculada)
Paso 3: Reescriba su fórmula para Medida = CALCULAR(
SUM(rprtsolarhistorical[Daily Output]);
FILTRAR(
TODO(fechas[Dates]);
fechas[Date]) <= MÁX.(fechas[Date])
)
)
Paso 4: agregue el campo de meses de la nueva tabla Fechas y la «medida»
Espero que esto funcione
greg_deckler
¿Parece que quieres un total acumulativo? ¿Es eso correcto?
http://www.daxpatterns.com/cumulative-total/
JBeyers
En respuesta a greg_deckler
@Greg_Deckler ¡Exactamente!
Probé la fórmula sugerida pero me da el mismo resultado que cuando hago una «SUM» o «SUMX» normal. Mi expresión DAX parece ser correcta, ¿no?
Medida = CALCULAR(
SUM(rprtsolarhistorical[Daily Output]);
FILTRAR(
TODO(rprtsolarhistórico[Timestamps]); rprtsolarhistórico[Timestamps] <= MAX(rprtsolarhistorical[Timestamps])
)
)
Haegi
En respuesta a JBeyers
Sí, tu fórmula parece ser correcta.
¿Es posible que se una a una muestra de su conjunto de datos?
Saludos.
JBeyers
En respuesta a Haegi
@Haegi Aquí hay una pequeña muestra de las columnas de interés. ¿Sabes lo que me estoy perdiendo/haciendo mal?
Salida diaria… Marcas de tiempo Dirección del sensor
0 7-2-2015 11:25:00 0x0001
0 2-7-2015 11:25:00 0x0002
100 2-7-2015 11:25:00 0x0003
100 2-7-2015 11:25:00 0x0004
100 2-7-2015 11:25:00 0x0005
0 7-2-2015 11:30:00 0x0001
200 2-7-2015 11:30:00 0x0002
200 2-7-2015 11:30:00 0x0003
200 2-7-2015 11:30:00 0x0004
200 2-7-2015 11:30:00 0x0005
200 7-2-2015 11:35:00 0x0001
konstantinos
En respuesta a JBeyers
No estoy seguro de qué es lo que no funciona, pero supongo que tiene meses en el eje x y una relación entre una tabla de fechas y la columna de marca de tiempo.
Intente convertir la marca de tiempo a «Solo fechas»… si no lo ha hecho desde Fecha/hora no se puede relacionar solo con fechas…
En caso de que necesite tanto la hora como la fecha, también necesita una tabla de tiempo y una columna dividida para solo fechas y solo hora.
editar: noté en su fórmula que usa la marca de tiempo de la misma tabla … Debe tener una tabla de fechas relacionada con su tabla de marcas de tiempo de historial … y usar estas fechas en FILTRO
JBeyers
En respuesta a konstantinos
No estoy del todo seguro de lo que quieres decir, ¿quieres decir que tengo que hacer 2 columnas adicionales?
Uno solo con la fecha y otro solo con la hora -> así:
Salida diaria… Marcas de tiempo Dirección del sensor Horas Fechas
0 7-2-2015 11:25:00 0x0001 11:25:00 2-7-2015
0 2-7-2015 11:25:00 0x0002 11:25:00 2-7-2015
100 2-7-2015 11:25:00 0x0003 11:25:00 2-7-2015
100 2-7-2015 11:25:00 0x0004 11:25:00 2-7-2015
100 2-7-2015 11:25:00 0x0005 11:25:00 2-7-2015
0 7-2-2015 11:30:00 0x0001 11:30:00 2-7-2015
200 2-7-2015 11:30:00 0x0002 11:30:00 2-7-2015
200 2-7-2015 11:30:00 0x0003 11:30:00 2-7-2015
200 2-7-2015 11:30:00 0x0004 11:30:00 2-7-2015
200 2-7-2015 11:30:00 0x0005 11:30:00 2-7-2015
200 7-2-2015 11:35:00 0x0001 11:35:00 2-7-2015
Intenté esto, pero si uso esto en mi expresión DAX, esto no funcionará:
Medida = CALCULAR(
SUM(rprtsolarhistorical[Daily Output]);
FILTRAR(
TODO(rprtsolarhistórico[Dates]);
rprtsolarhistórico[Dates] <= MAX(rprtsolarhistorical[Times])
)
)
¿Qué estoy haciendo mal?
konstantinos
En respuesta a JBeyers
Primero necesita tener una tabla de fechas separada para realizar cálculos de fechas…
Paso 1: Cree una tabla de fechas -> Vaya a Modelado, haga clic en Nueva tabla -> ingrese Fechas = CALENDARAUTO(). Ahora tiene una tabla de fechas llamada Fechas..-> Nueva columna en esta tabla Mes = MES (Fechas[Date])
Paso 2: Crea una relación entre tu tabla[Dates] (las nuevas fechas únicas que creó) y Fechas[Date] (la tabla calculada)
Paso 3 : Reescriba su fórmula para Medida = CALCULAR(
SUM(rprtsolarhistorical[Daily Output]);
FILTRAR(
TODO(fechas[Dates]);
fechas[Date]) <= MÁX.(fechas[Date])
)
)
Paso 4: agregue el campo de meses de la nueva tabla Fechas y la «medida»
Espero que esto funcione
elliotdixon
En respuesta a konstantinos
HI @konstantinos parece que tienes razón. También usé la gran respuesta para totales acumulativos en Dax Patterns http://www.daxpatterns.com/cumulative-total/
Pero necesito tener mi acumulación acumulada durante el mismo año. Haga que cada año se superponga a los demás. Para hacer esto, creo que necesito una columna de fecha que calcule qué día del año es (ignorando el año real) en lugar de una fecha real
En este momento estoy recibiendo esto
Pero quiero que se parezca más a esto.
cualquier ayuda que pueda dar sería muy apreciada.
Salud.
konstantinos
En respuesta a elliotdixon
@elliotdixon no estoy seguro de entender… Lo siento… ¿necesitas comparar todos los años en un gráfico? como el año actual, el anterior, etc. o necesita un valor de por vida. ¿Qué tendría en el eje – meses?
elliotdixon
En respuesta a konstantinos
Hola @konstantinos Saludos: quiero mostrar todos los años en el mismo gráfico. Una línea para cada año diferente. El eje es nuestra temporada (solo un año fiscal – 1 de julio al 30 de junio)
Salud.
Haegi
En respuesta a elliotdixon
@elliotdixon
Hola, me enfrenté al mismo caso.
Primero, supongo que tiene una tabla de fechas con la columna Fecha (completa), Año, Mes, etc.
Creé una nueva columna de medida como esta
CumulativeYear = CALCULATE( SUM('Aggregate'[Amount]); FILTER(ALL(Dates[Year]); Dates[Year] = MAX(Dates[Year])); FILTER(ALL(Dates[Month]); Dates[Month] <= MAX(Dates[Month])))
Uso dos filtros para especificar un contexto particular: para cada año analizas todo el mes.
elliotdixon
En respuesta a Haegi
Hola @Haegi
Gracias por la ayuda. ¿Puedo crear la medida sin errores, pero luego no puedo incluirla en ninguna tabla o gráfico?
obtener un error
«MdxScript(Modelo) (2, 43) Error de cálculo en la medida ‘InvoiceDetail'[CumulativeYear]: La función MAX toma un argumento que se evalúa como números o fechas y no puede funcionar con valores de tipo Cadena».
mi codigo es
CumulativeYear = CALCULATE(SUM(InvoiceDetail[DETAIL_KMS_TOCHARGE]), FILTER(ALL(Dates[Year]),Dates[Year] = MAX(Dates[Year])), FILTER(ALL(Dates[MonthName]),Dates[MonthName] <= MAX(Dates[MonthName])))
El mismo resultado si elimino los filtros Mes y solo tengo uno en los años.
Haegi
En respuesta a elliotdixon
¡Buen trabajo!
Este error explica que la función MAX no funciona con el valor de cadena.
Supongo que la columna ‘Nombre del mes’ es una cadena como «Enero» o «Febrero», debemos usar un valor entero como 1,2,3,4,5, etc.
para la columna Mes.
Saludos.
konstantinos
En respuesta a elliotdixon
@elliotdixon Un enfoque (tal vez no el mejor, pero no trabajo mucho con fechas fiscales) tal vez
Hasta la fecha fiscal actual = TOTALYTD(SUMA(Ventas[Amount);’Dates'[Date];«6-30») – El último es para especificar el fin de año ( Fiscal )
Hasta la fecha fiscal anterior = CALCULAR ([YTD Current Fiscal];DATEADD(‘Fechas'[Date];-1 AÑO))
2 años antes de YTD = CALCULAR([YTD Current Fiscal];AÑADIRFECHA(‘fechas‘[Date];-2 AÑOS))
De esta manera, puede tener cualquier fecha de año fiscal en el eje y compararlas todas … También puede dividir en Años
eje = año fiscal 2015 mostrará también 2014 y 2013
eje = año fiscal 2013 mostrará también 2012 y 2011
Espero que funcione..
JBeyers
En respuesta a konstantinos
@konstantinos ¡Muchas gracias por el esfuerzo, funcionó!