Предотвращение агрегации по атрибутам измерений - PullRequest
1 голос
/ 17 октября 2019

Скажем, у меня есть эта схема (извините за слегка запутанный пример):

CREATE TABLE Sales
(
    ID INT PRIMARY KEY,
    Shop NVARCHAR(MAX),
    ShopLocationLeft NVARCHAR(MAX),
    ShopLocationRight NVARCHAR(MAX),
    Amount DECIMAL
)

INSERT INTO Sales VALUES
(1, 'Shop #1', 'New', 'York', 10000),
(2, 'Shop #2', 'New', 'Delhi', 1000),
(3, 'Shop #3', 'North', 'York', 5000)

Затем я создаю куб с Shop измерением с 3 атрибутами :

  • Name (столбец Shop)
  • Location Left (столбец ShopLocationLeft)
  • Location Right (столбец ShopLocationRight))

Я могу исследовать куб вдоль этого измерения:

SELECT
    [Amount] ON COLUMNS,
    [Shop].[Name].Children ON ROWS
FROM
    [Sales]

Чтобы получить:

        Amount
Shop #1 10000
Shop #2 1000
Shop #3 5000

Пока все хорошо.

Но используя другие атрибуты , такие как Location Left:

SELECT
    [Amount] ON COLUMNS,
    [Shop].[Location Left].Children ON ROWS
FROM
    [Sales]

Мы получаем:

      Amount
New   11000
North 5000

Таким образом, куб позволяет исследовать и агрегировать на 1 уровень глубже, чемизмерение, вдоль атрибутов, что делает их своего рода субразмерами .

Что в данном случае не имеет делового значения.

Я быложидая, что, как и SQL SELECT, вместо этого будет отображаться столбец Location Left:

        Amount
New     10000
New     1000
North   5000

Потому что для меня это измерение имеет 3 точки:

  • ('Shop #1', 'New', 'York')
  • ('Shop #2', 'New', 'Delhi')
  • ('Shop #3', 'North', 'York')

Что следует считать атомарными объектами, которые не могут быть разбиты дальше.

Я понимаю, что это поведение может быть полезным (например, для имени и фамилии), но в этом случае оно не имеет никакого смысла.

Или, если бы я определил иерархию n-уровней для атрибута (например, страна -> город -> местоположение), это тоже было бы логично, так как я бы явно попросил более глубокое исследованиеи агрегация.

Как предотвратить такое поведение, если оно приведет к несоответствующим результатам?

1 Ответ

1 голос
/ 21 октября 2019

Если у вас есть атрибут Location Left в вашем измерении Shop, вы можете выбрать ID в качестве столбца Key и Location Left в качестве столбца Name этого атрибута (на вкладке Dimension structure - щелкните правой кнопкой мышив атрибуте Location Left и выберите свойства, тогда вы будете искать свойства KeyColumn и NameColumn). Если вы сделаете это, вы увидите, что «Новое» будет отображаться в результатах несколько раз.

Если у вас есть атрибут, скажем Location Left и выберите тот же Location Left, что и в столбце Key, и какВ столбце Name вы увидите только одну запись для Location Left Имя.

...