2015-07-07 12 views
8

Sto semplicemente pulendo la mia cartella di lavoro e ho utilizzato il seguente codice per consolidare le mie PivotCaches (ne avevo circa 200 prima della pulizia).Condividere PivotCache per le tabelle pivot create con il modello di dati

Sub changeCache() 
Dim ws As Worksheet 
Dim pt As PivotTable 
Dim pc As PivotCache 
Dim first As Boolean 
On Error Resume Next 

    For Each ws In ActiveWorkbook.Worksheets 
     ws.Activate 
     For Each pt In ActiveSheet.PivotTables 

      If first = False Then 
       Set pc = pt.PivotCache 
       first = True 
      End If 

      pt.CacheIndex = pc.Index 

     Next pt 
    Next ws 

End Sub 

questo ha ridotto il mio conteggio PivotCache a 33.

Sub CountCaches() 
    MsgBox ActiveWorkbook.PivotCaches.Count 
End Sub 

Il motivo è 33 e non 1 è perché ho 32 tabelle pivot che sono costruiti con la Data Model.

La mia domanda è: Qualcuno sa come modificare le tabelle pivot create con il modello di dati per utilizzare tutti la stessa PivotCache?

EDIT

La mia domanda è secondario: fare più tabelle pivot tutto costruito su un modello di dati

a) fare riferimento a un unico modello di dati; o

b) hanno ciascuno il proprio modello e quindi 'gonfiare' il file Excel

EDIT2

Su un ulteriore approfondimento, sembra che il modello di dati è condiviso per tabelle pivot che fanno riferimento gli stessi dati. Questo può essere visto in "Connessioni" (trovato nella scheda "Dati" nella barra multifunzione). In teoria, questo non dovrebbe "ingigantire" il file anche se il codice ActiveWorkbook.PivotCaches.Count conta ogni tabella pivot che condivide una connessione e falsamente (?) Indica più cache.

Lascerò comunque la taglia aperta nel caso qualcuno possa fornire una risposta più definitiva.

+2

Controllare le informazioni in questa pagina. Non ho testato per vedere se la cache è costruita allo stesso modo ma potrebbe avvicinarti a una risposta. http://datapigtechnologies.com/blog/index.php/cut-the-size-of-your-pivot-table-workbooks-in-half/ – Lumigraphics

+1

Grazie per il collegamento ma senza fortuna – Chris

risposta

2

Se ho capito bene la tua domanda, devi solo impostare ciascun pc sul primo. Quindi, alla prima passata, date al pc un altro nome come pcfirst, poi Per ogni cache rimanente, impostate pc = pcfirst. Alcune informazioni sulla fonte qui http://www.contextures.com/xlPivot11.html e qui http://www.mrexcel.com/forum/excel-questions/380933-set-multiple-pivot-cache-read-one-cache.html

+1

Grazie per i collegamenti, ma sfortunatamente non rispondono direttamente alla domanda. Contengono alcune ottime informazioni sulla pulizia delle cache pivot, ma sembra che le tabelle pivot create con il modello di dati (ovvero selezionando la casella 'Aggiungi questi dati al modello dati' quando si crea il pivot), non siano costruite attorno a una cache pivot – Chris

1

Non sono ancora molto abituato al modello di dati e non posso fornire spiegazioni senza dubbio a riguardo.

Ma ho usato il codice per pulire uno dei sistema di reporting su cui stavo lavorando, che potrebbe aiutare a ottenere meno PivotCaches:

Sub Caches_Matches() 
Dim Ws1 As Worksheet, _ 
    Pt1 As PivotTable, _ 
    Ws2 As Worksheet, _ 
    Pt2 As PivotTable, _ 
    PcNb As Integer 

PcNb = ActiveWorkbook.PivotCaches.Count 
MsgBox "PivotCaches.Count = " & PcNb, vbInformation + vbOKOnly, "Before update" 

On Error Resume Next 

    For Each Ws1 In ActiveWorkbook.Worksheets 
     For Each Pt1 In Ws1.PivotTables 
      'fix one pt, loop all of them and set same cache if same source 
      For Each Ws2 In ActiveWorkbook.Worksheets 
       For Each Pt2 In Ws2.PivotTables 
        If Pt1.SourceData <> Pt2.SourceData Or Pt1.PivotCache = Pt2.PivotCache Or Pt1.Name = Pt2.Name Then 
        Else 
         Pt2.CacheIndex = Pt1.PivotCache.Index 
        End If 
       Next Pt2 
      Next Ws2 
     Next Pt1 
    Next Ws1 

MsgBox "PivotCaches.Count = " & ActiveWorkbook.PivotCaches.Count & Chr(10) & _ 
     "Before update = " & PcNb, vbInformation + vbOKOnly, "After update" 
End Sub 
+0

Grazie per la risposta. Sfortunatamente il tuo codice produce lo stesso risultato di quello del mio codice pubblicato nella domanda originale. Le cache multiple vengono ancora segnalate per le tabelle pivot create con il modello dati. – Chris

+0

PivotCaches.Count = 33 Prima dell'aggiornamento = 33 – Chris

+0

Speravo, ma non ho trovato molto sull'argomento con cui lavorare, spero che troverai un modo! – R3uK

Problemi correlati