SSAS OLAP MDX и отношения - PullRequest
0 голосов
/ 24 июня 2011

Я новичок в OLAP и до сих пор не знаю, как создать связь между двумя или более объектами.

Я основываю свой куб на представлениях.Для простоты давайте назовем их так:

viewParent (ParentID PK)

viewChild (ChildID PK, ParentID FK)

эти представления имеют большеполя, но они не важны для этого вопроса.

в моем источнике данных я определил связь между viewParent и viewChild, используя ParentID для ссылки.

Что касается мер, я был вынужден создать отдельные меры для родителей и детей.

в моем запросе MDX эта связь, похоже, не навязана.Если я выберу количество записей для родителя, потомка и добавлю несколько фильтров для родителя, количество дочерних элементов не будет отображаться.

SELECT {
    [Measures].[ParentCount],[Measures].[ChildCount]
} ON COLUMNS
FROM [Cube]
WHERE {
    (
    {[Time].[Month].&[2011-06-01T00:00:00]}
    ,{[SomeDimension].&[Foo]}
    )
}

выбранный ParentCount верен, но на ChildCount не влияет ни один изфильтры (потому что они являются родительскими фильтрами).Тем не менее, поскольку я определил отношение, как я могу воспользоваться этим для фильтрации дочерних элементов по родителю с помощью предложения WHERE?

Факты:

viewParent, viewChild

Размеры:

ParentDimension (содержит атрибуты из родительского представления, по которым я собирался) ChildDimension (содержит атрибуты издетский взгляд, на котором я собираюсь)

Это просто идея, которую я придумал, но, возможно, мой дизайн / отношения нарушены.

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Разобрался.

Глядя на вкладку измерений куба в vs2008, стало очевидно.

мои отношения между измерением и мерами были установлены неправильно. Мое измерение было основано на uniqueID, который соответствует parentView uniqueID.

Я изменил отношение (SomeDimension) к ключу в другом поле идентификатора (совместно используемом parentView и childView), назовем его ViewID.

и мои запросы MDX начали работать как положено. Значение, WHERE предложение затронуло обе группы мер: родитель и потомок.

0 голосов
/ 25 июня 2011

Возможно, я слишком внимательно читаю формулировку, которую вы выбрали в своем описании, но вы можете уточнить, что вы подразумеваете под фильтрами. Технически предложение WHERE не является фильтром, но вместо этого идентифицирует ось среза для результирующего набора данных. Если вы имеете в виду FILTER, то вам может понадобиться функция MDX с именем FILTER , которую вы можете применить к выражению набора.

То, что вы можете попробовать, это перестроить ваш запрос MDX, чтобы определить ОБА Ось - ROWS и COLUMNS.

SELECT 
{
    [Measures].[ParentCount],[Measures].[ChildCount]
} ON COLUMNS,
{
    [SomeDimension].&[Foo]
} ON ROWS
FROM [Cube]
WHERE ([Time].[Month].&[2011-06-01T00:00:00])
...