DAX para marcar al cliente como Sí, No o Ambos según la fecha de compra de la Tabla de ventas

Un usuario Pregunto ✅

jesspiorier

Estoy luchando con una ecuación dax para identificar diferentes tipos de clientes, específicamente un escenario de Sí, No o Ambos para los compradores navideños.

Tengo una tabla de transacciones y una tabla de clientes (las tablas de ventas y de clientes tienen un número de identificación).

Marqué las transacciones como Sí o No, según el mes de compra. (Compradores de días festivos = 10, 11, 12, No festivos = 1, 2, 3, 4, 5, 6, 7, 8, 9). ¿Cómo identifico a los clientes que son exclusivamente Sí o No, o los que son ambos?

Encontré una publicación que miraba «Una vez», «Primer pedido» y «Devuelto», pero el DAX se basó en fechas de compra mínimas / máximas y no puedo encontrar la manera de personalizarlo para mis necesidades.

Muestra:

Transacción # Identificación del cliente Mes de compra Compra de vacaciones
123 A 6 norte
124 B 7 norte
125 C 8 norte
126 D 9 norte
127 mi 10 Y
128 A 10 Y
129 A 11 Y
130 B 12 Y
131 C 1 norte
132 D 2 norte
133 D 3 norte

Resultados deseados:

Identificación del cliente Comprador de vacaciones
A Ambos
B Ambos
C No
D No
mi

Gracias por adelantado. -Cadena

Hola @jesspiorier,

La solución que usa medidas y elementos visuales de tabla es excelente, pero en caso de que desee una tabla calculada, puede usar la siguiente fórmula.

Table 2 = 
ADDCOLUMNS (
    DISTINCT ( 'Table'[Customer ID] ),
    "Holiday Shopper",
    VAR t =
        FILTER ( 'Table', 'Table'[Customer ID] = EARLIER ( [Customer ID] ) )
    VAR holiday =
        COUNTROWS ( FILTER ( t, [Holiday Purchase] = "Y" ) ) + 0
    VAR noholiday =
        COUNTROWS ( FILTER ( t, [Holiday Purchase] = "N" ) ) + 0
    RETURN
        SWITCH (
            TRUE (),
            holiday > 0
                && noholiday > 0, "Both",
            holiday > 0
                && noholiday <= 0, "Yes",
            "No"
        )
)

10.PNG

O puede agregar una columna Calculado en su tabla de clientes:

Holiday Shopper =
VAR id = [Customer ID]
VAR t =
    FILTER ( 'Table', 'Table'[Customer ID] = id )
VAR holiday =
    COUNTROWS ( FILTER ( t, [Holiday Purchase] = "Y" ) ) + 0
VAR noholiday =
    COUNTROWS ( FILTER ( t, [Holiday Purchase] = "N" ) ) + 0
RETURN
    SWITCH (
        TRUE (),
        holiday > 0
            && noholiday > 0, "Both",
        holiday > 0
            && noholiday <= 0, "Yes",
        "No"
    )

Y aquí está mi medida:

Holiday Shopper = 
VAR holiday =
    COUNTROWS ( FILTER ( 'Table', 'Table'[Holiday Purchase] = "Y" ) ) + 0
VAR noholiday =
    COUNTROWS ( FILTER ( 'Table', 'Table'[Holiday Purchase] = "N" ) ) + 0
RETURN
    SWITCH (
        TRUE (),
        holiday > 0
            && noholiday > 0, "Both",
        holiday > 0
            && noholiday <= 0, "Yes",
        "No"
    )

9.PNG

Por cierto, pbix como adjunto.

Atentamente,

Equipo de apoyo de la comunidad _ Dong Li
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Hola @jesspiorier,

La solución que usa medidas y elementos visuales de tabla es excelente, pero en caso de que desee una tabla calculada, puede usar la siguiente fórmula.

Table 2 = 
ADDCOLUMNS (
    DISTINCT ( 'Table'[Customer ID] ),
    "Holiday Shopper",
    VAR t =
        FILTER ( 'Table', 'Table'[Customer ID] = EARLIER ( [Customer ID] ) )
    VAR holiday =
        COUNTROWS ( FILTER ( t, [Holiday Purchase] = "Y" ) ) + 0
    VAR noholiday =
        COUNTROWS ( FILTER ( t, [Holiday Purchase] = "N" ) ) + 0
    RETURN
        SWITCH (
            TRUE (),
            holiday > 0
                && noholiday > 0, "Both",
            holiday > 0
                && noholiday <= 0, "Yes",
            "No"
        )
)

10.PNG

O puede agregar una columna Calculado en su tabla de clientes:

Holiday Shopper =
VAR id = [Customer ID]
VAR t =
    FILTER ( 'Table', 'Table'[Customer ID] = id )
VAR holiday =
    COUNTROWS ( FILTER ( t, [Holiday Purchase] = "Y" ) ) + 0
VAR noholiday =
    COUNTROWS ( FILTER ( t, [Holiday Purchase] = "N" ) ) + 0
RETURN
    SWITCH (
        TRUE (),
        holiday > 0
            && noholiday > 0, "Both",
        holiday > 0
            && noholiday <= 0, "Yes",
        "No"
    )

Y aquí está mi medida:

Holiday Shopper = 
VAR holiday =
    COUNTROWS ( FILTER ( 'Table', 'Table'[Holiday Purchase] = "Y" ) ) + 0
VAR noholiday =
    COUNTROWS ( FILTER ( 'Table', 'Table'[Holiday Purchase] = "N" ) ) + 0
RETURN
    SWITCH (
        TRUE (),
        holiday > 0
            && noholiday > 0, "Both",
        holiday > 0
            && noholiday <= 0, "Yes",
        "No"
    )

9.PNG

Por cierto, pbix como adjunto.

Atentamente,

Equipo de apoyo de la comunidad _ Dong Li
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

jesspiorier

En respuesta a v-lid-msft

Gracias de nuevo @ v-lid-msft. Esto funcionó perfectamente.

Sin embargo, ahora estoy tratando de hacerlo para clientes que pertenecen a cuatro categorías diferentes, o una combinación de ellas. Intenté modificar su fórmula original «si entonces si no», pero no obtengo los resultados esperados. ¿Quizás puedas ayudar?

Esencialmente es el mismo problema. Un cliente que ha tenido al menos una interacción (potencialmente muchas). Esas interacciones pueden clasificarse en cuatro categorías (no las dos de la publicación original). NO está relacionado con el tiempo, ni quiero resultados a nivel de ID de cliente. Quiero un recuento distinto de ID según la distribución de categorías.

Es una sola tabla plana. El ID de cliente es único. Cada interacción (fila) tiene el indicador de Categoría.

Puedo obtener un recuento distintivo de ID por categoría fácilmente. Quiero saber cuántos ID caben en una sola categoría o en varias. Resultado Esperado:

Solo categoría A: 5

Solo categoría B: 2

Solo categoría C: 1

Solo categoría D: 4

AB – 3

CA – 2

AD – 1

BC -2

BD – 0

CD – 5

ABC: 0

ABD: 1
BCD: 3

CDA: 1
ABCD: 10

¿Tiene sentido? ¿Es posible con DAX?

En respuesta a jesspiorier

Hola @jesspiorier,

¿Podría compartir los datos de muestra basados ​​en la tabla esperada que ha compartido?

No incluya información confidencial ni datos reales en su respuesta.

Atentamente,

jesspiorier

En respuesta a v-lid-msft

Gracias @ v-lid-msft. La columna calculada (su segunda sugerencia) me dio los resultados esperados. ¡Gracias por la ayuda!

Nota: necesitaba cambiar los nombres de las variables que sugirió en su ejemplo. Recibí un error de sintaxis en «id» y «t» por alguna razón. Así que los llamé «Recuento de clientes» y «Verdad». Funcionó muy bien. Gracias de nuevo.

Holiday Shopper =
VAR CustomerCount="Sales"[Customer ID]
VAR truth =
    FILTER ( 'Sales', 'Sales'[Customer ID] = CustomerCount )
VAR holiday =
    COUNTROWS ( FILTER ( truth, [Holiday Purchase] = "Y" ) ) + 0
VAR noholiday =
    COUNTROWS ( FILTER ( truth, [Holiday Purchase] = "N" ) ) + 0
RETURN
    SWITCH (
        TRUE (),
        holiday > 0
            && noholiday > 0, "Both",
        holiday > 0
            && noholiday <= 0, "Yes",
        "No"
    )

Según algunas ecuaciones adicionales que he usado, los resultados son los esperados.

comprador navideño.PNG

ChrisMendoza

@jesspiorier –

¿Lo siguiente logra su tarea?

Measure 2 =
VAR _holidayYes =
    CALCULATE (
        COUNTROWS ( TableName ),
        TableName[Holiday Purchase] = "Y"
    )
VAR _holidayNo =
    CALCULATE (
        COUNTROWS ( TableName ),
        TableName[Holiday Purchase] = "N"
    )
RETURN
    SWITCH (
        TRUE (),
        _holidayNo >= 1
            && _holidayYes >= 1, "Both",
        _holidayNo >= 1, "No",
        "Yes"
    )

jesspiorier

En respuesta a ChrisMendoza

Hola @ChrisMendoza. Gracias por la pronta respuesta. Desafortunadamente, la medida no funcionó como se esperaba. Aunque veo marcas Y y N en mi conjunto de datos (y sé que hay varios compradores únicos o habituales), el único valor devuelto fue «ambos». Usé la columna calculada sugerida a continuación y funcionó. Gracias de cualquier forma.

Nathaniel_C

En respuesta a ChrisMendoza

Hola @jesspiorier,

Hazme saber si tienes alguna pregunta.

Si esto resuelve sus problemas, márquelo como el solución, para que otros puedan encontrarlo fácilmente. Prestigio son agradables también.
Nathaniel

Shopper Timing = 

var Holiday = CALCULATE(COUNTA(Customer[Holiday Purchase]),FILTER(ALLEXCEPT(Customer,Customer[Customer ID]), Customer[Holiday Purchase] = "Y" ))
var Othermonth =  CALCULATE(COUNTA(Customer[Holiday Purchase]),FILTER(ALLEXCEPT(Customer,Customer[Customer ID]), Customer[Holiday Purchase] = "N" ))

var Whichmonths = If(Holiday>0 && Othermonth>0,"Both", If(Holiday>0 && Othermonth=0,"Yes",  IF(Holiday=0 && Othermonth>0,"No","N/A")))



return Whichmonths

Nathaniel_C

En respuesta a Nathaniel_C

vacaciones.PNG

Deja un comentario

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