1

SSRS 보고서를 작성하는 중 구현 방법을 파악하는 데 어려움이 있습니다.계층 적 SQL 쿼리, SSRS 2008 및 요약 열

  • 레벨 1A
    • 레벨 2A
    • 레벨 2B
    • 레벨 2C
      • 레벨 3A
      :

      우선, 여기에서 데이터의 기본 구조이다

    • ,451,515,
  • 레벨 1B
  • 데이터베이스의 레벨 1C

각 레벨은 루트의 모든 부모 식별자 (레벨 1의 부모들은) 또한 각각 0이다 ID와 부모 ID를 가지고 수준에는 숫자 값이있는 열이 있습니다. 예를 들어, 내가이있을 수 있습니다

Level1a 
ParentId = 0 
Id = 1 
DataValue = 42 

Level2a 
ParentId = 1 
Id = 2 
DataValue = 1 

는 현재, 나는 데이터의 계층 구조와 수준을 얻을 수있는 공통 테이블 표현식을 구현 한 :

WITH cteTable(id, parentId, data, level) AS 
(SELECT id, 
     parentId, 
     data, 
     1 AS level 
FROM sampleTable 
WHERE (parentId = 0) 
UNION ALL 
SELECT b.id, 
     b.parentId, 
     b.data, 
     c.level + 1 AS Expr1 
FROM sampleTable AS b 
INNER JOIN cteTable AS c ON b.parentId= p.id 
) 
SELECT id, 
     parentId, 
     data, 
     level 
FROM cteTable 

을 너무 일찍에서 샘플 데이터로, 쿼리의 결과가 될 것이다 : 여기에서

+----+----------+------+-------+ 
| id | parentId | data | level | 
|----+----------+------+-------+ 
| 1 | 0  | 42 | 1  | 
| 2 | 1  | 1 | 2  | 
+----+----------+------+-------+ 

을, 나는 루트 레벨에 데이터를 요약하는 보고서를 구축해야합니다. 예를 들어, 보고서는 ID 1의 데이터 합계가 43임을 보여줍니다. 확실하지 않은 한 가지는 레벨이 얼마나 깊은 지입니다. 자식 수준이없는 경우와 트리가있는 경우가 있습니다. 몇 단계 깊이.

지금 고려해야 할 두 가지 옵션이 있습니다. 하나는 드릴 다운 보고서를 작성하여 사용 가능한 경우 합계가있는 각 레벨의 데이터를 표시하는 것입니다. 예를 들면 다음과 같습니다.

다른 하나는 루트에 데이터를 합산하고 상위 합계 만있는 보고서에 간단한 테이블을 표시하는 것입니다. 예를 들어 :

Level1a SUM_LEVEL1A_AND_ALL_CHILDREN_DATA 
Level1b SUM_LEVEL1B_AND_ALL_CHILDREN_DATA 
Level1c SUM_LEVEL1C_AND_ALL_CHILDREN_DATA 

'내가 수행 한 인터넷 검색 작업을 드릴 다운 보고서 (유용 할 듯 링크 here가 도착하는 방법을 알아낼 수는 없지만, 난 그냥 나오지 않았어 그것을 작동시키지 마십시오).

데이터베이스 스키마를 변경하는 것은 옵션이 아닙니다.

누구든지 시작하기 위해 사용할 수있는 좋은 자료를 알고 있습니까? 아니면 진행 방법에 대한 아이디어가 있습니까? 나는 마침내 이것에 대한 해결책을 발견

답변

0

난 아무것도 실종 알려줘

....

공통 테이블 식 (CTE)이 좋은 시작이었습니다.내가 만든 유일한 변경은 재귀 적 정의에있었습니다. 각 자식에 대한 직계 부모의 ID를 수집하는 대신 조부모의 ID (직계 부모가 가진 부모 ID)를 할당했습니다. 이것은 모든 어린이들이 계층 구조에서 한 단계 만 움직이는 대신 궁극적 인 부모 ID를 할당 받았다는 것을 의미했습니다. 거기에서, 이것을 보고서에서 사용하는 것은 매우 간단했습니다.

CTE를 자체 스토어드 프로 시저에 넣었습니다. 유일한 목적은 전체 계층 구조를 다시 가져 오는 것입니다. 거기에서 CTE와 다른 저장 프로 시저를 결합한 다른 저장 프로 시저를 만들었습니다. 현재 필터를 적용하고 최종 결과 집합을 반환했습니다.