{"id":4629,"date":"2024-02-12T16:00:00","date_gmt":"2024-02-12T15:00:00","guid":{"rendered":"https:\/\/www.skillup.cloud\/?p=4629"},"modified":"2024-02-20T12:17:51","modified_gmt":"2024-02-20T11:17:51","slug":"olap-functions-in-sql-iseries-per-unanalisi-dati-avanzata-un-focus-sulle-ranking-functions","status":"publish","type":"post","link":"https:\/\/www.skillup.cloud\/it\/olap-functions-in-sql-iseries-per-unanalisi-dati-avanzata-un-focus-sulle-ranking-functions\/","title":{"rendered":"OLAP Functions in SQL iSeries per un&#8217;Analisi Dati Avanzata: Un Focus sulle Ranking Functions"},"content":{"rendered":"\n<p>Nel campo dell&#8217;analisi e gestione dei database sui sistemi IBM iSeries, le funzioni OLAP (Online analytical processing) si distinguono come strumenti potenti per l&#8217;interrogazione e la trasformazione dei dati.<\/p>\n\n\n\n<p>Tra queste, le funzioni di ranking forniscono capacit\u00e0 indispensabili per eseguire analisi comparative all&#8217;interno dei dataset, consentendo alle aziende di derivare significativi spunti dai loro dati.<\/p>\n\n\n\n<p>Questo post si addentra nelle principali funzioni di ranking disponibili in SQL su iSeries, illustrandone l&#8217;importanza e le applicazioni pratiche in scenari reali.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>ROW_NUMBER()<\/strong>: Questa funzione \u00e8 fondamentale per assegnare un intero sequenziale unico a righe all&#8217;interno di una partizione di un set di risultati, iniziando da 1. \u00c8 strumentale in scenari dove \u00e8 richiesta una chiara e inequivocabile ordinazione delle righe, assicurando che ogni riga possa essere distintamente identificata e accessibile.<br>&nbsp;<\/li>\n\n\n\n<li><strong>RANK()<\/strong>: La funzione RANK() va un passo oltre allocando un rango a ogni riga all&#8217;interno di una partizione di un set di risultati. A differenza di ROW_NUMBER(), RANK() permette legami; quando due o pi\u00f9 righe si qualificano per lo stesso rango, esse vengono assegnate allo stesso numero di rango, creando intervalli nella sequenza per i ranghi successivi. Questa funzione \u00e8 particolarmente preziosa nelle analisi competitive, dove \u00e8 cruciale comprendere il posizionamento senza artificialmente gonfiare o sgonfiare l&#8217;importanza delle entit\u00e0 legate.<br>&nbsp;<\/li>\n\n\n\n<li><strong>DENSE_RANK()<\/strong>: Operando su una premessa simile a RANK(), DENSE_RANK() elimina gli intervalli nella sequenza di ranking, garantendo un&#8217;allocazione di rango densa e continua anche in presenza di legami. Questa funzione \u00e8 essenziale quando la continuit\u00e0 dei valori di rango \u00e8 critica per l&#8217;analisi, permettendo un sistema di ranking pi\u00f9 compatto e intuitivo.<br>&nbsp;<\/li>\n\n\n\n<li><strong>NTILE(n)<\/strong>: Per un&#8217;analisi pi\u00f9 granulare, la funzione NTILE(n) divide una partizione ordinata in un numero specificato di gruppi, <strong>n<\/strong>, rendendola uno strumento inestimabile per segmentare i dataset in quantili o altri raggruppamenti specificati. Che si tratti di dividere i clienti in quartili di vendite o di categorizzare metriche di performance, NTILE(n) offre un approccio diretto alla stratificazione dei dati.<\/li>\n<\/ol>\n\n\n\n<p>Queste funzioni di ranking sono integrali per sfruttare pienamente il potere analitico di SQL su iSeries, fornendo le basi per analisi dei dati sofisticate e processi decisionali.<\/p>\n\n\n\n<p>Dominando queste funzioni, i professionisti possono sbloccare intuizioni pi\u00f9 profonde nei loro dati, facilitando un miglioramento dell&#8217;efficienza operativa e della previsione strategica.<\/p>\n\n\n\n<p>Questa introduzione prepara il terreno per un&#8217;esplorazione dettagliata di ogni funzione, inclusi esempi di sintassi, casi d&#8217;uso e migliori pratiche per integrare queste funzioni OLAP nelle vostre analisi dei dati e flussi di lavoro di reporting sulla piattaforma iSeries.<\/p>\n\n\n\n<p><strong>Nota sugli esempi<\/strong>: escluso il primo, gli altri esempi <strong>utilizzano volutamente tutti la stessa tabella temporanea<\/strong> in memoria creata con CTE <strong>per dare visione dei diversi approcci e possibilit\u00e0<\/strong> che si possono m,ettere in campo con le Ranking Function in esame in questo articolo.<\/p>\n\n\n\n<p><\/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_20240212_1111.png\" alt=\"\" class=\"wp-image-4564\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1111.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1111-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Esempio 1: OLAP function ROW_NUMBER() per il rilevamento dei numeri doppi<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione&nbsp; alla Query<\/strong><\/p>\n\n\n\n<p>Questa query SQL \u00e8 progettata per dimostrare le capacit\u00e0 avanzate di iSeries SQL per l&#8217;analisi dei dati, concentrandosi in particolare sull&#8217;uso delle <strong>funzioni finestra<\/strong> e delle CTE (Common Table Expressions) per elaborare e analizzare le serie di dati.<\/p>\n\n\n\n<p>La query mostra come partizionare i dati, applicare la classificazione all&#8217;interno delle partizioni e filtrare e aggregare i risultati in base a criteri specifici.<\/p>\n\n\n\n<p>Utilizzando un set di dati di esempio creato al volo all&#8217;interno della query, illustra un esempio pratico di identificazione e aggregazione di righe in base ai ranghi calcolati all&#8217;interno di partizioni di dati, sottolineando la potenza di SQL nell&#8217;estrazione di informazioni significative dai dati strutturati.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH\n  Sample(ID, Value) AS (\n      VALUES (1,10),  (2, 20), (3, 30), (4, 30)\n           , (5, 30), (6, 40), (7,20), (8,50)\n           , (9,60), (10,70), (11,80), (12,90)\n) -- SELECT * FROM Sample;\n, Sample2 (ID, Value, ROW_NUM) AS (\n    SELECT ID, Value,\n           ROW_NUMBER()\n              OVER (PARTITION BY Value\n              ORDER BY ID)\n           AS row_number\n      FROM Sample\n) -- SELECT * FROM Sample2;\nSELECT Value, MAX(ROW_NUM)\n  from Sample2\n WHERE ROW_NUM &gt; 1\ngroup by Value \nORDER BY 1,2;<\/pre>\n\n\n\n<p class=\"has-large-font-size\"><strong>Risultato:<\/strong><\/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 colspan=\"2\"><strong class=\"aligncenter\">Sample<\/strong><\/td><\/tr><tr><td>ID<\/td><td>VALUE<\/td><\/tr><tr><td>1<\/td><td>10<\/td><\/tr><tr><td>2<\/td><td>20<\/td><\/tr><tr><td>3<\/td><td>30<\/td><\/tr><tr><td>4<\/td><td>30<\/td><\/tr><tr><td>5<\/td><td>30<\/td><\/tr><tr><td>6<\/td><td>40<\/td><\/tr><tr><td>7<\/td><td>20<\/td><\/tr><tr><td>8<\/td><td>50<\/td><\/tr><tr><td>9<\/td><td>60<\/td><\/tr><tr><td>10<\/td><td>70<\/td><\/tr><tr><td>11<\/td><td>80<\/td><\/tr><tr><td>12<\/td><td>90<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Initial CTE<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td colspan=\"3\"><strong class=\"aligncenter\">Sample2<\/strong><\/td><\/tr><tr><td>ID<\/td><td>VALUE<\/td><td>ROW_NUM<\/td><\/tr><tr><td>1<\/td><td>10<\/td><td>1<\/td><\/tr><tr><td>2<\/td><td>20<\/td><td>1<\/td><\/tr><tr><td>7<\/td><td>20<\/td><td>2<\/td><\/tr><tr><td>3<\/td><td>30<\/td><td>1<\/td><\/tr><tr><td>4<\/td><td>30<\/td><td>2<\/td><\/tr><tr><td>5<\/td><td>30<\/td><td>3<\/td><\/tr><tr><td>6<\/td><td>40<\/td><td>1<\/td><\/tr><tr><td>8<\/td><td>50<\/td><td>1<\/td><\/tr><tr><td>9<\/td><td>60<\/td><td>1<\/td><\/tr><tr><td>10<\/td><td>70<\/td><td>1<\/td><\/tr><tr><td>11<\/td><td>80<\/td><td>1<\/td><\/tr><tr><td>12<\/td><td>90<\/td><td>1<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Intermediate CTE<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<figure class=\"wp-block-table\"><table><tbody><tr><td colspan=\"2\"><strong class=\"aligncenter\">Result<\/strong><\/td><\/tr><tr><td>VALUE<\/td><td>ROW_NUM<\/td><\/tr><tr><td>20<\/td><td>2<\/td><\/tr><tr><td>30<\/td><td>3<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Final Result<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>La query inizia con la dichiarazione di una CTE denominata <strong>Sample<\/strong>, che costruisce una tabella temporanea in memoria composta da coppie <strong>ID<\/strong> e <strong>valore<\/strong>.<\/p>\n\n\n\n<p>Dopo la CTE iniziale, viene definita una seconda CTE denominata <strong>Sample2<\/strong>. Questa CTE si basa sui dati di <strong>Sample<\/strong> utilizzando la <strong>funzione finestra ROW_NUMBER()<\/strong>.<\/p>\n\n\n\n<p>La funzione viene applicata alle partizioni del set di dati create in base alla colonna <strong>Valore<\/strong>, ordinando le righe all&#8217;interno di ciascuna partizione in base all&#8217;<strong>ID<\/strong>.<\/p>\n\n\n\n<p>Questo passaggio assegna un numero intero sequenziale univoco (<strong>numero di riga<\/strong>) a ciascuna riga all&#8217;interno della sua partizione, classificando effettivamente le righe in base al relativo <strong>ID<\/strong> nel contesto del relativo <strong>Valore<\/strong> condiviso.<\/p>\n\n\n\n<p>Il nucleo della query risiede nella sua istruzione <strong>SELECT<\/strong> finale, che opera sui dati preparati in <strong>Sample2<\/strong>. Si rivolge specificamente alle righe in cui il numero di riga calcolato (<strong>ROW_NUM<\/strong>) \u00e8 maggiore di 1, implicando un focus sulle righe all&#8217;interno di ciascuna partizione <strong>Valore<\/strong> che hanno un <strong>valore non unico<\/strong>.<\/p>\n\n\n\n<p>La query procede quindi con l&#8217;aggregazione di queste righe mirate in base al relativo valore, selezionando il massimo ROW_<strong>NUM<\/strong> trovato all&#8217;interno di ciascun gruppo.<\/p>\n\n\n\n<p>Questo passaggio di aggregazione evidenzia il rango pi\u00f9 alto raggiunto dalle righe all&#8217;interno di ciascun gruppo di valori distinto che soddisfa il criterio di filtro e, in definitiva indica <strong>quanti &#8220;doppioini&#8221; sono presenti per quel valore<\/strong>.<\/p>\n\n\n\n<p>Infine, i risultati vengono ordinati in base al Valore e al numero massimo di righe, fornendo un riepilogo chiaro e ordinato dei dati in base alla logica analitica specificata.<\/p>\n\n\n\n<p>In sostanza, questa query non solo esemplifica la struttura sintattica e l&#8217;uso delle CTE e delle funzioni finestra in iSeries SQL, ma offre anche uno sguardo alle applicazioni pratiche di queste funzionalit\u00e0 per attivit\u00e0 complesse di analisi dei dati.<\/p>\n\n\n\n<p>Serve come un esempio di come sezionare e riassemblare i dati<strong> per svelare modelli o intuizioni che non sono immediatamente evidenti dal set di dati grezzi<\/strong>.<\/p>\n\n\n\n<p><\/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_20240212_1320.png\" alt=\"\" class=\"wp-image-4574\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1320.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1320-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong><strong>Esempio 2: <strong><strong>OLAP Function <\/strong><\/strong>ROW_NUMBER() per classificare le vendite<\/strong><\/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, approfondiamo l&#8217;applicazione pratica delle funzioni <strong>OLAP<\/strong> all&#8217;interno di un ambiente SQL iSeries, concentrandoci su uno scenario che analizza i dati di vendita in diverse regioni e prodotti.<\/p>\n\n\n\n<p>Nello specifico, utilizzeremo la funzione <strong>ROW_NUMBER()<\/strong> per eseguire una classifica dettagliata dei dati di vendita all&#8217;interno di ciascuna regione.<\/p>\n\n\n\n<p>Questo approccio non solo evidenzia la versatilit\u00e0 delle funzioni finestra in SQL per attivit\u00e0 analitiche, ma mostra anche come possono essere sfruttate per ottenere informazioni dettagliate sulle disparit\u00e0 e sui successi delle prestazioni di vendita in varie localit\u00e0 geografiche.<\/p>\n\n\n\n<p>Suddividendo i dati per regione e ordinandoli per vendite in modo decrescente, saremo in grado di assegnare una classificazione univoca a ciascun prodotto in base alla sua performance di vendita, fornendo una panoramica chiara e utilizzabile delle dinamiche di vendita regionali.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData(Product, Region, Sales) AS (\n  VALUES\n    ('Product A', 'East', 100),\n    ('Product B', 'East', 150),\n    ('Product A', 'West', 200),\n    ('Product B', 'West', 200),\n    ('Product C', 'East', 50),\n    ('Product C', 'West', 100),\n    ('Product D', 'East', 75),\n    ('Product D', 'West', 75)\n) \nSELECT Product, Region, Sales,\n       ROW_NUMBER()\n           OVER (PARTITION BY Region\n                 ORDER BY Sales DESC)\n       AS RowNum\nFROM SalesData;\n<\/pre>\n\n\n\n<p class=\"has-large-font-size\"><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>PRODUCT<\/td><td>REGION<\/td><td>SALES<\/td><td>ROWNUM<\/td><\/tr><tr><td>Product B<\/td><td>East<\/td><td>150<\/td><td>1<\/td><\/tr><tr><td>Product A<\/td><td>East<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>East<\/td><td>75<\/td><td>3<\/td><\/tr><tr><td>Product C<\/td><td>East<\/td><td>50<\/td><td>4<\/td><\/tr><tr><td>Product A<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product B<\/td><td>West<\/td><td>200<\/td><td>2<\/td><\/tr><tr><td>Product C<\/td><td>West<\/td><td>100<\/td><td>3<\/td><\/tr><tr><td>Product D<\/td><td>West<\/td><td>75<\/td><td>4<\/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-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>La query inizia con la creazione di una Common Table Expression (CTE) denominata <strong>SalesData<\/strong>, che funge da tabella temporanea in memoria per la nostra analisi.<\/p>\n\n\n\n<p>Questa CTE \u00e8 popolata con dati di vendita di esempio, incluse le colonne per <strong>Product<\/strong>, <strong>Region<\/strong> e <strong>Sales<\/strong>, simulando cos\u00ec un set di dati del mondo reale che potrebbe essere riscontrato in uno scenario di analisi aziendale.<\/p>\n\n\n\n<p>I dati includono dati di vendita per quattro diversi prodotti in due regioni (Est e Ovest), con importi di vendita variabili.<\/p>\n\n\n\n<p>Dopo l&#8217;impostazione del CTE <strong>SalesData<\/strong>, la query procede selezionando tutte le colonne da questo set di dati e applica la funzione OLAP <strong>ROW_NUMBER().<\/strong><\/p>\n\n\n\n<p>Questa funzione viene utilizzata per generare una classifica intera sequenziale per ogni riga all&#8217;interno di una partizione del set di dati.<\/p>\n\n\n\n<p>Il partizionamento viene eseguito in base alla colonna <strong>Region<\/strong>, garantendo che la classifica sia specifica per ciascuna regione e il criterio di ordinamento \u00e8 la colonna <strong>Sales<\/strong> in ordine decrescente.<\/p>\n\n\n\n<p>Ci\u00f2 significa che all&#8217;interno di ciascuna regione, i prodotti verranno classificati in base ai dati di vendita, con il prodotto pi\u00f9 venduto che ricever\u00e0 un <strong>RowNum<\/strong> pari a 1 e cos\u00ec via.<\/p>\n\n\n\n<p>Il risultato finale di questa query sar\u00e0 un elenco di tutti i prodotti, insieme alle rispettive regioni e ai dati di vendita, ciascuno accompagnato da un numero di riga che indica la classifica di vendita all&#8217;interno della regione.<\/p>\n\n\n\n<p>Questa classifica fornisce visibilit\u00e0 immediata su quali prodotti stanno ottenendo i risultati migliori in ciascuna regione, offrendo informazioni preziose per la pianificazione strategica, la gestione dell&#8217;inventario e le attivit\u00e0 di marketing.<\/p>\n\n\n\n<p>Utilizzando la funzione <strong>ROW_NUMBER()<\/strong> in questo modo, le aziende possono identificare con precisione i prodotti e le regioni con le migliori prestazioni, facilitando azioni mirate per migliorare le prestazioni di vendita e affrontare le aree con minori performance.<\/p>\n\n\n\n<p><\/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_20240212_1323.png\" alt=\"\" class=\"wp-image-4576\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1323.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1323-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Esempio 3: OLAP function RANK() per classificare le vendite (stessa classifica per i pari merito, con lacune)<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione alla Query<\/strong><\/p>\n\n\n\n<p>In questa esplorazione, approfondiremo l&#8217;utilizzo sofisticato delle funzioni OLAP all&#8217;interno di SQL su un sistema iSeries, concentrandoci in particolare sulla funzione <strong>RANK() <\/strong>per analizzare i dati di vendita.<\/p>\n\n\n\n<p>Questa query esemplifica come suddividere in modo efficace i dati per regione e quindi classificare i prodotti all&#8217;interno di tali partizioni in base ai dati di vendita. Utilizzando queste tecniche, miriamo a scoprire informazioni dettagliate sulle prestazioni dei prodotti in diverse regioni, consentendo decisioni strategiche mirate.<\/p>\n\n\n\n<p>Questo approccio non solo dimostra la potenza delle funzioni OLAP per l&#8217;analisi dei dati, ma ne illustra anche l&#8217;applicazione pratica nell&#8217;identificazione delle principali tendenze di vendita e dei parametri di performance in diverse aree geografiche.<\/p>\n\n\n\n<p><strong>Nota<\/strong>: il risultato nella classifica ottenuto con questo approccio \u00e8 simile a quello precedente utilizzando ROW_NUMBER(), ma fornisce lo <strong>stesso rango per i pari merito, con lacune (Gaps):<\/strong> ci\u00f2 classificher\u00e0 i record di vendita all&#8217;interno di ciascuna regione, consentendo classifiche identiche in caso di parit\u00e0 di importi di vendita, con lacune per le classifiche successive (aspetto immediatamente visibile se si confrontano i risultati delle due versioni: con <strong>ROW_NUMBER()<\/strong> e con <strong>RANK()<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData(Product, Region, Sales) AS (\n  VALUES\n    ('Product A', 'East', 100),\n    ('Product B', 'East', 150),\n    ('Product A', 'West', 200),\n    ('Product B', 'West', 200),\n    ('Product C', 'East', 50),\n    ('Product C', 'West', 100),\n    ('Product D', 'East', 75),\n    ('Product D', 'West', 75)\n) -- select * from SalesData;\n SELECT Product, Region, Sales,\n        RANK()\n          OVER (PARTITION BY Region\n                ORDER BY Sales DESC)\n        AS Rank\nFROM  SalesData;<\/pre>\n\n\n\n<p class=\"has-large-font-size\"><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>PRODUCT<\/td><td>REGION<\/td><td>SALES<\/td><td>RANK<\/td><\/tr><tr><td>Product B<\/td><td>East<\/td><td>150<\/td><td>1<\/td><\/tr><tr><td>Product A<\/td><td>East<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>East<\/td><td>75<\/td><td>3<\/td><\/tr><tr><td>Product C<\/td><td>East<\/td><td>50<\/td><td>4<\/td><\/tr><tr><td>Product A<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product B<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product C<\/td><td>West<\/td><td>100<\/td><td>3<\/td><\/tr><tr><td>Product D<\/td><td>West<\/td><td>75<\/td><td>4<\/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-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>Questa query SQL inizia con la costruzione e utilizzo di una Common Table Expression (CTE) denominata <strong>SalesData<\/strong>.<\/p>\n\n\n\n<p>Questa CTE \u00e8 progettata per simulare un set di dati del mondo reale creando una tabella in memoria popolata con record di vendita per vari prodotti in diverse regioni.<\/p>\n\n\n\n<p>Ogni record \u00e8 costituito dal nome del prodotto, dalla regione in cui \u00e8 stata effettuata la vendita e dall&#8217;importo totale delle vendite per quel prodotto nella rispettiva regione.<\/p>\n\n\n\n<p>Dopo aver creato la tabella <strong>SalesData<\/strong>, la query sfrutta la funzione <strong>RANK()<\/strong>, una delle funzionalit\u00e0 OLAP di SQL, per eseguire un&#8217;analisi avanzata dei dati di vendita.<\/p>\n\n\n\n<p>La funzione <strong>RANK()<\/strong> viene applicata all&#8217;interno di una finestra definita dalla clausola <strong>OVER<\/strong>, che suddivide i dati per <strong>Region<\/strong>.<\/p>\n\n\n\n<p>All&#8217;interno di ciascuna partizione, la funzione ordina i prodotti in base alle vendite in ordine decrescente.<\/p>\n\n\n\n<p>La funzione <strong>RANK()<\/strong> assegna quindi una classificazione a ciascun prodotto in base a questo ordine, con il prodotto pi\u00f9 venduto in ciascuna regione che riceve un rango pari a 1.<\/p>\n\n\n\n<p>Nei casi in cui pi\u00f9 prodotti hanno le stesse cifre di vendita, ricevono lo stesso rango e il rango successivo viene incrementato di conseguenza.<\/p>\n\n\n\n<p>Questo processo selettivo d\u00e0 come risultato un set di dati che non solo include le informazioni originali sul prodotto, sulla regione e sulle vendite, ma lo arricchisce anche con una classifica dei prodotti all&#8217;interno di ciascuna regione in base alle prestazioni di vendita.<\/p>\n\n\n\n<p>Questa classifica fornisce informazioni critiche su quali prodotti sono leader nelle vendite in ciascuna regione e su quanto i prodotti competitivi si comportano l&#8217;uno rispetto all&#8217;altro.<\/p>\n\n\n\n<p>Eseguendo questa query, le aziende e gli analisti possono acquisire una comprensione pi\u00f9 chiara delle dinamiche di mercato e delle prestazioni dei prodotti nelle diverse aree geografiche.<\/p>\n\n\n\n<p>Le informazioni derivate da questa analisi possono informare una serie di decisioni strategiche, dallo sviluppo del prodotto e dalle strategie di marketing alla gestione dell&#8217;inventario e all&#8217;attenzione alle vendite regionali, consentendo in definitiva un approccio pi\u00f9 basato sui dati per l&#8217;ottimizzazione e la crescita del business.<\/p>\n\n\n\n<p><\/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_20240212_1456.png\" alt=\"\" class=\"wp-image-4582\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1456.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1456-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Esempio 4: OLAP function DENSE_RANK() per classificare le vendite (senza spazi vuoti)<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione&nbsp; alla Query<\/strong><\/p>\n\n\n\n<p>In questo esempio, approfondiremo l&#8217;applicazione avanzata delle funzioni OLAP all&#8217;interno di SQL su un sistema iSeries, concentrandoci sulla funzione <strong>DENSE_RANK()<\/strong> per un&#8217;analisi dei dati di vendita in varie regioni.<\/p>\n\n\n\n<p>Questa query \u00e8 progettata per dimostrare come i dati possono essere segmentati e analizzati all&#8217;interno di partizioni specifiche, in questo caso per regione, per assegnare classifiche ai prodotti in base alle prestazioni di vendita.<\/p>\n\n\n\n<p>A differenza della funzione <strong>RANK(), DENSE_RANK()<\/strong> fornisce una prospettiva unica garantendo una sequenza continua di classifiche, anche in presenza di parit\u00e0, offrendo cos\u00ec una visione pi\u00f9 granulare delle posizioni competitive all&#8217;interno di ciascuna regione.<\/p>\n\n\n\n<p>Questo approccio \u00e8 particolarmente utile per identificare quanto i prodotti competono all\u2019interno del mercato, facilitando i processi decisionali strategici senza l\u2019inclinazione dei divari di rango.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData(Product, Region, Sales) AS (\n  VALUES\n    ('Product A', 'East', 100),\n    ('Product B', 'East', 150),\n    ('Product A', 'West', 200),\n    ('Product B', 'West', 200),\n    ('Product C', 'East', 50),\n    ('Product C', 'West', 100),\n    ('Product D', 'East', 75),\n    ('Product D', 'West', 75)\n) -- select * from SalesData;\nSELECT Product, Region, Sales,\n       DENSE_RANK()\n           OVER (PARTITION BY Region\n                 ORDER BY Sales DESC)\n       AS DenseRank\nFROM SalesData;<\/pre>\n\n\n\n<p class=\"has-large-font-size\"><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>PRODUCT<\/td><td>REGION<\/td><td>SALES<\/td><td>DENSERANK<\/td><\/tr><tr><td>Product B<\/td><td>East<\/td><td>150<\/td><td>1<\/td><\/tr><tr><td>Product A<\/td><td>East<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>East<\/td><td>75<\/td><td>3<\/td><\/tr><tr><td>Product C<\/td><td>East<\/td><td>50<\/td><td>4<\/td><\/tr><tr><td>Product A<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product B<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product C<\/td><td>West<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>West<\/td><td>75<\/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 class=\"has-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>La query inizia con la creazione di una Common Table Expression (CTE), <strong>SalesData<\/strong>, che funge da origine dati temporanea per l&#8217;analisi.&nbsp;<\/p>\n\n\n\n<p>Questa CTE \u00e8 popolata con ipotetiche informazioni sulle vendite, dettagliando i nomi dei prodotti, le regioni corrispondenti e le cifre di vendita.<\/p>\n\n\n\n<p>Questo set di dati fornisce un modello semplificato ma rappresentativo dei dati sulle prestazioni di vendita che le aziende potrebbero analizzare per comprendere le prestazioni dei prodotti nei diversi mercati.<\/p>\n\n\n\n<p>Dopo l&#8217;impostazione CTE, la query utilizza la funzione <strong>DENSE_RANK()<\/strong> per analizzare i dati di vendita.<\/p>\n\n\n\n<p>Questa funzione viene applicata all&#8217;interno di una finestra specifica, definita dalla clausola <strong>OVER<\/strong>, che organizza i dati in partizioni per <strong>Region<\/strong>.<\/p>\n\n\n\n<p>All&#8217;interno di ciascuna partizione, i prodotti vengono ordinati in base alle Vendite in ordine decrescente.<\/p>\n\n\n\n<p>La funzione <strong>DENSE_RANK()<\/strong> assegna quindi una classificazione a ciascun prodotto in base alle cifre di vendita, garantendo che i prodotti con cifre di vendita identiche ricevano la stessa classificazione.<\/p>\n\n\n\n<p>Fondamentalmente, <strong>DENSE_RANK()<\/strong> non lascia spazi vuoti nella sequenza di classificazione per ranghi pari, il che significa che la sequenza di classificazione \u00e8 continua e densa, da cui il nome.<br>Ad esempio, se due prodotti nella regione Est hanno entrambi i dati di vendita pi\u00f9 alti, riceveranno entrambi un rango denso pari a 1, e il prodotto successivo pi\u00f9 alto ricever\u00e0 un rango denso pari a 2, indipendentemente dal numero di prodotti che condividono il rango pi\u00f9 alto.<\/p>\n\n\n\n<p>Questo metodo di classificazione \u00e8 particolarmente utile per analizzare da vicino la posizione competitiva, in quanto consente alle parti interessate di vedere con precisione quanti prodotti ottengono risultati simili in termini di vendite, senza la distorsione dei divari di classifica che potrebbe implicare una disparit\u00e0 di prestazioni maggiore di quella effettivamente esistente.<br><br>L&#8217;output di questa query fornisce un elenco chiaro e ordinato di prodotti all&#8217;interno di ciascuna regione, classificati in base alle prestazioni di vendita con una classifica densa.<\/p>\n\n\n\n<p>Questa intuizione \u00e8 preziosa per le aziende che desiderano comprendere la posizione dei propri prodotti in varie regioni, identificare i principali concorrenti e elaborare strategie su come migliorare o sfruttare le proprie posizioni di mercato.<\/p>\n\n\n\n<p>Sfruttando la funzione <strong>DENSE_RANK()<\/strong> in questo modo, le organizzazioni possono affinare le proprie analisi di mercato e gli sforzi di pianificazione strategica, assicurandosi che siano basati su una comprensione sfumata del proprio ambiente competitivo.<\/p>\n\n\n\n<p><\/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_20240212_1458.png\" alt=\"\" class=\"wp-image-4584\" srcset=\"https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1458.png 512w, https:\/\/www.skillup.cloud\/wp-content\/uploads\/2024\/02\/img_512x256_20240212_1458-300x150.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Esempio 5: OLAP Function <strong>NTILE(n) <\/strong>per dividere i record di vendita in gruppi<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introduzione&nbsp; alla Query<\/strong><\/p>\n\n\n\n<p>In questa esplorazione, approfondiremo l&#8217;applicazione avanzata delle funzioni OLAP all&#8217;interno di SQL su un sistema iSeries, concentrandoci sull&#8217;utilizzo della funzione <strong>NTILE()<\/strong> per eseguire una segmentazione &#8220;nuanced&#8221; (vale a dire, finemente sintonizzata e mirata con precisione)\u00a0 dei dati di vendita.<\/p>\n\n\n\n<p>Questo approccio analitico \u00e8 orientato a dividere i record di vendita in gruppi distinti all&#8217;interno di ciascuna regione, in base alla loro performance di vendita.<\/p>\n\n\n\n<p>Implementando la funzione <strong>NTILE(2)<\/strong>, miriamo a classificare i dati in due gruppi, creando essenzialmente quartili (in questo contesto semplificato) che ci consentono di differenziare tra prestazioni di vendita superiori e inferiori all&#8217;interno di ciascun segmento geografico.<\/p>\n\n\n\n<p>Questo metodo di analisi dei dati \u00e8 particolarmente utile per le organizzazioni che desiderano ottenere informazioni pi\u00f9 approfondite sulla distribuzione delle vendite e identificare potenziali aree di miglioramento strategico o investimento.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH SalesData(Product, Region, Sales) AS (\n  VALUES\n    ('Product A', 'East', 100),\n    ('Product B', 'East', 150),\n    ('Product A', 'West', 200),\n    ('Product B', 'West', 200),\n    ('Product C', 'East', 50),\n    ('Product C', 'West', 100),\n    ('Product D', 'East', 75),\n    ('Product D', 'West', 75)\n) -- select * from SalesData;\nSELECT Product, Region, Sales,\n       NTILE(2)\n           OVER (PARTITION BY Region\n                 ORDER BY Sales DESC)\n       AS SalesQuartile\nFROM SalesData; <\/pre>\n\n\n\n<p class=\"has-large-font-size\"><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>PRODUCT<\/td><td>REGION<\/td><td>SALES<\/td><td>SALESQUARTILE<\/td><\/tr><tr><td>Product B<\/td><td>East<\/td><td>150<\/td><td>1<\/td><\/tr><tr><td>Product A<\/td><td>East<\/td><td>100<\/td><td>1<\/td><\/tr><tr><td>Product D<\/td><td>East<\/td><td>75<\/td><td>2<\/td><\/tr><tr><td>Product C<\/td><td>East<\/td><td>50<\/td><td>2<\/td><\/tr><tr><td>Product A<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product B<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product C<\/td><td>West<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>West<\/td><td>75<\/td><td>2<\/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-large-font-size\"><strong>Descrizione dettagliata della query<\/strong><\/p>\n\n\n\n<p>La query in questione inizia con la costruzione di una Common Table Expression (CTE), <strong>SalesData<\/strong>, progettata per simulare un tipico set di dati di vendita.<\/p>\n\n\n\n<p>Questa CTE comprende i record delle vendite, incluso il nome del prodotto, la regione di vendita e l&#8217;importo totale delle vendite per quel prodotto all&#8217;interno della regione specificata.<\/p>\n\n\n\n<p>Questa configurazione fornisce un set di dati fondamentale che riflette gli scenari comuni affrontati dalle aziende nell&#8217;analisi delle prestazioni di vendita nei diversi mercati.<\/p>\n\n\n\n<p>Dopo la creazione del <strong>SalesData<\/strong> CTE, la query procede applicando la funzione <strong>NTILE(2)<\/strong> all&#8217;interno di una finestra specificata, delineata dalla clausola <strong>OVER<\/strong>.<\/p>\n\n\n\n<p>Questa finestra organizza i dati in partizioni per <strong>Region<\/strong> e quindi ordina i record all&#8217;interno di ciascuna partizione in base alle vendite in ordine decrescente.<\/p>\n\n\n\n<p>La funzione <strong>NTILE(2)<\/strong> divide quindi questi record ordinati in due gruppi, o &#8220;quartili&#8221;, all&#8217;interno di ciascuna regione.<\/p>\n\n\n\n<p>La divisione mira a distribuire equamente i record in gruppi in base ai relativi dati di vendita, facilitando cos\u00ec una chiara distinzione tra prodotti con prestazioni pi\u00f9 elevate e prodotti con prestazioni inferiori all&#8217;interno di ciascuna regione.<\/p>\n\n\n\n<p>Il risultato di questa query \u00e8 una visualizzazione perfezionata dei dati di vendita, in cui ogni record non \u00e8 solo associato ai suoi attributi originali (Prodotto, Regione, Vendite) ma anche annotato con un valore <strong>SalesQuartile<\/strong>.<\/p>\n\n\n\n<p>Questo valore indica se il prodotto rientra nella met\u00e0 superiore (<strong>quartile 1<\/strong>) o nella met\u00e0 inferiore (<strong>quartile 2<\/strong>) dell&#8217;andamento delle vendite all&#8217;interno della sua regione, in base alla categorizzazione <strong>NTILE<\/strong>.<\/p>\n\n\n\n<p>Ovviamente la suddivsione in <strong>NTILE<\/strong> pu\u00f2 variare, a seconda dei valori in campo e delle politiche seguite dall&#8217;azienda e, ad esempio, mantenendo l&#8217;esempio di campionatura dei dati, se si esegue la stessa query con <strong>NTILE(3)<\/strong> si ottengono tre categorie:<\/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>PRODUCT<\/td><td>REGION<\/td><td>SALES<\/td><td>SALESQUARTILE<\/td><\/tr><tr><td>Product B<\/td><td>East<\/td><td>150<\/td><td>1<\/td><\/tr><tr><td>Product A<\/td><td>East<\/td><td>100<\/td><td>1<\/td><\/tr><tr><td>Product D<\/td><td>East<\/td><td>75<\/td><td>2<\/td><\/tr><tr><td>Product C<\/td><td>East<\/td><td>50<\/td><td>3<\/td><\/tr><tr><td>Product A<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product B<\/td><td>West<\/td><td>200<\/td><td>1<\/td><\/tr><tr><td>Product C<\/td><td>West<\/td><td>100<\/td><td>2<\/td><\/tr><tr><td>Product D<\/td><td>West<\/td><td>75<\/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>Questa segmentazione fornisce approfondimenti critici sul panorama delle vendite di ciascuna regione, evidenziando quali prodotti sono leader del mercato e quali potrebbero richiedere ulteriore supporto o riallineamento strategico.<\/p>\n\n\n\n<p>Sfruttando la funzione <strong>NTILE()<\/strong> in questo modo, le aziende possono sfruttare una comprensione pi\u00f9 granulare della distribuzione delle vendite nelle diverse regioni.<\/p>\n\n\n\n<p>Questa conoscenza \u00e8 preziosa per la pianificazione strategica, poich\u00e9 consente alle aziende di personalizzare le proprie strategie di marketing, produzione e inventario per allinearle meglio alle tendenze delle prestazioni di vendita regionali.<\/p>\n\n\n\n<p>Inoltre, questo approccio analitico sottolinea la versatilit\u00e0 e la potenza delle funzioni OLAP in SQL per iSeries per condurre sofisticate analisi dei dati, in particolare in scenari che richiedono una classificazione dettagliata e la segmentazione dei dati, come la valutazione delle prestazioni di vendita su pi\u00f9 dimensioni.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Conclusioni<\/strong><\/p>\n\n\n\n<p>In conclusione, l\u2019esplorazione di iSeries SQL e delle <strong>ranking functions OLAP<\/strong> &#8211; <strong>ROW_NUMBER(), RANK(), DENSE_RANK() e NTILE(n) <\/strong>&#8211; rivela la profonda capacit\u00e0 di questi strumenti nel migliorare l\u2019analisi dei dati e i processi decisionali all\u2019interno di un organizzazione.<\/p>\n\n\n\n<p>Utilizzando in modo efficace queste funzioni, le aziende possono ottenere una comprensione pi\u00f9 articolata dei propri dati, consentendo loro di identificare tendenze, segmentare i dati in categorie significative e classificare gli elementi all&#8217;interno di contesti specifici.<\/p>\n\n\n\n<p>Che si tratti di assegnare un rango univoco a ciascuna riga con <strong>ROW_NUMBER()<\/strong>, di comprendere la posizione relativa con <strong>RANK()<\/strong> e <strong>DENSE_RANK()<\/strong> o di classificare i dati in quantili con <strong>NTILE(n)<\/strong>, queste funzioni offrono un set versatile di strumenti per gestire set di dati complessi.<\/p>\n\n\n\n<p>Questa abilit\u00e0 tecnica non solo semplifica il processo analitico, ma fornisce anche informazioni utili che sono fondamentali per la pianificazione strategica e l&#8217;analisi competitiva.<\/p>\n\n\n\n<p>Mentre continuiamo ad approfondire le profondit\u00e0 di SQL sui sistemi iSeries, diventa evidente che padroneggiare queste funzioni OLAP \u00e8 essenziale per qualsiasi professionista che desideri sfruttare i dati per un processo decisionale informato, evidenziando il valore indispensabile di SQL nel moderno panorama basato sui dati.<\/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.<\/p>\n\n\n\n<p>\u00c8 sempre buona norma fare riferimento alla documentazione ufficiale IBM per avere informazioni pi\u00f9 precise e dettagliate.<\/p>\n\n\n\n<p class=\"has-larger-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><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\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><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\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><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\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><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nel campo dell&#8217;analisi e gestione dei database sui sistemi IBM iSeries, le funzioni OLAP (Online analytical processing) si distinguono come strumenti potenti per l&#8217;interrogazione e la trasformazione dei dati. Tra queste, le funzioni di ranking forniscono capacit\u00e0 indispensabili per eseguire&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4569,"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":[275,253],"tags":[255,256,257,259,46],"class_list":["post-4629","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artificial-intelligence","category-data-science","tag-data-science","tag-business-intelligence","tag-olap-online-analytical-processing","tag-ranking-functions","tag-sql"],"_links":{"self":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4629","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/comments?post=4629"}],"version-history":[{"count":2,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4629\/revisions"}],"predecessor-version":[{"id":4634,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4629\/revisions\/4634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media\/4569"}],"wp:attachment":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media?parent=4629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/categories?post=4629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/tags?post=4629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}