{"id":4411,"date":"2024-02-07T16:09:00","date_gmt":"2024-02-07T15:09:00","guid":{"rendered":"https:\/\/www.skillup.cloud\/?p=4411"},"modified":"2024-02-12T09:43:11","modified_gmt":"2024-02-12T08:43:11","slug":"sfruttare-il-potere-della-data-science-e-sql-con-olap-functions-su-ibm-iseries","status":"publish","type":"post","link":"https:\/\/www.skillup.cloud\/it\/sfruttare-il-potere-della-data-science-e-sql-con-olap-functions-su-ibm-iseries\/","title":{"rendered":"Sfruttare il Potere della Data Science e SQL con OLAP Functions su IBM iSeries"},"content":{"rendered":"\n<p>Nel panorama tecnologico in continua evoluzione, la Data Science si \u00e8 affermata come un pilastro dell&#8217;intelligenza aziendale, della presa di decisioni strategiche e dell&#8217;efficienza operativa.<\/p>\n\n\n\n<p>Al cuore della Data Science si trova la potente combinazione di SQL e funzioni Online Analytical Processing (OLAP), specialmente all&#8217;interno dell&#8217;ambiente robusto di IBM iSeries (AS\/400).<\/p>\n\n\n\n<p>Questo post esplora come l&#8217;utilizzo di SQL e funzioni OLAP sulla piattaforma IBM iSeries possa trasformare l&#8217;analisi dei dati, offrendo approfondimenti dettagliati e facilitando complesse query analitiche direttamente sul database.<\/p>\n\n\n\n<p>Sebbene queste possibilit\u00e0 siano comuni agli engine sql che forniscono funzioni OLAP, in questo post l&#8217;attenzione \u00e8 focalizzata sulla piattaforma IBM iSeries.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Introduzione alla Data Science e SQL<\/strong><\/p>\n\n\n\n<p>&nbsp;La Data Science combina varie competenze statistiche, analitiche e di programmazione per raccogliere, analizzare e interpretare grandi set di dati, al fine di ottenere informazioni azionabili.<\/p>\n\n\n\n<p>SQL (Structured Query Language) \u00e8 uno strumento fondamentale nell&#8217;arsenale dello scienziato dei dati, consentendo la gestione e la manipolazione di database relazionali. La precisione, l&#8217;efficienza e la versatilit\u00e0 di SQL lo rendono indispensabile per interrogare e analizzare i dati.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Il Ruolo delle Funzioni OLAP nella Data Science<\/strong><\/p>\n\n\n\n<p>Le funzioni OLAP estendono le capacit\u00e0 di SQL, abilitando avanzate funzionalit\u00e0 di manipolazione e analisi dei dati.<\/p>\n\n\n\n<p>Queste funzioni sono fondamentali per eseguire complesse query analitiche, come la sommarizzazione dei dati, l&#8217;aggregazione e l&#8217;analisi multidimensionale.<\/p>\n\n\n\n<p>Integrando le funzioni OLAP all&#8217;interno delle query SQL, gli scienziati dei dati possono potenziare le loro capacit\u00e0 di esplorazione e analisi dei dati, scoprendo approfondimenti pi\u00f9 dettagliati in modo pi\u00f9 efficiente.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Funzioni OLAP su IBM iSeries (DB2 for i)<\/strong><\/p>\n\n\n\n<p>La piattaforma IBM iSeries (AS\/400), con il suo database DB2 for i, supporta un&#8217;ampia suite di funzioni OLAP progettate per facilitare sofisticate analisi dei dati.<\/p>\n\n\n\n<p>Queste funzioni possono essere categorizzate come segue:<\/p>\n\n\n\n<p><strong>1 &#8211; Funzioni Aggregate<\/strong>: Essenziali per eseguire aggregazioni da basiche ad avanzate, queste funzioni aiutano a riassumere i dati, fornendo una base per ulteriori analisi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SUM, AVG, MAX, MIN, COUNT<\/strong>: Eseguono aggregazioni di base come totale, media, massimo, minimo e conteggio.<\/li>\n\n\n\n<li><strong>STDDEV, VAR<\/strong>: Calcolano la deviazione standard e la varianza per comprendere la dispersione dei dati.<\/li>\n<\/ul>\n\n\n\n<p><strong>2 &#8211; Funzioni di Ranking<\/strong>: offrono avanzate capacit\u00e0 di classificazione, essenziali per l&#8217;analisi comparativa all&#8217;interno dei set di dati:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ROW_NUMBER()<\/strong>: Assegna un intero sequenziale unico alle righe all&#8217;interno di una partizione di un set di risultati, a partire da 1.<\/li>\n\n\n\n<li><strong>RANK()<\/strong>: Assegna un rango a ogni riga all&#8217;interno di una partizione di un set di risultati, con gap nei valori di rango in caso di parit\u00e0.<\/li>\n\n\n\n<li><strong>DENSE_RANK()<\/strong>: Simile a <strong>RANK()<\/strong>, ma senza gap nella sequenza di classificazione per ranghi pari.<\/li>\n\n\n\n<li><strong>NTILE(n)<\/strong>: Distribuisce le righe in una partizione ordinata in un numero specificato di gruppi, n. \u00c8 utile per dividere un dataset in quantili.<\/li>\n<\/ul>\n\n\n\n<p><strong>3 &#8211; Funzioni di Finestra<\/strong>: Consentono l&#8217;accesso a punti dati specifici all&#8217;interno di un set di dati, facilitando complesse comparazioni e analisi senza la necessit\u00e0 di self-join:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LEAD, LAG<\/strong>: Accedono ai dati da una riga successiva (LEAD) o precedente (LAG) senza richiedere un self-join.<\/li>\n\n\n\n<li><strong>FIRST_VALUE, LAST_VALUE<\/strong>: Ottengono il primo o l&#8217;ultimo valore in una finestra specificata.<\/li>\n\n\n\n<li><strong>NTH_VALUE()<\/strong>: Recupera il valore di una colonna specificata alla posizione n all&#8217;interno della finestra.<\/li>\n<\/ul>\n\n\n\n<p><strong>4 &#8211; Funzioni Aggregate Analitiche<\/strong>: Consentono l&#8217;esecuzione di aggregazioni su insiemi di righe correlati, offrendo una prospettiva analitica pi\u00f9 profonda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SUM() OVER, AVG() OVER<\/strong>: Eseguono aggregazioni su un insieme di righe in qualche modo correlate alla riga corrente.<\/li>\n\n\n\n<li><strong>CUME_DIST()<\/strong>: Calcola la distribuzione cumulativa di un valore all&#8217;interno di un insieme di valori.<\/li>\n\n\n\n<li><strong>PERCENT_RANK()<\/strong>: Calcola il rango percentuale di un valore in un insieme di valori.<\/li>\n<\/ul>\n\n\n\n<p><strong>5 &#8211; Operazioni di Raggruppamento<\/strong>: Consentono un&#8217;aggregazione e un&#8217;analisi dei dati complete, supportando complesse esigenze di reporting con efficienza e flessibilit\u00e0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GROUPING SETS<\/strong>: Consente livelli multipli di aggregazioni in una singola query, utile per generare report con subtotali e totali generali.<\/li>\n\n\n\n<li><strong>ROLLUP<\/strong>: Produce un set di risultati che mostra aggregati per una gerarchia di valori, inclusi subtotali e un totale generale.<\/li>\n\n\n\n<li><strong>CUBE<\/strong>: Genera tutte le possibili combinazioni di aggregazioni per un gruppo di colonne selezionate.<\/li>\n<\/ul>\n\n\n\n<p><strong>6 &#8211; Funzioni Varie<\/strong>: Migliorano le capacit\u00e0 di manipolazione dei dati, consentendo presentazioni e approfondimenti innovativi sui dati:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LISTAGG()<\/strong>: Aggrega dati stringa concatenando valori da pi\u00f9 righe.<\/li>\n\n\n\n<li><strong>GROUPING()<\/strong>: Identifica se una riga in un set di risultati aggregato \u00e8 una riga di super-aggregazione.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Considerazioni sull&#8217;Uso<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Prestazioni<\/strong>: Le funzioni OLAP, specialmente quando applicate a grandi set di dati, possono essere intensive in termini di risorse. L&#8217;indicizzazione appropriata, il partizionamento e l&#8217;ottimizzazione delle query sono essenziali.<\/li>\n\n\n\n<li><strong>Compatibilit\u00e0<\/strong>: Assicurati che il tuo sistema sia su una versione recente di IBM i (OS\/400) per utilizzare la gamma completa di capacit\u00e0 OLAP offerte da DB2 for i.<\/li>\n\n\n\n<li><strong>Curva di Apprendimento<\/strong>: Seppur potenti, le funzioni OLAP possono essere complesse da padroneggiare. Investi tempo nella comprensione delle loro sfumature per sfruttare appieno le loro capacit\u00e0 analitiche.<\/li>\n<\/ul>\n\n\n\n<p>L&#8217;integrazione di SQL e funzioni OLAP sulla piattaforma IBM iSeries offre opportunit\u00e0 senza precedenti per gli scienziati dei dati di eseguire sofisticate analisi e reportistica dei dati.<\/p>\n\n\n\n<p>Padroneggiando questi strumenti, i professionisti possono sbloccare approfondimenti pi\u00f9 dettagliati, migliorare le prestazioni e razionalizzare i flussi di lavoro di elaborazione dei dati, guidando in avanti la frontiera della Data Science all&#8217;interno delle loro organizzazioni.<\/p>\n\n\n\n<p><strong>Bene, cominciamo a vedere all&#8217;opera alcune OLAP Functions!<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"256\" src=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1151.png\" alt=\"\" class=\"wp-image-4454\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1151.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1151-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p class=\"has-large-font-size\"><strong><strong>Esempi di funzioni OLAP: funzioni aggregate SUM, AVG, MAX, MIN, COUNT, STDDEV, VAR<\/strong><\/strong><\/p>\n\n\n\n<p>Di seguito sono riportati esempi di comandi SQL per IBM iSeries che dimostrano l&#8217;uso delle funzioni OLAP (Online Analytical Processing), incluse funzioni aggregate come:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SUM, AVG, MAX, MIN, COUNT<\/strong>: Eseguono aggregazioni di base come totale, media, massimo, minimo e conteggio.<\/li>\n\n\n\n<li><strong>STDDEV, VAR<\/strong>: Calcolano la deviazione standard e la varianza per comprendere la dispersione dei dati.<\/li>\n<\/ul>\n\n\n\n<p>Questi esempi incorporano anche le Common Table Expressions (CTE) e la clausola <strong>VALUES<\/strong> per preparare i dati di test.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH sales_data (sale_id, category, product_id, quantity_sold, sale_amount) AS (\n  VALUES\n    (1,  'C1', 'Pa', 10, 1000),\n    (2,  'C1', 'Pb', 20, 1500),\n    (3,  'C1', 'Pc', 15, 1200),\n    (4,  'C1', 'Pd', 25, 2000),\n    (5,  'C2', 'Pe', 30, 2600),\n    (6,  'C2', 'Pf', 10, 1200),\n    (7,  'C2', 'Pg', 20, 1700),\n    (8,  'C2', 'Ph', 15, 1400),\n    (9,  'C3', 'Pi', 10, 2000),\n    (10, 'C3', 'Pj', 20, 1900),\n    (11, 'C3', 'Pk', 15, 1500),\n    (12, 'C3', 'Pl', 25, 2300),\n    (13, 'C3', 'Pm', 30, 2800),\n    (14, 'C3', 'Pn', 30, 2200)\n)\nSELECT\n  category,\n  SUM(sale_amount) AS total,\n  AVG(sale_amount) AS average,\n  MAX(sale_amount) AS \"max\",\n  MIN(sale_amount) AS \"min\",\n  Round(STDDEV(sale_amount)) AS stddev,\n  Round(VAR(sale_amount)) AS var,  COUNT(*) AS \"Count\"\nFROM sales_data\nGROUP BY category\nORDER BY 1;<\/pre>\n\n\n\n<p><strong>Risultato<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>CATEGORY<\/td><td>TOTAL<\/td><td>AVERAGE<\/td><td>max<\/td><td>min<\/td><td>STDDEV<\/td><td>VAR<\/td><td>Count<\/td><\/tr><tr><td>C1<\/td><td>5.700<\/td><td>1.425<\/td><td>2.000<\/td><td>1.000<\/td><td>377<\/td><td>141.875<\/td><td>4<\/td><\/tr><tr><td>C2<\/td><td>6.900<\/td><td>1.725<\/td><td>2.600<\/td><td>1.200<\/td><td>536<\/td><td>286.875<\/td><td>4<\/td><\/tr><tr><td>C3<\/td><td>12.700<\/td><td>2.116<\/td><td>2.800<\/td><td>1.500<\/td><td>398<\/td><td>158.056<\/td><td>6<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Due Parole sulla Deviazione Standard e <strong>Varianza<\/strong>.<\/strong><\/p>\n\n\n\n<p>Le OLAP (Online Analytical Processing) functions per il calcolo della deviazione standard e della varianza sono strumenti potenti nel contesto dell&#8217;analisi dei dati, specialmente quando si lavora con grandi set di dati in database o data warehouse per supportare decisioni aziendali.<\/p>\n\n\n\n<p>Queste funzioni consentono agli analisti di comprendere meglio la distribuzione e la variabilit\u00e0 dei dati, elementi fondamentali per l&#8217;analisi statistica e la presa di decisioni basata sui dati.<\/p>\n\n\n\n<p><strong>Concetto Statistico<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Varianza<\/strong>: La varianza \u00e8 una misura della dispersione che indica quanto i valori di un insieme di dati si discostano dalla media (valore medio) dell&#8217;insieme. In termini semplici, ci dice quanto siano variabili i dati. La varianza si calcola come la media dei quadrati delle differenze tra ciascun valore e la media dell&#8217;insieme di dati. Nel contesto OLAP, la varianza aiuta a comprendere la distribuzione dei valori attraverso diverse dimensioni, come il tempo, la geografia, o categorie di prodotto.<\/li>\n\n\n\n<li><strong>Deviazione Standard<\/strong>: La deviazione standard \u00e8 la radice quadrata della varianza e fornisce una misura della dispersione dei dati in unit\u00e0 originali. Mentre la varianza d\u00e0 un&#8217;idea della variabilit\u00e0 dei dati, la deviazione standard \u00e8 pi\u00f9 intuitivamente comprensibile perch\u00e9 \u00e8 espressa nella stessa unit\u00e0 di misura dei dati originali. Questo rende pi\u00f9 facile valutare la dispersione dei valori attorno alla media.<\/li>\n<\/ul>\n\n\n\n<p><strong>Significato Pratico<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Analisi della Variabilit\u00e0<\/strong>: Comprendere la varianza e la deviazione standard dei dati pu\u00f2 aiutare le aziende a identificare la variabilit\u00e0 nei processi di business, nelle vendite, nella produzione e in altre metriche chiave. Ad esempio, un&#8217;alta variabilit\u00e0 nelle vendite potrebbe indicare la necessit\u00e0 di esaminare pi\u00f9 da vicino i fattori che influenzano tali variazioni, come stagionalit\u00e0, promozioni o concorrenza.<\/li>\n\n\n\n<li><strong>Supporto alle Decisioni<\/strong>: Le funzioni OLAP che calcolano queste statistiche possono supportare decisioni strategiche fornendo insight su come i dati si distribuiscono attorno a medie settoriali o aziendali. Per esempio, capire la deviazione standard nel tempo di consegna pu\u00f2 aiutare a migliorare la logistica e la soddisfazione del cliente.<\/li>\n\n\n\n<li><strong>Segmentazione e Targeting<\/strong>: Analizzando la varianza e la deviazione standard di comportamenti o preferenze dei clienti, le aziende possono identificare segmenti di mercato o gruppi di clienti con esigenze o comportamenti simili, permettendo strategie di marketing pi\u00f9 mirate.<\/li>\n\n\n\n<li><strong>Rilevamento di Anomalie<\/strong>: Valori che si discostano significativamente dalla media (outliers) possono essere facilmente identificati quando si analizza la deviazione standard. Questo pu\u00f2 essere particolarmente utile per rilevare errori nei dati, frodi, o altre anomalie operative.<\/li>\n<\/ul>\n\n\n\n<p>In sintesi, le funzioni OLAP per il calcolo della varianza e della deviazione standard sono essenziali per qualsiasi analisi avanzata dei dati, permettendo agli analisti e ai decisori di capire meglio la natura e la distribuzione dei dati all&#8217;interno dell&#8217;organizzazione. Questa comprensione pu\u00f2 guidare l&#8217;ottimizzazione dei processi, l&#8217;innovazione dei prodotti, e strategie di marketing pi\u00f9 efficaci, tra gli altri vantaggi competitivi.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"256\" src=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1147.png\" alt=\"\" class=\"wp-image-4452\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1147.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240207_1147-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p class=\"has-large-font-size\"><strong>Esempi di funzioni OLAP: Funzioni Analitiche Aggregate SUM() OVER, AVG() OVER, CUME_DIST(), PERCENT_RANK()<\/strong><\/p>\n\n\n\n<p>Di seguito sono riportati esempi di comandi SQL per IBM iSeries (noto anche come AS\/400 o IBM i) che dimostrano l&#8217;uso delle funzioni OLAP (Online Analytical Processing), incluse le funzioni di aggregazione analitica, conosciute anche come <strong>funzioni Finestra o funzioni di Partizionamento<\/strong>, come <strong>SUM() OVER<\/strong>, <strong>AVG() OVER<\/strong>, <strong>CUME_DIST()<\/strong> e <strong>PERCENT_RANK()<\/strong>.<\/p>\n\n\n\n<p>Questi esempi incorporano anche Espressioni di Tabelle Comuni (CTE) e la clausola <strong>VALUES<\/strong> per preparare i dati di test.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Esempio 1 OLAP Function: SUM() OVER e AVG() OVER<\/strong><\/p>\n\n\n\n<p>Queste funzioni calcolano la somma e la media di un insieme di righe definito dalla clausola OVER (spiegata in dettaglio sotto).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData (PersonId, Year, Amount) AS (\n  VALUES (1, 2019, 1000), (1, 2020, 1500), (1, 2021, 800)\n       , (1, 2022, 1400), (1, 2023, 1600),\n         (2, 2020, 1500), (2, 2021, 800), (2, 2022, 1400)\n       , (2, 2023, 1600)\n       , (3, 2021, 800), (3, 2022, 1400), (3, 2023, 1600)\n)\nSELECT distinct\n  PersonId\n, SUM(Amount) OVER (PARTITION BY PersonId) AS Total\n, AVG(Amount) OVER (PARTITION BY PersonId) AS Avg\n, SUM(Amount) OVER (PARTITION BY 'ALL') AS total\n, DECIMAL(100 * (SUM(Amount) OVER (PARTITION BY PersonId)) \/\n    DECIMAL(SUM(Amount) OVER (PARTITION BY 'ALL'), 10, 3), 5, 3) AS Perc\n, COUNT(Year) OVER (PARTITION BY PersonId) AS CountYear\nFROM SalesData\nORDER BY 1;<\/pre>\n\n\n\n<p><strong>Risultato<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>PERSONID<\/td><td>TOTAL<\/td><td>AVG<\/td><td>TOTAL<\/td><td>PERC<\/td><td>COUNTYEAR<\/td><\/tr><tr><td>1<\/td><td>6.300<\/td><td>1.260<\/td><td>15.400<\/td><td>40,909<\/td><td>5<\/td><\/tr><tr><td>2<\/td><td>5.300<\/td><td>1.325<\/td><td>15.400<\/td><td>34,415<\/td><td>4<\/td><\/tr><tr><td>3<\/td><td>3.800<\/td><td>1.266<\/td><td>15.400<\/td><td>24,675<\/td><td>3<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n\n<p>In questo esempio, la CTE <strong>SalesData<\/strong> prepara dati di test con <strong>PersonId, Year<\/strong> e <strong>Amount<\/strong>. La clausola <strong>SELECT<\/strong> calcola quindi le vendite totali, la media e la Perc delle vendite per ogni venditore usando le funzioni <strong>SUM() OVER<\/strong> e <strong>AVG() OVER<\/strong>, partizionando i dati per <strong>PersonId<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Due parole sulle Windows Functions o Partitioning Functions<\/strong><\/p>\n\n\n\n<p>In IBM iSeries SQL e pi\u00f9 in generale nei database SQL, le funzioni OLAP come <strong>SUM(&#8230;) OVER (&#8230;), AVG(&#8230;) OVER (&#8230;)<\/strong> e <strong>COUNT(&#8230;) OVER (&#8230;)<\/strong> fanno parte delle cosiddette <strong>funzioni Finestra<\/strong> o <strong>funzioni di Partizionamento<\/strong>.<\/p>\n\n\n\n<p>Queste funzioni eseguono calcoli su una serie di righe che sono in qualche modo correlate alla riga corrente, consentendo analisi complesse come totali parziali, medie mobili o statistiche cumulative.<\/p>\n\n\n\n<p>Ecco come funziona ciascuna di queste funzioni nel contesto della nostra query:<\/p>\n\n\n\n<p><strong>SUM(&#8230;) OVER (PARTITION BY&#8230;)<\/strong><\/p>\n\n\n\n<p>La funzione <strong>SUM(&#8230;) OVER (PARTITION BY &#8230;)<\/strong> calcola la somma totale di una colonna per ciascuna partizione dei dati. Una <strong>partizione<\/strong> \u00e8 essenzialmente un sottoinsieme di dati in base alle colonne specificate nella clausola <strong>PARTITION BY<\/strong>. Nella nostra query, <strong>SUM(Amount) OVER (PARTITION BY PersonId) <\/strong>calcola l&#8217;<strong>importo<\/strong> totale per ogni <strong>PersonId<\/strong> nelle rispettive righe. Ci\u00f2 significa che raggruppa i dati per <strong>PersonId<\/strong> e quindi somma l&#8217;<strong>importo<\/strong> per ciascun gruppo.<\/p>\n\n\n\n<p><strong>AVG(&#8230;) OVER (PARTITION BY &#8230;)<\/strong><\/p>\n\n\n\n<p>Similmente alla funzione <strong>SUM, AVG(&#8230;) OVER (PARTITION BY &#8230;)<\/strong> calcola la media di una colonna per ciascuna partizione. Nel nostro esempio, <strong>AVG(Amount) OVER (PARTITION BY PersonId)<\/strong> calcola l&#8217;importo medio per ogni <strong>PersonId<\/strong>. Questa operazione viene eseguita partizionando i dati in base a <strong>PersonId <\/strong>e calcolando l&#8217;<strong>importo<\/strong> medio per ciascuna partizione.<\/p>\n\n\n\n<p><strong>COUNT(&#8230;) OVER (PARTITION BY&#8230;)<\/strong><\/p>\n\n\n\n<p>La funzione <strong>COUNT(&#8230;) OVER (PARTITION BY &#8230;)<\/strong> conta il numero di righe in ciascuna partizione. Nella query fornita, <strong>COUNT(Year) OVER (PARTITION BY PersonId)<\/strong> conta il numero di anni registrati per ogni <strong>PersonId<\/strong>. Questo ti d\u00e0 effettivamente il numero di voci (o record) per persona.<\/p>\n\n\n\n<p><strong>Note speciali sulla nostra query<\/strong>: <strong>SUM(Amount) OVER (PARTITION BY &#8216;ALL&#8217;) <\/strong>\u00e8 un utilizzo interessante che calcola l&#8217;importo totale su tutti i dati <strong>senza partizionamento<\/strong>. Il valore &#8216;ALL&#8217; \u00e8 una costante che ha lo stesso valore per ogni riga, quindi non \u00e8 stata eseguita alcuna partizione (al posto di &#8216;ALL&#8217; possiamo utilizzare <strong>qualsiasi valore constante<\/strong>).<\/p>\n\n\n\n<p>Nel complesso, le funzioni finestra come <strong>SUM OVER, AVG OVER e COUNT OVER<\/strong> forniscono strumenti potenti per eseguire analisi dei dati dettagliate e sofisticate all&#8217;interno di query SQL, consentendo agli analisti di dati e agli sviluppatori di ricavare informazioni significative da set di dati complessi.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Esempio 2 OLAP Function: CUME_DIST() OVER<\/strong><\/p>\n\n\n\n<p>Questa funzione calcola la distribuzione cumulativa (spiegata in dettaglio sotto) di un valore all&#8217;interno di un insieme di valori.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH ExamScores (StudentId, Score) AS (\n  VALUES\n    (1, 75),\n    (2, 88),\n    (3, 92),\n    (4, 67),\n    (5, 81)\n)\nSELECT\n  StudentId,\n  Score,\n  CUME_DIST() OVER (ORDER BY Score) AS CumulativeDistribution\nFROM ExamScores\nORDER BY Score;<\/pre>\n\n\n\n<p><strong>Risultato:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>STUDENTID<\/td><td>SCORE<\/td><td>CUMULATIVEDISTRIBUTION<\/td><\/tr><tr><td>4<\/td><td>67<\/td><td>0,2<\/td><\/tr><tr><td>1<\/td><td>75<\/td><td>0,4<\/td><\/tr><tr><td>5<\/td><td>81<\/td><td>0,6<\/td><\/tr><tr><td>2<\/td><td>88<\/td><td>0,8<\/td><\/tr><tr><td>3<\/td><td>92<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n\n<p>Qui, la CTE <strong>ExamScores<\/strong> prepara dati di test con <strong>StudentId<\/strong> e <strong>Score<\/strong>. La clausola <strong>SELECT<\/strong> calcola la distribuzione cumulativa dei punteggi, ordinando per il valore del punteggio.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Due parole sulla Distribuzione Cumulativa<\/strong><\/p>\n\n\n\n<p>La funzione <strong>CUME_DIST()<\/strong> in SQL calcola la distribuzione cumulativa di un valore all&#8217;interno di una sequenza di valori. \u00c8 una funzione OLAP (Online Analytical Processing) che fornisce un modo per calcolare la posizione relativa di un valore specifico all&#8217;interno di un gruppo di valori, ordinati per una certa colonna.<\/p>\n\n\n\n<p>Il risultato \u00e8 un valore compreso tra 0 e 1, rappresentante la proporzione di righe che hanno valori minori o uguali al valore nella riga corrente.<\/p>\n\n\n\n<p>Ecco cosa succede passo dopo passo:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Preparazione dei Dati<\/strong>: L&#8217;Espressione di Tabella Comune (CTE) <strong>ExamScores<\/strong> prepara un semplice set di dati di <strong>StudentId<\/strong> e <strong>Score<\/strong>.<\/li>\n\n\n\n<li><strong>Ordinamento dei Punteggi<\/strong>: La funzione <strong>CUME_DIST()<\/strong> viene applicata sui punteggi ordinati per la colonna <strong>Score<\/strong>. Ci\u00f2 significa che per ogni riga, SQL calcola la distribuzione cumulativa del punteggio corrente rispetto a tutti i punteggi nel dataset.<\/li>\n\n\n\n<li><strong>Calcolo della Distribuzione Cumulativa<\/strong>: Per ogni punteggio, <strong>CUME_DIST()<\/strong> calcola la proporzione di tutti i punteggi nel dataset che sono minori o uguali al punteggio corrente. Questo viene fatto dividendo il numero di valori di punteggi che sono minori o uguali al punteggio corrente per il numero totale di punteggi nel dataset.<\/li>\n<\/ol>\n\n\n\n<p>Per esempio, se guardiamo un punteggio di 75:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ci sono 5 punteggi in totale.<\/li>\n\n\n\n<li>Il punteggio di 75 \u00e8 maggiore o uguale a 2 punteggi (incluso s\u00e9 stesso, cio\u00e8 67 e 75) e minore di 3 altri punteggi (81, 88, 92).<\/li>\n\n\n\n<li>La distribuzione cumulativa per il punteggio di 75 viene calcolata come il numero di punteggi fino a e inclusi 75 (che in questo caso \u00e8 2) diviso per il numero totale di punteggi (che \u00e8 5), risultando in un valore di distribuzione cumulativa di 0,4.<\/li>\n<\/ul>\n\n\n\n<p>Questo calcolo viene ripetuto per ogni punteggio nel dataset, fornendo un modo per comprendere non solo il valore assoluto dei punteggi, ma come ogni punteggio si confronta con la distribuzione di tutti i punteggi.<\/p>\n\n\n\n<p>Il risultato di questa query fornisce una tabella con <strong>StudentId<\/strong>, il loro <strong>Score<\/strong> e la <strong>CumulativeDistribution<\/strong> di ogni punteggio, mostrando la proporzione di studenti che hanno ottenuto un punteggio fino a e inclusi quello punteggio.<\/p>\n\n\n\n<p>Questo pu\u00f2 essere particolarmente utile nell&#8217;analisi educativa, nei sistemi di valutazione, o in qualsiasi scenario dove \u00e8 importante comprendere la distribuzione dei valori all&#8217;interno di un dataset.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Esempio 3 OLAP Function: PERCENT_RANK() OVER<\/strong><\/p>\n\n\n\n<p>Questa funzione calcola il rango percentuale di ogni riga all&#8217;interno di una partizione di un set di risultati.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH EmployeeSales (EmployeeId, SalesAmount) AS (\n  VALUES\n    (1, 5000),\n    (2, 7600),\n    (3, 9400),\n    (4, 3000),\n    (5, 6200)\n)\nSELECT\n  EmployeeId,\n  SalesAmount,\n  PERCENT_RANK() OVER (ORDER BY SalesAmount) AS PercentileRank\nFROM EmployeeSales\nORDER BY SalesAmount;<\/pre>\n\n\n\n<p><strong>Risultato:<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>EMPLOYEEID<\/td><td>SALESAMOUNT<\/td><td>PERCENTILERANK<\/td><\/tr><tr><td>4<\/td><td>3.000<\/td><td>0<\/td><\/tr><tr><td>1<\/td><td>5.000<\/td><td>0,25<\/td><\/tr><tr><td>5<\/td><td>6.200<\/td><td>0,5<\/td><\/tr><tr><td>2<\/td><td>7.600<\/td><td>0,75<\/td><\/tr><tr><td>3<\/td><td>9.400<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n\n<p>In questo esempio, la CTE <strong>EmployeeSales<\/strong> prepara dati di test con <strong>EmployeeId<\/strong> e <strong>SalesAmount<\/strong>. La clausola <strong>SELECT<\/strong> calcola il rango percentuale di ogni dipendente in base al loro importo di vendite.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Due Parole sulla Funzione PERCENT_RANK()<\/strong><\/p>\n\n\n\n<p>La funzione <strong>PERCENT_RANK()<\/strong> in SQL calcola il rango relativo di una riga all&#8217;interno di una partizione di un insieme di risultati, escludendo il rango pi\u00f9 alto. Il valore restituito da <strong>PERCENT_RANK()<\/strong> \u00e8 la percentuale di valori che sono inferiori al valore della riga corrente.<\/p>\n\n\n\n<p>Questa funzione fornisce un modo per comprendere come il valore di ogni riga si confronta con gli altri nel dataset, su una scala da 0 a 1, dove 0 rappresenta il primo valore nel set ordinato (dopo l&#8217;ordinamento basato sulla clausola <strong>ORDER BY<\/strong>) e i valori pi\u00f9 vicini a 1 rappresentano ranghi pi\u00f9 alti.<\/p>\n\n\n\n<p>Ecco come funziona la funzione <strong>PERCENT_RANK()<\/strong> in questo scenario specifico:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Preparazione dei Dati<\/strong>: L&#8217;Espressione di Tabella Comune (CTE) <strong>EmployeeSales<\/strong> crea un dataset di <strong>EmployeeId<\/strong> e <strong>SalesAmount<\/strong>.<\/li>\n\n\n\n<li><strong>Ordinamento<\/strong>: La funzione <strong>PERCENT_RANK()<\/strong> viene applicata al dataset ordinato per <strong>SalesAmount<\/strong>. Questo significa che calcola il rango percentile basato sull&#8217;importo delle vendite di ogni dipendente.<\/li>\n\n\n\n<li><strong>Calcolo del Rango Percentile<\/strong>: Per ogni riga (cio\u00e8, l&#8217;importo delle vendite di ogni dipendente), la funzione <strong>PERCENT_RANK()<\/strong> calcola il rango della riga diviso per il numero di righe meno uno. La formula utilizzata \u00e8: <strong>(rango &#8211; 1) \/ (totale righe &#8211; 1)<\/strong>. La prima riga dopo l&#8217;ordinamento ottiene un rango percentile di 0, e il valore pi\u00f9 alto ottiene un rango percentile 1 (poich\u00e9 viene calcolato come <strong>(N-1)\/(N-1)<\/strong>, dove <strong>N<\/strong> \u00e8 il numero totale delle righe).<\/li>\n<\/ol>\n\n\n\n<p>Per esempio, considerando il nostro dataset:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Il dipendente con <strong>SalesAmount<\/strong> di 3000 (EmployeeId 4) avrebbe l&#8217;importo di vendite pi\u00f9 basso, quindi il rango pi\u00f9 basso, e riceverebbe un <strong>PercentileRank<\/strong> di 0 perch\u00e9 \u00e8 il primo valore.<\/li>\n\n\n\n<li>Il dipendente con <strong>SalesAmount<\/strong> di 9400 (EmployeeId 3) avrebbe l&#8217;importo di vendite pi\u00f9 alto. Se ci sono 5 dipendenti, il suo rango percentile sarebbe calcolato sulla base della sua posizione nella lista ordinata, che sarebbe <strong>(4)\/(5-1)<\/strong> = 1.0, indicando che ha un importo di vendite superiore rispetto al resto del dataset.<\/li>\n<\/ul>\n\n\n\n<p>Questa funzione \u00e8 particolarmente utile per analizzare e confrontare la distribuzione dei valori all&#8217;interno di un dataset, consentendo di comprendere come ogni valore si posizioni in relazione agli altri, specialmente in termini di classifiche e percentili.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Conclusioni<\/strong><\/p>\n\n\n\n<p>In conclusione, l\u2019integrazione delle funzioni SQL e OLAP all\u2019interno dell\u2019ambiente IBM iSeries preannuncia un\u2019era di trasformazione per la scienza dei dati e la business intelligence.<\/p>\n\n\n\n<p>Sfruttando le capacit\u00e0 avanzate delle funzioni OLAP, le organizzazioni possono ottenere informazioni pi\u00f9 approfondite dai propri dati, facilitando un processo decisionale strategico pi\u00f9 informato e migliorando l&#8217;efficienza operativa. La piattaforma IBM iSeries, con il suo solido supporto per le operazioni SQL e OLAP, rappresenta uno strumento significativo nell&#8217;arsenale di data scientist e analisti.<\/p>\n\n\n\n<p>Attraverso funzioni aggregate, classificazione, operazioni di finestra e aggregati analitici, iSeries consente un approccio analitico completo che sfrutta l&#8217;intero spettro di tecniche della scienza dei dati.<\/p>\n\n\n\n<p>Come abbiamo esplorato attraverso esempi pratici, la potenza delle funzioni OLAP per eseguire query e analisi complesse direttamente sul database non \u00e8 solo un miglioramento tecnico; \u00e8 una risorsa strategica che pu\u00f2 far avanzare le aziende in un panorama competitivo.<\/p>\n\n\n\n<p>L&#8217;adozione di queste funzionalit\u00e0 sulla piattaforma IBM iSeries pu\u00f2 portare le organizzazioni a sfruttare tutto il potenziale dei propri dati, rendendoli non solo una risorsa ma un catalizzatore di innovazione e crescita.<\/p>\n\n\n\n<p>Se si ha a che fare con vasti set di dati o complesse query analitiche, la sinergia di data science e SQL con le funzioni OLAP su IBM iSeries \u00e8 una testimonianza della rilevanza duratura della piattaforma e del suo ruolo fondamentale nel futuro del processo decisionale basato sui dati.<\/p>\n\n\n\n<p>Gli esempi illustrati dovrebbero fornire un buon punto di partenza per l&#8217;uso delle funzioni OLAP in SQL IBM iSeries. Ricordare sempre che la sintassi effettiva e le capacit\u00e0 possono variare leggermente a seconda della versione di iSeries e delle impostazioni del database, quindi \u00e8 sempre una buona idea consultare la documentazione specifica di IBM i per SQL.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Riferimenti utili<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"text-decoration: underline\"> <a href=\"https:\/\/www.genesi-srl.com\/it\/data-science-opportunita-e-sfide-da-affrontare\/\" target=\"_blank\" rel=\"noreferrer noopener\">Data Science: opportunit\u00e0 e sfide da affrontare<\/a> <\/span><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"text-decoration: underline\"> <a href=\"https:\/\/www.genesi-srl.com\/it\/funzioni-olap-in-data-science-un-approccio-moderno-alla-business-intelligence\/\" target=\"_blank\" rel=\"noreferrer noopener\">Funzioni OLAP in Data Science: un approccio moderno alla Business Intelligence<\/a> <\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nel panorama tecnologico in continua evoluzione, la Data Science si \u00e8 affermata come un pilastro dell&#8217;intelligenza aziendale, della presa di decisioni strategiche e dell&#8217;efficienza operativa. Al cuore della Data Science si trova la potente combinazione di SQL e funzioni Online&#8230;<\/p>\n","protected":false},"author":3,"featured_media":4448,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[253,275],"tags":[46,255,256,257,258,259,260,261,262,263,264],"class_list":["post-4411","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science","category-artificial-intelligence","tag-sql","tag-data-science","tag-business-intelligence","tag-olap-online-analytical-processing","tag-aggregate-functions","tag-ranking-functions","tag-window-functions","tag-analytical-aggregate-functions","tag-grouping-operations","tag-miscellaneous-functions","tag-variance-and-standard-deviation"],"_links":{"self":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/comments?post=4411"}],"version-history":[{"count":31,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4411\/revisions"}],"predecessor-version":[{"id":4511,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4411\/revisions\/4511"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media\/4448"}],"wp:attachment":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media?parent=4411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/categories?post=4411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/tags?post=4411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}