Medida lenta con calcular y filtrar

Un usuario Pregunto ✅

brendan_carron

Hola,

Tengo una medida de trabajo, analizando más de 5 millones de filas (en una tabla llamada «Resumen»), que me da la cantidad de clientes únicos que han pedido productos por valor de más de 500 EUR en un período determinado, con la siguiente información sobre cada hilera:

Orden # | Cliente | NIS (ventas netas facturadas) | Días del calendario

DH500 Q1 = CALCULATE(DISTINCTCOUNT(Overview[Customer]);DATESBETWEEN('Calendar'[Calendar Days];"01/07/2019";"30/09/2019");filter(Overview;sum(Overview[NIS])>500))

Si bien esta medida calculó las cosas correctamente a nivel de cliente, cuando quería un total por representante de ventas, el total era muy impreciso (todavía no estaba claro por qué), lo que me llevó a usar esta medida para un total de representante de ventas:

DH 500 Q1 = sumx(SUMMARIZE(Overview;Overview[Customer];"SUM";[DH500 Q1]);[DH500 Q1])

Sin embargo, ahora es terriblemente lento de calcular (más de 5 minutos cuando se filtra en UN representante de ventas), lo que significa que no puedo usarlo «sobre la marcha».

Soy consciente de que FILTER ralentiza drásticamente el cálculo de medidas, y esperaba que uno de ustedes pudiera optimizar el cálculo de medidas a algo más aceptable… Estaba buscando usar resumir en un nivel más amplio, tal vez reemplazando completamente FILTER pero sin cualquier éxito hasta ahora.

Hola @brendan_carron

Cálculo para dos tipos de traje.

la suma de [NIS] a nivel de cliente,

sum>500 =
VAR n =
    CALCULATE (
        SUM ( Sheet3[NIS] ),
        FILTER (
            ALLSELECTED ( Sheet3 ),
            Sheet3[Customer] = MAX ( Sheet3[Customer] )
                && Sheet3[date] >= MIN ( 'disconnected date'[Date] )
                && Sheet3[date] <= MAX ( 'disconnected date'[Date] )
        )
    )
RETURN
    IF ( n > 500, n )

la suma de [NIS] a nivel total,

total sum = SUMX(ALL(Sheet3[Customer]),[sum>500])

Recuento distintivo de clientes cuyo NIS es superior a 500 a nivel de cliente

customer level =
VAR n =
    CALCULATE (
        SUM ( Sheet3[NIS] ),
        FILTER (
            ALLSELECTED ( Sheet3 ),
            Sheet3[Customer] = MAX ( Sheet3[Customer] )
                && Sheet3[date] >= MIN ( 'disconnected date'[Date] )
                && Sheet3[date] <= MAX ( 'disconnected date'[Date] )
        )
    )
RETURN
    IF ( n > 500, 1 )

Total Distinctcount de clientes cuyo NIS es superior a 500 (a nivel total)

total discount = CALCULATE(DISTINCTCOUNT(Sheet3[Customer]),FILTER(Sheet3,Sheet3[customer level]=1))

En mi archivo de prueba, fecha desconectada la tabla no tiene relación con otras tablas.

disconnected date = CALENDARAUTO()

Captura4.JPG

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hola @brendan_carron

Cálculo para dos tipos de traje.

la suma de [NIS] a nivel de cliente,

sum>500 =
VAR n =
    CALCULATE (
        SUM ( Sheet3[NIS] ),
        FILTER (
            ALLSELECTED ( Sheet3 ),
            Sheet3[Customer] = MAX ( Sheet3[Customer] )
                && Sheet3[date] >= MIN ( 'disconnected date'[Date] )
                && Sheet3[date] <= MAX ( 'disconnected date'[Date] )
        )
    )
RETURN
    IF ( n > 500, n )

la suma de [NIS] a nivel total,

total sum = SUMX(ALL(Sheet3[Customer]),[sum>500])

Recuento distintivo de clientes cuyo NIS es superior a 500 a nivel de cliente

customer level =
VAR n =
    CALCULATE (
        SUM ( Sheet3[NIS] ),
        FILTER (
            ALLSELECTED ( Sheet3 ),
            Sheet3[Customer] = MAX ( Sheet3[Customer] )
                && Sheet3[date] >= MIN ( 'disconnected date'[Date] )
                && Sheet3[date] <= MAX ( 'disconnected date'[Date] )
        )
    )
RETURN
    IF ( n > 500, 1 )

Total Distinctcount de clientes cuyo NIS es superior a 500 (a nivel total)

total discount = CALCULATE(DISTINCTCOUNT(Sheet3[Customer]),FILTER(Sheet3,Sheet3[customer level]=1))

En mi archivo de prueba, fecha desconectada la tabla no tiene relación con otras tablas.

disconnected date = CALENDARAUTO()

Captura4.JPG

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

brendan_carron

En respuesta a v-juanli-msft

Hola @v-juanli-msft,

En primer lugar, muchas gracias por el tiempo que se tomó para preparar y redactar esta respuesta, es muy apreciada.

Mi respuesta llega tarde porque pasé la mayor parte de mi semana tratando de hacer que funcione o modificarlo, pero siempre termino con 2 resultados:

1/ Sin asignación de memoria (aunque solo tengo 5 millones de filas)

2/

CALCULATE(DISTINCTCOUNT(Overview[Customer]);filter(Overview;sum(Overview[NIS])>500);DATESBETWEEN('Calendar'[Date];"01/07/2019";"31/03/2020"))


dar exactamente el mismo resultado que

CALCULATE(DISTINCTCOUNT(Overview[Customer]);DATESBETWEEN('Calendar'[Date];"01/07/2019";"31/03/2020"))

Lo que significa que de alguna manera no puedo calcular un sumif básico …

Atentamente,

Brendan

JarroVGIT

Podría ser debido a su función DATESBETWEEN(). ¿Hay algún motivo por el que estos valores estén codificados de forma rígida o normalmente se encuentran en una segmentación en el informe?

Deja un comentario

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