Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
3 years ago

Problema de Function Dateadd

¡Hola a todos!

Necesito ayuda, por favor.

Creé una matriz con algunos datos de sensores. Las columnas muestran el sensor, el cliente, el producto, el volumen que mide, un mensaje de alerta, el pronóstico para 7 y 14 días, los días hasta el nivel 0 y el momento de la última conferencia.

Todo estaba bien, pero por alguna razón dejó de funcionar.

Las fórmulas de pronóstico fueron hechas por mí y son un poco complicadas.

Los de 7 y 14 días son similares.

El razonamiento se basa en la ecuación de la recta y teniendo la última lectura y una cierta lectura en el pasado, extrapolar la línea a días futuros.

Entonces, creé 8 pronósticos diferentes y promedié todos (haciendo una técnica de ensamble) para tener una mejor aproximación.

EnsamblePronostico7Dias =

DÓNDE _Pronostico7DiasVs1DiasAntes = SI([Pronostico7DiasVs1DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs2DiasAntes = SI([Pronostico7DiasVs2DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs3DiasAntes = SI([Pronostico7DiasVs3DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs4DiasAntes = SI([Pronostico7DiasVs4DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs5DiasAntes = SI([Pronostico7DiasVs5DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs6DiasAntes = SI([Pronostico7DiasVs6DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs7DiasAntes = SI([Pronostico7DiasVs7DiasAntes] = 0,0,1)
DÓNDE _Pronostico7DiasVs8DiasAntes = SI([Pronostico7DiasVs8DiasAntes] = 0,0,1)
DÓNDE _Divisor = _Pronostico7DiasVs1DiasAntes
+ _Pronostico7DiasVs2DiasAntes
+ _Pronostico7DiasVs3DiasAntes
+ _Pronostico7DiasVs4DiasAntes
+ _Pronostico7DiasVs5DiasAntes
+ _Pronostico7DiasVs6DiasAntes
+ _Pronostico7DiasVs7DiasAntes
+ _Pronostico7DiasVs8DiasAntes

DEVOLUCIÓN
SI(
_Divisor = 0
,[ultimo_volumen]
,( [Pronostico7DiasVs1DiasAntes]
+ [Pronostico7DiasVs2DiasAntes]
+ [Pronostico7DiasVs3DiasAntes]
+ [Pronostico7DiasVs4DiasAntes]
+ [Pronostico7DiasVs5DiasAntes]
+ [Pronostico7DiasVs6DiasAntes]
+ [Pronostico7DiasVs7DiasAntes]
+ [Pronostico7DiasVs8DiasAntes]
) / _Divisor
)

(Esto 8 veces cambiando solo el "DiasAtras")

Pronostico7DiasVs8DiasAntes =

DÓNDE DiasAtras = 8

DÓNDE VolumeHaceDias = CALCULAR([ultimo_volumen], FECHAAÑADIR(etindustrialcontainerobserved[fecha],-DiasAtras,DÍA))

DÓNDE _Y = [ultimo_volumen] - VolumeHaceDias

DÓNDE _m = _Y / DiasAtras

DÓNDE _b = [ultimo_volumen]

DEVOLUCIÓN
SI(
(_m*[7Días] + _b) > [ultimo_volumen]
,0
,(_m*[7Días] + _b)
)
VolumenHace8Dias = CALCULAR([ultimo_volumen], FECHAAÑADIR(etindustrialcontainerobserved[fecha],-8,DÍA))
Y para los días hasta el nivel 0 hice algo similar usando la ecuación de la recta
EnsambleDiasNivelCero =

DÓNDE _Divisor1Dia = SI([Pendiente1Dia] > -0.5,0,1)
DÓNDE _Divisor2Dias = SI([Pendiente2Dias] > -0.5,0,1)
DÓNDE _Divisor3Dias = SI([Pendiente3Dias] > -0.5,0,1)
DÓNDE _Divisor4Dias = SI([Pendiente4Dias] > -0.5,0,1)
DÓNDE _Divisor5Dias = SI([Pendiente5Dias] > -0.5,0,1)
DÓNDE _Divisor6Dias = SI([Pendiente6Dias] > -0.5,0,1)
DÓNDE _Divisor7Dias = SI([Pendiente7Dias] > -0.5,0,1)
DÓNDE _Divisor8Dias = SI([Pendiente8Dias] > -0.5,0,1)
DÓNDE _Divisor = _Divisor1Dia
+ _Divisor2Dias
+ _Divisor3Dias
+ _Divisor4Dias
+ _Divisor5Dias
+ _Divisor6Dias
+ _Divisor7Dias
+ _Divisor8Dias

DÓNDE _DiasNivelCero1Dia = SI([Pendiente1Dia] > -0.5,0,[DiasNivelCero1Dia])
DÓNDE _DiasNivelCero2Dias = SI([Pendiente2Dias] > -0.5,0,[DiasNivelCero2Dias])
DÓNDE _DiasNivelCero3Dias = SI([Pendiente3Dias] > -0.5,0,[DiasNivelCero3Dias])
DÓNDE _DiasNivelCero4Dias = SI([Pendiente4Dias] > -0.5,0,[DiasNivelCero4Dias])
DÓNDE _DiasNivelCero5Dias = SI([Pendiente5Dias] > -0.5,0,[DiasNivelCero5Dias])
DÓNDE _DiasNivelCero6Dias = SI([Pendiente6Dias] > -0.5,0,[DiasNivelCero6Dias])
DÓNDE _DiasNivelCero7Dias = SI([Pendiente7Dias] > -0.5,0,[DiasNivelCero7Dias])
DÓNDE _DiasNivelCero8Dias = SI([Pendiente8Dias] > -0.5,0,[DiasNivelCero8Dias])
DÓNDE _Numerador = _DiasNivelCero1Dia
+ _DiasNivelCero2Dias
+ _DiasNivelCero3Dias
+ _DiasNivelCero4Dias
+ _DiasNivelCero5Dias
+ _DiasNivelCero6Dias
+ _DiasNivelCero7Dias
+ _DiasNivelCero8Dias

DEVOLUCIÓN
SI(
O(_Numerador / _Divisor > 90, _Divisor = 0)
, "Más de 90 días"
,_Numerador / _Divisor
)
DiasNivelCero8Dias = - [ultimo_volumen] / [Pendiente8Dias]
Pendiente8Dias = SI(
Medidas[Diferencia8Dias] = 0
,-0.1
,Medidas[Diferencia8Dias] / 8
)
Diferencia8Dias = [ultimo_volumen] - [VolumenHace8Dias]
ultimo_volumen = DÓNDE __lastDateTime = ..MAX(etindustrialcontainerobservado[date_hour_round])
DEVOLUCIÓN
CALCULAR([volumen_origen],'Calendario Base'[Dia] = __lastDateTime)
VolumenHace8Dias = CALCULAR([ultimo_volumen], FECHAAÑADIR(etindustrialcontainerobserved[fecha],-8,DÍA))
Puse todas las fórmulas para dar contexto pero no creo que ese sea el problema, es algo con los datos.
El error es para un solo sensor, si lo filtro la matriz funciona. El 102 es el problema

7 Replies

  • @Antonio_Gomez ,

    El código del error se refiere al uso de la fórmula de inteligencia de tiempo en DATEADD, para que esto funcione, debe usar una columna que tenga fechas continuas y sin espacios.

    Cree que en este caso debe crear una tabla de calendario a partir del 1/ene/min_year 31/dic/max_year relacionada con etindustrialcontainerobserved[date] y el uso de esa columna en su fecha agregar parte del cálculo esto debería resolver el mensaje que está recibiendo.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      @MFelix

      Gracias por la respuesta. Pero, estoy usando esa tabla de calendario que mencionaste. Las mismas fórmulas se aplican a todo el sensor, pero solo el 102 es el problema.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @Antonio_Gomez ,

        Está utilizando la tabla del calendario, sin embargo, en su cálculo se refiere a la tabla etindustrialcontainerobserved, ¿o ya cambió esto?

        VolumenHace8Dias = CALCULATE([ultimo_volumen], DATEADD(etindustrialcontainerobserved[date],-8,DAY))

        La fórmula debe ser:

        VolumenHace8Dias = CALCULATE([ultimo_volumen], DATEADD('Calendario Base'[date],-8,DAY))

        ¿Puede compartir una maqueta de datos o una muestra de su archivo PBIX? Puede usar un enlace onedrive, google drive, we transfer o similar para cargar sus archivos.

        Si la información es confidencial, compártala a través de un mensaje privado.