Я новичок в службах SSAS, и у меня возникла проблема, которую я не могу решить. Давайте начнем с двух таблиц, это таблица фактов со счетами и их значениями:
Fact Table
==============
Account Value
==============
1 10
2 20
3 30
Затем есть таблица иерархии учетных записей, которая питает измерение. Это измерение содержит иерархию учетных записей. Учетные записи сгруппированы в группы, и одна и та же учетная запись может быть помещена в несколько разных групп столько раз, сколько необходимо. Случай наличия одной и той же учетной записи два или более раз внутри одной и той же Группы невозможен. Из соображений производительности иерархия натурализуется (это правильный термин?) с использованием свойства HideMemberIf
. Группы не имеют ценности сами по себе, они получают свою ценность от совокупности своих детей. Настоящая иерархия имеет 16 уровней, но для простоты приведем пример всего с 4 уровнями:
Dim Groups-Accounts
========================================
Level 0 Level 1 Level 2 Level 3
========================================
Group 0 Group 0 Group 0 Group 0
Group 0 Group 1 Group 1 Group 1 (empty group)
Group 0 Group 2 Group 2 Group 2
Group 0 Group 2 Account 1 Account 1
Group 0 Group 3 Group 3 Group 3
Group 0 Group 3 Account 2 Account 2
Group 0 Group 3 Account 3 Account 3
Group 0 Group 4 Group 4 Group 4
Group 0 Group 4 Group 5 Group 5
Group 0 Group 4 Group 5 Account 2
Group 0 Group 4 Group 5 Account 3
Group 6 Group 6 Group 6 Group 6 (empty group)
При навигации по измерению это приведет к чему-то вроде:
======================================
Level 0 Level 1 Level 2 Level 3
======================================
Group 0
Group 1
Group 2
Account 1
Group 3
Account 2
Account 3
Group 4
Group 5
Account 2
Account 3
Group 6
Цель состоит в том, чтобы связать последний уровень натурализованной иерархии, в данном случае уровень 3, с соответствующим значением в таблице фактов:
=================================================
Level 0 Level 1 Level 2 Level 3 Value
=================================================
Group 0 110
Group 1 0
Group 2 10
Account 1 10
Group 3 50
Account 2 20
Account 3 30
Group 4 50
Group 5 50
Account 2 20
Account 3 30
Group 6 0
Эта проблема? При обработке измерения SSAS сообщает, что Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: 'CT_DimGroupsAccounts', Column: 'Level_3', Value: 'Account 2'. The attribute is 'Level_3'.
. Это верно, поскольку учетная запись 2 и учетная запись 3 дублируются в атрибуте уровня 3. Если я скажу SSAS игнорировать ошибки повторяющихся ключей, то обработка завершится успешно. Однако при навигации по результирующему кубу результат будет таким:
=================================================
Level 0 Level 1 Level 2 Level 3 Value
=================================================
Group 0 60
Group 1 0
Group 2 10
Account 1 10
Group 3 50
Account 2 20
Account 3 30
Group 4 0
Group 5 0
Group 6 0
Дублированные ключи (счета 2 и 3 как дочерние элементы группы 5) отсутствуют в измерении, и результат неверный. Как я могу добиться правильного результата, учитывая этот сценарий?