2013-08-19 2 views
1

Я использую SQL Server 2008 R2.Функция Fillter В запросе MDX не работает?

Я использую запрос SSAS и MDX для выбора данных из Adventure Works Хранилище данных.

И мне нужно получить данные от двух мер [Measures].[Internet Sales Amount] и [Measures].[Internet Tax Amount] где значения в [Measures].[Internet Sales Amount] мера больше 2644017.71.

Но мой запрос не работает?

Select 
Filter(
     { 
      [Measures].[Internet Sales Amount] 
      ,[Measures].[Internet Tax Amount] 
     } , 
     [Measures].[Internet Sales Amount] >= 2644017.71 
    ) on columns, 
head(
     [Customer].[Customer Geography].[Country], 
     3 
    )on rows 
From [Adventure Works] 

enter image description here

ответ

3

Вы должны использовать

Select { 
      [Measures].[Internet Sales Amount] 
      ,[Measures].[Internet Tax Amount] 
     } 
on columns, 
head(
    Filter(
     [Customer].[Customer Geography].[Country] , 
     [Measures].[Internet Sales Amount] >= 2644017.71 
    ), 
    3) 
on rows 
From [Adventure Works] 

, как вы хотите, чтобы отфильтровать строки (я. Е. Страны), а не столбцы (меры,).

Для уверенности: Этот код обеспечивает первые три страны в том порядке, в котором атрибут Country сконфигурирован в дизайне куба (обычно в алфавитном порядке). Если это не то, что вы хотите, вы можете использовать использовать TopCount() вместо Head(), который обеспечивает три страны с самыми высокими продажами:

Select { 
      [Measures].[Internet Sales Amount] 
      ,[Measures].[Internet Tax Amount] 
     } 
on columns, 
TopCount(
    Filter(
     [Customer].[Customer Geography].[Country] , 
     [Measures].[Internet Sales Amount] >= 2644017.71 
     ), 
    3, [Measures].[Internet Sales Amount]) 
on rows 
From [Adventure Works] 
+1

Похоже, что вы оставили из ссылки на страны. Возможно, вы хотите отредактировать, чтобы исправить? – mmarie

+0

О, глупая ошибка копирования и вставки, я исправлю это. Спасибо! – FrankPl