2016-07-11 6 views
0

Ich möchte um Hilfe bei SELECT in MS Reporting Services bitten. Ich erstelle einen Diagrammbericht (Spaltentyp), wobei die Spalten die Stunden für das Projekt darstellen sollen (Summe aller Stunden, die für den Elternbericht, seine Kinder und ihre Kinder aufgewendet wurden). Das Konzept lautet: Erster Bericht ist a column graph, where values are all hours spent on projects and their children by months (axis x) and series group is based on type of issue where hours were spent on.SSRS Säulendiagramm mit der Summe der Stunden aller untergeordneten Ebenen, die unter dem übergeordneten Element angezeigt werden

Zweiter Bericht ist der, den ich habe Problem mit - Drilldown auf Monat sollte auf Achse x Name der Hauptelternberichte und in Spalte Stunden zeigen verbrachte es und alle ihre Kinder. Basierend auf der Eltern-ID und dem Monat wird ein Drill-down zum dritten Bericht durchgeführt - alle Kinder auf der ersten Ebene des ausgewählten Elternberichts geben die Summe der für sie und ihre Kinder aufgewendeten Stunden an.

The source tables are stuctured as on picture example, ich benutze LEFT JOIN in SELECTs, weil es Eltern ohne Probleme und Stunden geben kann, aber ich brauche ihre Kinder haben einige (und ich zeige den Namen der Eltern). Die Eltern-ID ist nur für direkte Eltern, nicht für die Haupt-Eltern-ID (es ist möglich, diese Eltern-ID als NULL zu erkennen). Es gibt kein Level-Zeichen, um zu erkennen, wie tief in der Hierarchie du bist. Und es gibt keine Regel dafür, wie viele Ebenen Projekte haben können. Für dritte Ebene habe ich eine SELECT geschaffen, die tiefer und tiefer geht:

WITH hierarchy AS (SELECT id, parent_id, name 
        FROM dbo.projects AS p 
        WHERE  (id = @id) 
        UNION ALL 
        SELECT p.id, p.parent_id, p.name 
        FROM dbo.projects AS p INNER JOIN hierarchy AS h ON p.parent_id = h.id) 
SELECT  @id AS pid, hierarchy_1.parent_id, hierarchy_1.id, hierarchy_1.name, i.tracker_id AS fronta_id, t.hours, t.spent_on, t.tmonth, f.name AS fronta 
FROM   hierarchy AS hierarchy_1 LEFT OUTER JOIN 
          dbo.issues AS i ON hierarchy_1.id = i.project_id 
LEFT OUTER JOIN dbo.time_entries AS t ON i.id = t.issue_id INNER JOIN 
          dbo.trackers AS f ON i.tracker_id = f.id 
WHERE  (t.tmonth = @month) 

Ich habe versucht, dies für die zweiten Bericht zu verwenden, aber alles ist fehlgeschlagen. Ich habe viel nach möglichen Lösungen gesucht, aber leider habe ich normalerweise Stunden unter Haupteltern gruppiert. Ich habe einen Rat, vom letzten Kind zu gehen, summiere alle Stunden und gehe höher. Aber am Ende kann ich nicht Haupteltern angeben, nach denen das Diagramm gruppiert werden soll.

Vielen Dank im Voraus für einen Rat!

Antwort

0

Versuchen diese

WITH hierarchy AS (SELECT id as id, id as child_id 
        FROM dbo.projects AS p 
        WHERE  (id = @id) 
        UNION ALL 
        SELECT h.id, p.id 
        FROM dbo.projects AS p INNER JOIN hierarchy AS h ON p.parent_id = h.child_id 
       ) 

SELECT  hierarchy_1.id AS pid, p.name as p_name, hierarchy_1.child_id AS child_pid, i.tracker_id AS fronta_id, t.hours, t.spent_on, t.tmonth,f.name AS fronta 
FROM   hierarchy AS hierarchy_1 
    INNER JOIN dbo.projects AS p ON P.id=hierarchy_1.id 
    LEFT OUTER JOIN dbo.issues AS i ON hierarchy_1.id = i.project_id 
     LEFT OUTER JOIN dbo.time_entries AS t ON i.id = t.issue_id 
     INNER JOIN dbo.trackers AS f ON i.tracker_id = f.id 
WHERE  (t.tmonth = @month) 

SUM zu berechnen, wird die Auswahlleitung mit dieser ersetzen und eine Gruppe für Zeile

SELECT  hierarchy_1.id AS pid, first(p.name) as p_name, i.tracker_id AS fronta_id, sum(t.hours), MIN(t.spent_on), MIN(t.tmonth)), MIN(f.name) AS fronta 
GROUP BY  hierarchy_1.id, i.tracker_id 
fügen
Verwandte Themen