Бизнес-проблема - понять последствия процесса, используя аналитические данные.
Вот что мы сделали до сих пор:
- Создание таблицы словаря с каждым возможным шагом процесса
- Найти каждый процесс "запуска"
- Найти последний шаг для каждого старта
- Присоединить словарную таблицу к последнему шагу, чтобы найти путь к последнему шагу
В итоговом отчете мы получаем список путей для каждого начала каждого последнего шага:
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?