0

У меня есть таблица, в которой хранится информация о некоторых ветвях и иерархиях. Информация не в хранятся таким образом, что может быть использовано в размерном моделировании, так что после многих преобразований и extractation я в конечном итоге с этим:Связывание родительской иерархии mutttiple

Hierarchy

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

SELECT 
    distinct 
     nelem.Element n0, 
     primul.Element n1, 
     doilea.Element n2, 
     treilea.Element n3, 
     patrulea.Element n4 

FROM 
    [MIS].[dbo].[BedrockImportBST] nelem 
    left join [BedrockImportBST] primul on primul.Element=nelem.Value1 and primul.LineType in ('e','p') 
    left join [BedrockImportBST] doilea on doilea.Element=primul.Value1 and doilea.LineType in ('e','p') 
    left join [BedrockImportBST] treilea on treilea.Element=doilea.Value1 and treilea.LineType in ('e','p') 
    left join [BedrockImportBST] patrulea on patrulea.Element=treilea.Value1 and patrulea.LineType in ('e','p') 

Есть ли вешать назначить родитель-потомок realtionship идентификаторы к этому решению, так что перемещения будут recursiv?

+0

Пока число уровней в иерархии является фиксированной и вы также должны Идентификаторы для каждого из этих уровней, а не только ярлыки, которые я вижу на скриншоте, вы можете построить сглаженное измерение, имеющее отдельные атрибуты для каждого уровня. В нормальных условиях плоская иерархия будет работать лучше, чем иерархия родитель-ребенок в SSAS. Но чего именно вы пытаетесь достичь? –

+0

Salut George, voi continua in engleza pentru a intelege si restul daca vor avea nevoie. У меня нет идентификаторов только ярлыков, и я хочу создать представление, структурированное как ID, Parent_Id, Name ... Как вы можете видеть на первом притч-экране, 047 может иметь много путей иерархии (пример: 047/Inland (100%)/Konzern (100%)/Alle BST-Elemente si 047/Inland (ant.)/Europa (ant.)/Welt (ant.)/Alle BST-Elemente) –

+0

@GeorgeTanasie Я думаю, возможно, на cte или некоторое время на траверсы ... справа налево, где Alle BST-Elemente будет самым высоким уровнем, а 047 будет самым низким элементом, но я не могу понять, как его построить –

ответ

1

Затем для преобразования плоских данных в иерархию parent-child вы можете создавать уникальные идентификаторы с простыми объединениями, как показано ниже (я использовал FlatHierarchy как имя вашей таблицы). Я вижу, что конкретный элемент может появиться на нескольких уровнях и может иметь разные родители, которые, кажется немного странным, но здесь идет:

DECLARE @IDS TABLE 
(
    ID INT IDENTITY (1,1) NOT NULL, 
    Label varchar(50) 
) 
INSERT INTO @IDS (Label) 
SELECT n0 
FROM FlatHierarchy 
UNION 
SELECT n1 
FROM FlatHierarchy 
UNION 
SELECT n2 
FROM FlatHierarchy 
UNION 
SELECT n3 
FROM FlatHierarchy 
UNION 
SELECT n4 
FROM FlatHierarchy 
UNION 
SELECT n5 
FROM FlatHierarchy 
..... 
UNION 
SELECT n11 
FROM FlatHierarchy 


SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n0 
LEFT JOIN @IDS parent ON f.n1 = parent.Label 
UNION 
SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n1 
LEFT JOIN @IDS parent ON f.n2 = parent.Label 
UNION 
SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n2 
LEFT JOIN @IDS parent ON f.n3 = parent.Label 
UNION 
SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n3 
LEFT JOIN @IDS parent ON f.n4 = parent.Label 
UNION 
SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n4 
LEFT JOIN @IDS parent ON f.n5 = parent.Label 
..... 
UNION 
SELECT i.ID, parent.ID ParentID, i.Label 
FROM @IDS i 
INNER JOIN FlatHierarchy f ON i.Label = f.n10 
LEFT JOIN @IDS parent ON f.n11 = parent.Label 
Смежные вопросы