SSAS — как обрабатывать измерения с действительными дубликатами?

Я новичок в службах 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) отсутствуют в измерении, и результат неверный. Как я могу добиться правильного результата, учитывая этот сценарий?


person STaRGaZeR    schedule 15.09.2013    source источник
comment
Если транзакция происходит на счете 2, что определяет, проходит ли она через группу 3 или группу 5? Или он всегда проходит через оба?   -  person mmarie    schedule 16.09.2013
comment
В этом случае он всегда должен проходить через обе группы. А в реальном измерении, если учетная запись обновляется, каждое вхождение этой учетной записи в измерении должно обновляться.   -  person STaRGaZeR    schedule 16.09.2013
comment
посмотрите мой повтор здесь, надеюсь, это поможет   -  person maozx    schedule 07.01.2016


Ответы (2)


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

1) для каждого атрибута в вашей структуре измерения в разделе свойств у вас есть определенные ключевые столбцы. По умолчанию используется сам столбец. Если у вас есть дубликаты, разверните определенный ключ для атрибута, чтобы включить один или несколько столбцов: следующим образом:

Атрибут -> Ключевой столбец

------------------- -------------------

MyTopLevelAttribute -> MyTopLevelAttribute

NextLevel1Attribute -> NextLevel1Attribute + uniquetablePK

Если у вас нет уникального ключа, вы все равно можете построить ключевые столбцы более низкого уровня, используя другие столбцы, которые будут предоставлять уникальное значение, но вы должны получить подход. Ключевым моментом является расширение атрибута KeyColumns.

person Andrew Peterson    schedule 12.12.2017

Дайте правильную связь между атрибутами. Создайте родительские дочерние иерархии и установите связь между ними. Это должно работать нормально.

person sunil    schedule 16.09.2013