enexius
Hola a todos,
Tengo la siguiente tarea entre manos, pero todavía no he podido encontrar una solución.
Me gustaría calcular dos cosas:
1. Potencial de ventas para un año específico (por ejemplo, 2022). El potencial se define como: «El cliente tiene un contrato (s) en el año anterior al año seleccionado, pero no en el año seleccionado (además definido por el estado del contrato = válido) o después». En el próximo ejemplo, esto sería: Potencial para 2022 = 15 $ (el Cliente 2 tiene un contrato para 2022 pero no es válido)
Una solución que encontré fue pivotar el año del contrato con el valor, donde definí una medida como esta:
CALCULAR (SUMA (Potencial[2021]),
‘Potencial'[State of Contract]<> «desconocido»)
pero eso no ayudó con la segunda tarea.
2. Ventas para nuevos clientes: Cliente que no tenía contratos tres años antes del año seleccionado. En el siguiente ejemplo (para 2023), esto sería 10 $ (el Cliente 5 no tiene contrato de 2020-2022).
Espero que haya una solución para esto.
Departamento | Cliente | Fecha de orden | Proceso | Estado del contrato | Posición | Año del contrato | Valor |
A | 1 | 01.01.2021 | 3 | válido | 1 | 2022 | 10 $ |
A | 1 | 01.01.2021 | 3 | válido | 1 | 2023 | 10 $ |
A | 1 | 01.01.2021 | 3 | válido | 1 | 2024 | 20 $ |
A | 1 | 02.01.2021 | 4 | Caducado | 1 | 2025 | 30 $ |
A | 2 | 04.05.2019 | 3 | válido | 1 | 2021 | 10 $ |
A | 2 | 04.05.2019 | 3 | válido | 2 | 2021 | 5 $ |
A | 2 | 10.12.2019 | 6 | Caducado | 1 | 2022 | 7 $ |
B | 3 | 12.12.2020 | 9 | válido | 2 | 2022 | 8 $ |
A | 2 | 08.01.2020 | 12 | desconocido | 2 | 2022 | 10 $ |
C | 4 | 10.12.2020 | 7 | válido | 1 | 2021 | 15 $ |
A | 4 | 05.07.2020 | 5 | válido | 1 | 2022 | 13 $ |
C | 4 | 03.01.2019 | 1 | válido | 1 | 2022 | 12 $ |
B | 5 | 02.03.2020 | 18 | válido | 2 | 2023 | 10 $ |
¡Gracias de antemano por su ayuda!
Salud,
Enno
claramente
Hola,
Aquí hay una solución con DAX (editado el 25.2.2021). Creo que tener un campo estático que diga quién es un cliente nuevo es valioso para muchos tipos de análisis de clientes.
Ver archivo de muestra: https://drive.google.com/file/d/1_tavilUUe9PSoE2PYlF9mKEOCZW4LghY/view?usp=sharing
Por debajo de 2023 es el año del informe. La lógica es que necesitamos saber el año de contrato anterior que un cliente tenía un contrato antes del año de informe. Entonces, el cliente es nuevo si este año faltan 3 años o si este año no está disponible.
2023 se puede reemplazar con un VAR que defina o, por ejemplo, YEAR (today ())
NEW COLUMNS:
1)
customer_last_contract_year = CALCULATE(Max(sales_customers[Contract Year]),ALLEXCEPT(sales_customers, sales_customers[Customer]))
2)
customer_prev_contract_year_before_reporting = CALCULATE(CALCULATE(MAX(sales_customers[Contract Year]),FILTER(sales_customers,2023>sales_customers[Contract Year])),ALLEXCEPT(sales_customers,sales_customers[Customer]))
3)
New_customer = IF(sales_customers[customer_last_contract_year]>= 2023 && ( ISBLANK(sales_customers[customer_prev_contract_year_before_reporting]) || (2023-sales_customers[customer_prev_contract_year_before_reporting] >= 3 && NOT ISBLANK(sales_customers[customer_prev_contract_year_before_reporting]))),TRUE,FALSE)
SALES VALUE NEW CUSTOMERS:
New_Customer_Sales = CALCULATE(SUM(sales_customers[Value]), sales_customers[new_customer] = TRUE)
Por lo general, haría esto para un cliente con SQL o Power Query, con pasos similares (la función de ventana SQL también ayudaría aquí)
Consulte mi Blog para obtener más información sobre el cálculo de fechas / qué usar y cuándo:
https://www.plainlyresults.com/blog/power-bi-dax-how-to-calculate-and-filter-based-on-dates/
https://www.plainlyresults.com/blog/when-to-use-dax-measure-vs-calculated-column-vs-other-tools/
Icey
Hola @enexius,
Por favor, comprueba el archivo adjunto,
Atentamente,
Icey
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.
Icey
Hola @enexius,
Por favor, comprueba el archivo adjunto,
Atentamente,
Icey
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.
enexius
En respuesta a Icey
@Icey: Gracias por su solución, este fue un ejemplo muy bien descrito y funcionó a la perfección. Además, su conjunto de datos me mostró algunas mejoras en la estructura de mi tabla, lo que también ayudó en el rendimiento.
claramente
Hola,
Aquí hay una solución con DAX (editado el 25.2.2021). Creo que tener un campo estático que diga quién es un cliente nuevo es valioso para muchos tipos de análisis de clientes.
Ver archivo de muestra: https://drive.google.com/file/d/1_tavilUUe9PSoE2PYlF9mKEOCZW4LghY/view?usp=sharing
Por debajo de 2023 es el año del informe. La lógica es que necesitamos saber el año de contrato anterior que un cliente tenía un contrato antes del año de informe. Entonces, el cliente es nuevo si este año faltan 3 años o si este año no está disponible.
2023 se puede reemplazar con un VAR que defina o, por ejemplo, YEAR (today ())
NEW COLUMNS:
1)
customer_last_contract_year = CALCULATE(Max(sales_customers[Contract Year]),ALLEXCEPT(sales_customers, sales_customers[Customer]))
2)
customer_prev_contract_year_before_reporting = CALCULATE(CALCULATE(MAX(sales_customers[Contract Year]),FILTER(sales_customers,2023>sales_customers[Contract Year])),ALLEXCEPT(sales_customers,sales_customers[Customer]))
3)
New_customer = IF(sales_customers[customer_last_contract_year]>= 2023 && ( ISBLANK(sales_customers[customer_prev_contract_year_before_reporting]) || (2023-sales_customers[customer_prev_contract_year_before_reporting] >= 3 && NOT ISBLANK(sales_customers[customer_prev_contract_year_before_reporting]))),TRUE,FALSE)
SALES VALUE NEW CUSTOMERS:
New_Customer_Sales = CALCULATE(SUM(sales_customers[Value]), sales_customers[new_customer] = TRUE)
Por lo general, haría esto para un cliente con SQL o Power Query, con pasos similares (la función de ventana SQL también ayudaría aquí)
Consulte mi Blog para obtener más información sobre el cálculo de fechas / qué usar y cuándo:
https://www.plainlyresults.com/blog/power-bi-dax-how-to-calculate-and-filter-based-on-dates/
https://www.plainlyresults.com/blog/when-to-use-dax-measure-vs-calculated-column-vs-other-tools/
enexius
En respuesta a claramente
Hola @plainly, finalmente encontré el tiempo para probar tu solución. Resolvió mi problema y, con algunos ajustes menores, pude adaptar su fórmula para que se ajustara a mi división habilitada para el visor (pueden elegir qué año de contrato quieren ver).
¡Así que muchas gracias!
Amitchandak
@enexius, estos blogs proporcionan formas de conseguir nuevos clientes. Vea si pueden ayudar con alguna modificación.
Retención de clientes, parte 1:
https: //community.powerbi.com/t5/Community-Blog/Customer-Retention-Part-1-Month-on-Month-Retention/b …
Retención de clientes, parte 2: Retención de período tras período: https: //community.powerbi.com/t5/Community-Blog/Customer-Retention-Part-2-Period-over-Period-Retenti …
enexius
En respuesta a Amitchandak
Hola @amitchandak,
Gracias por su respuesta. Revisé la publicación de su blog y entendí que podía dividir algunas dimensiones en diferentes tablas, así como analizar las ventas de los clientes en función de la «fecha del pedido». Mi problema con eso es que la fecha del pedido para mí es irrelevante para dividir a los clientes en clientes nuevos y existentes, y además excluye ciertos estados del contrato.
Mi separación (cliente nuevo / existente) se basa en si un cliente tiene un contrato para el año X (2021) y no tiene un contrato válido tres años antes.
Lo siento mucho si no pude juntar 2 + 2 con la ayuda de tu blog, pero tal vez podrías empujarme hacia lo correcto. dirección de nuevo.
Salud,
Enno
Amitchandak
En respuesta a enexius
@enexius, prueba una medida como
medida =
var _1 = calcular (min (‘Tabla'[Year]), filter (ALLSELECTED (‘Tabla’), ‘Tabla'[Customer]
if (está en blanco (_1) || _1