Saltar al contenido
Iván Pintor
Read in English
Todos los proyectos

BI y datos

Cuadro de mando de Dirección

Sistema de business intelligence sobre el CRM: paneles por área y listados para los consultores, con datos en tiempo real y comparación con años anteriores.

Herramientas

  • SQL (Trino)
  • Apache Superset
  • Bitrix24

Ilustrado con datos ficticios. Proyecto real. Las capturas y ejemplos usan datos ficticios: no se muestran datos de clientes ni cifras de negocio.

  1. Situación

    Dirección no tenía información consolidada sobre la cartera de clientes, la carga de trabajo ni la rentabilidad. Todo salía de un Excel de seguimiento y de listados preparados a mano cada mes: por consultor, de altas y bajas, de extras por departamento o de horas de tareas comunes.

  2. Solución

    Construí un sistema de business intelligence sobre el CRM, con tres conjuntos de datos en SQL que se leen en tiempo real (empresas, tareas y negociaciones) y paneles por área: general, contable-fiscal, laboral y administración. Añadí listados con filtros para que cada consultor prepare su reparto, y con plantillas CSS los informes mantienen el formato que Dirección ya usaba.

  3. Resultado

    Dirección consulta al momento lo que antes pedía en listados y compara con hasta tres años anteriores, algo que antes no podía hacer. Los dos departamentos se ahorran varias horas al mes en preparar listados.

Cómo funciona

  1. Datos del CRM

    Empresas, tareas de los grupos de trabajo y negociaciones.

  2. Datasets en SQL

    Consultas en Trino que limpian, cruzan y agregan los datos en tiempo real.

  3. Paneles por área

    General, contable-fiscal, laboral y administración, comparables con tres años anteriores.

  4. Listados para consultores

    Filtros para preparar el reparto del mes en segundos.

  5. Dirección decide con datos al momento

    Sin pedir listados y con el mismo formato de informe de siempre.

Demo

Paneles por área, preguntas de Dirección, comparación entre años y la consulta SQL de cada gráfico. Si das de alta un cliente en el circuito comercial, aparece aquí.

Un panel por área con los datos del CRM en tiempo real. Pregunta lo que preguntaba Dirección, filtra, compara con años anteriores y mira la consulta SQL de cada gráfico.

Datos e importes ficticios

Preguntas de Dirección

El cliente que des de alta en la demo del circuito comercial aparece aquí al momento: en la cartera, en la carga de su consultor y en las altas del mes.

Ir al circuito comercial →

Clientes activos

540

345 sociedades · 195 autónomos

Facturación mensual

122.225 € / mes

Importe ficticio

Rentabilidad

72,85 €/h

Todas las cuotas ÷ horas de los consultores

Con nóminas

283

Contable-fiscal

83.860 € / mes

Importe ficticio

Laboral

34.815 € / mes

Importe ficticio

Otros servicios

3.550 € / mes

Importe ficticio

Sin nóminas

257

Horas y cartera por consultor · contable-fiscal

Horas reales de clientes al mes, actualizadas cada trimestre. La marca es la capacidad de referencia (150 h, ficticia).

  • Consultora A178 h · 63 clientes

    ⚠ Por encima de la capacidad

  • Consultor B108,75 h · 63 clientes
  • Consultora C137,75 h · 63 clientes
  • Consultor D152,75 h · 73 clientes

    ⚠ Por encima de la capacidad

  • Consultora E138,75 h · 62 clientes
  • Consultor F101,5 h · 55 clientes
  • Consultora G131,5 h · 62 clientes
  • Consultor H137,75 h · 55 clientes
Ver la consulta SQL

Tablas y columnas inventadas; el mismo tipo de consulta que en el cuadro real (Trino y plantillas de Superset).

SELECT cf_consultant                         AS consultant,
       count(*)                                  AS companies,
       sum(cf_hours)                             AS hours_per_month,
       sum(cf_fee) / nullif(sum(cf_hours), 0)    AS fee_per_hour
FROM crm.companies
WHERE active
  AND cf_consultant IS NOT NULL
  {% if filter_values('billing_entity') %}
  AND billing_entity IN {{ filter_values('billing_entity') | where_in }}
  {% endif %}
  {% if filter_values('country') %}
  AND country IN {{ filter_values('country') | where_in }}
  {% endif %}
GROUP BY 1
ORDER BY 1

Horas y cartera por consultor · laboral

Horas reales de clientes al mes, actualizadas cada trimestre. La marca es la capacidad de referencia (150 h, ficticia).

  • Consultora L111,5 h · 56 clientes
  • Consultor M136,75 h · 56 clientes
  • Consultora N122,75 h · 67 clientes
  • Consultor P80,5 h · 50 clientes
  • Consultora R139,5 h · 54 clientes
Ver la consulta SQL

Tablas y columnas inventadas; el mismo tipo de consulta que en el cuadro real (Trino y plantillas de Superset).

SELECT lab_consultant                         AS consultant,
       count(*)                                  AS companies,
       sum(lab_hours)                             AS hours_per_month,
       sum(lab_fee) / nullif(sum(lab_hours), 0)    AS fee_per_hour
FROM crm.companies
WHERE active
  AND lab_consultant IS NOT NULL
  {% if filter_values('billing_entity') %}
  AND billing_entity IN {{ filter_values('billing_entity') | where_in }}
  {% endif %}
  {% if filter_values('country') %}
  AND country IN {{ filter_values('country') | where_in }}
  {% endif %}
GROUP BY 1
ORDER BY 1

Listado general

Lo que antes era el Excel de seguimiento, ahora siempre al día.

ClienteTipoConsultor C-FHoras C-FCuota C-FPor horaConsultor LABNóminasHoras LABCuota total
Ana Ejemplo 1AutónomoConsultor B0,75 h60 €80,00 €/h———60 €
Ana Ejemplo 2AutónomoConsultora E1 h95 €95,00 €/hConsultora L10,5 h110 €
Ana Ejemplo 3AutónomoConsultor H0,75 h65 €86,67 €/h———75 €
Ana Ejemplo 4AutónomoConsultora A1,25 h105 €84,00 €/hConsultora L20,5 h130 €
Ana Ejemplo 5AutónomoConsultora A1 h85 €85,00 €/hConsultora L10,5 h100 €
Ana Ejemplo 6AutónomoConsultor F1,25 h110 €88,00 €/hConsultor P20,5 h150 €
Ana Ejemplo 7AutónomoConsultora G1 h85 €85,00 €/h———125 €
Ana Ejemplo 8AutónomoConsultora C1,25 h100 €80,00 €/h———110 €
Ana Ejemplo 9AutónomoConsultor H1 h60 €60,00 €/h———60 €
Ana Ejemplo 10AutónomoConsultora E1,25 h85 €68,00 €/h———85 €
Ver la consulta SQL

Tablas y columnas inventadas; el mismo tipo de consulta que en el cuadro real (Trino y plantillas de Superset).

SELECT name, client_type, legal_form,
       cf_consultant, cf_hours, cf_fee,
       cf_fee / nullif(cf_hours, 0)         AS cf_fee_per_hour,
       lab_consultant, payslips, lab_hours,
       cf_fee + lab_fee + other_fee         AS total_fee
FROM crm.companies
WHERE active
  {% if filter_values('billing_entity') %}
  AND billing_entity IN {{ filter_values('billing_entity') | where_in }}
  {% endif %}
  {% if filter_values('country') %}
  AND country IN {{ filter_values('country') | where_in }}
  {% endif %}
ORDER BY name

Recreación con clientes, consultores, horas e importes ficticios. En el cuadro real, los paneles leían en tiempo real tres conjuntos de datos del CRM (empresas, tareas y negociaciones) y se podían comparar hasta con tres años anteriores.