Domanda Chiarimenti PoweQuery e PowerPivot

maxgallina

Nuovo utente
1 Gennaio 2021
8
3
Office365
0
Ciao a tutti,

la mia situazione è la seguente:
1) DB-2016-2020.xlsx (in PowerQuery importato come "DB")
2) DB-2021.xlsx (in PowerQuery importato come "DB-Actual")
(1 e 2 sono due tabelle uguali come numero di colonne ed intestazioni di colonne.)

3) Titoli.xlsx (in PowerQuery importato come "Titoli")
4) Banca_PTF_Titolare.xlsx (in PowerQuery importato come "Banca_PTF_Titolare)

Ho in PowerQuery poi unito il 1) e il 2) creando una nuova tabella "Totale DB" tramite il comando:
=> Table.Combine({DB, DB_Actual})

Fino a ieri funzionava tutto correttamente, in PowerPivot ho creato i calcoli per le relazioni con 3) e 4) e le nuove colonne e ho creato una dashboard che mi permetteva di visualizzare il tutto in maniera "temporale/storica".

Oggi ho aggiunto un centinaio di righe al DB-2021.xlxs e dopo l'aggiornamento non c'è stato verso di farle "sputare fuori" alle varie Pivot presenti nonostante sia in PowerQuery che in PowerPivot risultino.

Inoltre quando faccio aggiorna, lui per ogni Pivot ricarica tutte le query richiedendo 2 minuti per aggiornare il tutto... è normale? Non credo ahimé.

Suggerimenti sul dove io possa sbagliare?
Chiedo venia ma sono nuovo in questo mondo.
 

Allegati

maxgallina

Nuovo utente
1 Gennaio 2021
8
3
Office365
0
Scusami...

psw: forumexcel
(non riesco ad allegare qui, mi dice che è troppo grande, mah).

Per quanto riguarda la visualizzazione dei nuovi record, ho capito che era solo un problema di formattazione.
Però quando nella dashboard attivo la macro "AggiornaPivots" tramite il bottone blu "Update Valori", ci mette circa un minuto anche se ho poche righe in questo file di esempio.
Con il database vero e completo ci mette due minuti.

Dove sbaglio?

Grazie della pazienza.
 

maxgallina

Nuovo utente
1 Gennaio 2021
8
3
Office365
0
Certo, nel file ho 10 pivot bidimensionali (che prendono i dati da PowerPivot), e 5 query DB.

Dapprima avevo una macro per caricare tutte le PIVOT al premere di un bottone:

Aggiorna Pivot:
Sub AggiornaPivots()
' ### Ottieni nome pagina iniziale
'oglioinizio = ActiveSheet.Name
' ### Disattivazione degli avvisi e degli aggiornamenti delle pagine durante esecuzione macro
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

' - - - AGGIORNA LE PIVOT - - -
Sub RefreshAllPivotTables()
Dim PT As PivotTable
Dim WS As Worksheet
    For Each WS In ThisWorkbook.Worksheets
        For Each PT In WS.PivotTables
          PT.PivotCache.Refresh
        Next PT
    Next WS
End Sub
Tuttavia questo forzava ad ogni Pivot (10 volte quindi) di ricare tutte le query. Se consideriamo che ogni query carica anche fino a 50.000 righe) si capisce perché ci metteva minuti a concludere il processo.

Allora la soluzione è stata andare sulle query e cliccare col tasto destro --> Proprietà --> despuntare la voce: "Aggiorna la connessione in caso di Aggiorna Tutto".

A questo punto ho cambiato la macro scegliendo quali Query aggiornare e quali no e poi lanciare un "Aggiorna Tutto" per le tabelle pivot. Macro utilizzata

AggiornaPivotsNew:
Sub AggiornaPivotsNew()

Application.ScreenUpdating = False

foglioinizio = ActiveSheet.Name
Sheets("Variabili").Select

' Controllo quali query "refreshare"

If Range("L6").Value Then ActiveWorkbook.Connections("Query - DB").Refresh
If Range("L7").Value Then ActiveWorkbook.Connections("Query - DB_Actual").Refresh
If Range("L8").Value Then ActiveWorkbook.Connections("Query - Titoli").Refresh
If Range("L9").Value Then ActiveWorkbook.Connections("Query - Banca_PTF_Titolare").Refresh

' Query da "refreshare" sempre e cmq

ActiveWorkbook.Connections("Query - TotaleDB").Refresh

' Aggiorna i dati delle PIVOT
ActiveWorkbook.RefreshAll
Sheets(foglioinizio).Select

MsgBox "Aggiornamento effettuato con successo.", vbInformation, "Aggiornamento Database e Pivot"

End Sub

In questa maniera son passato da 2 minuti a 10-20 sec!


Saluti.
 
  • Like
Reactions: Enea and Canapone

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!