Rendibilitat per SQL
Deu mil línies de venda i una pregunta: què es ven molt i deixa poc.
Dades i BI · SQL · Demo navegable
El problema
Facturar no és guanyar. Gairebé tot negoci té una família de producte que omple l’aparador i buida el marge, i una altra que sosté el compte sense que ningú la miri. Això no es veu al total: es veu en tallar per producte, regió i qui la ven.
Què fa
- Genera un conjunt de vendes reproduïble amb el seu script, perquè l’anàlisi es pugui repetir sencera.
- Cinc consultes planes sobre SQLite, sense unions ni subconsultes: agregació, agrupació i ordre.
- Talla la rendibilitat per regió, venedor, categoria, tipus de client i mes.
- Deixa la sortida preparada per a Power BI.
El que es va decidir en construir-lo
- El panell llegeix les consultes, no una còpia
- L’exportador obre el mateix fitxer de consultes i les executa sobre el mateix conjunt de dades que publica el repositori. Si algú canvia una consulta, el panell canvia amb ella. Una còpia enganxada a l’script acabaria, tard o d’hora, ensenyant un número que la consulta ja no dona.
- El marge surt dels totals, no de la mitjana de mitjanes
- El marge de capçalera es calcula sobre la suma del benefici i la suma de l’ingrés, no fent la mitjana dels marges de cada regió. Fer la mitjana de mitjanes dona un altre número, igual de creïble i equivocat, i és l’error més repetit de qualsevol informe de rendibilitat.
- El trossejador entén els comentaris
- L’última consulta acaba amb un comentari darrere del punt i coma, i partir el fitxer per aquest caràcter convertia el comentari en una sisena consulta fantasma. Hi ha una prova que ho fixa, perquè la fallada no es veu: produeix una consulta buida que no trenca res i descompta el recompte.
- El motor es declara: és SQLite
- La consulta de tendència mensual fa servir una funció de data pròpia d’SQLite, així que aquestes consultes no són portables sense tocar-les. Dir «SQL estàndard» hauria sonat millor i hauria estat fals: qui les porti a un altre motor ha de canviar aquesta línia, i convé que ho sàpiga abans.
Fins on arriba
- Són cinc consultes planes: agregació, agrupació i ordre. No hi ha unions, ni subconsultes, ni funcions de finestra. El «rànquing» de venedors és un ordre descendent amb un límit de cinc.
- Les dades són sintètiques i, a més, cada columna se sorteja de manera independent. Regió, categoria i venedor no guarden relació amb l’import: quina regió és més rendible és soroll de mostreig, no una troballa.
- La consulta de baix marge no retorna cap fila amb aquestes dades, perquè el llindar queda per sota del benefici mitjà que genera l’script. Es publica el context perquè es vegi, en lloc d’ajustar el llindar fins que surti alguna cosa.
- El generador de dades escriu en una ruta absoluta de la màquina on es va escriure i no fixa la llavor de les dates: el conjunt publicat és reproduïble, tornar-lo a generar tal qual no ho és.
- 10.000 línies de venda
Construït amb
- SQL
- Python
- Power BI
D’on surten les dades
Dades sintètiques generades pel mateix repositori: no hi ha informació de cap client.