Совокупное количество путей с использованием HierarchyID - PullRequest
2 голосов
/ 03 марта 2010

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

Вот что мы сделали до сих пор:

  1. Создание таблицы словаря с каждым возможным шагом процесса
  2. Найти каждый процесс "запуска"
  3. Найти последний шаг для каждого старта
  4. Присоединить словарную таблицу к последнему шагу, чтобы найти путь к последнему шагу

В итоговом отчете мы получаем список путей для каждого начала каждого последнего шага:

User   Fallout Step HierarchyID.ToString()
A      1/1/1
B      1/1/1/1/1
C      1/1/1/1
D      1/1/1
E      1/1

Это означает, что пять пользователей (A-E) запустили процесс. Предположим, только пользователь Б закончил, остальные четыре не сделали. Поскольку это простой пример (без ветвления), мы хотим, чтобы вывод выглядел следующим образом:

Step   Unique Users
1      5
2      5
3      4
4      2
5      1

Самое простое решение, которое я мог бы придумать, - это взять каждый иерархический ID.ToString (), разобрать его в набор подпутей, вернуться к таблице словаря и вывести с использованием GROUP BY.

Учитывая объем данных, я бы хотел использовать встроенные функции HierarchyID, например, IsAncestorOf.

Есть идеи или мысли, как я мог написать это? Может быть, рекурсивный CTE?

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Реструктуризация данных может помочь в этом. Например, структурирование данных выглядит так:

User  Step  Process#
----  ----  --------
A     1     1
A     2     1
A     3     1
B     1     2
B     2     2
B     3     2
B     4     2
B     5     2
E     1     3
E     2     3
E     1     4
E     2     4
E     3     4

Позволяет запустить следующий запрос:

select step, 
  count(distinct process#) as process_iterations, 
  count(distinct user) as unique_users
from stepdata
group by step
order by step;

, который возвращает:

Step  Process_Iterations  Unique_Users
----  ------------------  ------------
1     4                   3
2     4                   3
3     3                   3
4     1                   1
5     1                   1
0 голосов
/ 12 марта 2010

Я не знаком с иерархией, но разбиение этих данных на блоки для анализа выглядит так, будто таблицы с номерами проблем очень хороши. Соедините таблицу чисел с отдельными подстроками в выпадении, и не должно быть слишком сложно рассматривать все это как таблицу и анализировать ее на лету, без каких-либо неустановленных операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...