Тип иерархии, которую вы пытаетесь сделать, называется размером родительского ребенка. SSAS будет использовать рекурсивные соединения для «взорвать» ваши данные в форме дерева.
Но ваш стол, как вы его описываете, немного запутан. Поэтому я предлагаю решение, которое требует, чтобы вы немного пересмотрели свой стол. Классическим родитель-ребенок будет иметь для каждого узла (запись) в иерархии:
- ключ (ID) для узла
- Дословный текст (Имя) для узла
- Внешний ключ называется родительский
В вашем примере столбец с надписью «parent» представляется излишним. Последний столбец в вашем примере (так называемый «CatID») - это то, как обычно выглядит родительский размер. Если вы считаете, что каждая запись в таблице является «дочерним», родительский элемент дочернего элемента действует как указатель назад к какой-либо записи, которая владеет или содержит эту запись. На самом высоком уровне иерархии записи не будут иметь родителя, поэтому для столбца Родитель установлено значение NULL.
Переименуйте второй «CatID» в «parent» и удалите или переименуйте исходный столбец «Родитель» (он вам не нужен). Если вам настроить ваш стол, как я полагаю, вы должны проверить, что самый высокий уровень является правильным, выполнив следующий запрос:
SELECT CatID, CatName, parent FROM mytable WHERE (parent IS NULL)
Затем, чтобы получить следующий уровень вниз запустить следующий запрос:
SELECT HighestLevel.CatID, HighestLevel.CatName, HighestLevel.parent, Level2.CatID AS Level2ID, Level2.CatName AS Level2Name
FROM mytable AS HighestLevel
INNER JOIN mytable AS Level2 ON HighestLevel.CatID = Level2.parent
WHERE (HighestLevel.parent IS NULL)
Обратите внимание на рекурсивный INNER JOIN. Выполнить по крайней мере, еще один запрос, чтобы просмотреть еще один уровень вниз, чтобы убедиться, что ключи «расширение», как вы ожидаете:
SELECT HighestLevel.CatID, HighestLevel.CatName, HighestLevel.parent, Level2.CatID AS Level2ID, Level2.CatName AS Level2Name, Level3.CatID AS Level3ID, Level3.CatName AS Level3Name
FROM mytable AS HighestLevel
INNER JOIN mytable AS Level2 ON HighestLevel.CatID = Level2.parent
INNER JOIN mytable AS Level3 ON Level2.CatID = Level3.parent
WHERE (HighestLevel.parent IS NULL)
Вы можете продолжать добавлять уровни по мере необходимости, чтобы убедить себя в том, что данные верны. Это, по сути, то, что делает SSAS, когда он создает иерархию родитель-ребенка.
Наконец, вы добавите эту таблицу в DSV и создадите размер родительского ребенка. Это немного сложнее, и это выглядит как a great starter article. SSAS будет продолжать добавлять уровни по мере необходимости, пока не закончится информация.