Pivot Tabellen verknüpfen

Hallo zusammen,

da mir das WWW nicht weiterhelfen konnte und ich auch ansonsten nirgends Rat finden konnte, hege ich die Hoffnung, dass vllt unter euch jmd ist, der mir weiterhelfen kann?!

Foglendes Problem:
Ich greife per Excel 2007 auf den MS SQL Server zu und baue mir in 3,4,5 oder mehr Tabellenblättern unterschiedliche Pivot Tabellen. In Blatt1 z.B. Umsatz pro Lieferant, in Blatt2 z.B. Bestellmenge je Lieferant und Standort, etc.

Alle Pivot Tabellen haben identische Berichtsfilter z.B. „Geschäftsjahr“ und „Lieferant“.

Gibt es eine Möglichkeit, dass die Auswahl in Blatt1 z.B. Geschäftsjahr: 2009 und Lieferant: Fa. Müller von allen Pivot Tabellen in den Blättern 2-n im Berichtsfilter übernommen wird?!

GAAAAAANZ HERZLICHEN DANK für jede Hilfe, jeden Hinweis oder Vorschlag.

Es grüßt,
der Angus :o)

Hallo Angus,

Gibt es eine Möglichkeit, dass die Auswahl in Blatt1 z.B.
Geschäftsjahr: 2009 und Lieferant: Fa. Müller von allen Pivot
Tabellen in den Blättern 2-n im Berichtsfilter übernommen
wird?!

leider gibt es dafür keine einfache Lösung. Man kann zwar per VBA die Filter der einzelnen Pivottabellen setzen, aber damit habe ich in der Vergangenheit nicht so gute Erfahrungen gesammelt.

Was willste damit überhaupt machen? Soll irgendein User damit nur komfortabler arbeiten können, oder willst du automatisierte Reports oder dergleichen erstellen?

Für den User würde ich alle Daten in eine einzige Pivottabelle packen. Dann braucht der nicht mal mehr zwischen einzelnen Sheets wechseln. Durch kluge Formatierung bleibt das ganze auch übersichtlich. Einziges Problem: Es gibt Limits bei Pivottabellen.
Wenn ich dagegen automatisierte Reports erstellen möchte, dann importiere ich immer nur die Daten die ich brauche und aktualisiere anschließend die Pivottabellen.

Die Frage ist halt, was du im Endeffekt bezweckst?

MfG
Stephan

Hallo Stephan,

vielen Dank für die schnelle Antwort.

Im Grunde möchte ich eine Art Lieferanten-Dashboard kreieren. Auf 3-5 DIN A4 Seiten sollen alle wichtigen Kennzahlen zusammengefasst werden und grafisch aufbereitet dargestellt werden. Auf Grund der riesigen Datenmenge und den unterschiedlichen Attributen, kann ich nicht alles in einer Pivot Tabelle zusammenfassen.

Aber vermutlich hast du recht und es ist besser den User später Lieferant, Geschäftsjahr etc. 2-3 eingeben zu lassen, bevor ich mit instabilen VBAs arbeite.

Schönen Abend noch.

Es grüßt
der Angus :o)

OT Nachfrage

Einziges Problem: Es gibt Limits bei Pivottabellen.

Hallo Stephan,

welche Limits gibt es da?

danke ^ Gruß
Reinhard

Hallo Reinhard,

welche Limits gibt es da?

ich kämpfe meistens mit der Anzahl bei den Spalten- und Zeilenfeldern. Ich erstelle oft riesige Pivottabellen, aber so wirklich bin ich bei den Limits auch noch nicht durchgestiegen. Vieles scheint aber vom verfügbaren Speicher abzuhängen.

Mehr Infos gibt es hier: http://www.xlam.ch/xlimits/pivot.htm#%C3%9Cbersicht%…

MfG
Stephan

welche Limits gibt es da?

Mehr Infos gibt es hier:
http://www.xlam.ch/xlimits/pivot.htm#%C3%9Cbersicht%…

Hallo Stephan,

*sehr grins* ja, ich kenne xlam.ch, finde die Seite auch klasse, aber ist mir viel zu viel da alles zu lesen :smile:)

Vielleicht liest ja Thomas hier mit der kann dem Anfrager vielleicht helfen.
Ich nicht, keinerlei Ahnung von Pivots.

Ich würd, was soll ich auch sonst tun, das Problem mit Vba lösen.
Aber nun liegen da wohl schon Pivots vor. Da kann ich nix machen, helf du dem Anfrager , oder sonstwer.

Meine Nachfrage war nur aus Interesse. Also ob da die Grenze bei k.A. 16,256,16000, 32000 usw, liegt.

Gruß
Reinhard

Hallo Reinhard,

ich nehme auch gern ein VBA *dackelblick*

Da ich allerdings in diesen Sachen nicht so versiert bin, habe ich mir schon etwas aus dem Netz gesucht. Dies hilft jedoch nur bei Pivots, die auf einem Arbeitsblatt sind.

Dies habe ich im Netz finden können (Verfasser: Thomas Ramel - dank dir, Thomas!):

Option Explicit

Private Sub Worksheet_Calculate()
On Error GoTo ErrorHandler
Application.EnableEvents = False
If Range(„PT_Kunde“).Value Me.PivotTables(„PivotTable1“).PivotFields(„Kunde“).CurrentPage Then
Range(„PT_Kunde“).Value = Me.PivotTables(„PivotTable1“).PivotFields(„Kunde“).CurrentPage
Me.PivotTables(„PivotTable2“).PivotFields(„Kunde“).CurrentPage = Range(„PT_Kunde“).Value
ElseIf Range(„PT_Kosten“).Value Me.PivotTables(„PivotTable1“).PivotFields(„Kosten/Stunden“).CurrentPage Then
Range(„PT_Kosten“).Value = Me.PivotTables(„PivotTable1“).PivotFields(„Kosten/Stunden“).CurrentPage
Me.PivotTables(„PivotTable2“).PivotFields(„Kosten/Stunden“).CurrentPage = Range(„PT_Kosten“).Value
Else
Range(„PT_Kunde“).Value = Me.PivotTables(„PivotTable2“).PivotFields(„Kunde“).CurrentPage
Me.PivotTables(„PivotTable1“).PivotFields(„Kunde“).CurrentPage = Range(„PT_Kunde“).Value
Range(„PT_Kosten“).Value = Me.PivotTables(„PivotTable2“).PivotFields(„Kosten/Stunden“).CurrentPage
Me.PivotTables(„PivotTable1“).PivotFields(„Kosten/Stunden“).CurrentPage = Range(„PT_Kosten“).Value
End If
ErrorHandler:
Application.EnableEvents = True
End Sub

Allerdings habe ich keinen Plan, wie ich dies auf ein VBA umschreiben kann, das über mehrere Blätter geht.

Besten Dank!

Es grüßt,
der Angus :o)

Grüezi Angus

ich nehme auch gern ein VBA *dackelblick*

Hier kann auch nichts anderes wirklich helfen… :wink:

Da ich allerdings in diesen Sachen nicht so versiert bin, habe
ich mir schon etwas aus dem Netz gesucht. Dies hilft jedoch
nur bei Pivots, die auf einem Arbeitsblatt sind.

Dies habe ich im Netz finden können (Verfasser: Thomas Ramel -
dank dir, Thomas!):

Ach, ein ‚alter Schinken‘ :wink:
Schön, dass der auch heute noch hilft :smile:

Prinzipiell musst Du diesen umschreiben auf alle Tabellenlätter und diese in einer Schleife durchlaufen und dort dann alle PT’s in den Blättern aktualisieren und so vergleichen.

Das kannst Du mit dem

Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)

in ‚Diese Arbeitsmappe‘ tun.

Dieses Ereignis feuert bei jedem Update einer PT (egal welcher) und diese kannst Du dann als Basis nehmen um alle anderen PTs ebenfalls zu aktualisieren und den Berichtsfilter zu aktualisieren.

WEnns mir recht ist, gibts da auch bereits etwas im Netz…

…aha hier habe ich es gefunden und auch gleich angepasst :smile:

Kopiere die folgenden Zeilen ins Modul ‚Diese Arbeitsmappe‘ und ändere dann mal ein Seitenfeld einer beliebigen PT.

Private Sub Workbook\_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
 On Error GoTo ErrorHandler
 Application.EnableEvents = False
 For Each wS In ThisWorkbook.Worksheets
 For Each pt In wS.PivotTables
 If pt.Name Target.Name Then
 For Each pf In Target.PageFields
 pt.PivotFields(pf.Value).CurrentPage = \_
 Target.PivotFields(pf.Value).CurrentPage.Value
 Next pf
 End If
 Next pt
 Next wS

ResumePoint:
 Application.EnableEvents = True
 Exit Sub

ErrorHandler:
 If Err.Number = 1004 Then
 pt.TableRange1.Select
 End If
 Resume ResumePoint:
End Sub

Bei jeder Veränderung in einer PT springt der Code an und setzt alle Bereichtsfilter so wie sie in der aktuellen PT gesetzt sind.

Als kleine Erweiterung markiert er eine PT falls bei deren Aktualisierung ein Fehler auftreten sollte, z.B. wenn sie keine Seitenfelder hat oder wenn sie andere PTs überlappen sollte.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Servus Thomas,

du glaubst gar nicht, wie sehr ich mich freue, dass es dazu ne Lösung gibt! Vielen, vielen Dank.

Es gibt allerdings den Laufzeitfehler 1004 „Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.“

Besten Dank noch mal und schöne Grüße in die Schweiz.
der Angus :o)

Grüezi Angus

du glaubst gar nicht, wie sehr ich mich freue, dass es dazu ne
Lösung gibt! Vielen, vielen Dank.

Doch, das glaube ich dir gerne und es freut mich, wenn diese Zeilen dir weiterhelfen.

Es gibt allerdings den Laufzeitfehler 1004 „Die Select-Methode
des Range-Objektes konnte nicht ausgeführt werden.“

Ja das liegt an der Auswahl der PT die den Fehler auslöst - hier hatte ich nicht an die Mappen-umfassende Lösung angepasst; sorry.

Versuche im letzten Teil doch mal anstelle von:

pt.TableRange1.Select

folgendes:

Applicaton.Goto pt.TableRange1

Wenn das nicht hilft muss ich nochmals genauer reinsehen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Servus Thomas,

also, bei mir steht nun im Modul „Diese Arbeitsmappe“ exakt folgendes:

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
On Error GoTo ErrorHandler
Application.EnableEvents = False
For Each wS In ThisWorkbook.Worksheets
For Each pt In wS.PivotTables
If pt.Name Target.Name Then
For Each pf In Target.PageFields
pt.PivotFields(pf.Value).CurrentPage = _
Target.PivotFields(pf.Value).CurrentPage.Value
Next pf
End If
Next pt
Next wS

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
If Err.Number = 1004 Then
Application.Goto pt.TableRange1
End If
Resume ResumePoint:
End Sub

Einmal hatte ich einen Fehlerhinweis bzgl. eines Objekts, aber den konnte ich nicht replizieren :o(

Jetzt gibts zwar keine Fehlermeldung mehr, aber auch keinerlei Veränderungen in den Pivots :o(

GANZ HERZLICHEN DANK für deine Hilfe!!! Hoffe, ich mache dir net zuviel Arbeit ?!

Grüezi Angus

Hmmm, ja das könnte an der Deaktivierung der Events liegen.
Ich habe die Fehlerbehandlung nochmals etwas angepasst und bitte dich die folgenden Zeilen zu verwenden:

Private Sub Workbook\_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
 On Error GoTo ErrorHandler
 Application.EnableEvents = False
 For Each wS In ThisWorkbook.Worksheets
 For Each pt In wS.PivotTables
 If pt.Name Target.Name Then
 For Each pf In Target.PageFields
 pt.PivotFields(pf.Value).CurrentPage = \_
 Target.PivotFields(pf.Value).CurrentPage.Value
 Next pf
 End If
 Next pt
 Next wS

ResumePoint:
 Application.EnableEvents = True
 Exit Sub

ErrorHandler:
 Application.Goto pt.TableRange1
 MsgBox "Diese PT hat einen Fehler verursacht"
 Resume ResumePoint:
End Sub

Speichere und schliesse dann die Mappe und beende auch Excel.
Nach einem Neustart sollte das Ganze dann klappen.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,

die Fehlermeldung „Diese PT hat einen Fehler verursacht“ funktioniert. Allerdings poppt die Msg jetzt immer auf, ohne dass sich die Filter der Pivots ändern.

Beste Grüße in die Schweiz
der Angus :o)

Grüezi Angus

die Fehlermeldung „Diese PT hat einen Fehler verursacht“
funktioniert. Allerdings poppt die Msg jetzt immer auf, ohne
dass sich die Filter der Pivots ändern.

Ja, deswegen ist/war diese Fehlerbehandlung ja auch eingebaut worden… :wink:

Sas dürfte heissen, dass Du mehrere PTs nebeneinander liegen hast, von denen die eine die weiteren überlagen wird, wenn der Filter gesetzt werden könnte…

Oder aber Du hast Werte in Zellen neben oder unter der betreffenden PT (die wird übrigens markiert, Du weisst also welche es ist), die durch das Erweitern überschrieben würden.

Was passiert denn, wenn Du (mal ohne den Code laufen zu lassen, den kannst Du im VBA-Editor auskommentieren) die Filter dieser einen PT so setzt wie Du den anderen gesetzt hast?
Gibt es da dann Meldungen - wenn ja welche genau?

Ev. macht es inzwischen Sinn, wenn Du deine Mappe auf einen WebSpace hochlädst und den Link hier nennst, damit wir uns ein Bild der wirklichen Verhältnisse machen können.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Servus Thomas,

jetzt habe ich gerade mal ne Test-Datei für euch erstellt, darin funktioniert das VBA einwandfrei.

Kann es damit zusammenhängen, dass die Daten der Pivot Tabelle nicht aus dem gleichen Excel Sheet sondern aus einem Olap-Cube (MS SQL Server) kommen?

Dank dir!!!

Es grüßt
der Angus :o)

Grüezi Angus

jetzt habe ich gerade mal ne Test-Datei für euch erstellt,
darin funktioniert das VBA einwandfrei.

Na, das freut mich doch… :smile:

Kann es damit zusammenhängen, dass die Daten der Pivot Tabelle
nicht aus dem gleichen Excel Sheet sondern aus einem Olap-Cube
(MS SQL Server) kommen?

Hmmm, ja das kann durchaus sein, denn bei OLAP Cubes gibt es da einige Unterschiege - Du Schlitzohr hast das halt leider unterschlagen… :wink:

Wie werden die Daten in Excel denn abgelegt?
Greift jede PT selbst direkt auf den Cube zu oder gibt es einen gemeinsamen Pivot-Cache aus dem die PTs sich dann die Werte holen?

Diese Tatsache erweitert die Möglichkeit der Ursachen und Einschränkungen nochmals starkt.
Schau mal ob Du in der Online-Hilfe oder online noch weitere Infos zu Cubes in Verbindung mit PTs findest.

Eine mögliche Anlaufstelle ist hier:

http://etl-tools.info/en/bi/excel_pivot_tables.htm


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Servus Thomas,

Kann es damit zusammenhängen, dass die Daten der Pivot Tabelle
nicht aus dem gleichen Excel Sheet sondern aus einem Olap-Cube
(MS SQL Server) kommen?

Hmmm, ja das kann durchaus sein, denn bei OLAP Cubes gibt es
da einige Unterschiege - Du Schlitzohr hast das halt leider
unterschlagen… :wink:

hehehe… nicht ganz - stand in meinem ersten Beitrag :o) aber hast schon Recht, hätte ich nochmal einfließen lassen sollen… Sorry!!!

Wie werden die Daten in Excel denn abgelegt?
Greift jede PT selbst direkt auf den Cube zu oder gibt es
einen gemeinsamen Pivot-Cache aus dem die PTs sich dann die
Werte holen?

Nee, jede PT greift direkt auf den Cube zu.

Eine mögliche Anlaufstelle ist hier:

http://etl-tools.info/en/bi/excel_pivot_tables.htm

Leider haben die Herren von MS bei der Gestaltung von Excel2007 das Feature „Create Olap Cube“ als nicht mehr notwendig deklariert :o(

Sag mir Bescheid, wenn ich dir Kopf zerbrechen bereit - hab noch einen großen Vorrat an Aspirin ;o)

Beste Grüße
der Angus :o)

Grüezi Angus

Kann es damit zusammenhängen, dass die Daten der Pivot Tabelle
nicht aus dem gleichen Excel Sheet sondern aus einem Olap-Cube
(MS SQL Server) kommen?

Hmmm, ja das kann durchaus sein, denn bei OLAP Cubes gibt es
da einige Unterschiege - Du Schlitzohr hast das halt leider
unterschlagen… :wink:

hehehe… nicht ganz - stand in meinem ersten Beitrag :o)
aber hast schon Recht, hätte ich nochmal einfließen lassen
sollen… Sorry!!!

Ach soooo, ich bin halt erst später eingestiegen… :wink:

Nein, Spass beiseite - auf einen SQL-WServer zugreifen kann man auch direkt aus Excel heraus mit MS-Query und ohne OLAP-Cube.
Die Cubes sind etwas ganz Spezielles und nicht viele haben damit zu tun - in aller Regel.

Wie werden die Daten in Excel denn abgelegt?
Greift jede PT selbst direkt auf den Cube zu oder gibt es
einen gemeinsamen Pivot-Cache aus dem die PTs sich dann die
Werte holen?

Nee, jede PT greift direkt auf den Cube zu.

Hmmm, warum schränkst Du dann nicht gleich den Inhalt des Cubes oder die Abfrage darauf auf die betreffenden Elemente ein?

Eine mögliche Anlaufstelle ist hier:

http://etl-tools.info/en/bi/excel_pivot_tables.htm

Leider haben die Herren von MS bei der Gestaltung von
Excel2007 das Feature „Create Olap Cube“ als nicht mehr
notwendig deklariert :o(

Na, dann freut dich vielleicht der folgende Link mit einem AddIn:

http://www.codeplex.com/OlapPivotTableExtend

In xl2007 wird immer merh mit den Excel-Services zusammengearbeitet und auch einige Funktionalität dahin ausge- und verlagert.

Vielleicht hilft dir da auch der folgende Link noch weiter:

http://technet.microsoft.com/de-de/library/cc263194…

Sag mir Bescheid, wenn ich dir Kopf zerbrechen bereit - hab
noch einen großen Vorrat an Aspirin ;o)

Die Aspirin nehme ich gerne, aber zwrbochen ist deswegen noch lange nichts - ich lerne auch immer wieder dazu und Übung hält die grauen Zellen in Schwung… :smile:


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -