业务问题 - 使用分析数据了解流程后果。
以下是我们迄今为止所做的工作:
在最终报告输出中,我们最终得到每个最后一步开始的路径列表:
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)启动了该过程。假设只有用户B完成,其他四个没有。由于这是一个简单的例子(没有分支),我们希望输出看起来如下:
Step Unique Users
1 5
2 5
3 4
4 2
5 1
我能想到的最简单的解决方案是获取每个hierarchyID.ToString(),将其解析为一组子路径,JOIN回到字典表,然后使用GROUP BY输出。
考虑到数据量,我想使用内置的HierarchyID函数,例如: IsAncestorOf。
我有什么想法或想法可以写这个吗?也许是一个递归的CTE?
答案 0 :(得分:1)
重组数据可能有助于此。例如,像这样构造数据:
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
答案 1 :(得分:0)
我不熟悉hierarchyid,但将数据拆分成块进行分析看起来就像问题数字表非常适合。加入一个数字表来对照余波中的各个子串,并且不应该太难将整个事物视为一个表并在运行中进行分析,而不需要任何非设置操作。