Announcement

Collapse
No announcement yet.

Reporting Services

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Reporting Services

    Hallo

    Ich habe eine spezielle Frage zu Reporting Services 2005.
    Ich habe folgendes Dataset.


    SELECT Artikelnummer, Artikel, Werknummer, Werk, SUM([statistische Menge]) AS MENGE, SUM([statistischer Warenerlös]) AS Warenerlös, SUM([statistischer Frachterlös])
    AS Frachterlös
    FROM vw$Statistik
    WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt) AND (Liefermonat = @StartMo)
    GROUP BY Artikelnummer, Artikel, Werknummer, Werk


    In dem Bericht wird das aktuelle Jahr und Monat ausgewählt und die Daten werden dann angezeigt.
    Jetzt will ich das er automatisch für das Jahr vorher ebenfalls die Daten dastellt. Also Menge / Warenerlös / Frachterlös in weiteren Spalten.
    Es sollen aber nur die Artikelnummer angezeigt werden die in dem ausgewählten Jahr verkauft wurden.
    Also ein typischer Vorjahresvergleich.
    Leider fehlt mir jeglicher Ansatz wie ich das in Microsoft Visual Studio 2005 realsieren soll.
    Habt Ihr vielleicht eine Idee oder ein Besipiel?
    Vielen Dank.

    Gruss
    Thomas

  • #2
    Hallo Thomas!

    Wie waere es, wenn du mittels UNION einen zweiten SELECT absetzt, welcher dann eben zB: '... Lieferjahr = @StartJa -1 ...' selektiert; eventuell noch ein ORDER BY und das Ergebnis muesste eigentlich das gewuenschte sein.

    HTH
    *-- robert.oh. --*

    Comment


    • #3
      Die Idee hatte ich auch, aber der Bericht soll später so aussehen.

      Artikelnummer, Nameusw, Menge, Ware,Fracht, Menge_Vorjahr, Ware_Vorjahr.

      Wenn ich das ganze mit einem Union zusammenhänge, dann kann ich das ja nicht erreichen oder?

      Comment


      • #4
        Doch schon, hier ein Beispiel:

        SELECT artikelnummer, name, menge, ware, fracht, CAST(0 AS int) AS menge_vorjahr, SPACE(20) AS Ware_vorjahr ...

        UNION (ALL)

        SELECT artikelnummer, name, CAST(0 AS int) AS menge, SPACE(20) AS ware, fracht, menge AS menge_vorjahr, ware AS ware_vorjahr ...

        Die Spaltenbreiten und -typen muessen uebereinstimmen, dann sollte es so herauskommen wie du es brauchst.
        *-- robert.oh. --*

        Comment


        • #5
          Irgendwie stehe ich gerade auf dem Schlauch.
          So sollte der select sein oder?

          SELECT Artikelnummer, Artikel, Werknummer, Werk, SUM([statistische Menge]) AS Menge, SUM([statistischer Warenerlös]) AS Warenerlös, SUM([statistischer Frachterlös]) AS Frachterlös,
          CAST(0 AS int) AS Menge_V, CAST(0 AS int) AS Warenerlös_V, CAST(0 AS int) AS Frachterlös_V
          FROM vw$Statistik
          WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt) AND (Liefermonat = @StartMo)
          GROUP BY Artikelnummer, Artikel, Werknummer, Werk
          UNION ALL
          SELECT Artikelnummer, Artikel, Werknummer, Werk, CAST(0 AS int) AS Menge, CAST(0 AS int) AS Warenerlös, CAST(0 AS int) AS Frachterlös, SUM([statistische Menge]) AS Menge_V,
          SUM([statistischer Warenerlös]) AS Warenerlös_V, SUM([statistischer Frachterlös]) AS Frachterlös_V
          FROM vw$Statistik AS vw$Statistik_2
          WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa - 1) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt)
          GROUP BY Artikelnummer, Artikel, Werknummer, Werk

          Rauskommen tun die Datensätze zwar richtig aber doppelt.
          Und im Bericht gibt es dann zwei zeilen für einen Artikel.

          Gruss
          Thomas

          Comment


          • #6
            Hallo!

            Stimmt mit dem UNION kommen immer zwei Zeilen raus eine fürs laufende Jahr und eine fürs Vorjahr...

            Aber so sollte es gehen:
            Frag mich ja nicht nach der Laufzeit!!!
            Meine wie immer schicken Tipfäller musst Du alleine entfernen, da ich es nich testen konnte...

            SELECT distinct v.Artikelnummer, v.Artikel, v.Werknummer, v.Werk
            (select SUM([statistische Menge]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa) and (Liefermonat = @StartMo)) as Menge
            ,
            (select SUM([statistischer Warenerlös]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa) and (Liefermonat = @StartMo)) as Warenerloes
            ,
            (select SUM([statistischer Fracherlös]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa) and (Liefermonat = @StartMo)) as Frachterloes
            ,

            (select SUM([statistische Menge]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa-1) and (Liefermonat = @StartMo)) as Menge_Vorjahr
            ,
            (select SUM([statistischer Warenerlös]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa-1) and (Liefermonat = @StartMo)) as Warenerloes_Vorjahr
            ,
            (select SUM([statistischer Fracherlös]) from vw$Statistik where
            v.Artikelnummer = artikelnummer, v.Artikel = artikel, v.Werknummer = werknummer, v.Werk = werk and
            (Mandantennummer = '21') AND (Lieferjahr = @StartJa-1) and (Liefermonat = @StartMo)) as Frachterloes_Vorjahr
            FROM vw$Statistik v
            WHERE (v.Mandantennummer = '21') AND (v.Lieferjahr = @StartJa) AND (v.Artikelnummer >= @StartArt) AND (v.Artikelnummer <= @EndArt) AND (v.Liefermonat = @StartMo)

            Wichtig ist, dass du in den Subselects IMMER wieder die Selektionskriterien mit angibts.

            Wenn Du mehrere Statements hintereinander ausführen kannst (ich kenn leider den Reporting Service nicht) würde ich mit einer temporären Tabelle arbeiten und dort die Daten passend "hineinselektieren"

            ACHTUNG: Wenn nur im Vorjahr ein Artikel verkauft wurde und dieses Jahr nicht erscheint die entsprechende Zeile NICHT in der Antwort!!! Um den Luxus auch zu haben musst Du auf Basis der Artikeltabelle selektieren und nicht auf Basis der Auftragsdaten... (Dann sind natürlich auch ALLE Artikel in der Liste)

            BYE BERND

            Comment


            • #7
              Meinst du mit 'doppelt' dass jeweils pro Artikel eine Zeile mit aktuellen Werten und eine mit Vorjahreswerten aufscheint?

              Wenn ja, koenntest du um diesen SELECT nochmals einen herumbauen.

              Beispiel:
              SELECT Artikelnummer, Artikel, Werknummer, Werk, SUM(Menge) AS Menge, SUM(Warenerlös) AS Warenerlös, SUM(Frachterlös) AS Frachterlös,
              SUM(Menge_V) AS Menge_V, SUM(Warenerlös_V) AS Warenerlös_V, SUM(Frachterlös_V) AS Frachterlös_V FROM ( << obiger SELECT >> ) a GROUP BY Artikelnummer, Artikel, Werknummer, Werk

              Schaut zwar ein wenig umstaendlich aus, aber muesste funken.

              Es gibt sicher elegantere Loesungsansaetze, aber mir faellt nur dieser ein.
              *-- robert.oh. --*

              Comment


              • #8
                Hallo!

                @Robert

                Wie funktioniert denn diese Art der "SubSelects"????

                Kleines Beispiel:
                create table tempdb.dbo.mytest ( wert int )
                insert into tempdb.dbo.mytest values(1)
                insert into tempdb.dbo.mytest values(2)
                insert into tempdb.dbo.mytest values(3)

                select id from (select min(id) from tempdb.dbo.mytest)

                Das untere Select bekomme ich nicht zum Laufen. Ich arbeite noch mit SQL 2000 ist das uner 2005 tatsächlich lauffähig?!?

                BYE BERND

                Comment


                • #9
                  Hallo Bernd!

                  Probier mal, dass du dem SubSelect einen Alias gibst. Dann sollte es eigentlich funken.

                  Beispiel:
                  select id from (select min(id) from tempdb.dbo.mytest) a
                  (oder)
                  select id from (select min(id) from tempdb.dbo.mytest) AS a
                  *-- robert.oh. --*

                  Comment


                  • #10
                    Vielen Vielen Dank

                    Der Select funktioniert bestens und schaut so aus:

                    SELECT Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk, SUM(Menge) AS Menge, SUM(Warenerlös) AS Warenerlös, SUM(Frachterlös) AS Frachterlös,
                    SUM(Menge_A) AS Menge_A, SUM(Warenerlös_A) AS Warenerlös_A, SUM(Frachterlös_A) AS Frachterlös_A, SUM(Menge_V) AS Menge_V, SUM(Warenerlös_V) AS Warenerlös_V,
                    SUM(Frachterlös_V) AS Frachterlös_V
                    FROM (SELECT Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk, SUM([statistische Menge]) AS Menge, SUM([statistischer Warenerlös]) AS Warenerlös,
                    SUM([statistischer Frachterlös]) AS Frachterlös, CAST(0 AS int) AS Menge_V, CAST(0 AS int) AS Warenerlös_V, CAST(0 AS int) AS Frachterlös_V, CAST(0 AS int) AS Menge_A,
                    CAST(0 AS int) AS Warenerlös_A, CAST(0 AS int) AS Frachterlös_A
                    FROM vw$Statistik
                    WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt) AND (Liefermonat = @StartMo) AND
                    (Produktgruppennummer >= @StartPg) AND (Produktgruppennummer <= @EndPg)
                    GROUP BY Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk
                    UNION ALL
                    SELECT Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk, CAST(0 AS int) AS Menge, CAST(0 AS int) AS Warenerlös, CAST(0 AS int) AS Frachterlös,
                    CAST(0 AS int) AS Menge_V, CAST(0 AS int) AS Warenerlös_V, CAST(0 AS int) AS Frachterlös_V, SUM([statistische Menge]) AS Menge_A, SUM([statistischer Warenerlös])
                    AS Warenerlös_A, SUM([statistischer Frachterlös]) AS Frachterlös_A
                    FROM vw$Statistik AS vw$Statistik_2
                    WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt) AND (Liefermonat >= '1') AND
                    (Liefermonat <= @StartMo) AND (Produktgruppennummer >= @StartPg) AND (Produktgruppennummer <= @EndPg)
                    GROUP BY Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk
                    UNION ALL
                    SELECT Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk, CAST(0 AS int) AS Menge, CAST(0 AS int) AS Warenerlös, CAST(0 AS int) AS Frachterlös,
                    SUM([statistische Menge]) AS Menge_V, SUM([statistischer Warenerlös]) AS Warenerlös_V, SUM([statistischer Frachterlös]) AS Frachterlös_V, CAST(0 AS int) AS Menge_A,
                    CAST(0 AS int) AS Warenerlös_A, CAST(0 AS int) AS Frachterlös_A
                    FROM vw$Statistik AS vw$Statistik_2
                    WHERE (Mandantennummer = '21') AND (Lieferjahr = @StartJa - 1) AND (Artikelnummer >= @StartArt) AND (Artikelnummer <= @EndArt) AND (Produktgruppennummer >= @StartPg)
                    AND (Produktgruppennummer <= @EndPg)
                    GROUP BY Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk) AS a
                    GROUP BY Artikelnummer, Artikel, Produktgruppennummer, Produktgruppe, Werknummer, Werk


                    Vielen Vielen Dank nochmal

                    Gruss
                    Thomas

                    Comment

                    Working...
                    X