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.
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,
v-kkf-msft
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 )
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.
v-kkf-msft
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 )
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
v-kkf-msft
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 )
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?
v-kkf-msft
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:
- Lo más importante es que no se ha creado ninguna relación entre la tabla Calendario y la tabla Slicer.
- 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.
- 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?
v-kkf-msft
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
v-kkf-msft
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
v-kkf-msft
En respuesta a Whitney
Hola @Whitney,
Supongo que los valores en los dos lados no coinciden, lo que provocó un valor nulo.
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!
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
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)
¿Podría ayudarnos a explicar por qué existe el error?
Muchas gracias,