2009-06-28 2 views
0

У меня есть достаточно большой DataTable структурированную что-то вроде этого:Как я могу визуализировать «сломанный» иерархический набор данных?

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 

и т.д ....

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

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

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

примечание:

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

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

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

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

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

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

+0

Ваш образец данных разбит по-разному, это действительно трудно понять.Приведите пример правильных данных (строгая иерархия) и неверные данные. – RedFilter

ответ

0

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

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

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

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

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

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

Смежные вопросы