Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Maximize ROI with Qlik Professional Services – Expert Guidance, Faster Results: Explore Qlik Services
cancel
Showing results for 
Search instead for 
Did you mean: 
Mamuka
Contributor II
Contributor II

Problema con la clusterizzazione dinamica

Ciao a tutti, sto cercando di realizzare un caricamento dinamico dei dati per la tabella SOCIETA. La situazione è la seguente:

  • La tabella SOCIETA contiene i dati di vari clienti, i quali possono variare nel tempo.
  • Ogni cliente ha una cartella chiamata extra, che contiene un file Excel di configurazione (config) dal quale devo estrarre i cluster.

SOCIETA---Cliente1---Extra---congif.xlsx

               ----Cliente2---Extra---congif.xlsx

 

il file excel è strutturato in questo modo: 

Cliente NomeCluster CampoRiferimento GiorniDa GiorniA Descrizione Ordinamento
cliente1 Cluster1 [Giorni lavorativi] 0 2 2 gg 0
cliente1 Cluster1 [Giorni lavorativi] 3 3 3 gg 1
cliente1 Cluster2 [Giorni lavorativi] 4 4 4 gg 2
cliente1 Cluster2 [Giorni lavorativi] 5 5 5 gg 3

 

L'ETL che sto creando deve estrarre i dati per ogni nome cluster e clusterizzare questi dati, salvandoli poi in un QVD separato per ogni cluster, contenente solo i dati relativi a quel cluster.

Il Problema

Riesco a generare correttamente i QVD per ciascun cluster: per ogni cluster viene creato un QVD con i dati corretti. Tuttavia, quando importo questi QVD nel front-end, la clusterizzazione non funziona correttamente.

In particolare:

  • Quando provo a usare la dimensione e la misura relativa alla descrizione del cluster, i valori vengono ripetuti per tutte le descrizioni presenti, invece di raggrupparsi come mi aspetterei.
  • Il match per la clusterizzazione viene fatto sulla base di ciò che è contenuto nella colonna CampoRiferimento, che contiene il nome della colonna nella tabella dei fatti con cui deve fare il match.

Credo che il problema sia legato proprio al modo in cui sto gestendo il CampoRiferimento, ma non riesco a capire esattamente cosa stia causando questo comportamento.

Qualcuno di voi ha avuto un'esperienza simile o potrebbe darmi qualche indicazione su come risolvere questo problema? Vi ringrazio in anticipo per qualsiasi suggerimento o aiuto.

Di seguito, allego il codice della parte interessata.

Di seguito il codice dell'area interessata.

SET vRootDirectory = 'lib://SOCIETA/';
// Fase ETL1: Ricaricamento e concatenazione dei QVD da ETL0 per ogni cliente
FOR EACH vClientFolder IN DirList('lib://SOCIETA/*')
 
    LET vClientName = SubField('$(vClientFolder)', '/', -1);
    LET vConfigPath = '$(vClientFolder)/Extra/Config_'&Text(SubField('$(vClientName)', '/', -1))&'.xlsx';
 
    // Caricamento della tabella ClusterCliente dal file di configurazione
    ClusterCliente:
    LOAD 
        [Cliente],
        [NomeCluster],
        [CampoRiferimento],
        [GiorniDa],
        [GiorniA],
        [Descrizione],
        [Ordinamento]
    FROM [$(vConfigPath)]
    (ooxml, embedded labels, table is Cluster);
 
    LET vNumRigheClusterCliente = NoOfRows('ClusterCliente');
 
  FOR EACH vClusterNome IN FieldValueList('NomeCluster') // Iterazione sui valori univoci di 'NomeCluster'
 
    // Filtro sui dati di cluster per ottenere solo quelli del cluster corrente
    ClusterFiltrato:
    NOCONCATENATE LOAD 
        [Cliente] AS [Cliente_$(vClusterNome)],
        [NomeCluster] AS [NomeCluster_$(vClusterNome)],
        [CampoRiferimento] AS [CampoRiferimento_$(vClusterNome)],
        [GiorniDa] AS [GiorniDa_$(vClusterNome)],
        [GiorniA] AS [GiorniA_$(vClusterNome)],
        [Descrizione] AS [Descrizione_$(vClusterNome)],
        [Ordinamento] AS [Ordinamento_$(vClusterNome)]
    RESIDENT ClusterCliente
    WHERE [NomeCluster] = '$(vClusterNome)';
    
    LET vCampoRiferimento = FieldValue('CampoRiferimento', 1); // Recupera il primo valore del campo 'CampoRiferimento'
      
       IF IsNull($(vCampoRiferimento)) THEN  // Assicurati che il CampoRiferimento non sia nullo o vuoto
 
      ELSE
            
Left Join(Pratiche)
            
            // Applica l'IntervalMatch sul CampoRiferimento
            IntervalMatch([$(vCampoRiferimento)])
            LOAD
                [GiorniDa_$(vClusterNome)],
                [GiorniA_$(vClusterNome)]
            RESIDENT ClusterFiltrato;
 
      ENDIF
        
          // Salva ogni cluster in un QVD
          LET vOutputPathClusterQVD = '$(vClientFolder)/ETL1/Cluster_' & '$(vClusterNome)' & '_' & Text(SubField('$(vClientName)', '/', -1)) & '.qvd';
          STORE ClusterFiltrato INTO [$(vOutputPathClusterQVD)] (qvd);
 
    // Elimina la tabella temporanea
    DROP TABLE ClusterFiltrato;
 
NEXT
 
DROP TABLE ClusterCliente;
 
NEXT
Labels (5)
0 Replies