2016-07-11 3 views
0

MS Reporting Services에서 SELECT에 대한 도움을 드리고 싶습니다. 그래프 보고서 (열 유형)를 작성 중입니다. 여기에서 열은 프로젝트에 소요되는 시간 (상위 보고서, 자녀 및 자녀에게 소비 된 모든 시간의 합계)입니다. 개념은 다음과 같습니다. 첫 번째 보고서는 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 부모 아래에 표시된 모든 하위 수준의 시간이 표시된 열 그래프

두 번째 보고서는 주된 상위 보고서의 축 x 이름과 열 시간 및 그 모든 자식에 대해 월에 드릴 다운해야합니다. 학부모 ID와 월을 기준으로 세 번째 보고서까지 드릴 다운됩니다 - 선택한 상위 보고서의 첫 번째 수준에있는 모든 자녀는 자녀와 자녀에게 보낸 시간의 합계를 사용합니다.

The source tables are stuctured as on picture example 나는 문제가없는 학부모와 시간이있을 수 있기 때문에 SELECT에 LEFT JOIN을 사용하지만, 자녀에게 일부 (부모의 이름 표시)가 있어야합니다. 부모 ID는 주 부모가 아닌 직접 부모만을위한 것입니다 (부모 ID가 NULL임을 인식 할 수 있습니다). 인식 할 수있는 레벨 기호가 없으며 계층 구조가 얼마나 깊은 지 알 수 없습니다. 프로젝트가 가질 수있는 레벨의 수에 대한 규칙은 없습니다. 는 세 번째 수준을 위해 나는 점점 더 깊이가는 SELECT, 만든 : 나는 두 번째 보고서에이를 사용하는 것을 시도했다

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) 

을하지만, 모든 것이 실패했습니다. 가능한 해결책을 많이 찾았지만 불행히도 대개 부모님의 시간을 그룹화하여 종료했습니다. 나는 마지막 아이에서 갈 시간을주고 더 많이 나아갈 충고를 받았습니다. 하지만 결국 차트를 그룹화해야하는 주 부모를 지정할 수 없습니다.

미리 조언 해 주셔서 감사합니다.

답변

0

이 하나와 선택 라인을 대체,이

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을 계산하기 위해 시도하고 선으로 그룹을 추가

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