SSRS не показывает все строки по уровням (иерархия)

#sql #reporting-services #ssrs-2012

#sql #службы отчетов #ssrs-2012

Вопрос:

Хорошо, ребята, это сводит меня с ума…

У меня есть отчет, в котором содержатся подробные сведения о ряде функций. Эти функции могут зависать от других, существовать сами по себе или и то, и другое.

В результате запроса у меня есть следующие данные:

 Feature_ID   Parent_ID
24            
24          25
20            
26          12
12            
21          23
26          20
22            
24          23
23          26
24          27
27          28
24          22
29          20
23            
25            
27          29
22          26
28          12
  

Как вы можете видеть, некоторые функции помещаются в нескольких местах в иерархии. Однако все, что я получаю в отчете, это:

Вывод SSRS

Я группируюсь по Feature_ID, рекурсивный родитель — Parent_ID . Чего мне не хватает?

Комментарии:

1. Каким должен быть ваш результат? Я вижу, что ваш табликс показывает неправильные данные, поскольку должно быть 24 level 0 , так какое выражение уровня вы используете?

2. @alejandrozuleta Я использую =level() для поля уровня.

3. Каков ожидаемый результат?

4. Успокойтесь, ребята. Я взломал его! Я извлек полный путь иерархии для каждого Feature_ID и соответствующий путь для каждого родителя как часть запроса.

Ответ №1:

По вашей формулировке и неожиданному результату создается впечатление, что вы ищете список различных уровней и функций. Надеюсь, следующее полезно. Если нет, возможно, вы можете предоставить некоторый дополнительный контекст, чтобы понять, что вы ищете.

 declare @table table (Feature_ID int, Parent_ID int);

insert @table values
(24,null),
(24,25),
(20,null),
(26,12),
(12,null),
(21,23),
(26,20),
(22,null),
(24,23),
(23,26),
(24,27),
(27,28),
(24,22),
(29,20),
(23,null),
(25,null),
(27,29),
(22,26),
(28,12);

select * from @table order by 1,2;
select * from @table order by 2,1;

with cte as (
        select  Feature_ID, Parent_ID, 0 [Level], CAST(Feature_ID as varchar(200)) [Path]
        from    @table
        where   Parent_ID is null

        union   all

        select  t.Feature_ID, t.Parent_ID, c.[Level]   1, cast(c.[Path]   '|'   CAST(t.Feature_ID as varchar(200)) as varchar(200))
        from    @table t
        join    cte c
                on c.Feature_ID = t.Parent_ID
)
select  distinct [Level], Feature_ID
from    cte
order   by [Level], Feature_ID;
  

Это дает следующий результат:

 Level   Feature_ID
0   12
0   20
0   22
0   23
0   24
0   25
1   21
1   24
1   26
1   28
1   29
2   22
2   23
2   27
3   21
3   24