Mostrar los últimos 13 meses según la selección de segmentación individual del usuario

Un usuario Pregunto ✅

cneumann

Hola a todos,

Estoy creando un gráfico de ingresos netos continuos de 13 meses y encontré un requisito para mostrar los últimos 13 meses en el eje x según el mes (AAAAMM) que el usuario seleccionó en una segmentación AAAAMM.

El siguiente gráfico es el que quiero:
Rolling 13 gráfico.png

Para obtener el comportamiento deseado, actualmente necesito seleccionar cada uno de los 13 meses en la cortadora YYYYMM:

rodando 13 cortadora.png

¿Alguna idea sobre cómo puedo hacer que esto funcione en Power BI para que el usuario solo tenga que seleccionar el mes base?

Gracias por adelantado,
cristian.

matemusic

En respuesta a cneumann

Hola de nuevo 🙂

Ahora entiendo, y probé el segundo enfoque. Creé dos tablas, que no están relacionadas con ninguna de las tablas. Uno es Año, con una columna (valores: 2010, 2011, 2012… 2016). Otro es Mes, con una columna (valores: 1,2,3…12).

Entonces creé esta medida:

Sum of profit = 
var Ldate = date(max('Year'[Year]);max('Month'[Month]);1) //Last date

var Fdate = EDATE(Ldate;-13) //First date

var SumProfit = sum('traffic'[profit]) //Calculation

return

 if(min('Date table'[Date])<fdate;
         blank();
         if(min('Date table'[Date])>Ldate;
                   blank();
                   SumProfit))

En el eje x sumé todos los meses y años (2010-1, 2010-2…. 2016-12) y en valor sumé medida.

Mostrar elementos sin datos debe estar desmarcado.

datos.pnginforme.png

ydiss

Hola @cneumann

Tuve un desafío similar hoy y aunque ya obtuviste una respuesta para esto y ha sido bien aceptado, realmente no parecía funcionar para mí y mis requisitos; No estoy exactamente seguro de por qué, pero la sintaxis simplemente no fue aceptada por mi parte, no me gustaba hacer referencia a Ldate en la siguiente variable entre otros problemas e, incluso si hubiera podido depurarlo y hacer que funcionara, estaba esperando una solución un poco más elegante que no implicara la creación de tablas y la codificación de mis medidas existentes.

Entonces, tuve que salir del paso (todavía soy muy nuevo, solo comencé a aprender PowerBI y DAX en el último mes) y pasé todo el día en una solución que funciona para mí y quería compartirla en caso de que alguien más pueda encontrar es útil para resolver este problema. Es una sola medida que se puede usar contra cualquier campo de fecha:

Within13MonthRange_Date = IF (
    DATEDIFF(
        MAX('Table'[Date]),
	    CALCULATE(
		    MAX('Table'[Date]),
		    ALLSELECTED()),
        MONTH) <= 13,
    1,
    0)

Esto devuelve 1 o 0.

Reemplazar ‘Tabla'[Date] con cualquier fecha en la que esté cortando (en su caso, cualquier fecha que esté en su tabla de ingresos) y devolverá 1 cada vez que los datos en el objeto visual tengan un contexto de filtro de fecha dentro de los 13 meses posteriores a la fecha máxima que haya seleccionado en su cortadora O, si no ha seleccionado nada, el máximo de 13 meses de todo su conjunto de datos.

Luego filtra su visual en la medida: es 1 y no es 0.

Utilicé esto específicamente para limitar dinámicamente las imágenes de información sobre herramientas a los datos de los últimos 12-13 meses, dependiendo de las segmentaciones que afecten a la página; sin esto, cuando no tiene nada dividido, la información sobre herramientas visual (por ejemplo, con gráficos de barras con meses a lo largo del eje X) puede mostrar demasiados datos y se recortará a los primeros 12-13 meses de datos, lo que no es útil. Al usar la medida anterior aplicada como un filtro al objeto visual de información sobre herramientas, el objeto visual siempre representa los datos de los últimos 12 o 13 meses hasta la fecha máxima dividida, por lo que siempre muestra los datos relevantes de forma dinámica. Puede cambiarlo a lo que quiera (días, meses, años y cualquier valor) todo dentro de una sola expresión DAX.

El resultado es que fui de esto:

Una información sobre herramientas que muestra datos de mayo de 2017 a abril de 2018, pero sin forma de usar el control deslizante para ver otros datos.  No es bueno.Una información sobre herramientas que muestra datos de mayo de 2017 a abril de 2018, pero sin forma de usar el control deslizante para ver otros datos. No es bueno.

A esto:

Mucho más útil, mostrando siempre los datos de los últimos 12 meses a menos que el usuario corte (en cuyo caso mostrará el máximo de 12 meses de esos datos cortados)Mucho más útil, mostrando siempre los datos de los últimos 12 meses a menos que el usuario corte (en cuyo caso mostrará el máximo de 12 meses de esos datos cortados)

Espero que esto ayude a alguien.

dpombal

En respuesta a ydiss

Mi problema es cómo arreglar el selector de una segmentación de período (por ejemplo, año-mes) en cada cambio de fila, saludos.

matemusic

Oye,

si entiendo bien su pregunta, aquí hay una idea con la función dax:

Medida = var LastDate = max(datetable[date])

var FirstDate = fecha (año (edate (LastDate; -13)); mes(edate(ÚltimaFecha;-13));1)

volver calcular (tu calculo;fechasentre(tabla de fechas[date];PrimeraFecha;ÚltimaFecha))

Algo como esto. Déjeme saber si esto le ayuda.

cneumann

En respuesta a matemusic

Hola amigo musico

Intenté su enfoque pero no resolvió mi problema.

Mi medida ya es correcta, me da la suma móvil de 12 meses basada en el mes del eje X.

El punto aquí es que tengo que restringir la tabla de fechas para mostrar solo los 13 meses anteriores al mes seleccionado. Creo que escribir una medida para esto no ayudará ya que no puedo poner una medida en el eje X.

He intentado lo siguiente basado en tu respuesta:

Last13Months = 
VAR 
	LDATE = MAX ( 'msc DimDate'[Date] )
VAR 
	FDATE = DATE ( YEAR ( EDATE ( [LastDate]; -13 ) ); MONTH ( EDATE ( [LastDate] ; -13 ) ); 1 )
RETURN 
	DATESBETWEEN ( 'msc DimDate'[Date]; FDATE; LDATE )

Tenga en cuenta que eliminé la función CALCULAR ya que no tengo que calcular un total basado en un filtro, lo que necesito es calcular los últimos 13 meses para poner esto en el eje X.

ameya_lokhande

En respuesta a cneumann

donde esta el [Lastdate] ¿viene de?

rajendrav2016

En respuesta a ameya_lokhande

¿Qué es el cálculo del mes del año?

matemusic

En respuesta a cneumann

Hola de nuevo 🙂

Ahora entiendo, y probé el segundo enfoque. Creé dos tablas, que no están relacionadas con ninguna de las tablas. Uno es Año, con una columna (valores: 2010, 2011, 2012… 2016). Otro es Mes, con una columna (valores: 1,2,3…12).

Entonces creé esta medida:

Sum of profit = 
var Ldate = date(max('Year'[Year]);max('Month'[Month]);1) //Last date

var Fdate = EDATE(Ldate;-13) //First date

var SumProfit = sum('traffic'[profit]) //Calculation

return

 if(min('Date table'[Date])<fdate;
         blank();
         if(min('Date table'[Date])>Ldate;
                   blank();
                   SumProfit))

En el eje x sumé todos los meses y años (2010-1, 2010-2…. 2016-12) y en valor sumé medida.

Mostrar elementos sin datos debe estar desmarcado.

datos.pnginforme.png

musaenda

En respuesta a matemusic

Hola @matemusic,

solo quería hacerle saber que su solución me ayudó a lograr el requisito de mi usuario final.

¡¡Felicitaciones a usted!!

Anónimo

En respuesta a matemusic

Hola,

Encontre esto muy utíl. Ahora, ¿puede ayudarme a mostrar el valor del mes seleccionado en la tarjeta visual (sin conectar la tabla de años y la tabla de fechas)? uso la cortadora de aaaammm … estoy usando el año y el mes de una tabla en sí

ignas

En respuesta a matemusic

Hola @matemusic

Realmente tienes una excelente solución.

Necesito tener 2 tablas:

1. Primera tabla: debe mostrar exactamente lo que creó (funciona).

2. Segunda tabla: si se selecciona el mes, solo debe mostrar ese mes. Si no se selecciona el mes, debería mostrar todas las fechas de ese año.

Sum of profit (month) = 
var Ldate = date(max('Year'[Year]);max('Month'[Month]);1) //Last date

var Fdate = EDATE(Ldate;0) //First date

var SumProfit = sum(traffic[Amount]) //Calculation

return

 IF(HASONEVALUE('Month'[Month]);
     if(min('Date table'[Date])<fdate;
         blank();
         if(min('Date table'[Date])>Ldate;
                   blank();
                   SumProfit));
                   [profit])

Me sale bien con la parte del mes, pero no encuentro como puedo saber la parte del año. ¿Tienes alguna idea?
Aquí está el archivo

matemusic

En respuesta a ignas

Hola, tal vez esto ayude. Agregué un nuevo año de columna en la tabla de calendario. El texto azul en negrita en el código representa el nuevo código

Sum of profit (month) = 
var Ldate = date(max('Year'[Year]);max('Month'[Month]);1) //Last date

var Fdate = EDATE(Ldate;0) //First date
VAR SYear = CALCULATE(max('Year'[Year]);ALLSELECTED()) -- it can be without calculate and allselected, i am just used to work in that way
VAR SumProfitYear = CALCULATE([profit];'Date table'[Year]=SYear)
var SumProfit = sum(traffic[Amount]) //Calculation
return
 IF(HASONEVALUE('Month'[Month]);
     if(min('Date table'[Date])<fdate;
         blank();
         if(min('Date table'[Date])>Ldate;
                   blank();
                   SumProfit));
                   SumProfitYear)

Anónimo

En respuesta a matemusic

¡Gracias por la solución!

Traté de aplicar su solución, pero con 1 cortadora que tiene Mes+Año combinados. No funcionó por alguna razón.

Todavía lo conseguí trabajando duro creando 2 tablas

Tabla 1:

Mes – «01»

Año – «2017»

MesAño – «201701»

Tabla 2:

Mes – «01»

RelaciónMesAño.png

Ahora puedo usar la columna YearMonth en mi cortadora y sus soluciones todavía hacen el resto 🙂

cneumann

En respuesta a matemusic

Hola @matemusic,

Gran solución.

¡Gracias!

CheenuSing

En respuesta a matemusic

Hola @matemusic

Excelente solución.

Salud

CheenuSing

bhaveshpatel

Hola,

Puede usar el cortador de elementos visuales de la línea de tiempo para sus requisitos específicos.

Esto se puede descargar en

https://app.powerbi.com/visuals/

Este blog de video de amir netz le brindará más información sobre cómo aprovechar ese elemento visual para sus requisitos específicos.

https://powerbi.microsoft.com/en-us/blog/visual-awesomeness-unlocked-the-timeline-slicer/

Gracias y Saludos,

Bhavesh

cneumann

En respuesta a bhaveshpatel

Hola Bhavesh,

Ya he visto este elemento visual personalizado, pero «visualmente» no encaja muy bien en los informes, ya que ocupa demasiado espacio en la vista del informe.

Además, no cubre completamente los requisitos, ya que es necesario seleccionar el rango, no solo seleccionar el mes base y las porciones visuales el mes base más los últimos 12 meses.

En el foro de ideas de PowerBI, hay una publicación que solicita mejores filtros de rango de fechas, lo que espero que haga que la función de corte de tiempo sea más aplicable.

Gracias por su respuesta,

cristian.

En respuesta a cneumann

Hola cneumann,

Ya hay preguntas hechas en los foros aquí para solicitar las cortadoras para un rango de tiempo especial.

Bueno, actualmente no puedo dar ninguna resolución DAX con respecto a cómo escribir la medida para trabajar con un rango de tiempo, basado en una sola selección.

Revisa el hilo similar:

http://community.powerbi.com/t5/Desktop/Dynamic-Display-Last-12-Months-in-Visual-According-to-Month/…

Por cierto, he votado por Mejores filtros de rango de tiempo.

Saludos

cneumann

En respuesta a v-micsh-msft

Hola Michael,

Gracias por su respuesta.

Esperemos a que lleguen los mejores filtros de rango de tiempo. Por ahora, nuestro cliente utilizará la segmentación YYYYMM y la segmentación de la línea de tiempo.

-Cristian.

bhaveshpatel

En respuesta a cneumann

Hola cristian,

¿Podemos aprovechar el poder de DAX para implementar su requisito específico?

DAX puede pulir su medida de manera que cada vez que el usuario final seleccione el mes específico, mostrará los últimos 13 meses de ingresos continuos.

Avísame si puedo ayudarte más.

Gracias y Saludos,

Bhavesh

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *