Conto2.3 – Il design

Se siete giunti al secondo capitolo, significa che probabilmente qualcosa vi interessa dell’argomento e conseguentemente una volta espressi i requisiti (se ve li siete persi sono qui) possiamo passare alla parte più di concetto vale a dire definire almeno sulla carta come dovrà funzionare tutto il processo. In particolare:

  1. definire come strutturare la parte di input / output identificando dove saranno implementate le parti operative (chi fa cosa)
  2. impostare una configurabilità delle parti sopra che ci consenta la riusabilità e la flessibilità che ci servono
  3. impostare un sistema di logging che ci permetta di verificare con facilità se ci sono problemi, anomalie o semplicemente verificare nel dettaglio che cosa il sistema abbia realizzato

1) Definire come strutturare la parte di input / output

Come dicevamo l’idea è che sia necessario gestire tipologie di files diversi a seconda del tipo di sorgente: estratto conto della banca o della carta di credito e di chi appartengono questo perché se io e mia moglie abbiamo due banca distinte normalmente anche la sorgente sarà differente ed è dunque necessario prevedere che possano essere due caricamenti differenti.

Configurazione cartelle di source

L’idea di base è che volendo potrei aggiungere quanti owner io voglia tenendo al di sotto una struttura che consenta di identificare anzi tutto la banca e poi altre fonti. Nelle cartelle sopra dovranno essere caricati tutti i files sorgente così come sono senza tendenzialmente effettuare nessuna manipolazione.

A questo punto uno script PowerShell che risiederà nella root acquisirà questi files e li deve normalizzare. Che cosa si intende per normalizzare? Sostanzialmente ricercare un insieme di colonne che siano necessarie ad estrarre le informazioni che servono:

  • Data Operazione: la data in cui la spesa o l’entrata è avvenuta o contabilizzata (scegliete voi quale delle due preferite)
  • Causale: dovrebbe dare un’indicazione di massima dell’operazione
  • Descrizione: indica con più dettagli la motivazione della stessa operazione
  • Ammontare: indica la somma monetaria dell’operazione
  • Accredito: per esperienza alcune banche posizionano l’accredito in una colonna separata invece di includerlo con un segno differente nell’ammontare

Una volta acquisite queste info andranno quindi esportate in un folder OUTPUT anche questo suddiviso in in due principali cartelle che però conterrà le info degli stessi file originali ma senza più distinzioni di owner e soprattutto nel medesimo formato al fine, come vedremo di rendere la vita più semplice ad Excel.

Configurazione Cartelle di output

L’ultimo miglio riguarda proprio Excel che dovrà andare a leggere questi files e caricarli all’interno dei suoi fogli in modo da poter rendere fruibile una pivot che li aggreghi.

All’appello manca però ancora una parte importante che è il mapping. Chi fa il mapping e da dove lo attinge. Questa purtroppo è la parte più dolorosa, infatti il mio obbiettivo è quello di gestire il mapping in un file excel separato adibito solo a quello in cui sia possibile dire che determinate descrizioni sia catalogabili in un modo piuttosto che in un altro. Questa possibilità purtroppo è assai costosa ed è il motivo principale per cui Excel da solo non basta e serve Powershell. In pratica, appena lanciato Powershell si caricherà in pancia le informazioni presenti nel file di mapping e le utilizzarà per mappare le spese in un maniera coerente cosicchè in OUTPUT mi troverò già dei files con le info che mi serviranno a categorizzarli a dovere.

2) Impostare la configurabilità

Tutto ciò che è stato definito sopra ha senso ma perché sia facilmente estendibile e riadattabile necessita che sia presente un file di configurazione che dica al processo che tipo di info servono e dove reperirle così che se qualcuno o qualcosa cambia le carte in tavola non serva mettere mano allo script ma solo rivedere le configurazioni impostate. E’ un elemento fondamentale al fine di rendere l’applicazione utilizzabile.

3) Definire come loggare

Infine al fine di avere un’informazione più di dettaglio su cosa è accaduto e quali sono state le azioni per verificare sia tutto ok serve anche che il sistema logghi tutto su un file che possa essere utilizzato a valle di ogni singolo run

Root Folder

Insomma ricapitolando:

  • Config.xml: sarà il file che contiene le configurazioni
  • Conto2.3.ps1: sarà il file dove verranno implementate le logiche di ET
  • Conto2.3.xlsx: sarà il file Excel che effettuerà la parte di L e genererà la pivot
  • MasterCategories.xlsx: sarà il file dobe risiedono i mapping per la categorizzazione usato dunque nella fase di ET

Conto2.3 – Gestione Entrate uscite in PowerShell & PowerQuery

Non so a voi ma l’idea che ogni mese debba ripetere una serie di procedure, spesso parecchio manuali per avere un quadro delle entrate ed uscite di casa mi rende sempre piuttosto annoiato e nervoso. In realtà ci sono già parecchi tool che possono essere utilizzati, come Excel ad esempio, solo che hanno delle limitazioni e la mia idea era partire da un sistema che una volta configurato necessiti poco più di un paio di click per aggiornarsi ogni mese.

Spoiler: l’impresa è ardua e non sono del tutto sicuro di esserci riuscito, ma se mi seguirete in tutto il post ed anche nei seguenti (penso e spero) potrete giudicare voi stessi.

Ma iniziamo dal requisito:

  1. Le fonti da cui arrivano le spese possono essere multiple: il mio conto corrente, quello di mia moglie, l’estratto conto della carta…
  2. I formati di questi files sono spesso differenti principalmente csv e xlsx ma potrebbero essercene anche altri
  3. Il contenuto che questi files hanno potrebbe essere differente: dalle colonne presenti al formato dei numeri e delle date
  4. L’idea è che tutti questi files eterogenei vengano acquisiti, mappati e convogliati in unico files Excel da cui si possa con facilità applicare delle Pivot e capire questo mese quanto sto spendendo verificando se una voce è più onerosa di altre.
  5. Infine che ogni mese, salvo caricare i nuovi files ed eventualmente correggere qualche mappatura, con un paio click si aggiorni tutta la baracca

Un punto molto importante riguarda il mapping. Già, perché così come sono le informazioni che ci arrivano dai files sono spesso poco significative. Mi spiego meglio: mi piacerebbe che se nel file fosse presente una linea “Pizzeria da Mario” questa finisca sotto una voce di spesa tipo “Pranzi e Cene” così che poi sia di più facile lettura o ancor meglio che tutte le pizzerie ci finiscano. Non basta quindi acquisire il dato in se per se ma operarne una trasformazione: quello che in gergo tecnico ed anche abbastanza NERD (si userà ancora questo termine? boh) si chiama ETL. L’acronimo deriva dall’inglese Extract, Transform and Load che per chi adora gli spaghetti come me si traduce in Estrai, Trasforma e Acquisci.

Come già accennavo all’inizio, ci sono fiumi di tools più o meno complessi e costosi che forniscono questo tipo di funzionalità, ne cito solo uno perché lo conosciamo tutti benissimo: si chiama Excel. Purtroppo però, probabilmente per mia ignoranza non sono riuscito ad individuare un unico tool economico che fornisse questo tipo di esperienza per cui ho optato per l’utilizzo combinato di due tool rispettivamente suddivisi nella maniera seguente:

  • Extract: Powershell
  • Transform: Powershell
  • Load: Excel

Un po’ più nel dettaglio: con Powershell verranno identificati i files sorgente, verranno letti e normalizzati i dati in essi contenuti effettuando anche il mapping tanto desiderato e verranno quindi tradotti in un formato definitivo. Questo formato definitivo verrà poi dato in pasto ad Excel così da fornirci una pivot che sia utilizzabile per i nostri scopi di monitoraggio e amministrazione e soprattutto fruibili anche a vostra moglie…