Cálculo de la tasa de ejecución

Un usuario Pregunto ✅

abeja

Hola a todos,

Necesito encontrar la tasa de ejecución para cada año en un gráfico de área, será un número constante durante todo el año.

El gráfico de área no se filtrará por la segmentación de Mes, solo la segmentación de Año.

Por ejemplo, para obtener los números de la

  • Runrate 2020, tome la suma de mayo-2019 hasta abril-2020 (últimos 12 meses incluyendo el mes actual) y dividido por 12
  • Runrate 2019, tome la suma de Ene-2019 hasta Dic-2019 y dividido por 12

runrate.PNG

¿Alguien sabe cómo puedo obtener el numerador sin filtrar por mes para el gráfico de área?

Saludos,

BK

Hola,

Tengo una manera más fácil y de alto rendimiento para llegar a su requerimiento.

Por favor, siga los siguientes pasos:

1) Cree primero una columna de fecha:

Date = DATE('Table'[Year],'Table'[Month],1)

2) Pruebe esta medida:

Measure = 
VAR MaxDate =
    CALCULATE ( MAX ( 'Table'[Date] ), ALL ( 'Table' ) )
VAR MaxYear =
    CALCULATE ( MAX ( 'Table'[Year] ), ALL ( 'Table' ) )
RETURN
    IF (
        MAX ( 'Table'[Year] ) = MaxYear,
        CALCULATE (
            AVERAGE ( 'Table'[Value] ),
            FILTER (
                ALLSELECTED ( 'Table' ),
                'Table'[Date]
                    >= DATE ( YEAR ( MaxDate ) - 1, MONTH ( MaxDate ) + 1, 1 )
                    && 'Table'[Date] <= MaxDate
            )
        ),
        CALCULATE (
            AVERAGE ( 'Table'[Value] ),
            FILTER ( ALLSELECTED ( 'Table' ), 'Table'[Year] IN FILTERS ( 'Table'[Year] ) )
        )
    )

El resultado muestra:

21 PNG

Aquí está mi archivo pbix de prueba:

pbix

Espero que esto ayude.

Atentamente,

Giotto

Hola,

Tengo una manera más fácil y de alto rendimiento para llegar a su requerimiento.

Por favor, siga los siguientes pasos:

1) Cree primero una columna de fecha:

Date = DATE('Table'[Year],'Table'[Month],1)

2) Pruebe esta medida:

Measure = 
VAR MaxDate =
    CALCULATE ( MAX ( 'Table'[Date] ), ALL ( 'Table' ) )
VAR MaxYear =
    CALCULATE ( MAX ( 'Table'[Year] ), ALL ( 'Table' ) )
RETURN
    IF (
        MAX ( 'Table'[Year] ) = MaxYear,
        CALCULATE (
            AVERAGE ( 'Table'[Value] ),
            FILTER (
                ALLSELECTED ( 'Table' ),
                'Table'[Date]
                    >= DATE ( YEAR ( MaxDate ) - 1, MONTH ( MaxDate ) + 1, 1 )
                    && 'Table'[Date] <= MaxDate
            )
        ),
        CALCULATE (
            AVERAGE ( 'Table'[Value] ),
            FILTER ( ALLSELECTED ( 'Table' ), 'Table'[Year] IN FILTERS ( 'Table'[Year] ) )
        )
    )

El resultado muestra:

21 PNG

Aquí está mi archivo pbix de prueba:

pbix

Espero que esto ayude.

Atentamente,

Giotto

edhans

Hola @beekee: prueba la medida a continuación. Será (debería ser) completamente automático para el futuro basado en esa lógica. Entonces:

  1. Si es el último año de sus datos, se expandirá para incluir los 12 meses anteriores de datos.
  2. Si está en un año completo, solo promediará el valor de los 12 meses completos de ese año.
  3. Esto tiene varias variables.
    1. CurrentYear: obtiene el año actual para el registro actual
    2. CurrentYearMaxID: obtiene el ID de fecha máximo para el año actual. Así que ahora son 12 para 2019 y 16 para 2020, pero eso cambiará a medida que crezcan sus datos.
    3. StartDateID = O comienza en 1 si su DateID es <= 12, o retrocede 11 meses antes de este.
    4. TotalValue: obtiene el promedio de los valores desde el registro StartDateID hasta el registro de fecha CurrentYearMaxID.

Mientras su lógica no cambie, no debería tener que tocar esta medida nunca más. Mientras su conjunto de datos crezca en un registro por mes y el ID de fecha aumente en 1 cada mes, esto funcionará en el futuro.

EDITAR: Quiero agradecer a @v-gizhi-msft por mencionar el rendimiento. Mi medida original fue HORRIBLE en el desempeño sobre mesas grandes. Agregué 10 000 registros al conjunto de datos y el mío tardó 33 segundos en actualizarse, frente a menos de 1 segundo para la medida de @v-gizhi-msft. Volví y le eché otro vistazo y realmente lo limpié. Ahora también es menos de 1 segundo para 10,000 registros y NO necesita una columna calculada, lo que trato de evitar. Vea la parte inferior de mi publicación por las razones. No significa que no sean útiles, pero es lo último que quiero sacar de mi bolsa de herramientas en el modelo DAX. Funciona con los datos existentes. La medida revisada se encuentra a continuación, y le he dado a @v-gizhi-msft las felicitaciones correspondientes por su «desafío». 😁

2020-04-12 21_08_18-Sin título - Power BI Desktop.png

Run Rate = 
VAR CurrentYear = MAX('Table'[Year])
VAR MaxYear = MAX('Table'[Year])
VAR CurrentYearMaxID = 
    MAXX(
        FILTER(
            ALL('Table'[Date ID],'Table'[Year]),
            'Table'[Year] = CurrentYear
        ),
        'Table'[Date ID]
    )
VAR StartDateID = 
    IF(
        CurrentYearMaxID <= 12,
        1,
        CurrentYearMaxID - 11
    )
VAR TotalValue = 
    IF(
        CurrentYear <> MaxYear,
        AVERAGEX(
            FILTER(
                ALLSELECTED('Table'[Date ID],'Table'[Value]),
                'Table'[Date ID] >= StartDateID && 'Table'[Date ID] <= CurrentYearMaxID
            ),
            'Table'[Value]
        ),
        AVERAGEX(
            FILTER(
                ALLSELECTED('Table'),
                'Table'[Year] = CurrentYear
            ),
            'Table'[Value]
        )
    )
RETURN
TotalValue

En general, intente evitar las columnas calculadas. Hay momentos para usarlos, pero es raro. La obtención de datos del sistema de origen, la creación de columnas en Power Query o las medidas DAX suelen ser preferibles a las columnas calculadas. Vea estas referencias:
Columnas calculadas frente a medidas en DAX
Columnas y medidas calculadas en DAX
Diferencias de almacenamiento entre columnas calculadas y tablas calculadas
Creación de una tabla de fechas dinámica en Power Query

amichandak

@beekee

Fórmula suponiendo tabla de fechas. Pero si tiene uno, use la columna de su tabla

Measure =
var _m1 = calculate(sum(Table[Value]),filter(all(Date),Date[Year]=2019))
var _m2 = calculate(sum(Table[Value]),filter(all(Date),Date[date]>=Date(2019-05-01) && Date[date]<=Date(2020-04-30)))
Return
if(max(Table[Year])=2019,_m1, _m2)

Deja un comentario

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