2015-04-22 3 views
2

Мне нужно написать отчет из моего куба, который выглядит примерно следующим образом. enter image description here (фиктивные данные)Как фильтровать меру несколько раз в кубе

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

Мой куб настроен следующим образом Свидания размера enter image description here

И сам куб enter image description here

В настоящее время я не реализовал части категории продукта.

Я борюсь с тем, как писать запрос MDX, который может вернуть прибыль/валовую прибыль за один день, а затем неделю и так далее.

я могу вернуть его само по себе, как так

SELECT {[Measures].[Gross Profit],[Measures].[Price]} ON COLUMNS 
From [Cube] 
WHERE [Date].[Date Key].[2015-04-22]; 

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

Может ли кто-нибудь дать мне указатель в правильном направлении здесь?

EDIT: Кажется, в основном работают с использованием подхода @Akshay Rane описанный, однако я не могу получить один из моих мер, направленных на работу

MEMBER [This Week] as 
(PeriodsToDate([Date].[Fiscal Week Date].[Fiscal Week],StrToMember('[Date].[Fiscal Week Date].[Date Key].&[' + '20140401' + ']')) 
,[Measures].[Merchandise Gross Profit]) 

дает мне ошибку:

The function expects a string or numeric expression for the argument. A tuple set expression was used. 

Все указатели здесь?

ответ

2

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

Это можно сделать в кубе [Adventure Works] следующим образом.

WITH 

MEMBER [Today] as 
    ([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER) 

MEMBER [Last Week] as 
    AGGREGATE ( 
        { [Date].[Date].CURRENTMEMBER.lag(6) : [Date].[Date].CURRENTMEMBER } 
        , [Measures].[Internet Sales Amount] 
       ) 

SELECT 
     { [Today], [Last Week] } ON 0, 

     { ([Product].[Product Categories].[Category], [Date].[Date].[Date]) } ON 1 

FROM 

( 
    /*FILTERING ON SPECIFIC DATE USING SUBCUBE*/ 
    SELECT [Date].[Date].&[20070715] ON 0 
    FROM [Adventure Works] 
) 
+0

Выглядит хорошо, вы можете взглянуть на мое редактирование и посмотреть, где я ошибся? –

+1

Да, функция PeriodsToDate вернет вам набор элементов измерения, но кортеж ожидает ** только одного ** члена из одного измерения и ** не набора членов **, следовательно, он дает ошибку, поэтому по порядку для агрегации по набору членов вам необходимо использовать функцию [Агрегат] (https://msdn.microsoft.com/en-us/library/ms145524.aspx). 'Aggregate (PeriodsToDate ([Date]. [Fiscal Week Date].] [Fiscal Week], StrToMember ('[Дата]. [Дата финансовой недели]. [Дата ключа]. & [' + '20140401' + ']')) , [Меры]. [Валовая прибыль товара]) ' –

0

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

SELECT 
    { 
     [Date].[Calendar].[Month].&[2006]&[7] 
    ,[Date].[Calendar].[Date].&[20050220] 
    } 
    * 
    { 
     [Measures].[Order Quantity] 
    ,[Measures].[Internet Sales Amount] 
    } ON COLUMNS 
,{[Product].[Category].Children} ON ROWS 
FROM [Adventure Works]; 

выше дает результаты, как это:

enter image description here

Смежные вопросы