2009-09-23 5 views
1

Я довольно новичок в измерениях «многие-ко-многим», но у меня есть сценарий для решения, который поднял пару вопросов, которые я не могу решить самостоятельно ... Таким образом, ваша помощь будет высоко ценим!Множество измерений - нужна помощь в MDX

Сценарий:

  1. Существует родитель-ребенок Категория габарит, который имеет рекурсивную Категории иерархия с NonLeafDataVisible набора
  2. Существует регулярное измерение продуктов, что отрежет таблицу фактов
  3. Там является таблицей Product-category для многих ко многим, которая определяет взаимосвязь между ними. Важно отметить, что продукт может принадлежать любому уровню иерархии категорий, то есть определенная категория может иметь как непосредственно назначенные продукты, так и подкатегории.
  4. Существует таблица фактов, в которой содержится FK для продаваемого Продукта, а также FK к его категории. FK необходим, потому что

У меня есть все, что смоделировано в BIDS, использование измерений задается между каждым из измерений и фактами, отношение между многими и многими между категориями и таблицей транзакций находится в место на месте. Другими словами, все, кажется, вроде нормально ..

мне теперь нужно написать MDX, который я хотел бы использовать, чтобы создать отчет, который показывает что-то вроде этого:

Lev1 Lev2 Lev3 Prod Count 

-A  
    -AA    6 
     -AA   2 
       P6  1 
       P5  1 
     -AAA   2 
       P1  1 
       P2  1 
     -AAB   2 
       P3  1 
       P4  1 
    +BB 

Следующая MDX почти возвращает то, что мне нужно :

SELECT 
[Measures].[SALES Count] ON COLUMNS, 
NONEMPTYCROSSJOIN(
     DESCENDANTS([Category].[PARENTCATEGORY].[Level 01].MEMBERS), 
     [Product].[Prod KEY].[Prod KEY].MEMBERS, 
     [Measures].[Measures].[Bridge Distinct Count], 
     [Measures].[SALES Count], 
     2) ON ROWS 
FROM [Sales] 

проблема, что у меня есть то, что для каждой из категорий, не листовыми, перекрестное соединение возвращает действительное пересечение с каждым из продуктов, который был продан за это + все подкатегории. Следовательно, набор результатов содержит слишком много избыточных данных, и, кроме того, я не могу найти способ отфильтровать избыточность в отчете SSRS.

Любая идея о том, как переписать MDX так, чтобы он возвращал только результат, указанный выше?

Еще одна проблема заключается в том, что если я создаю ролевое измерение категории, которое я установил для среза непосредственно данных транзакций, то числа, которые я получаю при просмотре куба, полностью отключены ... Кажется, что SSAS что-то делает во время обработки (но это не операторы SQL, которые он запускает в OLTP, поскольку они остаются точно такими же), что вызывает проблему, но я понятия не имею, что. Есть идеи?

Приветствия, Alex

ответ

0

Я думаю, я нашел решение этой проблемы, с помощью следующего запроса:.

WITH 
    MEMBER [Measures].[Visible] AS 
    IsLeaf([DIM Eco Res Category].[PARENTCATEGORY].CurrentMember) 
    MEMBER [Measures].[CurrentProd] AS 
    IIF 
    (
     [Measures].[Visible] 
    ,[DIM Eco Res Product].[Prod KEY].CurrentMember.Name 
    ,"" 
    ) 
SELECT 
    { 
    [Measures].[Visible] 
    ,[Measures].[CurrentProd] 
    ,[Measures].[FACT PRODSALES Count] 
    } ON COLUMNS 
,NonEmptyCrossJoin 
    (
    Descendants 
    (
     [DIM Eco Res Product].[Prod KEY].[(All)], 
    ,Leaves 
    ) 
    ,Descendants([DIM Eco Res Category].[PARENTCATEGORY].[(All)]) 
    ,[Measures].[FACT PRODSALES Count] 
    ,2 
) 
    DIMENSION PROPERTIES 
    MEMBER_CAPTION 
    ,MEMBER_UNIQUE_NAME 
    ,PARENT_UNIQUE_NAME 
    ,LEVEL_NUMBER 
    ON ROWS 
FROM [Sales]; 

В докладе я использовать [меры] [CurrentProd] как источник для столбца продукта и, похоже, работает до сих пор.