PDA

Vollständige Version anzeigen : Ins Diagramm alle Monate!


SwenATwork
21.01.2008, 11:53
Hallo an alle,

ich habe meine Bestellungen pro Monat in ein Bericht gesteckt! siehe Datei!

Ich möchte gerne aber alle Monat und wenn noch keine Werte da sind dann möchte ich vorerst bei Feb. bis Dez 0 drinstehen haben!

geht das wenn ja wie?


ps meine abfrage lautet wie folgt!

SELECT (Format([BESTN_DATE],"mmm")) AS Ausdr1, Count(qryDia_BEST_Woche_Hersteller.BESTN_IDnew) AS AnzahlVonBESTN_IDnew FROM qryDia_BEST_Woche_Hersteller GROUP BY (Format([BESTN_DATE],"mmm")), (Year([BESTN_DATE])*12+Month([BESTN_DATE])-1), qryDia_BEST_Woche_Hersteller.FIRMA_NAME HAVING (((qryDia_BEST_Woche_Hersteller.FIRMA_NAME)="Feinmetall GmbH")) ORDER BY

gruß
swen

SwenATwork
23.01.2008, 18:07
Hallo an alle,

hier habe ich das gleich Problem nochmal gefunden verstehe die antwort aber leider nicht kann mir evtl. jemand von euch helfen?

http://www.ms-office-forum.net/forum/showthread.php?t=132511&highlight=Diagramm+alle+Monate+sonst+0

gruß
swen

lalo
23.01.2008, 19:03
Hallo,
stell doch erst mal wie im Post #1 angekündigt die Datei ins Forum. Vielleicht kann man dann weiterhelfen.

SwenATwork
24.01.2008, 14:39
Moin,

hier eine stück aus meiner Date!

gruß
swen

lalo
25.01.2008, 19:00
Hallo,

wie sollen die Daten angeordnet sein
- die Monate Horizontal (also eine Kreuztabellenabfrage)
oder
- je Monat eine Zeile auch wenn wert = 0

SwenATwork
25.01.2008, 22:58
Hallo Bernd,

ich verstehe deine Frage nicht?

Ich habe doch in der Datei 2 Berichte rein getan und bei diesen würde ich mir wünschen das vom aktuellen Jahr alle Monate oder alle Kakenderwochen angezeigt werden.

Da wir erst in Woche 4 und im Jan sind würde ich mir wünschen das die X-Achse aber schonmal die folgenden Monate / Kalenderwoche anzeigt und als wert auf der Y Achse dann 0 hat!

Gruß
swen

lalo
26.01.2008, 15:39
Hallo,

Um in einer Kreuztabellenabfrage auch Spalten für einen Zeitraum zu haben in dem keine Werte vorliegen schafft man "Fixe Spalten".

Hier einige Codeschnippsel zu deren Generierung:

1. generieren des Teiles "Pivot.." der Abfrage:
Dim FormatStr as String
...
FormatStr = " Pivot format(datum_ist, " & FormatArr(Periode) & ") in (" & GenFixedCols(Datum_Von, Datum_bis, Periode) & ")"

Hier die Funktion GenFixedcols, sieht als Periode Monat, Quartal und Jahr vor:

Public Function GenFixedCols(datStart As Date, datEnde As Date, Periode As Integer) As String

Dim MonthArr
Dim QuartArr
Dim i As Integer
Dim OutString As String
Dim Quartal As Single

MonthArr = Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez")
QuartArr = Array(" ", "1", "2", "3", "4")
datEnde = datEnde - Day(datEnde) + 1
i = 0

Select Case Periode
Case 1 '--- Monat
Do Until datStart > datEnde
OutString = OutString & """" & MonthArr(Month(datStart) - 1) & " " & Year(datStart) & """" & ","
datStart = DateAdd("m", 1, datStart)
Loop
Case 2 '--- Quartal
Do Until datStart > datEnde
Quartal = Round((Month(datStart) / 3) + 0.2)
OutString = OutString & """" & QuartArr(Quartal) & " " & Year(datStart) & """" & ","
datStart = DateAdd("m", 3, datStart)
Loop
Case 3 '--- Jahr
Do Until datStart > datEnde
Quartal = Round((Month(datStart) / 3) + 0.2)
OutString = OutString & """" & Year(datStart) & """" & ","
datStart = DateAdd("yyyy", 1, datStart)
Loop
End Select
GenFixedCols = Left(OutString, Len(OutString) - 1)
End Function


Und hier das Ergebnis das dann an die zuvor generierte Abfrage angehängt wird (Datum von Jan 2006, Datum-bis Dec 2006, Periode Monat)

Pivot format(datum_ist, "mmm yyyy") in ("Jan 2006","Feb 2006","Mrz 2006","Apr 2006","Mai 2006","Jun 2006","Jul 2006","Aug 2006","Sep 2006","Okt 2006","Nov 2006","Dez 2006")

So sieht eine meiner dyn. generierten Abfragen so aus:
TRANSFORM cdbl(nz(Count(RCA_ID),0)) SELECT MA_Bez FROM
[SELECT distinct RCA.RCA_ID, RCA.Datum_Ist, MA_Bez FROM (((((RCA LEFT
JOIN AUFART ON RCA.AufArt=AUFART.AufArt_ID) LEFT JOIN KPI ON
RCA.KPI=KPI.KPI_ID) LEFT JOIN ANLAGE ON
RCA.Anlage=ANLAGE.ANLAGE_ID) LEFT JOIN ProcessStep ON
RCA.Process_Step=ProcessStep.ProcessStep_ID) INNER JOIN
RCA_MERKMAL_AUSPR ON RCA.RCA_ID=RCA_MERKMAL_AUSPR.RCA_ID)
LEFT JOIN View_MA ON (RCA_MERKMAL_AUSPR.Auspraegung_ID=View_MA.Auspraegung_ID) AND
(RCA_MERKMAL_AUSPR.Merkmal_ID=View_MA.Merkmal_ID) ]. AS [SubSel]
Group by MA_Bez Pivot format(datum_ist, "mmm yyyy") in ("Jan
2006","Feb 2006","Mrz 2006","Apr 2006","Mai 2006","Jun 2006","Jul
2006","Aug 2006","Sep 2006","Okt 2006","Nov 2006","Dez
2006")

SwenATwork
28.01.2008, 06:02
Hallo lalo,

vielen Dank, ich experimentiere mit deiner Antwort jetzt seit gestern 10.00h rum!

Verstehe es aber leider noch nicht kannst du mir evtl. deine Lösung in meine Beispiel datei in diesem Thread einfügen und diese dann hoch posten, evtl. hilft mir das um die Lösung zuverstehen!

Hauptsächlich verstehe ich gerade nicht was du mit

1. generieren des Teiles "Pivot.." der Abfrage:

meinst!

Ganz verstanden wie ich es dann mit der Woche handhabe habe ich auch noch keinen schimmer, das liegt aber whrscheinlich da dran das ich die grund idee noch nicht verstanden habe!

vielen Dank! Hoffe sehr das du mir weiter auf die sprünge hilfst :-)

gruß
swen

lalo
28.01.2008, 11:18
Hallo,

zum besseren Verständnis:
In einer Kreuztabellenabfrage kann man erzwingen, dass die Daten in fix definierte Spalten eingefügt werden, also auch Spalten definieren, für die eventuell keine Werte vorkommen. Das geht so, weiteres siehe OH:
....PIVOT Pivot-Feld [IN (Wert1[, Wert2[, ...]])]
wobei Wert1, Wert2 uns. die Spaltenüberschriften sind.

Hier die erläuterung zu Punkt 1:

In dem Beispiel wird der gesamte SQL-String dynamisch aufgebaut, also aus den Werten der Eingabe-Form. Dabei gibt es auch die Auswahl ob die Auswertung (letztlich ein Diagramm) nach Monaten, Quartalen oder Jahren erfolgen soll (Radiobuttons mit den Werten 1 (für Monat), 2 (für Quartal), 3 (für Jahr)
....
FormatArr = Array(" ", """mmm yyyy""", """q yyyy""", """yyyy""")

'------------------------------
' Pivot - Format - In aufbauen aufbauen
'-----------------------------
FormatStr = " Pivot format(datum_ist, " & FormatArr(Periode) & ") in (" & GenFixedCols(Datum_Von, Datum_bis, Periode) & ")"

rot: an diese Stelle kommt bei Auswahl Monat (Wert 1 des Radiobuttons = Index für FormatArr) dann "mmm yyyy". Damit wird das Datum in Monat und Jahr formatiert.
Um nun die Werte in die fixen Spaltenzu befördern wird in angegeben. In meinem Beispiel brauche ich die Spaltenüberschriften für Jan - Dez 2006 und diese werden mit der Funktion GenFixedCols erzeugt.
Die Funktion bekommt Datum von - bis (im Besisoiel 1.1. 2006 bis 31.12.2006) und ob es sich um Monats, Quartals oder Jahresspalten (im Beispiel 1 = Monat) handeln soll.

Um die Spalten für KW zu bekommen müsstest Du die Funktion entsprechend ändern / erweitern.

Und anschließend wird der gesamte SQL-String aus Einzelstrings zusammengebaut:
GenSql = SqlString1 & GroupByStr & SqlString2 & GroupByStr & SqlString3 & WhereStr & " ]. AS [SubSel] Group by " & GroupByStr & FormatStr.
dabei ist der "FormatStr" der im Beispiel vom 26.01. fett gedruckte:

....Pivot format(datum_ist, "mmm yyyy") in ("Jan
2006","Feb 2006","Mrz 2006","Apr 2006","Mai 2006","Jun 2006","Jul
2006","Aug 2006","Sep 2006","Okt 2006","Nov 2006","Dez
2006")

SwenATwork
28.01.2008, 19:53
Aber wo tue ich den dieses hin?

FormatArr = Array(" ", """mmm yyyy""", """q yyyy""", """yyyy""")

'------------------------------
' Pivot - Format - In aufbauen aufbauen
'-----------------------------
FormatStr = " Pivot format(datum_ist, " & FormatArr(Periode) & ") in (" & GenFixedCols(Datum_Von, Datum_bis, Periode) & ")"

in das Diagramm?

gruß
swen

lalo
29.01.2008, 14:12
Hallo,
ich habe das Diagramm mal neu "geschrieben".

1. Anwahlform
Hier muss der Zeitraum (Datum von - bis) angegeben werden.
Es wird der SQL-String (die Abfrage) erzeugt aufgrund dessen das Diagramm erstellt wird.

Hier wurde noch eine Selektion, nach dem Zeitraum der dargestellt werden soll, aufgenommen sowie alle Kalenderwochen die in den Zeitruam fallen als fixe Spalten, so dass auch KaWo ohne Daten erscheinen.

Die fixen Spalten werden mit der Funktion "GenKawo" erzeugt, siehe Code.

Sie wird nicht unter "Abfragen" gespeichert sondern als Openargs an die Form zum Anzeigen des Diagramms mitgegeben (siehe Code).

2. Das Modul1 ist noch um die Funkton DatumSQL ergänzt worden. Damit werden SQLl-konforme Dateumsangaben erzeugt.

3. Diagramm
Ausgabe erfolgt in der Form frmDiagramm, Umstellung auf Report sollte problemlos sein.

SwenATwork
14.10.2008, 14:50
danke das funtzt super!