SQL [SQL] SSRS Reporting Services - 2 Datasets vergleichen

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
752
Hallo zusammen,

wie lassen sich im Report Builder 3.0 zwei Datasets miteinander vergleichen? kann man
die überhaupt vergleichen und in einer Tabelle darstellen?

Hintergrund: ich habe eine Tabelle, in der fortlaufend Daten rein geschrieben werden.
Jetzt möchte ich zwei Perioden miteinander vergleichen. Vielleicht habt Ihr auch einen alternativen
Lösungsvorschlag, ich bin für alles offen, vielen Dank

LG Ruff :)
 
Processing (vergleichen) im Reportbuilder ist wohl eher schwierig. Ich würde das einfach auf Datenbankebene machen.
Stored procedure als Datenquelle für den Report definieren und dort im select Differenzen etc. abfragen (evt. per function).

Grüße,

T.
 
...gut das ist natürlich ne Möglichkeit auf die es jetzt wohl dann auch raus läuft. Vielen Dank erstmal dafür :).

Was mich aber wundert müsste das so ein hochoffizielles Tool nicht eigentlich können? das sollte ja keine so spezielle Anforderung sein, dachte ich jedenfalls. Bei Crystal Reports soll es das gleiche sein hab ich mir sagen lassen... :rolleyes:
 
Crystal Reports habe ich vor Jahren rausgeschmissen, weil es immer nur Probleme machte, sobald es etwas komplizierter (d.h. vom Standard abweichend) wurde ...

SSRS hat immerhin den Vorteil, daß die generierten Reports (rdl) im Prinzip xml-Dateien sind, so dass man die "von Hand" bearbeiten könnte und nicht auf das Tool angewiesen ist. Ich habe mit dem ReportBuilder selber wenig gearbeitet, weiß aber, daß mein Kollege vortrefflich geflucht hat ... ;)
 
Kann mich der antwort nur anschließen: mach die vergleiche im sql und nutz den Report nur zur Anzeige. Du sparst dir n haufn aerger.
Es empfiehlt sich allgemein zu versuchen businesslogik und anzeigelogik zu trennen, das sollte man auch bei reports so machen.
 
Vielen Dank erstmal. Ich habe jetzt euren Rat befolgt, bin aber gleich wieder auf einen seltsamen Fall gestoßen:

Ich habe zweimal die gleiche Tabelle mit einem Full Outer Join verbunden, dabei jede Tabelle mit einem WHERE gefiltert.
Links für den aktuellen Monat und rechts für den Vorjahresmonat.

Trotz eines Full Outer Joins bekomme ich weniger Datensätze als wenn ich die Tabellen einzeln betrachte. Er müsste
doch dann eigentlich NULL liefern, wenn kein Datensatz an der jeweiligen Stelle vorhanden ist und alles anzeigen oder
wo ist mein Denkfehler?

Weniger Datensätze.PNG
Ergänzung ()

...anbei noch das Statement:


Code:
SELECT UserFilStat_Ums_WE_Monat_UNION.Periode,
UserFilStat_Ums_WE_Monat_UNION.Filialnummer,
UserFilStat_Ums_WE_Monat_UNION.ArtikelNr, 
UserFilStat_Ums_WE_Monat_UNION.UmsatzNetto,
UserFilStat_Ums_WE_Monat_UNION_Vorjahr.Periode AS PeriodeVorjahr, 
UserFilStat_Ums_WE_Monat_UNION_Vorjahr.Filialnummer AS FilialnummerVorjahr,
UserFilStat_Ums_WE_Monat_UNION_Vorjahr.ArtikelNr AS ArtikelNrVorjahr, 
UserFilStat_Ums_WE_Monat_UNION_Vorjahr.UmsatzNetto AS UmsatzNettoVorjahr
FROM UserFilStat_Ums_WE_Monat_UNION FULL OUTER JOIN UserFilStat_Ums_WE_Monat_UNION AS UserFilStat_Ums_WE_Monat_UNION_Vorjahr
ON UserFilStat_Ums_WE_Monat_UNION.Filialnummer = UserFilStat_Ums_WE_Monat_UNION_Vorjahr.Filialnummer
AND UserFilStat_Ums_WE_Monat_UNION.ArtikelNr = UserFilStat_Ums_WE_Monat_UNION_Vorjahr.ArtikelNr
WHERE UserFilStat_Ums_WE_Monat_UNION.Periode = 'M201605'
AND UserFilStat_Ums_WE_Monat_UNION_Vorjahr.Periode = 'M201505'
 
Hi,

ist jetzt theoretisch (d.h. ohne Datenbank) etwas schwierig zu prüfen, aber ich denke mal, das Problem liegt bei "where ... and ...".
Schon mal "where ... or ..." getestet?

Grüsse,

T.
 
warum nicht über lookup die Datasets vergleichen? Wie hast du es gelöst? Cubes über SSAS wäre am besten mit den Measures Vorjahres-Werte, mache mittlerweile aber alles relational....

@Tolotos : Warum hat dein Kollege geflucht? Es gibt nix was man bei SSRS nicht machen könnte. Leider fehlt in der neuen Version immer noch der Formatpinsel!
 
Zuletzt bearbeitet:
Ghost_Rider_R schrieb:
Vielen Dank erstmal. Ich habe jetzt euren Rat befolgt, bin aber gleich wieder auf einen seltsamen Fall gestoßen:

Ich habe zweimal die gleiche Tabelle mit einem Full Outer Join verbunden, dabei jede Tabelle mit einem WHERE gefiltert.

Ein Where-Clause filtert immer deine Datenmenge aufgrund der angegebenen Bedingungen, unabhängig davon, ob du und wie du in deinem SQL Tabellen joinst oder nicht.
Du bekommst mit deinem SQL also nur die Datensätze, die in Periode 'M201605' bzw. 'M201505' drin stehen haben und da scheidet Null natürlich automatisch aus.

Du hast da jetzt mehrere Möglichkeiten:
  • Den Where-Clause zu erweitern, sodass auch Null-Werte neben den jetzt genannten eingeschlossen werden, was aber eher umständlich ist, vor allem, weil du aufpassen musst, dass du damit nicht noch Datensätze aus anderen Perioden mit rein ziehst.
  • Die Join-Bedinung entsprechend um den Filter auf die Perioden erweitern. (Wobei ich glaube, dass das in deinem Fall nicht so einfach geht... Hab mir aber auch nicht sonderlich viele Gedanken drum gemacht.)
  • Die gejointen Tabellen gegen ein Table-Select mit einsprechendem Where-Clause ersetzen und diese dann miteinander mit den jetzigen Bedinungen joinen.
Letzteres sollte das einfachste, übersichtlichste und zielführendste sein.

SQL:
select *
from (select *
      from table
      where condition1) t1
full join (select *
           from table
           where condition2) t2 on (t1.key1 = t2.key1 and t1.key2 = t2.key2...)


Edit:
Oh lol... da hab ich mich wohl derb baiten lassen.
Das Thema is uralt -.-
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
Jetzt ist's sowieso schon zu spät daher --> rofl :D
 
Zurück
Oben