Contar el número de valores de un grupo dentro de un rango determinado

Un usuario Pregunto ✅

yupeichen

Hola, tengo problemas para escribir un código DAX elegante para hacer lo que quiero.

Tengo una lista de grupos de clientes. Quiero contar la cantidad de veces que tienen valores (Time2Auth/Time2Recieve/TotalTime) dentro de rangos establecidos (0-1, 1-2, 2-4, 4-8 y 8+), todo en un tabla nueva

Sé que puedo agregar columnas adicionales con 1/0 para identificar si pertenecen a cada grupo, pero estoy buscando aprender a usar mejor DAX.

Ejemplo de producto final:

grupo de clientes 0-1 1-2 2-4 4-8 8+
BARQ 10 20 24 13 1
Muestras de control 40 13 0 0 0
Programa ECAT 0 2 50 75 200
Planta FCC 46 22 1 0 0

Sin título.pngSin título2.png

v-xjiin-msft

En respuesta a yupeichen

Hola @YupeiChen,

Mira esto:

Nueva tabla calculada con SUMMARIZE():

Recieve table =
SUMMARIZE (
    TestTable,
    TestTable[Customer Group],
    "0-1", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 0
                && TestTable[Time2Recieve] <= 1
        )
    ),
    "1-2", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 1
                && TestTable[Time2Recieve] <= 2
        )
    ),
    "2-4", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 2
                && TestTable[Time2Recieve] <= 4
        )
    ),
    "4-8", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 4
                && TestTable[Time2Recieve] <= 8
        )
    ),
    "8+", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER ( TestTable, TestTable[Time2Recieve] > 8 )
    )
)

8.PNG

Lo mismo autorizar tabla.

Gracias,
Xi Jin.

v-xjiin-msft

Hola @YupeiChen,

=> Quiero contar la cantidad de veces que tienen valores (Time2Auth/Time2Recieve/TotalTime) dentro de rangos establecidos (0-1, 1-2, 2-4, 4-8 y 8+), todo en un tabla nueva

¿Cuál es la lógica para definir los rangos? Por ejemplo, veamos que el grupo de clientes es BARQ. ¿Por qué 10 está por debajo del rango 0-1 y 13 está por debajo del 4-8 y así sucesivamente? ¿Cuáles son estas lógicas?

¿Podría compartirnos algunos datos de muestra que podamos copiar y pegar directamente? Y su correspondiente resultado esperado. Para que podamos obtener una dirección correcta y hacer algunas pruebas adecuadas. Con la información actual, es difícil para nosotros entender su requerimiento.

Gracias,
Xi Jin.

yupeichen

En respuesta a v-xjiin-msft

Hola @v-xjiin-msft

Inventaré algunos datos de muestra por ahora y los complementaré con datos reales cuando regrese al trabajo.

Time2Recieve se calcula por la marca de tiempo recibida – marca de tiempo de inicio de sesión (no se muestra).

Time2Auth se calcula mediante la marca de tiempo autorizada – marca de tiempo recibida (no se muestra).

Esencialmente, estamos tratando de rastrear cuánto tiempo le toma a un operador de planta traer una muestra al laboratorio (Time2Recieve), y luego cuánto tiempo les toma a los técnicos de laboratorio procesar la muestra (Time2Auth).

Para 0-1, la lógica es 0

Para 1-2, la lógica es 1

Para 2-4, la lógica es 2

Para 4-8, la lógica es 4

Para 8+, la lógica es 8

Muestra de datos de entrada:

Ejemplo de identificacion grupo de clientes Tiempo2Recibir Hora2Auth
111111 BARQ 8.1 1.1
111112 Programa ECAT 0.9 20
111113 Planta FCC 1.9 1.9
111114 Planta HPC 0.1 6
111115 Planta VESPA 0.9 1.1
111116 Planta VESPA 7 20

Tabla de muestra para rastrear cuánto tiempo lleva recibir muestras de grupos de clientes, según los datos anteriores

grupo de clientes 0-1 1-2 2-4 4-8 8+
BARQ 1
ECAT 1
Planta FCC 1
Planta HPC 1
Planta VESPA 1 1

Tabla de muestra para rastrear cuánto tiempo lleva autorizar muestras de grupos de clientes, según los datos anteriores

grupo de clientes 0-1 1-2 2-4 4-8 8+
BARQ 1
ECAT 1
Planta FCC 1
Planta HPC 1
Planta VESPA 1 1

v-xjiin-msft

En respuesta a yupeichen

Hola @YupeiChen,

Mira esto:

Nueva tabla calculada con SUMMARIZE():

Recieve table =
SUMMARIZE (
    TestTable,
    TestTable[Customer Group],
    "0-1", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 0
                && TestTable[Time2Recieve] <= 1
        )
    ),
    "1-2", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 1
                && TestTable[Time2Recieve] <= 2
        )
    ),
    "2-4", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 2
                && TestTable[Time2Recieve] <= 4
        )
    ),
    "4-8", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER (
            TestTable,
            TestTable[Time2Recieve] > 4
                && TestTable[Time2Recieve] <= 8
        )
    ),
    "8+", CALCULATE (
        COUNT ( TestTable[Time2Recieve] ),
        FILTER ( TestTable, TestTable[Time2Recieve] > 8 )
    )
)

8.PNG

Lo mismo autorizar tabla.

Gracias,
Xi Jin.

yupeichen

En respuesta a v-xjiin-msft

@v-xjiin-msft

¡Brillante!

¡Muchas gracias, ver la forma en que organizas el código fue muy informativo!

Anteriormente sabía calcular, contar, filtrar y cómo hacer una tabla con columnas, pero no podía juntarlo todo correctamente con la sintaxis.

Deja un comentario

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