SimLoe
Hola a todos,
Tengo una tabla que contiene pedidos de nuestros clientes y me gustaría clasificar el tipo de pedido: («Primera compra», «Extensión», «Actualización»). Para su comprensión: La tabla contiene pedidos de un software que tiene licencia por activo administrado. Con cada compra, el cliente tiene derecho a todas las actualizaciones que se lanzan mientras Software Assurcance (ProductId= SWA) está activo. La Garantía de software siempre se incluye por un año y luego se puede extender.
Por ejemplo, un cliente podría haber pedido lo siguiente:
Fecha CustomerId ProductId PlanId Cantidad Caduca
20/01/2015 12345 ABCDE de por vida 200 nulo
20/01/2015 12345 SWA nulo 200 20/01/2016
20/06/2015 12345 ABCDE de por vida 50
20/06/2015 12345 SWA nulo 50 20/06/2016
01/11/2015 12345 FGHIJ de por vida 250 nulo
Es posible que hayamos lanzado una nueva versión el 31/10/2015, por lo que el cliente tenía derecho a una actualización (gratuita) para un total de 250 activos.
Me gustaría presentar una nueva columna calculada «Tipo de pedido» que clasifique estos pedidos para cada cliente. En el primer ejemplo debería verse así:
Fecha CustomerId ProductId PlanId Cantidad Caduca OrderType
20/01/2015 12345 ABCDE de por vida 200 nulo Primera compra
20/01/2015 12345 SWA nulo 200 20/01/2016 nulo
20/06/2015 12345 ABCDE de por vida 50 Ampliación
20/06/2015 12345 SWA nulo 50 20/06/2016 nulo
11/01/2015 12345 FGHIJ de por vida 250 nulo Actualizar
Para complicar más las cosas, también hay otros casos en los que un cliente tenía primero una licencia de prueba (gratuita) antes de decidirse a realizar el pedido:
Fecha CustomerId ProductId PlanId Cantidad Caduca OrderType
20/01/2017 78910 Prueba QWERT 200 20/02/2017 nulo
20/02/2017 78910 QWERT de por vida 75 nulo Primera compra
20/02/2017 78910 SWA nulo 75 20/02/2018 nulo
01/11/2018 78910 RZKQL de por vida 75 nulo Actualizar
Y también hay un último caso especial, donde la «Primera Compra» puede consistir en varios pedidos en la misma fecha (porque el cliente quería tener licencias divididas para varios sitios).
Fecha CustomerId ProductId PlanId Cantidad Caduca OrderType
20/01/2019 96385 Prueba QWERT 1000 nulo nulo
20/02/2019 96385 QWERT suscripción 200 20/02/2020 Primera compra
20/02/2019 96385 QWERT suscripción 200 20/02/2020 Primera compra
20/02/2019 96385 QWERT suscripción 200 20/02/2020 Primera compra
20/02/2019 96385 QWERT suscripción 200 20/02/2020 Primera compra
20/02/2019 96385 QWERT suscripción 200 20/02/2020 Primera compra
20/02/2019 96385 SWA nulo 1000 20/02/2020 nulo
TL; DR: necesito introducir una nueva columna calculada que clasifique el tipo de compra.
Para averiguar si un pedido fue una «Primera compra», creo que el enfoque correcto sería filtrar la larga lista de pedidos para cada ID de cliente distinto, buscar el pedido más antiguo que tenga un PlanId de «vida útil» o «suscripción». . Para prestar atención al último caso especial mencionado, sería necesario agrupar esos pedidos por fecha y marcar todos los pedidos de la fecha más antigua como «Primera compra».
Para determinar las «Actualizaciones», debo verificar si ya hubo algunas compras para versiones anteriores.
Desafortunadamente, no sé cómo abordar este problema en Power BI/DAX, por lo que agradecería cualquier comentario.
Salud,
Simón
v-xicai
Hola @SimLoe,
Puede crear una columna como DAX a continuación.
OrderType= var _FirstDate= CALCULATE(MIN(Table1[Date]),FILTER(ALLSELECTED(Table1),Table1[CustomerId]=EARLIER(Table1[CustomerId])&&Table1[PlanId]=EARLIER(Table1[PlanId]))) Return IF(Table1[Date]= _FirstDate, "FirstPurchase", BLANK())
Si lo entendí mal, ¿podría compartir sus datos de muestra y salida deseada capturas de pantalla para un análisis más detallado? También puede cargar pbix de muestra en OneDrive y publicar el enlace aquí. Oculte los datos confidenciales antes de cargarlos.
Atentamente,
amy
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.
SimLoe
En respuesta a v-xicai
Hola @v-xicai,
muchas gracias por su ayuda, esto era exactamente lo que estaba buscando con respecto a la «Primera Compra».
Acabo de agregar algunos filtros y tengo que usar «;» en alemán, por lo que el DAX se ve así:
OrderType = var _FirstDate= CALCULATE(MIN(Orders[Issued]);FILTER(ALLSELECTED(Orders);Orders[CustomerId]=EARLIER(Orders[CustomerId])&&Orders[PlanId]=EARLIER(Orders[PlanId]))) Return IF(Orders[Issued]= _FirstDate && Orders[ProductId]="11111111-1111-0000-0000-000000000000" && Orders[PlanId]<>"test" && Orders[PlanId]<>"temp"; "FirstPurchase"; BLANK())
Sin embargo, ¿puede ayudarme a comprender la definición de la variable «_FirstDate» en su código para poder crear el otro script para asignar las otras opciones posibles para «OrderType»?
Dentro de la función CALCULAR, está encontrando la fecha mínima para todos los pedidos que se aplican a las siguientes condiciones de filtro:
FILTER(ALLSELECTED(Orders);Orders[CustomerId]=EARLIER(Orders[CustomerId])&&Orders[PlanId]=EARLIER(Orders[PlanId])
¿Puedes ayudarme a traducir esto a un pseudo código? ¿Estoy filtrando todos los pedidos para el primer cliente que puedo encontrar y luego continúo con el próximo cliente o algo así?
v-xicai
En respuesta a SimLoe
Hola @SimLoe,
>>FILTRO(TODO SELECCIONADO(Pedidos);Pedidos[CustomerId]=ANTES(Órdenes[CustomerId])&&Pedidos[PlanId]=ANTES(Órdenes[PlanId])
La parte de la fórmula anterior se utiliza para agrupar por el [CustomerId] y [PlanId], luego busque los pedidos mínimos[Date] en base a los dos grupos.
Atentamente,
amy
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.