{"id":4723,"date":"2024-03-08T12:05:00","date_gmt":"2024-03-08T11:05:00","guid":{"rendered":"https:\/\/www.skillup.cloud\/?p=4723"},"modified":"2024-03-11T18:20:04","modified_gmt":"2024-03-11T17:20:04","slug":"olap-functions-in-sql-i-series-per-unanalisi-dati-avanzata-un-focus-sulle-miscellaneous-functions","status":"publish","type":"post","link":"https:\/\/www.skillup.cloud\/it\/olap-functions-in-sql-i-series-per-unanalisi-dati-avanzata-un-focus-sulle-miscellaneous-functions\/","title":{"rendered":"OLAP Functions in SQL i Series per un&#8217;Analisi Dati Avanzata: Un Focus sulle Miscellaneous Functions"},"content":{"rendered":"\n<p class=\"has-large-font-size\"><strong>Introduzione<\/strong><\/p>\n\n\n\n<p>Nell\u2019ambito dell\u2019analisi e della gestione dei dati, la capacit\u00e0 di aggregare, interpretare e presentare i dati in modo efficiente \u00e8 fondamentale.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>La piattaforma IBM iSeries (AS\/400), nota per la sua robustezza e affidabilit\u00e0 nella gestione delle esigenze di elaborazione dei dati a livello aziendale, offre una suite di funzionalit\u00e0 SQL progettate per supportare attivit\u00e0 analitiche complesse.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Tra queste funzionalit\u00e0, le funzioni OLAP (Online Analytical Processing) si distinguono per la loro capacit\u00e0 di facilitare la manipolazione avanzata dei dati e l&#8217;estrazione di insight direttamente da query SQL. Questo post si concentra su due funzioni OLAP varie critiche, ma spesso sottoutilizzate, all&#8217;interno del toolkit SQL iSeries: <strong>LISTAGG()<\/strong> e <strong>GROUPING().<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Funzione <strong>LISTAGG()<\/strong>: essenzialmente, <strong>LISTAGG()<\/strong> funge da potente strumento per l&#8217;aggregazione dei dati, in particolare in scenari che richiedono la concatenazione di dati di stringa su pi\u00f9 righe in un&#8217;unica riga.<\/p>\n\n\n\n<p>Questa funzione \u00e8 preziosa per generare riepiloghi completi, report o qualsiasi formato di presentazione dei dati in cui \u00e8 necessario consolidare informazioni testuali da vari record.<\/p>\n\n\n\n<p>Consentendo separatori personalizzati tra valori concatenati, <strong>LISTAGG()<\/strong> offre flessibilit\u00e0 nella presentazione dei dati, rendendolo uno strumento essenziale per gli analisti di dati che desiderano migliorare le proprie capacit\u00e0 di reporting.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Funzione GROUPING()<\/strong>: la funzione <strong>GROUPING()<\/strong> svolge un ruolo fondamentale nel distinguere tra righe regolari e superaggregate all&#8217;interno di un set di risultati. Questa distinzione \u00e8 fondamentale quando si lavora con dati raggruppati, poich\u00e9 consente agli analisti di identificare se una riga specifica nel risultato di una query aggregata fa parte del raggruppamento di dati originale o \u00e8 il risultato di un&#8217;ulteriore aggregazione.<\/p>\n\n\n\n<p>L&#8217;uso di <strong>GROUPING()<\/strong> \u00e8 particolarmente utile in scenari complessi di reporting e analisi dei dati in cui \u00e8 necessaria la comprensione della gerarchia e della struttura dei dati aggregati per un&#8217;interpretazione e un processo decisionale accurati.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>L&#8217;inclusione nella piattaforma SQL iSeries di funzioni OLAP come <strong>LISTAGG()<\/strong> e <strong>GROUPING()<\/strong> migliora significativamente le capacit\u00e0 di manipolazione dei dati, aprendo la strada a presentazioni di dati innovative e approfondimenti pi\u00f9 approfonditi.<\/p>\n\n\n\n<p>Poich\u00e9 le aziende continuano a navigare in un mondo sempre pi\u00f9 basato sui dati, sfruttare queste funzioni pu\u00f2 fornire un vantaggio competitivo nell\u2019analisi dei dati e nei processi decisionali. Questo post mira a demistificare queste funzioni e incoraggiare la loro adozione nelle pratiche di analisi dei dati, assicurando di sfruttare appieno le capacit\u00e0 di iSeries SQL per soddisfare le vostre esigenze di elaborazione dei dati e reporting.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"256\" class=\"wp-image-4732\" style=\"width: 512px;\" src=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1852.png\" alt=\"OLAP Function LISTAGG\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1852.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1852-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Esempi di OLAP Function LISTAGG()<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione allo scenario<\/strong><\/p>\n\n\n\n<p>Supponiamo di avere un dataset (SalesData) che rappresenta i risultati di vendita in varie macroaree e regioni, concentrandosi sui prodotti che hanno superato gli obiettivi di vendita. Questo set di dati funge da base per due query approfondite, ciascuna progettata per aggregare e presentare i dati in modo da evidenziare diversi aspetti dei risultati di vendita.<\/p>\n\n\n\n<p><\/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>MACROAREA<\/td><td>REGION<\/td><td>PRODUCT<\/td><\/tr><tr><td>America<\/td><td>North America<\/td><td>P_011<\/td><\/tr><tr><td>America<\/td><td>North America<\/td><td>P_035<\/td><\/tr><tr><td>America<\/td><td>Central America<\/td><td>P_021<\/td><\/tr><tr><td>America<\/td><td>Central America<\/td><td>P_027<\/td><\/tr><tr><td>America<\/td><td>Central America<\/td><td>P_019<\/td><\/tr><tr><td>America<\/td><td>South America<\/td><td>P_027<\/td><\/tr><tr><td>Asia<\/td><td>Western Asia<\/td><td>P_005<\/td><\/tr><tr><td>Asia<\/td><td>Western Asia<\/td><td>P_027<\/td><\/tr><tr><td>Asia<\/td><td>Eastern Asia<\/td><td>P_038<\/td><\/tr><tr><td>Asia<\/td><td>Eastern Asia<\/td><td>P_016<\/td><\/tr><tr><td>Asia<\/td><td>Eastern Asia<\/td><td>P_040<\/td><\/tr><tr><td>Asia<\/td><td>Southtern Asia<\/td><td>P_044<\/td><\/tr><tr><td>Asia<\/td><td>Southtern Asia<\/td><td>P_021<\/td><\/tr><tr><td>Asia<\/td><td>Southtern Asia<\/td><td>P_038<\/td><\/tr><tr><td>Europe<\/td><td>Northern Europe<\/td><td>P_019<\/td><\/tr><tr><td>Europe<\/td><td>Northern Europe<\/td><td>P_035<\/td><\/tr><tr><td>Europe<\/td><td>Northern Europe<\/td><td>P_021<\/td><\/tr><tr><td>Europe<\/td><td>Western Europe<\/td><td>P_027<\/td><\/tr><tr><td>Europe<\/td><td>Western Europe<\/td><td>P_021<\/td><\/tr><tr><td>Europe<\/td><td>Western Europe<\/td><td>P_009<\/td><\/tr><tr><td>Europe<\/td><td>Eastern Europe<\/td><td>P_021<\/td><\/tr><tr><td>Europe<\/td><td>Eastern Europe<\/td><td>P_009<\/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>Questo set di dati funge da base per due query approfondite, ciascuna progettata per aggregare e presentare i dati in modo da evidenziare diversi aspetti dei risultati di vendita.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Query 1: elenchi di Products aggregati per Region<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Questa query mira a fornire una panoramica concisa delle prestazioni dei prodotti per regione, offrendo alle aziende una prospettiva chiara su quali prodotti hanno superato le aspettative di vendita in aree geografiche specifiche. Eseguendo la query otteniamo un elenco organizzato per regione, in cui ciascuna voce presenta un elenco consolidato di prodotti che hanno ottenuto un notevole successo di vendite all&#8217;interno di quella regione. Questa aggregazione \u00e8 preziosa per i responsabili delle vendite regionali e i team di marketing, poich\u00e9 consente loro di identificare prodotti di successo e personalizzare le strategie di conseguenza.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Applicazioni pratiche<\/strong>:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Analisi delle prestazioni regionali<\/strong>: capire quali prodotti stanno ottenendo buoni risultati in regioni specifiche per allocare le risorse di marketing in modo pi\u00f9 efficace.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ottimizzazione dell&#8217;inventario e della catena di fornitura<\/strong>: adeguare i livelli di inventario e i piani di distribuzione in base alle tendenze delle prestazioni di vendita regionali.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH\n  SalesData (MacroArea, Region, Product) AS (\n      VALUES ('America', 'North America'   , 'P_011')\n           , ('America', 'North America'   , 'P_035')\n           , ('America', 'Central America' , 'P_021')\n           , ('America', 'Central America' , 'P_027')\n           , ('America', 'Central America' , 'P_019')\n           , ('America', 'South America'   , 'P_027')\n           , ('Asia'   , 'Western Asia'    , 'P_005')\n           , ('Asia'   , 'Western Asia'    , 'P_027')\n           , ('Asia'   , 'Eastern Asia'    , 'P_038')\n           , ('Asia'   , 'Eastern Asia'    , 'P_016')\n           , ('Asia'   , 'Eastern Asia'    , 'P_040')\n           , ('Asia'   , 'Southtern Asia'  , 'P_044')\n           , ('Asia'   , 'Southtern Asia'  , 'P_021')\n           , ('Asia'   , 'Southtern Asia'  , 'P_038')\n           , ('Europe' , 'Northern Europe' , 'P_019')\n           , ('Europe' , 'Northern Europe' , 'P_035')\n           , ('Europe' , 'Northern Europe' , 'P_021')\n           , ('Europe' , 'Western Europe'  , 'P_027')\n           , ('Europe' , 'Western Europe'  , 'P_021')\n           , ('Europe' , 'Western Europe'  , 'P_009')\n           , ('Europe' , 'Eastern Europe'  , 'P_021')\n           , ('Europe' , 'Eastern Europe'  , 'P_009')\n           )\n, PL (Region, ProductsList) AS (\n      SELECT Region,\n             LISTAGG(Product, ', ')\n               WITHIN GROUP (ORDER BY Product) AS ProductsList\n        FROM SalesData\n      GROUP BY Region\n      ORDER BY Region\n      )\nselect * from PL;\n<\/pre>\n\n\n\n<p class=\"has-medium-font-size\"><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>REGION<\/td><td>PRODUCTSLIST<\/td><\/tr><tr><td>Central America<\/td><td>P_019, P_021, P_027<\/td><\/tr><tr><td>Eastern Asia<\/td><td>P_016, P_038, P_040<\/td><\/tr><tr><td>Eastern Europe<\/td><td>P_009, P_021<\/td><\/tr><tr><td>North America<\/td><td>P_011, P_035<\/td><\/tr><tr><td>Northern Europe<\/td><td>P_019, P_021, P_035<\/td><\/tr><tr><td>South America<\/td><td>P_027<\/td><\/tr><tr><td>Southtern Asia<\/td><td>P_021, P_038, P_044<\/td><\/tr><tr><td>Western Asia<\/td><td>P_005, P_027<\/td><\/tr><tr><td>Western Europe<\/td><td>P_009, P_021, P_027<\/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><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>La query SQL fornita \u00e8 una query ben strutturata che utilizza una Common Table Expression (CTE) per organizzare e aggregare i dati di vendita all&#8217;interno di un ambiente IBM iSeries. Questa particolare query \u00e8 progettata per consolidare e visualizzare l&#8217;elenco dei prodotti che hanno superato gli obiettivi di vendita, raggruppati per regione. Di seguito una descrizione dettagliata e tecnica della query:<\/p>\n\n\n\n<p><strong>Common Table Expressions (CTEs)<\/strong><\/p>\n\n\n\n<p>SalesData CTE<br>Il CTE <strong>SalesData<\/strong> viene creato utilizzando una clausola VALUES per definire manualmente un set di righe che simulano una tabella con tre colonne: <strong>MacroArea<\/strong>, <strong>Region<\/strong> e <strong>Product<\/strong>. Ogni riga rappresenta un prodotto che ha superato gli obiettivi di vendita in una specifica regione all&#8217;interno di una macroarea.<\/p>\n\n\n\n<p>PL (<strong>ListaProdotti<\/strong>) CTE<br>Dopo <strong>SalesData<\/strong> CTE, <strong>PL<\/strong> CTE viene utilizzato per creare un elenco di prodotti aggregati dalla colonna <strong>Region<\/strong>. Ci\u00f2 si ottiene utilizzando la funzione <strong>LISTAGG<\/strong>, una funzione OLAP che concatena i valori di pi\u00f9 righe in un&#8217;unica stringa con un delimitatore specificato, in questo caso una virgola (, ).<\/p>\n\n\n\n<p><strong>Funzione LISTAGG<\/strong><br>La funzione <strong>LISTAGG<\/strong> in questo contesto accetta due argomenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Prodotto<\/strong>: la colonna contenente i valori da concatenare.<\/li>\n\n\n\n<li><strong>&#8216;, &#8216;<\/strong>: la stringa letterale che definisce il delimitatore per separare i valori concatenati.<\/li>\n<\/ul>\n\n\n\n<p>La clausola <strong>WITHIN<\/strong> <strong>GROUP<\/strong> specifica l&#8217;ordine in cui i valori Product devono essere concatenati, ordinati in base alla colonna Product stessa.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Clausola <strong>GROUP BY<\/strong><br>La clausola <strong>GROUP<\/strong> <strong>BY<\/strong> viene applicata alla colonna Region, che garantisce che la funzione LISTAGG concatena i valori Product per ciascuna regione univoca in un&#8217;unica stringa, creando cos\u00ec un elenco distinto di prodotti per ciascuna regione.<\/p>\n\n\n\n<p>Clausola<strong> ORDER BY<\/strong><br>Dopo il raggruppamento e l&#8217;aggregazione, alla colonna Regione viene applicata la clausola ORDER BY, che impone che l&#8217;output della query venga ordinato in base alla regione in ordine crescente.<\/p>\n\n\n\n<p><strong>Dichiarazione SELECT finale<\/strong><br>Infine, il select * from PL; L&#8217;istruzione esegue PL CTE, risultando in un elenco di record recuperati dalla tabella virtuale PL, che ora contiene due colonne: <strong>Region<\/strong> e <strong>ProductsList<\/strong>. Ogni riga nel set di risultati rappresenta una regione univoca insieme a una stringa che elenca tutti i prodotti per quella regione, aggregati e ordinati secondo la specifica <strong>LISTAGG<\/strong>.<\/p>\n\n\n\n<p>Questo output \u00e8 particolarmente utile per una rapida consultazione e per scopi di reporting, poich\u00e9 mostra chiaramente le prestazioni dei prodotti all&#8217;interno di specifici mercati regionali.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"256\" class=\"wp-image-4766\" style=\"width: 512px;\" src=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1850.png\" alt=\"OLAP function LISTAGG 2\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1850.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1850-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Query 2: elenchi di Region aggregati per Product<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Al contrario, la seconda query sposta l\u2019attenzione sui singoli prodotti, aggregando le regioni in cui ciascun prodotto ha superato gli obiettivi di vendita. Questa prospettiva \u00e8 particolarmente utile per i product manager e i pianificatori strategici, poich\u00e9 identifica l&#8217;ampiezza geografica dell&#8217;attrattiva e del successo del mercato di un prodotto.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Applicazioni pratiche<\/strong>:<\/p>\n\n\n\n<p>\u2022 <strong>Sviluppo e innovazione del prodotto<\/strong>: le informazioni su dove i prodotti hanno successo possono guidare il miglioramento del prodotto e gli sforzi di sviluppo di nuovi prodotti.<br>\u2022 <strong>Strategie di espansione del mercato<\/strong>: l&#8217;identificazione di prodotti con un ampio appeal geografico pu\u00f2 informare le strategie di penetrazione ed espansione del mercato.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH\n  SalesData (MacroArea, Region, Product) AS (\n. . . .\n. . . . (as above)\n. . . .\n           )\n, RL (Product, RegionsList) AS (\n        SELECT Product,\n             LISTAGG(Region, ', ')\n               WITHIN GROUP (ORDER BY Region) AS RegionsList\n        FROM SalesData\n      GROUP BY Product\n\t  ORDER BY Product\n      )\nselect * from RL;\n<\/pre>\n\n\n\n<p class=\"has-medium-font-size\"><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\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>PRODUCT<\/td><td>REGIONSLIST<\/td><\/tr><tr><td>P_005<\/td><td>Western Asia<\/td><\/tr><tr><td>P_009<\/td><td>Eastern Europe, Western Europe<\/td><\/tr><tr><td>P_011<\/td><td>North America<\/td><\/tr><tr><td>P_016<\/td><td>Eastern Asia<\/td><\/tr><tr><td>P_019<\/td><td>Central America, Northern Europe<\/td><\/tr><tr><td>P_021<\/td><td>Central America, Eastern Europe, Northern Europe, Southtern Asia, Western Europe<\/td><\/tr><tr><td>P_027<\/td><td>Central America, South America, Western Asia, Western Europe<\/td><\/tr><tr><td>P_035<\/td><td>North America, Northern Europe<\/td><\/tr><tr><td>P_038<\/td><td>Eastern Asia, Southtern Asia<\/td><\/tr><tr><td>P_040<\/td><td>Eastern Asia<\/td><\/tr><tr><td>P_044<\/td><td>Southtern Asia<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>La query SQL \u00e8 strutturata per utilizzare una Common Table Expression (CTE) per organizzare ed eseguire query sui dati di vendita all&#8217;interno di un ambiente IBM iSeries. Questa query mira specificamente ad aggregare i dati per mostrare in quali regioni ciascun prodotto ha avuto successo, in base al superamento degli obiettivi di vendita. Ecco una ripartizione dettagliata e tecnica della query:<\/p>\n\n\n\n<p><strong>Common Table Expressions (CTEs)<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>SalesData CTE<\/strong><br>Il CTE SalesData funziona come un set di risultati temporaneo definito nell&#8217;ambito di esecuzione dell&#8217;istruzione SQL pi\u00f9 ampia. Questo CTE non \u00e8 mostrato per intero nell&#8217;immagine fornita ma si dice che sia come definito sopra, probabilmente contenente un insieme predefinito di righe con colonne: <strong>MacroArea<\/strong>, <strong>Region<\/strong> e <strong>Product<\/strong>. Ogni riga all&#8217;interno di questo CTE rappresenta un record di vendita in cui un particolare prodotto ha superato il suo obiettivo di vendita all&#8217;interno di una regione specifica.<\/p>\n\n\n\n<p><strong>RL (RegionsList) CTE<\/strong><br>Viene quindi definito il <strong>RL<\/strong> CTE per trasformare SalesData aggregando le regioni associate a ciascun prodotto. La trasformazione viene eseguita dalla funzione <strong>LISTAGG<\/strong>.<\/p>\n\n\n\n<p><strong>Funzione LISTAGG<\/strong><br>La funzione <strong>LISTAGG<\/strong> \u00e8 una funzione OLAP utilizzata qui per concatenare i valori Region da pi\u00f9 righe in un&#8217;unica stringa per ciascun prodotto. Richiede i seguenti parametri:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Region<\/strong>: la colonna i cui valori devono essere concatenati.<\/li>\n\n\n\n<li>&#8216;, &#8216;: Il delimitatore utilizzato per separare i valori concatenati, che in questo caso \u00e8 una virgola seguita da uno spazio.<\/li>\n<\/ul>\n\n\n\n<p>La clausola <strong>WITHIN<\/strong> <strong>GROUP<\/strong> \u00e8 inclusa per ordinare i valori <strong>Region<\/strong> prima della concatenazione, determinata dalla clausola <strong>ORDER BY Region<\/strong> al suo interno.<\/p>\n\n\n\n<p><strong>GROUP BY<\/strong> Clause<br>La clausola <strong>GROUP BY Product<\/strong> \u00e8 fondamentale in quanto specifica che l&#8217;aggregazione eseguita da <strong>LISTAGG<\/strong> deve essere eseguita su righe con lo stesso valore Product. Di conseguenza, ogni prodotto unico avr\u00e0 un elenco corrispondente di regioni in cui ha superato gli obiettivi di vendita.<\/p>\n\n\n\n<p><strong>ORDER BY Clause<\/strong><br>La clausola <strong>ORDER<\/strong> <strong>BY<\/strong> Product garantisce che l&#8217;output finale di RL CTE sia ordinato in base alla colonna Product in ordine crescente.<\/p>\n\n\n\n<p><strong>SELECT finale<\/strong><br>L&#8217;istruzione finale select * from RL; esegue la query utilizzando RL CTE e il risultato \u00e8 un elenco di prodotti, ciascuno accompagnato da una stringa che consolida tutte le regioni in cui quel prodotto ha superato gli obiettivi di vendita. Le regioni nella stringa sono ordinate come specificato dalla clausola <strong>WITHIN GROUP<\/strong>.<\/p>\n\n\n\n<p>Questo formato di output \u00e8 particolarmente vantaggioso per le parti interessate che necessitano di una rappresentazione compatta della penetrazione del mercato e del successo di ciascun prodotto nelle diverse regioni. Aiuta nel processo decisionale strategico relativo al marketing, alla distribuzione dei prodotti e all&#8217;allocazione delle risorse.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"256\" class=\"wp-image-4761\" style=\"width: 512px;\" src=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1837.png\" alt=\"OLAP Grouping Set\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1837.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/03\/img_512x256_20240304_1837-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Aggregazione gerarchica dei dati di vendita con funzioni OLAP in iSeries SQL<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione alla Query<\/strong><\/p>\n\n\n\n<p>In questo esempio esploreremo l&#8217;uso avanzato delle funzioni OLAP in SQL, in particolare su un sistema iSeries, per analizzare e aggregare i dati di vendita su diversi livelli geografici. Il nostro obiettivo \u00e8 dimostrare come riassumere in modo efficace gli importi delle vendite fornendo al contempo informazioni dettagliate sulle prestazioni di vendita a livello regionale e nazionale.<\/p>\n\n\n\n<p>Utilizzando i <strong>GROUPING SETS<\/strong> insieme alla funzione <strong>GROUPING<\/strong>, miriamo a migliorare la presentazione dei dati, consentendo una visione gerarchica che rivela dati di vendita sia dettagliati che consolidati.<\/p>\n\n\n\n<p>Questo approccio \u00e8 particolarmente utile per l&#8217;analisi multidimensionale, poich\u00e9 offre una chiara comprensione della distribuzione delle vendite attraverso diverse granularit\u00e0 all&#8217;interno della gerarchia organizzativa.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData (MacroArea, Region, Country, Amount) AS (\nVALUES ('America', 'North America'   , 'Country_NA1', 180000)\n     , ('America', 'North America'   , 'Country_NA2',  80000)\n     , ('America', 'North America'   , 'Country_NA3',  60000)\n     , ('America', 'Central America' , 'Country_CA1',  30000)\n     , ('America', 'Central America' , 'Country_CA2',  40000)\n     , ('America', 'South America'   , 'Country_SA1',  65000)\n     , ('America', 'South America'   , 'Country_SA2',  73000)\n     , ('Europe' , 'Northern Europe' , 'Country_NE1',  44000)\n     , ('Europe' , 'Northern Europe' , 'Country_NE2',  58000)\n     , ('Europe' , 'Northern Europe' , 'Country_NE3',  43000)\n     , ('Europe' , 'Western Europe'  , 'Country_WE1',  27000)\n     , ('Europe' , 'Western Europe'  , 'Country_WE2',  32000)\n     , ('Europe' , 'Western Europe'  , 'Country_WE3',  63000)\n     , ('Europe' , 'Western Europe'  , 'Country_WE4',  19000)\n     , ('Europe' , 'Eastern Europe'  , 'Country_EE1',  15000)\n     , ('Europe' , 'Eastern Europe'  , 'Country_EE2',  48000)\n     , ('Europe' , 'Eastern Europe'  , 'Country_EE3',  56000)\n     ) --  select * from SalesData;\nSELECT \n  Region,\n  Country,\n  SUM(Amount) AS TotalSales,\n  GROUPING(Region) AS RegionGrouping,\n  GROUPING(Country) AS CountryGrouping\nFROM SalesData\nGROUP BY GROUPING SETS ((Region, Country), (Region), ())\nORDER BY GROUPING(Region), GROUPING(Country), Region, Country;\n<\/pre>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Risultato<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td>REGION<\/td><td>COUNTRY<\/td><td>TOTALSALES<\/td><td>REGIONGROUPING<\/td><td>COUNTRYGROUPING<\/td><\/tr><tr><td>Central America<\/td><td>Country_CA1<\/td><td>30.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Central America<\/td><td>Country_CA2<\/td><td>40.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Eastern Europe<\/td><td>Country_EE1<\/td><td>15.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Eastern Europe<\/td><td>Country_EE2<\/td><td>48.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Eastern Europe<\/td><td>Country_EE3<\/td><td>56.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>North America<\/td><td>Country_NA1<\/td><td>180.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>North America<\/td><td>Country_NA2<\/td><td>80.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>North America<\/td><td>Country_NA3<\/td><td>60.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Northern Europe<\/td><td>Country_NE1<\/td><td>44.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Northern Europe<\/td><td>Country_NE2<\/td><td>58.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Northern Europe<\/td><td>Country_NE3<\/td><td>43.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>South America<\/td><td>Country_SA1<\/td><td>65.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>South America<\/td><td>Country_SA2<\/td><td>73.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Western Europe<\/td><td>Country_WE1<\/td><td>27.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Western Europe<\/td><td>Country_WE2<\/td><td>32.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Western Europe<\/td><td>Country_WE3<\/td><td>63.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Western Europe<\/td><td>Country_WE4<\/td><td>19.000<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>Central America<\/td><td>[NULL]<\/td><td>70.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>Eastern Europe<\/td><td>[NULL]<\/td><td>119.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>North America<\/td><td>[NULL]<\/td><td>320.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>Northern Europe<\/td><td>[NULL]<\/td><td>145.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>South America<\/td><td>[NULL]<\/td><td>138.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>Western Europe<\/td><td>[NULL]<\/td><td>141.000<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>[NULL]<\/td><td>[NULL]<\/td><td>933.000<\/td><td>1<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Descrizione tecnica dettagliata della query<\/strong><\/p>\n\n\n\n<p>L&#8217;istruzione SQL fornita \u00e8 una query sofisticata che utilizza il concetto di espressioni di tabella comuni (CTE) e le potenti funzioni di raggruppamento disponibili in SQL per eseguire aggregazioni e analisi avanzate dei dati.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Common Table Expression: SalesData<\/strong><br>Il CTE <strong>SalesData<\/strong> \u00e8 costruito per simulare un set di dati di vendita che include le colonne <strong>MacroArea<\/strong>, <strong>Region<\/strong>, <strong>Country<\/strong> e <strong>Amount<\/strong>. Questo set di dati \u00e8 popolato con valori codificati che rappresentano i dati di vendita per vari paesi all&#8217;interno di diverse regioni e macroaree.<\/p>\n\n\n\n<p>Dichiarazione SELECT finale<br>L&#8217;istruzione <strong>SELECT<\/strong> finale \u00e8 progettata per estrarre e aggregare questi dati per fornire i dati sulle vendite totali, utilizzando al tempo stesso le funzionalit\u00e0 OLAP per distinguere tra diversi livelli di riepilogo dei dati.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Region, Country<\/strong>: le colonne selezionate che verranno visualizzate nel set di risultati finali.<\/li>\n\n\n\n<li><strong>SUM(Amount) AS TotalSales<\/strong>: calcola le vendite totali per ciascun insieme di raggruppamento definito. Riassume la colonna Importo e le d\u00e0 l&#8217;alias TotalSales.<\/li>\n\n\n\n<li><strong>GROUPING(Region) AS RegionGrouping<\/strong>, <strong>GROUPING(Country) AS CountryGrouping<\/strong>: queste colonne utilizzano la funzione <strong>GROUPING<\/strong> per indicare il livello di aggregazione per ogni riga. La funzione <strong>GROUPING<\/strong> restituisce 1 se la riga \u00e8 un risultato aggregato o superaggregato (come un totale parziale o un totale) e 0 in caso contrario. I risultati hanno rispettivamente l&#8217;alias <strong>RegionGrouping<\/strong> e <strong>CountryGrouping<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p><strong>GROUP BY GROUPING SETS Clause<\/strong><br>La clausola <strong>GROUP BY GROUPING SETS<\/strong> \u00e8 il fulcro della capacit\u00e0 di aggregazione multilivello di questa query.<\/p>\n\n\n\n<p>Specifica pi\u00f9 livelli di raggruppamento in una query, che in questo caso sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>(Region, Country)<\/strong>: il livello di aggregazione pi\u00f9 dettagliato, che fornisce dati di vendita per ciascun paese all&#8217;interno di ciascuna regione.<\/li>\n\n\n\n<li>(<strong>Region<\/strong>): un livello di aggregazione pi\u00f9 elevato, che fornisce i totali parziali delle vendite per ciascuna regione.<\/li>\n\n\n\n<li><strong>()<\/strong>: il livello pi\u00f9 alto di aggregazione, che fornisce il totale complessivo delle vendite in tutte le regioni e paesi.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p>Clausola <strong>ORDER BY<\/strong><br>La clausola <strong>ORDER BY<\/strong> specifica l&#8217;ordine dei file<\/p>\n\n\n\n<p>set di risultati ed \u00e8 particolarmente importante quando si utilizza il <strong>GROUPING SETS<\/strong>. Garantisce che i risultati aggregati vengano visualizzati in un ordine logico e gerarchico. Questa clausola ordina i risultati principalmente in base alle funzioni di <strong>GROUPING<\/strong> applicate a <strong>Region<\/strong> e <strong>Country<\/strong>, garantendo che gli aggregati totali appaiano per ultimi nel set di risultati. Quindi ordina per <strong>Region<\/strong> e <strong>Country<\/strong> per mantenere una sequenza alfabetica o logica all&#8217;interno dei dati raggruppati.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>La funzione <strong>GROUPING<\/strong> all&#8217;interno della clausola <strong>ORDER BY <\/strong>garantisce che i risultati siano ordinati in modo da rispettare la gerarchia dell&#8217;aggregazione:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Innanzitutto, le righe dettagliate in cui sono raggruppati sia <strong>Region<\/strong> e <strong>Country<\/strong> (indicate da <strong>GROUPING(Region)<\/strong> e <strong>GROUPING(Country)<\/strong> che restituiscono entrambi 0.<\/li>\n\n\n\n<li><span style=\"color: var(--global-palette5)\">Successivamente, le righe del totale parziale in cui \u00e8 raggruppata solo la Region (indicata da <\/span><strong style=\"color: var(--global-palette5)\">GROUPING(Region)<\/strong><span style=\"color: var(--global-palette5)\"> che restituisce 0 e <\/span><strong style=\"color: var(--global-palette5)\">GROUPING(Country)<\/strong><span style=\"color: var(--global-palette5)\"> che restituisce 1.<\/span><\/li>\n\n\n\n<li>Infine, la riga del totale complessivo in cui sia Regione che Paese sono super-aggregati (indicata da <strong>GROUPING(Region)<\/strong> e <strong>GROUPING(Country)<\/strong> che restituiscono entrambi 1.<\/li>\n<\/ul>\n\n\n\n<p>Questo ordinamento garantisce che tutti gli utenti dei risultati della query possano facilmente discernere il livello di dettaglio che stanno osservando: cifre dettagliate, totali parziali o totali generali.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>La query dimostra in modo efficace come utilizzare le funzionalit\u00e0 SQL avanzate per analizzare e presentare i dati in un formato gerarchico comune nei report finanziari e sulle vendite. Fornisce un chiaro esempio di come riepilogare i dati a pi\u00f9 livelli di dettaglio in un&#8217;unica query, che pu\u00f2 essere prezioso per la business intelligence, il reporting e i processi decisionali.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Conclusioni<\/strong><\/p>\n\n\n\n<p>In sintesi, l&#8217;implementazione strategica delle funzioni OLAP come <strong>LISTAGG<\/strong>() e <strong>GROUPING<\/strong>() all&#8217;interno di un ambiente SQL iSeries offre una soluzione solida per l&#8217;analisi e la presentazione gerarchica dei dati. L&#8217;uso di queste funzioni nella nostra query facilita un&#8217;aggregazione a pi\u00f9 livelli dei dati di vendita, consentendo una visione completa che spazia dai dettagli granulari ai riepiloghi di alto livello.<\/p>\n\n\n\n<p>Questa metodologia non solo semplifica il processo di analisi dei dati, ma migliora anche il processo decisionale fornendo informazioni chiare sulle prestazioni di vendita nei diversi segmenti geografici. Sfruttando la potenza di queste funzioni OLAP, le organizzazioni possono trasformare i dati grezzi in informazioni fruibili, rafforzando il ruolo fondamentale della sofisticata gestione dei dati nel guidare la strategia e i risultati aziendali.<\/p>\n\n\n\n<p>Tenere presente, come sempre, che l\u2019implementazione e le funzionalit\u00e0 effettive potrebbero variare a seconda della versione del sistema operativo iSeries e del database DB2. \u00c8 sempre buona norma fare riferimento alla documentazione ufficiale IBM per avere informazioni pi\u00f9 precise e dettagliate.<\/p>\n\n\n\n<p><\/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><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><br><\/li>\n\n\n\n<li><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><br><\/li>\n\n\n\n<li><a href=\"https:\/\/www.skillup.cloud\/it\/sfruttare-il-potere-della-data-science-e-sql-con-olap-functions-su-ibm-iseries\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sfruttare il Potere della Data Science e SQL con OLAP Functions su IBM iSeries<\/a><br><\/li>\n\n\n\n<li><a href=\"https:\/\/www.skillup.cloud\/it\/olap-functions-in-sql-iseries-per-unanalisi-dati-avanzata-un-focus-sulle-windows-functions\/\" target=\"_blank\" rel=\"noreferrer noopener\">OLAP Functions in SQL iSeries per un\u2019Analisi Dati Avanzata: Un Focus sulle Windows Functions<\/a><br><\/li>\n\n\n\n<li><a href=\"https:\/\/www.skillup.cloud\/it\/olap-functions-in-sql-iseries-per-unanalisi-dati-avanzata-un-focus-sulle-ranking-functions\/\" target=\"_blank\" rel=\"noreferrer noopener\">OLAP Functions in SQL iSeries per un\u2019Analisi Dati Avanzata: Un Focus sulle Ranking Functions<\/a><br><\/li>\n\n\n\n<li><a href=\"https:\/\/www.skillup.cloud\/it\/olap-functions-in-sql-iseries-per-unanalisi-dati-avanzata-un-focus-sulle-grouping-operation\/\" target=\"_blank\" rel=\"noreferrer noopener\">OLAP Functions in SQL iSeries per un&#8217;Analisi Dati Avanzata: Un Focus sulle Grouping Operation<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Le funzioni LISTAGG() e GROUPING() in iSeries SQL facilitano la gestione dei dati abilitando rispettivamente l&#8217;aggregazione delle stringhe e l&#8217;identificazione dei dati aggregati. Questi strumenti supportano reporting e analisi semplici, semplificando il lavoro pratico con set di dati complessi.<\/p>\n","protected":false},"author":3,"featured_media":4729,"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":[38,255,256,257,284,285],"class_list":["post-4723","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science","category-artificial-intelligence","tag-ipower","tag-data-science","tag-business-intelligence","tag-olap-online-analytical-processing","tag-listagg","tag-grouping"],"_links":{"self":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4723","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=4723"}],"version-history":[{"count":32,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4723\/revisions"}],"predecessor-version":[{"id":4818,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4723\/revisions\/4818"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media\/4729"}],"wp:attachment":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media?parent=4723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/categories?post=4723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/tags?post=4723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}