DrillDown-Bericht: Selektierten Datensatz an Unterbericht übergeben

Hallo zusammen,

ich habe eine Datenstruktur, in der eine Liste von Personen geführt wird. Jeder Person wiederum ist eine Liste von Projekten zugeordnet. Die Objekte zu der Datenstruktur werden durch einen ObjectDataProvider(Personen) verwaltet:

public List<Person> Personen { get; set; }

public class Person 
{
   public string Name { get; set; }

   public List<Projekt> { get; set; }
   ...
}

public class Projekt
{
   public string Projektnummer { get; set; }
   ...
}

Die DrillDown-Verknüpfung ist wie folgt definiert:

Über einen Bericht zeige ich alle Personen an und bei der Anwahl einer Zeile (“Öffnen”) werden die zu der Person zugeordneten Projekte in einem DrillDown-Unterbericht angezeigt.

Nun möchte ich den Namen der Person in der Titelzeile des Unterberichtes anzeigen. Geht das?

Vielen Dank vorab für die Hilfe.

Marcus

Hallo Marcus,

eine solche Anforderung lässt sich mittels Drilldown über Berichtsparameter umsetzen. Beim Anlegen der Drilldown-Verknüpfung wird der Typ abgefragt. Wähle hier “Drilldown über Berichtsparameter”.

Im Unterbericht kann dann mit einem oder auch mehreren Berichtsparametern gearbeitet werden. Diese können via Projekt > Berichtsparameter erstellt werden. Den Berichtsparameter benötigt es auf der einen Seite, um die Datentabellen miteinander zu verknüpfen und die Daten entsprechend zu filtern und auf der Seite können die Berichtsparameter auch verschiedene Inhalte außerhalb der Tabelle abbilden.

Gerne hänge ich einmal einen solchen Report samt Drilldown für die List & Label Beispielanwendung mit an (..\combit\LL31\Beispielanwendung\DemoApplication31.exe, Rubrik Berichte). Siehe Download am Ende.

Der Unterbericht “SubReport_Details.lsr” verfügt über zwei Berichtsparameter.

@MitarbeiterDetails ist für die Filterung der Daten verantwortlich und wird im Datenfilter für die Tabelle verwendet (siehe gelbe Markierung).
@Mitarbeitername beinhaltet lediglich die Informationen “Name” + “Vorname” und wird im Titel des Unterberichts verwendet (grüne Markierung).

Das Ergebnis sieht dann wie folgt aus:

Hier die Report-Dateien:
HauptReport_Mitarbeiter.lsr (51,1 KB)
SubReport_Details.lsr (105,3 KB)

Ich hoffe es ist einigermaßen verständlich erklärt. Falls noch Fragen sein sollten, dann immer her damit.

Grüße
Chris

Hallo Chris,

so ganz verstehe ich es noch nicht. Aber zumindest bekomme ich schon einmal, wie in Deinem Beispiel gezeigt, die Namen in die Titelzeile des Unterberichtes.

Aber… Egal, welchen Namen ich im Hauptbericht anwähle, die Liste der Projekte entspricht immer der Projektliste der ersten Person.

Meine c# Datenstruktur oder besser Objektstruktur sieht wie folgt aus:

+ -- Person 1
| |- Name
| \– Liste von Projekten der Person 1
+ -- Person 2
| |- Name
| \– Liste von Projekten der Person 2
...

Der Hauptbericht zeigt eine Auflistung der “Personen”, im DrillDown möchte ich die Liste der Projekte zu der gewählten Person anzeigen. “Projekte” sind bei mir Elemente mit individuellen Ausprägungen, wie die Summe von Arbeitsstunden, Arbeitskosten und weiteren diversen Berechnungen zu der Person in den einzelnen Projekten. Speziell die Stunden sollen später in einem weiteren DrillDown-Bericht als Unterbericht zu den Projekten kommen.

Ich habe die Datenfilter-Definition aus Deinem Beispiel nicht so ganz verstanden:

Orders.EmployeeID@Employees.EmployeeID:EmployeeID = @MitarbeiterDetails

Benötigt die Klasse “Person” eine Referenz in die Liste der Personen, in der sie enthalten ist um für den DrillDown über die Id- der “Person” auf deren Projektliste zu filtern? Oder denke ich da viel zu kompliziert? Mir ist die Semantik und auch die Syntax des Filterausdrucks nicht so ganz klar.

Ich hoffe, ich habe mein Problem verständlich dargestellt.

Grüße und vielen Dank vorab

Marcus

Hi Marcus,

das Verhalten könnte darauf hindeuten, dass die “falsche” Projekt-Tabelle im Drilldownbericht verwendet wird. Hilft es in dem Drilldown-Bericht, die relationale Projekte-Tabelle zu platzieren (Person → Projekte):

Noch ein Gedanke: Wenn du bei Drilldown über Relationen bleibst, dann könntest du den Person.Name auch in den Projekten mit anmelden, um diesen in einem Berichtsparameter zu verwenden:

Das Ergebnis würde dann so aussehen:

Drilldown

Grüße
Chris

Hallo Chris,

Deine Tipps haben wir leider nicht so wirklich geholfen.

Deshalb habe ich Dir jetzt ein c#-Beispielprogramm zusammengestellt, welches zeigen soll, wie ich das von mir Beschriebene umgesetzt habe und wo dabei meine Probleme sind.

Mit dem Programm kannst Du den Bericht “Persons.lst” im Designer bearbeiten und/oder in der Vorschau Dir anzeigen lassen.

Über den “Öffnen…” in Persons.lst rufst Du die Projekte zu der jeweiligen Person auf. Es gibt zwei DrillDowns:

  • Person2ProjectsRelationen.lst = “DrillDown über Relationen”
  • Person2ProjectsBerichtsParameter.lst = “DrillDown über Berichtsparameter“

So, wie ich es umgesetzt habe, zeigt “Person2ProjectsRelationen.lst“ zwar die korrekte Liste der Projekte an, allerdings bekomme ich in dieser Auswertung den Namen der Person angezeigt. Im Gegensatz dazu habe ich in “Person2ProjectsBerichtsParameter.lst“ zwar den korrekten Namen, aber mir werden immer nur die Projekte der ersten Person angezeigt, egal bei welcher Person ich “Öffnen…” anwähle.

Ich hoffe, die Beispiele helfen Dir, meine Schwierigkeiten zu verstehen.
Vielen Dank vorab

Marcus

ListLabelObjects_src.zip (6.5 MB)

Hi Marcus, dein Problem hier ist, dass du im Berichtsparameter Case keinen Filter hast, deshalb werden die nicht zugehörigen Projekte angezeigt, im Drilldownbericht mit den Parametern müsstest du in der Tabelle Projekt den Filter mit der PersonId (was du nicht hast) setzten, also Projekt.PersonId == @PersonIdPersonId. Ich habe das jetzt nur mal so überflogen, gehe aber davon aus das du deine Datenanmeldung ändern musst, also das DataBinding, ich könnt mir das am WE mal in Ruhe anschauen und dir einen detaillierteren Vorschlag geben.

LG

1 Like

Hi Erdal,

es wäre toll, wenn Du Dir mein Beispiel einmal anschauen und ggf. einen Vorschlag zur Korrektur machen würdest.

Grüße

Marcus

Hi Marcus,

vielen Dank für das Sample. Anbei ein angepasster Report der Berichtsparameter-Variante.

Person2ProjectsBerichtsParameter.zip (5,6 KB)

Folgende Anpassungen haben wir vorgenommen:

  1. Die Projects-Tabelle über die Relation neu hinzugefügt
  2. Den Datenfilter für die Tabelle Persons auf folgende Formel gesetzt
Person.FirstName=@PersonFirstName and Person.LastName=@PersonLastName

Im Designer sieht es wie folgt aus:

Gönnen wir @Erdal_Alacali ein langes Osterwochenende.

Allen schöne Feiertage !

Grüße
Chris

Hallo Chris,

damit hat es geklappt. Vielen Dank!

Grüße

Marcus Breig

1 Like