Medida DAX: un total acumulado acumulado que devuelve una FECHA en que se alcanza el objetivo

Un usuario Pregunto ✅

MrCee

Hola comunidad

Sin usar columnas calculadas, ya que me gustaría poder pivotar por proyecto en Power BI usando medidas,
Necesito encontrar una manera de extraer la fecha exacta en la que la medida total acumulada en ejecución ha superado un objetivo.

Este destino se puede encontrar repitiendo proyecto por proyecto en la misma tabla, o alternativamente como una búsqueda RELACIONADA. Estoy usando Power BI pero visualizo medidas en Power Pivot / Excel con fines de prueba

PIVOT.png
El total acumulado acumulado se calcula mediante un patrón DAX estándar como tal y, como se esperaba, equivale a las ventas totales, ya que la medida incluye todas las filas y TARGET aún no la ha filtrado.

TOTAL DE EJECUCIÓN ACUMULADO: = CALCULAR (
SUM (VENTAS[AMOUNT]),
FILTRO (VENTAS,
VENTAS[Sales_Date]> = MIN (VENTAS[Sales_Date])))

Lo que me gustaría lograr a continuación es encontrar la medida acumulada del total acumulado por la FILA exacta del proyecto que muestre la ‘FECHA OBJETIVO ALCANZADO’ MÍNIMO donde el OBJETIVO de ventas ha sido superado por la medida total acumulada.

He filtrado la siguiente tabla en el PROYECTO # 3 con algunas columnas manuales de Excel para mostrarle la FILA que debe devolverse y el VALOR.

RESULTADOS EXCEL.png

En la actualidad, esto no funciona. Espero que ayude a mostrar lo que estoy tratando de lograr:

ALCANZAR LA FECHA OBJETIVO: = CALCULAR (
MIN (VENTAS[Sales_Date]),
FILTRO (VENTAS,[CUMULATIVE RUNNING TOTAL]> = RELACIONADOS (PROYECTOS[TARGET])))

o si el valor objetivo se repite en la misma tabla para cada proyecto como se muestra en la captura de pantalla anterior

ALCANZAR LA FECHA OBJETIVO: = CALCULAR (
MIN (VENTAS[Sales_Date]),
FILTRO (VENTAS,[CUMULATIVE RUNNING TOTAL]> = MIN (VENTAS[TARGET])))

Probablemente me esté perdiendo algo realmente simple aquí, pero hasta ahora no he visto una solución para este.
¡Gracias por adelantado!

Ashish_Mathur

En respuesta a Ashish_Mathur

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

Ashish_Mathur

Hola,

Comparta el enlace desde donde puedo descargar su archivo Excel basado en fórmulas.

Ashish_Mathur

En respuesta a Ashish_Mathur

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

Sumdib

En respuesta a Ashish_Mathur

¿Alguien puede proporcionar la medida en la solución?

Ashish_Mathur

En respuesta a Sumdib

Hola,

¿No puede descargar mi archivo de resolución de PBI?

No creo que sea una buena idea deshacerse de una tabla de fechas.

Crear una columna calculada con la columna TARGET_ACHIEVED podría ser mucho mejor para el rendimiento.
Sin embargo, este código debería funcionar como una medida (¡no lo probé, es posible que haya errores!)

DateTargetReached :=
IF (
    HASONEVALUE ( Projects[Project_Name] ),
    VAR TargetRunningTotal =
        SELECTEDVALUE ( Projects[Target] )
    VAR FirstDateOverTarget =
        FIRSTNONBLANK (
            Sales[Date],
            IF (
                [Cumulative Running Total] >= TargetRunningTotal,
                1
            )
        )
    RETURN
        FirstDateOverTarget
)

BastiaanBrak

En respuesta a Marcorusso

gracias Marco, he intentado modificar tu solución para mi propio caso de uso, pero no llegué allí. ¿Esperando que puedas ayudarme con esto?

Para aclarar: supongamos que el OP no estaba interesado en la fecha en que se alcanzó el objetivo por proyecto, sino en la fecha más temprana (y más reciente) en general (en muchos más proyectos). Al eliminar la condición IF más HASONEVALUE, el total acumulado acumulado se agrega a través de los proyectos y, por lo tanto, el resultado daría una ‘fecha de acierto objetivo’ que es anterior a la realidad, por lo que no funciona. ¿Cuál es la modificación requerida en su DAX anterior que lo haría funcionar en el escenario que describí anteriormente?

Ashish_Mathur

En respuesta a BastiaanBrak

Hola,

Comparta algunos datos, describa la pregunta y muestre el resultado esperado.

BastiaanBrak

En respuesta a Ashish_Mathur

hola @Ashish_Mathur y gracias por interesarse en mi pregunta. Mi caso de uso es un poco diferente al OP pero en esencia muy similar. Supongamos que tengo la siguiente tabla de datos simple llamada Prueba, con dos (o más) ID distintos:

BastiaanBrak_0-1617842699342.png

Usando DAX, he creado una medida de ‘Total en ejecución’:

Total acumulado =
CALCULAR(
SUM (‘Prueba'[Value]) / DISTINCTCOUNT (‘Prueba'[ID]),
FILTRAR(
ALLSELECTED (‘Prueba'[Date]),
ISONORAFTER (‘Prueba'[Date], MAX (‘Prueba'[Date]), DESC)
)
)

Lo que quiero hacer es tener dos Tarjetas en el tablero que indiquen la fecha más temprana y la última en la que se excede un objetivo en particular, digamos 325. Gráficamente:

BastiaanBrak_1-1617843010708.png

He intentado adaptar la medida que creó @marcorusso:

FirstDateTargetReached =
SI (
HASONEVALUE (Prueba[ID] ),
VAR TargetRunningTotal = 325
VAR FirstDateOverTarget =
PRIMER NO BLANCO (
Prueba[Date],
SI (
[Running total] > = TargetRunningTotal,
1
)
)
REGRESO
FirstDateOverTarget
)

pero esto no es adecuado aquí porque requiere que se seleccione una única ID; a menos que se filtre una identificación (por ejemplo, haciendo clic en una entrada de identificación en la leyenda), la tarjeta mostrará (EN BLANCO).

Entonces, la pregunta es: ¿qué medidas de DAX permiten que los elementos visuales de la tarjeta muestren las fechas más antiguas y más recientes en que se excede un objetivo determinado?

.pbix con lo anterior está disponible aquí: https://easyupload.io/i9ubac

Muchas gracias Bastiaan

En respuesta a BastiaanBrak

¿Quieres esto?

FirstDateTargetReached =
MINX (
    DISTINCT ( Test[ID] ),
    CALCULATE (
        VAR TargetRunningTotal = 325
        VAR FirstDateOverTarget =
            FIRSTNONBLANK ( Test[Date], IF ( [Running total] >= TargetRunningTotal, 1 ) )
        RETURN
            FirstDateOverTarget
    )
)

lance_6

En respuesta a Marcorusso

@marcorusso

¿Cuál es el beneficio de usar DISTINCT vs VALUES aquí?

En respuesta a lance_6

En caso de que Test esté en el lado único de una relación, no desea iterar el valor EN BLANCO de una relación no válida.

lance_6

En respuesta a Marcorusso

Eso tiene sentido. ¡Gracias por la respuesta!

BastiaanBrak

En respuesta a Marcorusso

@marcorusso solo quería darte las gracias de nuevo. Modifiqué su solución DAX para mi caso de uso específico. ICYMBI, el informe se publica aquí: Herramienta de pronóstico de migración del pulgón de la zanahoria del sauce | AHDB

BastiaanBrak_0-1621635521488.png

BastiaanBrak

En respuesta a Marcorusso

Sí @marcorusso, ¡muchas gracias!

BastiaanBrak_0-1617869928177.png

Ashish_Mathur

En respuesta a BastiaanBrak

Hola,

No entiendo el significado de «fechas más tempranas y últimas que se excede un objetivo determinado«. Según los datos que ha compartido, comparta su resultado exacto esperado.

BastiaanBrak

En respuesta a Ashish_Mathur

@Ashish_Mathur, el resultado exacto que espero según mis datos de prueba es que el elemento visual de la tarjeta con ‘FirstDateTargetReached’ mostrará ’27 de marzo ‘, dado que fue la fecha más temprana en la que se superó el objetivo (consulte la descripción emergente):

BastiaanBrak_0-1617846460727.png

Del mismo modo, el objeto visual de la tarjeta con ‘LastDateTargetReached’ debería mostrar ’30 de marzo ‘, dado que esa fue la última fecha en la que se superó el objetivo (de nuevo, consulte la descripción emergente):

BastiaanBrak_1-1617846531027.png

Mi conjunto de datos real tiene más ID que dos, pero supongo que el principio es el mismo.

Gracias Bastiaan

Deja un comentario

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