¿Cómo escribir la medida para obtener el valor incremental del valor faltante para una fecha en particular?

Un usuario Pregunto ✅

Hola expertos,

Supongamos que tengo la siguiente tabla en la que me falta algún valor en unos pocos días.

Escenario 1

Día Valor

día1 3
dia 2
día 3
día 4
dia 5
día6
día7 8

Como vemos arriba, tenemos un valor perdido del día 2 al día 6.

Necesito llenar este espacio vacío con algún valor basado en mi condición. Así que la condición sea como
Condición 1: (Diferencia de valor máximo-mínimo / recuento de valores en blanco + 1)
(Ej: de la tabla del escenario 1 el valor máximo es 8 y el valor mínimo es 3 y el recuento de espacios en blanco es: 5 luego 8-3 / 5 + 1 = 0.83)

Condición 2: El valor de salida de la condición 1 debe agregarse a todos los valores en blanco (primer valor no en blanco))
(Por ejemplo: la salida de la condición 1 es: 0,83 + valor del día 1)
día1 — 3
día2 — 3 + 0,83 = 3,83 (día 1 + valor de la condición 1: 0,83)
día3 — 3,83 + 0,83 = 4,66 (Día 2 + valor de la condición 1: 0,83)
día 4 — 3,83 + 0,83 = 4,66 (día 3 + valor de la condición 1: 0,83)
día5 — 5,5 + 0,83 = 6,3 (día 4 + valor de la condición 1: 0,83)
día6 — 6,3 + 0,83 = 7,13 (día 5 + valor de la condición 1: 0,83)
día7 — 8

¿Cómo escribir una medida basada en la condición anterior en Power BI?

Gracias,
Annu

Fowmy

En respuesta a Anónimo

@Anónimo

Pruebe esta medida:

Missing Fill =
VAR _CURVALUE = [Metric Total]
VAR _CURRDAY =
    SELECTEDVALUE ( DateTable[Date] )
VAR _PREVDAY =
    LASTNONBLANK (
        FILTER ( ALLSELECTED ( DateTable[Date] ), DateTable[Date] < _CURRDAY ),
        [Metric Total]
    )
VAR _NEXTDAY =
    FIRSTNONBLANK (
        FILTER ( ALLSELECTED ( DateTable[Date] ), DateTable[Date] > _CURRDAY ),
        [Metric Total]
    )
VAR _PREVAL =
    CALCULATE ( [Metric Total], DateTable[Date] = _PREVDAY, ALL ( DateTable ) )
VAR _NEXTVAL =
    CALCULATE ( [Metric Total], DateTable[Date] = _NEXTDAY, ALL ( DateTable ) )
VAR _BLANKS =
    DATEDIFF ( _PREVDAY, _NEXTDAY, DAY )
VAR _DIFF =
    DIVIDE ( _NEXTVAL - _PREVAL, _BLANKS )
VAR _BLANKINC =
    COUNTROWS (
        FILTER (
            ALLSELECTED ( DateTable[Date] ),
            DateTable[Date] < _CURRDAY
                && DateTable[Date] >= _PREVDAY
        )
    )
VAR _INCREMENT =
    CALCULATE ( [Metric Total], DateTable[Date] = _PREVDAY ) + ( _DIFF * _BLANKINC )
RETURN
    IF (
        ISBLANK ( _CURVALUE ),
        IF ( ISBLANK ( _PREVAL ), _NEXTVAL, _INCREMENT ),
        _CURVALUE
    )

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Fowmy

@Annu_choubey

Reemplacé el DÍA en su tabla con fechas reales, espero que ese sea el caso en la realidad.

Aquí está la medida:

Missing Fill = 

VAR _CURVALUE = SELECTEDVALUE(Table1[Value])
VAR _CURRDAY = SELECTEDVALUE(Table1[Day])
VAR _PREVDAY = MAXX( FILTER(ALL(Table1),Table1[Day] < _CURRDAY && Table1[Value] <> BLANK()), Table1[Day])
VAR _NEXTDAY =MINX( FILTER(ALL(Table1),Table1[Day] > _CURRDAY && Table1[Value] <> BLANK()), Table1[Day])
VAR _PREVAL = CALCULATE( SUM(Table1[Value]), Table1[Day] = _PREVDAY,ALL(Table1))
VAR _NEXTVAL = CALCULATE( SUM(Table1[Value]), Table1[Day] = _NEXTDAY,ALL(Table1))
VAR _BLANKS = DATEDIFF(_PREVDAY,_NEXTDAY,DAY)
VAR _DIFF =  DIVIDE(_NEXTVAL - _PREVAL, _BLANKS )
VAR _BLANKINC = COUNTROWS( FILTER(ALL(Table1),Table1[Day] < _CURRDAY && Table1[Day] >= _PREVDAY))
VAR _INCREMENT = MAXX( FILTER(ALL(Table1),Table1[Day] < _CURRDAY && Table1[Value] <> BLANK()), Table1[Value]) + _DIFF * _BLANKINC

RETURN
IF( 
    ISBLANK(_CURVALUE),
   _INCREMENT,
    _CURVALUE
)

Rendimiento esperado:

Fowmy_0-1601545808005.png

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Anónimo

En respuesta a Fowmy

Hola Fowmy,

Gracias por la rápida respuesta. Estoy tratando de implementar lo mismo pero no funciona en mi pbix. Se adjunta el archivo pbix. ¿Puedes ayudarme con esto?

Archivo Pbix: https://1drv.ms/u/s!Au-aOkl1BoHugijnugHCN0fzY8jq?e=DgtBAa

Gracias de antemano.

Fowmy

En respuesta a Anónimo

@Anónimo @Annu_choubey

Modifiqué la medida según el modelo de su archivo. Por favor revise ahora.

Puedes descargar el archivo aquí

Missing Fill = 
VAR _CURVALUE = [Metric Total]
VAR _CURRDAY = SELECTEDVALUE(DateTable[Date])
VAR _PREVDAY = MAXX( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] < _CURRDAY && [Metric Total] <> BLANK()), DateTable[Date])
VAR _NEXTDAY = MINX( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] > _CURRDAY && [Metric Total] <> BLANK()), DateTable[Date])
VAR _PREVAL = CALCULATE( [Metric Total], DateTable[Date]= _PREVDAY,ALL(DateTable))
VAR _NEXTVAL = CALCULATE([Metric Total], DateTable[Date] = _NEXTDAY,ALL(DateTable))
VAR _BLANKS = DATEDIFF(_PREVDAY,_NEXTDAY,DAY)
VAR _DIFF =  DIVIDE(_NEXTVAL - _PREVAL, _BLANKS )
VAR _BLANKINC = COUNTROWS( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] < _CURRDAY && DateTable[Date] >= _PREVDAY))
VAR _INCREMENT =  CALCULATE([Metric Total], DateTable[Date] =_PREVDAY) + (_DIFF * _BLANKINC)
RETURN
IF( 
    ISBLANK(_CURVALUE),
   _INCREMENT,
    _CURVALUE
)

Medida adicional:

Metric Total = SUM(Metrics[MetricValue])

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Anónimo

En respuesta a Fowmy

Hola Fowmy,

Gracias por una respuesta rápida. Está funcionando como se esperaba, pero en este caso a continuación, ¿cómo podemos completar todos los valores?

(por ejemplo: tenemos solo el valor de la fecha (valor de la métrica para el 9/10/2020) entre todas las fechas como a continuación, ¿entonces necesitamos completar todos los valores con ese valor?

cp.PNG

Gracias de antemano

Fowmy

En respuesta a Anónimo

@Anónimo

En este escenario, ha filtrado el nombre del activo por AC y solo hay un valor el 9/10/2020, ya que no hay un valor anterior, tiene espacios en blanco. He modificado el código, por lo que en caso de que no haya valores anteriores, el siguiente valor disponible se completará al revés.

Missing Fill = 
VAR _CURVALUE = [Metric Total]
VAR _CURRDAY = SELECTEDVALUE(DateTable[Date])
VAR _PREVDAY = MAXX( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] < _CURRDAY && [Metric Total] <> BLANK()), DateTable[Date])
VAR _NEXTDAY =MINX( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] > _CURRDAY && [Metric Total] <> BLANK()), DateTable[Date])
VAR _PREVAL = CALCULATE( [Metric Total], DateTable[Date]= _PREVDAY,ALL(DateTable))
VAR _NEXTVAL = CALCULATE([Metric Total], DateTable[Date] = _NEXTDAY,ALL(DateTable))
VAR _BLANKS = DATEDIFF(_PREVDAY,_NEXTDAY,DAY)
VAR _DIFF =  DIVIDE(_NEXTVAL - _PREVAL, _BLANKS )
VAR _BLANKINC = COUNTROWS( FILTER(ALLSELECTED(DateTable[Date]),DateTable[Date] < _CURRDAY && DateTable[Date] >= _PREVDAY))
VAR _INCREMENT =  CALCULATE([Metric Total], DateTable[Date] =_PREVDAY) + (_DIFF * _BLANKINC)
RETURN
IF( 
    ISBLANK(_CURVALUE),
    IF( ISBLANK(_PREVAL), _NEXTVAL ,_INCREMENT),
    _CURVALUE
)

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Anónimo

En respuesta a Fowmy

Hola fowmy

Si el valor de la métrica es 0, entonces no está funcionando como se esperaba. Me han aplicado los filtros en el archivo PBIX.

Filtros:

Activo: Perfil

manme: teanet

Aquí está el archivo:

https://1drv.ms/u/s!Au-aOkl1BoHugijnugHCN0fzY8jq?e=9TWQct

Gracias de antemano

Fowmy

En respuesta a Anónimo

@Anónimo

¿Cuál debería ser la condición para cero?

Pruebe el siguiente cambio después de la parte RETURN

IF( 
    ISBLANK(_CURVALUE) || _CURVALUE = 0,
    IF( ISBLANK(_PREVAL) , _NEXTVAL ,_INCREMENT),
    _CURVALUE
)

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Anónimo

En respuesta a Fowmy

Hola Fowmy,

Nuestra medida actual funciona en todos los casos excepto donde lastnonblankvalue es 0. Lo he explicado a continuación con un ejemplo.

Los valores de llenado deben estar comprendidos entre el valor máximo y el mínimo.

Tabla de muestra

FECHA VALOR

Día 1 10

Dia 2

Día 3

Día 4 0

PD: Los valores de llenado deben ser del valor máximo al mínimo (10-0)

Si lastnonblankvalue (Day4) es 0, entonces debemos disminuir el valor

Necesito llenar este espacio vacío con algún valor basado en mi condición. Así que la condición sea como
Condición 1: (Diferencia de valor máximo-mínimo / recuento de valores en blanco + 1)
(Ej .: de la tabla del escenario 1, el valor máximo es 10 y el valor mínimo es 0 y el recuento de espacios en blanco es: 1 entonces 10-0 / 2 + 1 = 3,3

Condición 2: El valor de salida de la condición 1 se debe restar a todos los valores en blanco (primer valor no en blanco))
(Ej: la salida de la condición 1 es: 3.3 – valor del día 1)
Día 1 – 10

Día 2-10 (valor del día 1) -3,3 = 6,7

día 3 – 6,7 (valor del día 2) -3,3 = 3,4

Día 4-0

El escenario anterior no está funcionando en nuestra medida actual, espere que todos estos casos funcionen como se esperaba.

Ejemplo de modelo

La medida de relleno que falta actualmente se vuelve a ajustar por debajo de los valores, pero los valores esperados están escritos en color azul.

Capture.PNG

Aquí está el camino: https://1drv.ms/u/s!Au-aOkl1BoHugijnugHCN0fzY8jq?e=xDyQXq

Por favor, avíseme si necesita información.

Gracias de antemano.

Fowmy

En respuesta a Anónimo

@Anónimo

Pruebe esta medida:

Missing Fill =
VAR _CURVALUE = [Metric Total]
VAR _CURRDAY =
    SELECTEDVALUE ( DateTable[Date] )
VAR _PREVDAY =
    LASTNONBLANK (
        FILTER ( ALLSELECTED ( DateTable[Date] ), DateTable[Date] < _CURRDAY ),
        [Metric Total]
    )
VAR _NEXTDAY =
    FIRSTNONBLANK (
        FILTER ( ALLSELECTED ( DateTable[Date] ), DateTable[Date] > _CURRDAY ),
        [Metric Total]
    )
VAR _PREVAL =
    CALCULATE ( [Metric Total], DateTable[Date] = _PREVDAY, ALL ( DateTable ) )
VAR _NEXTVAL =
    CALCULATE ( [Metric Total], DateTable[Date] = _NEXTDAY, ALL ( DateTable ) )
VAR _BLANKS =
    DATEDIFF ( _PREVDAY, _NEXTDAY, DAY )
VAR _DIFF =
    DIVIDE ( _NEXTVAL - _PREVAL, _BLANKS )
VAR _BLANKINC =
    COUNTROWS (
        FILTER (
            ALLSELECTED ( DateTable[Date] ),
            DateTable[Date] < _CURRDAY
                && DateTable[Date] >= _PREVDAY
        )
    )
VAR _INCREMENT =
    CALCULATE ( [Metric Total], DateTable[Date] = _PREVDAY ) + ( _DIFF * _BLANKINC )
RETURN
    IF (
        ISBLANK ( _CURVALUE ),
        IF ( ISBLANK ( _PREVAL ), _NEXTVAL, _INCREMENT ),
        _CURVALUE
    )

________________________

Si mi respuesta fue útil, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo

Clickea en el Icono de pulgar hacia arriba si te gusta esta respuesta 🙂

YouTube LinkedIn

Deja un comentario

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