Analisis de Clientes
Exportar contenido
Agrupa y analiza las ventas por cliente para identificar los mas rentables.
- Accede a la pestana “Analisis” en Informes.
- Sub-pestana: “Por Cliente”.
- Selecciona el periodo (ano, trimestre o rango).
- Revisa la tabla ordenada por total facturado.
- Usa el grafico circular para visualizar la distribucion.
Metricas por cliente
Sección titulada «Metricas por cliente»| Columna | Descripcion |
|---|---|
| Cliente | Nombre y CIF |
| Nº Facturas | Cantidad de documentos |
| Total Facturado | Suma de importes |
| Ticket Medio | Total / Nº Facturas |
| % del Total | Proporcion sobre ingresos totales |
| Ultima Factura | Fecha de ultima compra |
Como interpretar los datos
Sección titulada «Como interpretar los datos»Top 5 clientes: Representa normalmente el 80% de ingresos (regla de Pareto).
Clientes inactivos: Sin facturas en los ultimos 90 dias — oportunidad de reactivacion.
Ticket medio bajo: Clientes frecuentes con compras pequenas — potencial de upselling.
Detalles tecnicos — Analisis de Clientes
Sección titulada «Detalles tecnicos — Analisis de Clientes»Detalles técnicos
Componente: src/features/accounting/sub-modules/reporting/components/analysis/CustomerAnalysisReport.tsx
Query de agregacion:
SELECT c.id, c.name, c.cif_nif, COUNT(i.id) as invoice_count, SUM(i.total_amount) as total_invoiced, AVG(i.total_amount) as avg_ticket, MAX(i.issue_date) as last_invoice_dateFROM customers cLEFT JOIN invoices i ON c.id = i.customer_id AND i.status != 'cancelled' AND i.issue_date BETWEEN '<date_from>' AND '<date_to>'WHERE c.business_id = '<business_id>'GROUP BY c.id, c.name, c.cif_nifHAVING COUNT(i.id) > 0ORDER BY total_invoiced DESC;Calculo de porcentaje:
const totalRevenue = data.reduce((sum, c) => sum + c.total_invoiced, 0);const dataWithPercent = data.map(customer => ({ ...customer, percentage: (customer.total_invoiced / totalRevenue) * 100}));