1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| -- Create a "Common Table Expression" (aka CTE) in order to built the metric's hierarchy
WITH CTE_HierarchyMetrics ([Level], ParentID, MemberID, [Name], [Label], [Order], [Frequency], Normalisation, Leaf, Display, KPI)
AS
(
-- Root (level 0) : take every KPIs
SELECT 0 As [Level], Cast(ROW_NUMBER()
OVER (ORDER BY [Order] ASC) As varchar(MAX)) AS ParentID, MemberID, [Name], [Label], [Order], [Frequency], Normalisation, Leaf, Display, KPI
FROM [MaTable].[dbo].[D_Metrics]
WHERE ([Hierarchy] IS NULL) AND ([Label] = 'KPIs')
UNION ALL
-- Recursive member definition : the other levels
SELECT [Level]+1 As [Level], C.ParentID + '.' + Cast(ROW_NUMBER()
OVER (ORDER BY D.[Order]) As varchar(MAX)) AS ParentID, D.MemberID, D.[Name], D.[Label], D.[Order], D.[Frequency], D.Normalisation, D.Leaf, D.Display, D.KPI
FROM [MaTable].[dbo].[D_Metrics] D
INNER JOIN CTE_HierarchyMetrics As C ON D.Hierarchy = C.[Label]
)
-- Populate the TempMeasure table with the metric's hierarchy
SELECT DISTINCT [Level], ParentID, MemberID, [Name], [Label], [Order], [Frequency], Normalisation, Leaf, Display, KPI
FROM CTE_HierarchyMetrics As C
LEFT OUTER JOIN A_Fedict_SC_MeasureGroup As A ON A.Metrics_MemberID = C.MemberID
WHERE (Level > 0)
ORDER BY ParentID ASC |