Promedio retroactivo de 6 meses basado en criterios dados

Un usuario Pregunto ✅

Whitney

¡Hola!

Espero que puedas ayudarme, por favor.

Me han encomendado la tarea de pronosticar el porcentaje de WIP que consumimos cada mes. Nuestra carga de trabajo fluctúa, por lo que una cifra de porcentaje codificada no es adecuada. En su lugar, nos gustaría utilizar nuestro promedio móvil de 6 meses para capturar las fluctuaciones en la carga de trabajo sin intervenir manualmente en el cálculo.

Vea la captura de pantalla de Excel, por ejemplo, calcs: cada fila es un trabajo, las celdas naranjas son un ejemplo de mi conjunto de datos actual. La etapa 1 y la etapa 2 generalmente no caen en el mismo mes. Nuestra definición de WIP en un mes actual dado = La etapa 1 comienza <> en blanco (es decir, se completa) y la etapa 2 comienza> hoy. Sin embargo, en un mes retrospectivo WIP = Etapa 1 Inicio <> en blanco Y Etapa 2 Inicio> Etapa 1 EOMonth Fecha. Será WIP todos los meses hasta que el inicio de la etapa 2 caiga en el calendario.

Whitney_1-1618895235928.png

Luego, cuando cada trabajo se identifica como WIP o no, las horas de la Etapa 2 para trabajos WIP en cada mes relativo deben sumarse para el promedio móvil. Luego, abril utilizará el promedio móvil de los meses relativos del 1 al 6, mayo utilizará los meses relativos del 2 al 7, junio utilizará los meses relativos del 3 al 8 y así sucesivamente.

Realmente no estoy seguro de por dónde comenzar con esto, ya sea para crear múltiples columnas para meses relativos, usar una fórmula dax grande con variables, etc.

Espero poder aprender algo sobre la estructura de datos, así como la asistencia de dax con esta consulta, ya que parece haber muchas partes móviles.

¡Cualquier ayuda es muy apreciada!

Salud,

En respuesta a Whitney

Hola @Whitney,

Pruebe la siguiente fórmula para crear medidas:

CurrentMonth = MAX('Slicer Table'[Current Month])
relative = 
VAR MaxDate = [CurrentMonth]
VAR MinDate = EOMONTH(MaxDate,-6) + 1
VAR IsWip = 
    IF(
        MAX('Calendar'[Date]) >= MAX('Table'[Stage 1 start])
        && MAX('Calendar'[Date]) <= EOMONTH(MAX('Table'[Stage 2 start]) ,-1),
        "WIP"
    )
return 
    IF(
        MAX('Calendar'[Date]) <= MaxDate && MAX('Calendar'[Date]) >= MinDate,
        IsWip
    )
Measure = 
var sum_1 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-5),"yyyy mmmm"))
  )
var sum_2 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-4),"yyyy mmmm"))
  )
var sum_3 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-3),"yyyy mmmm"))
  )
var sum_4 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-2),"yyyy mmmm"))
  )
var sum_5 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-1),"yyyy mmmm"))
  )
var sum_6 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],0),"yyyy mmmm"))
  )
var NotNullTotal = IF(sum_1<>BLANK(),1) + IF(sum_2<>BLANK(),1) + IF(sum_3<>BLANK(),1) + IF(sum_4<>BLANK(),1) + IF(sum_5<>BLANK(),1) + IF(sum_6<>BLANK(),1)
return DIVIDE( sum_1 + sum_2 + sum_3 + sum_4 + sum_5 + sum_6, NotNullTotal )

image.png

Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado. Házmelo saber de inmediato, esperando tu respuesta.

Atentamente,
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Hola @Whitney,

No conozco la estructura de tu modelo. Creo la siguiente medida.

¿Está la imagen debajo de la salida que desea?

Measure = 
var sum_1 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -1]="WIP")
var sum_2 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -2]="WIP")
var sum_3 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -3]="WIP")
var sum_4 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -4]="WIP")
var sum_5 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -5]="WIP")
var sum_6 = CALCULATE(SUM('Table'[Stage 2 hours]),'Table'[Month relative -6]="WIP")
var NotNullTotal = IF(sum_1<>BLANK(),1) + IF(sum_2<>BLANK(),1) + IF(sum_3<>BLANK(),1) + IF(sum_4<>BLANK(),1) + IF(sum_5<>BLANK(),1) + IF(sum_6<>BLANK(),1)
return DIVIDE( sum_1 + sum_2 + sum_3 + sum_4 + sum_5 + sum_6, NotNullTotal )

image.png

Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado. Házmelo saber de inmediato, esperando tu respuesta.

Atentamente,
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Whitney

En respuesta a v-kkf-msft

Hola @ v-kkf-msft, gracias por la respuesta. Mis datos no tienen las celdas verdes o sin color indicadas arriba, solo las naranjas. Estoy tratando de calcular las celdas verdes y se demostraron los cálculos anteriores. Ya sea a través de una columna o una medida, no estoy seguro de cuál es la mejor ruta.

Salud,

Whitney

En respuesta a Whitney

Hola @Whitney,

Pruebe la siguiente fórmula para crear medidas:

CurrentMonth = MAX('Slicer Table'[Current Month])
relative = 
VAR MaxDate = [CurrentMonth]
VAR MinDate = EOMONTH(MaxDate,-6) + 1
VAR IsWip = 
    IF(
        MAX('Calendar'[Date]) >= MAX('Table'[Stage 1 start])
        && MAX('Calendar'[Date]) <= EOMONTH(MAX('Table'[Stage 2 start]) ,-1),
        "WIP"
    )
return 
    IF(
        MAX('Calendar'[Date]) <= MaxDate && MAX('Calendar'[Date]) >= MinDate,
        IsWip
    )
Measure = 
var sum_1 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-5),"yyyy mmmm"))
  )
var sum_2 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-4),"yyyy mmmm"))
  )
var sum_3 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-3),"yyyy mmmm"))
  )
var sum_4 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-2),"yyyy mmmm"))
  )
var sum_5 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],-1),"yyyy mmmm"))
  )
var sum_6 = 
  CALCULATE(
    SUMX(FILTER('Table',[relative]="WIP"),'Table'[Stage 2 hours]),
    FILTER('Calendar','Calendar'[Year_Month] = FORMAT(EDATE([CurrentMonth],0),"yyyy mmmm"))
  )
var NotNullTotal = IF(sum_1<>BLANK(),1) + IF(sum_2<>BLANK(),1) + IF(sum_3<>BLANK(),1) + IF(sum_4<>BLANK(),1) + IF(sum_5<>BLANK(),1) + IF(sum_6<>BLANK(),1)
return DIVIDE( sum_1 + sum_2 + sum_3 + sum_4 + sum_5 + sum_6, NotNullTotal )

image.png

Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado. Házmelo saber de inmediato, esperando tu respuesta.

Atentamente,
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Whitney

En respuesta a v-kkf-msft

Hola @ v-kkf-msft. Para confirmar, ¿cuál es la diferencia entre la tabla de corte y la tabla de calendario, por favor?

En respuesta a Whitney

Hola @Whitney,

Modificar la medida relativo a la siguiente fórmula:

relative = 
VAR MaxDate = EOMONTH([CurrentMonth],0)
VAR MinDate = EOMONTH(MaxDate,-6) + 1
VAR IsWip = 
    IF(
        MAX('Calendar'[Date]) >= MAX('Table'[Stage 1 start])
        && MAX('Calendar'[Date]) <= EOMONTH(MAX('Table'[Stage 2 start]) ,-1),
        "WIP"
    )
return 
    IF(
        MAX('Calendar'[Date]) <= MaxDate && MAX('Calendar'[Date]) >= MinDate,
        IsWip
    )

La tabla de corte y la tabla de calendario:

  1. Lo más importante es que no se ha creado ninguna relación entre la tabla Calendario y la tabla Slicer. image.png
  2. La tabla Calendario y la tabla Slicer necesitan al menos un valor de día en cada mes. En mi archivo, para la comodidad de las pruebas, utilizo una función para generar automáticamente la fecha de cada día. Solo puede usar el valor de cualquier día de cada mes, porque solo necesitamos usar el año y mes valores de las fechas en estas dos tablas, y el día no es importante.
  3. También puede configurar la tabla Calendario y la tabla Slicer con el mismo valor.

Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado. Házmelo saber de inmediato, esperando tu respuesta.

Atentamente,
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Whitney

En respuesta a v-kkf-msft

Hola @ v-kkf-msft, gracias. Conseguí que el cálculo relativo funcionara, sin embargo, mi medida vuelve a estar en blanco. Mi tabla de fechas solo tiene una columna MonthYear, no una columna Yearmonth, ¿no estoy seguro de si esto podría ser el motivo?

Medida =
var sum_1 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], -5), «mmmm aaaa»))
)
var sum_2 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], -4), «mmmm aaaa»))
)
var sum_3 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], -3), «mmmm aaaa»))
)
var sum_4 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], -2), «mmmm aaaa»))
)
var sum_5 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], -1), «mmmm aaaa»))
)
var sum_6 =
CALCULAR(
SUMX (FILTER (‘Tabla’,[relative]= «WIP»), ‘Tabla'[Stage 2 hours]),
FILTRO (‘IDW DimDate’, ‘IDW DimDate'[MonthYear] = FORMATO (EDAR ([CurrentMonth], 0), «mmmm aaaa»))
)
var NotNullTotal = SI (suma_1 <> EN BLANCO (), 1) + SI (suma_2 <> EN BLANCO (), 1) + SI (suma_3 <> EN BLANCO (), 1) + SI (suma_4 <> EN BLANCO (), 1) + SI (suma_5 <> EN BLANCO (), 1) + SI (suma_6 <> EN BLANCO (), 1)
return DIVIDE (sum_1 + sum_2 + sum_3 + sum_4 + sum_5 + sum_6, NotNullTotal)

En respuesta a Whitney

Hola @Whitney,

¿Es el formato de fecha en su columna MonthYear??

Whitney

En respuesta a v-kkf-msft

@ v-kkf-msft No fue así. Acabo de cambiarlo a un formato de fecha para intentarlo y devolvió este error:

«No se pudieron cargar los datos para este objeto visual» MdxScript (Modelo) 8,26) Error de cálculo en la medida ‘IDW DimDate'[Measure]: Las operaciones de comparación de DAX no admiten la comparación de valores de tipo Fecha con valores de tipo Texto. Considere usar la función VALOR o FORMATO para convertir uno de los valores

En respuesta a Whitney

Hola @Whitney,

¿Cuál es el formato de datos de su [CurrentMonth]?

¿Podría compartir capturas de pantalla de datos de muestra para el [CurrentMonth] y Columna MonthYear?

Atentamente,
Winniz

Whitney

En respuesta a v-kkf-msft

@ v-kkf-msft Capture1.JPG Capture.JPG

En respuesta a Whitney

Hola @Whitney,

Supongo que los valores en los dos lados no coinciden, lo que provocó un valor nulo.

image.png

Cree la siguiente medida para probar. Si el valor de retorno es 1, significa que la expresión es correcta. Si el valor de retorno está vacío, significa que los valores en los dos lados no son iguales.

Test = CALCULATE( 1, FILTER('IDW DimDate','IDW DimDate'[MonthYear] = FORMAT(EDATE([CurrentMonth],-5),"mmmm yyyy")))

Atentamente,
Winniz

Whitney

En respuesta a v-kkf-msft

@ v-kkf-msft, ahora recibo el siguiente error, el formato MonthYear y CurrentMonth es según las capturas de pantalla anteriores

«Las operaciones de comparación de DAX no admiten la comparación de valores de tipo Fecha con valores de tipo Texto. Considere utilizar la función VALOR o FORMATO para convertir uno de los valores».

Whitney

En respuesta a Whitney

@ v-kkf-msftI copié su expresión de fecha para Year_Month y todo encajó y está funcionando ahora. ¡Muchas gracias por la paciencia y ayuda!
Capture.JPG

Whitney

En respuesta a Whitney

@ v-kkf-msft Hola, esto es posible estirar el tema de este hilo. Lo que me gustaría hacer es agregar el valor de mi medida a un gráfico de barras apiladas en este formato. No parece posible por lo que estoy leyendo a menos que haga de todos mis estados diferentes una medida en lugar de un valor de columna. ¿Tiene una opinión diferente sobre esto? Gracias de nuevo, Whitney

Capture.JPGCapture1.JPG

Amitchandak

@Whitney, parece un enfoque similar al blog de recursos humanos. aquí el empleado actual es como WIP

https: //community.powerbi.com/t5/Community-Blog/HR-Analytics-Active-Employee-Hire-and-Termination-tr …

Consulte: https://www.youtube.com/watch?v=e6Y-l_JtCq4

Whitney

En respuesta a Amitchandak

Hola @amitchandak, gracias. Intenté replicar esto usando mis datos, sin embargo, recibo este error «se encontró una representación numérica no válida de un valor de fecha» en las siguientes dos fórmulas (estas son las últimas 2 en el ejemplo que ha proporcionado)

WIP del último período =
var _min_date = minx (todos (‘IDW DimDate’), ‘IDW DimDate'[Date])
var _Expression = if (ISFILjected (‘IDW DimDate'[MonthYear]), maxx (‘IDW DimDate’, DATEADD (‘IDW DimDate'[Date], -1, MES)), maxx (‘IDW DimDate’, DATEADD (‘IDW DimDate'[Date],-1 AÑO)))
Regreso
CALCULAR (COUNTx (FILTRO (‘Hoja de seguimiento de motores’, ‘Hoja de seguimiento de motores'[Inspected]<= _ Expresión && 'Hoja de seguimiento de motores'[Inspected]> = _ min_date && (ISBLANK (‘Hoja de seguimiento de motores'[Planned Assembly Start]) || ‘Hoja de seguimiento de motores'[Planned Assembly Start]> _Expression)), (‘Hoja de seguimiento de motores'[Work Order Number])), CROSSFILTER (‘Hoja de seguimiento de motores'[Inspected], ‘IDW DimDate'[Date],Ninguno))

Cambio de% WIP = SI (NO (ESBLANCO ([Last Period WIP])), CALCULAR ((DIVIDIR ([CurrentWIP],[Last Period WIP]) -1) * 100))

¿Podría ayudarnos a explicar por qué existe el error?

Muchas gracias,

Whitney

Deja un comentario

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