PDA

Vollständige Version anzeigen : Pivot-Tabellen in Berichten


sisko
23.01.2008, 11:58
Hallo. Ich habe ein Problem.

Ich habe eine Pivot-Abfrage, die immer unterscheidliche Zahlen von Spalten liefert. Diese Spalten heißen auch immer anders.
Als Zeilen gibts immer das Datum.

Wie bekomme ich das jetzt hin, dass ich daraus einen Bericht erstelle, der auf dieser Abfrage beruht. Erstelle ich einen Bericht, dann sind da immer die Felder fest definiert und ist die Spalte beim nächsten Aufruf nicht dabei, dann wird sie leer angezeigt. Die soll aber da nicht rein.
Bei 10 Spalten, will ich alle 10 sehen mit deren Bezeichnung. Hab ich nur 4 Spalten, will ich auch nur diese 4 sehen mit deren Bezeichnung.

Wer kann mir da helfen?

Viele Grüße
Sisko

Louisleon
26.01.2008, 10:22
Hallo Sisko,

scheinbar geht es mir wie vielen anderen, ich verstehe Dein Problem nicht wirklich!
Wenn Du deinen Bericht dynamisch in Abhängigkeit der Felder in der Abfrage erstellst, sollte man das schon hinbekommen.
Vorraussetzung dafür sind die entsprechenden VBA-Kenntnisse.

Gruß

LL

sisko
28.01.2008, 08:49
Du meinst also, es geht nur über Code und dann muss man sich die überschriften also zusammencoden und dann anzeigen?

Ich dachte, das würde auch einfacher gehen.

Louisleon
28.01.2008, 22:21
Hallo,
zeig mal die Pivot-Abfrage.
Ansonsten schau mal unter "fixierte Spaltenüberschriften" vielleicht hilft das schon.

Gruß

LL

sisko
29.01.2008, 08:58
Also ... es handelt sich um folgendes:

Es gibt eine Tabelle _SPMI_M02_F08_STENachweis. Diese sieht etwa so aus:

Datum machine machinedescription BSTESumme
20070701 100020000000010 Dampf ECS 3 9
20070701 100020000000009 Dampf ECS 2 18
20070701 100020000000008 Dampf ECS 1 27
20070701 100020000000011 Dampf ECS 4 9
20070702 100020000000007 Plasma Sterrad200 2
...
...
..

Der Name unter machinedescription soll in der Abfrage jeweils der Spaltenkopf sein. Aber es sind ja im Prinzip unendlich viele verschiedene möglich. In der Praxis werden es etwa 5-15 sein.

Das ist der Code für die Abfrage:


TRANSFORM Sum([_SPMI_M02_F08_STENachweis].BSTESumme) AS SummevonBSTESumme
SELECT [_SPMI_M02_F08_STENachweis].Datum, Sum([_SPMI_M02_F08_STENachweis].BSTESumme) AS BSTEGesamt
FROM _SPMI_M02_F08_STENachweis
GROUP BY [_SPMI_M02_F08_STENachweis].Datum
PIVOT [_SPMI_M02_F08_STENachweis].machinedescription;



und so sieht das dann am Ende aus:

Datum BSTEGesamt Dampf A60 Dampf ECS 1 Dampf ECS 2 Dampf ECS 3 Dampf ECS 4 Gas FA95 Plasma Sterrad200
20070701 63 27 18 9 9
20070702 173,3 1 54 62,3 9 45 2

Das Problem ist jetzt, dass der Bericht auf dieser Abfrage hier basieren soll, was natürlich immer andere Spaltenköpfe beinhaltet.


Meine bisherige Lösung:


Private Sub Report_Open(Cancel As Integer)
Dim sSQL As String
Dim R1 As DAO.RecordSet
Dim Counter As Long
Dim CounterMax As Long
Dim Steribezeichnung As String

On Error Resume Next

'Nummer für Steri in Überschriften initialisieren
Sterilisatornummer = 0

'Das ist die Pivot-Abfrage
Me.RecordSource = "_SPMI_M02_F08_Bericht"

'Schleife, die Controlsource anpasst
sSQL = ""
sSQL = "Select distinct machinedescription, machine from _SPMI_M02_F08_STENachweis order by machine"
Set R1 = CurrentDb.OpenRecordset(sSQL, dbOpenDynaset)

Counter = 0

If Not R1.EOF Then
R1.MoveLast
CounterMax = R1.RecordCount
R1.MoveFirst
End If

If CounterMax > 0 Then

While Not R1.EOF

Steribezeichnung = R1!machinedescription
Counter = Counter + 1

Select Case Counter

Case 1
Me.Steri1.ControlSource = Steribezeichnung
Me.Steri1gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 2
Me.Steri2.ControlSource = Steribezeichnung
Me.Steri2gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 3
Me.Steri3.ControlSource = Steribezeichnung
Me.Steri3gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 4
Me.Steri4.ControlSource = Steribezeichnung
Me.Steri4gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 5
Me.Steri5.ControlSource = Steribezeichnung
Me.Steri5gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 6
Me.Steri6.ControlSource = Steribezeichnung
Me.Steri6gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 7
Me.Steri7.ControlSource = Steribezeichnung
Me.Steri7gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"
Case 8
Me.Steri8.ControlSource = Steribezeichnung
Me.Steri8gesamt.ControlSource = "=""" & CStr(DSum("BSTESumme", "_SPMI_M02_F08_STENachweis", "machinedescription = '" & Steribezeichnung & "'")) & """"

End Select

R1.MoveNext

Wend

End If


End Sub


Was besseres ist mir da nicht eingefallen. Somit hab ich jetzt 2 Berichte. Einen im Hochformat mit 8 möglichen Spalten + Datum und dann das ganze noch mal als Querformat mit 16 + Datum.
Alles was über 16 hinaus geht wird dann nur in der Endsumme berücksichtigt. Haben noch keine A2-Drucker :)

Falls noch jemand ne Idee hat, dann wäre das echt super. Ansonsten läuft das ja so auch.

Vielen Dank

Anne Berg
29.01.2008, 12:03
Hallo,

such mal nach dem Stichwort "CrossTabReport". Da findest du eine etwas flexiblere Lösung für dein Problem.