Как я могу визуализировать «разбитый» иерархический набор данных? - PullRequest
0 голосов
/ 28 июня 2009

У меня достаточно большая структура данных, похожая на эту:

 StaffNo    Grade    Direct   Boss2    Boss3    Boss4    Boss5    Boss6
 -------    -----    -----    -----    -----    -----    -----    -----
 10001        1      10002    10002    10057    10094    10043    10099
 10002        2      10057    NULL     10057    10094    10043    10099
 10003        1      10004    10004    10057    10094    10043    10099  
 10004        2      10057    NULL     10057    10094    10043    10099  
 10057        3      10094    NULL     NULL     10094    10043    10099

и т.д ....

т.е. уникальный идентификатор, их уровень (класс) в иерархии, запись идентификатора их боссов и идентификаторы супервизоров выше . (2,3,4 и т. Д. Относится к боссу именно этого класса).

Система опирается на строгую иерархию - если вы мой босс (/ родитель), то ваш босс должен быть моим прародителем.

К сожалению, это правило не применяется в модели данных, и в конечном итоге данные поступают из других систем, которые даже не знают о правиле, не говоря уже о его соблюдении. Так что у нас с вами может быть один и тот же босс, но наш босс не будет таким же.

Примечание:

  • Я не могу изменить модель данных
  • Я не могу исправить данные в источнике.

Так (на данный момент) я должен исправить данные, как только они будут на месте. Раз в две недели кто-то сделает что-то, что сломает модель, и мне нужно будет немного изменить процедуры, чтобы решить. Не идеально, но я застрял с этим в течение следующих шести месяцев.

В любом случае, конкретные запросы легко создавать, но мне трудно отслеживать общую картину. Приложение, которое работает на этом, работает без жалоб, но навигация по системе становится чрезвычайно запутанной. Итак, мой вопрос:

  • Может ли кто-нибудь порекомендовать инструмент (или методику) для генерации какой-либо диаграммы "сломанного дерева" в подобных обстоятельствах?

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

Примечание : В данный момент это находится в базе данных SQL Server, но я открыт для идей, использующих C #, Perl или Python.

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

Я бы начал со строгой иерархической структуры оргструктуры в древовидной структуре, используя необработанные данные только для прямых отчетов

- 10099
    - 10043
        - 10094
            - 10057
                - 10002
                    - 10001
                - 10004
                    - 10003

Получив это, вы можете запустить процедуры аудита, чтобы убедиться, что все данные bossX правильно представлены в этом дереве.

Это предполагает, что вы доверяете прямым отчетам, по крайней мере, достаточно, чтобы построить дерево в качестве базовой линии, конечно. Если прямые отчеты наиболее вероятны, у вас есть большие проблемы.

0 голосов
/ 07 сентября 2009

список всех записей, где boss1 имеет более одного boss2:

select staffno, boss1
from brokentable
where boss1 in
(
 select boss1
 from brokentable
 where count(boss2) > 1
)
order by staffno
...