2015-06-05 3 views
1

У меня естьMDX Multi Level Select

Geography Dimension 
     -> Admin Hierarchy 
      -> Province level 
      -> District level 
      -> Facility level. 

Теперь я хочу, чтобы найти данные по географии, когда область = 'BeiJing' и объект = 'тест'. Как мне это сделать? я пишу MDX код вроде этого:

 SELECT 
     {} ON 0, 
     {[Geography.Admin].[BeiJing].[All Geography.Admin].[test]} ON 1 
FROM [EIDCube] 

, но он не работает. Как я могу получить все данные по провинции/району/объекту в качестве таблицы, когда я устанавливаю специальную провинцию и объект?

+1

фамилии, которые вы предоставили для своей структуры, не соответствуют указанным в запросе.вы говорите «Иерархия администратора», поэтому я ожидал бы иерархию под названием «[Admin]», но в скрипте он говорит «[Geography.Admin]», в то время как я ожидаю «[География]. [Admin]' – whytheq

+0

Привет Анжела. Кто-нибудь из нас вам помогал? Мы все время пытались помочь - у вас есть время, чтобы ответить на наши ответы? – whytheq

ответ

0

В AdvWrks следующие выдает ошибку

Query (4, 5) Иерархия География клиентов используется более чем один раз в функции Crossjoin.

Это брошено, когда я пытаюсь запустить следующее:

SELECT 
    [Measures].[Internet Sales Amount] ON 0 
, 
    [Customer].[Customer Geography].[Country] 
    * 
    [Customer].[Customer Geography].[State-Province] ON 1 
FROM [Adventure Works]; 

Обойти это использовать атрибут иерархии которых уровни иерархии [Customer Geography] пользователя состоит из, как это:

SELECT 
    [Measures].[Internet Sales Amount] ON 0 
, 
    [Country].[Country] 
    * 
    [State-Province].[State-Province] ON 1 
FROM [Adventure Works]; 

Теперь, если я хочу Australia и Queensland я могу перекрестную присоединиться пару отдельных наборов элементов:

SELECT 
    [Measures].[Internet Sales Amount] ON 0 
, 
    {[Country].[Country].[Australia]} 
    * 
    {[State-Province].[State-Province].[Queensland]} ON 1 
FROM [Adventure Works]; 

Результаты в этом:

enter image description here


Редактировать

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

SELECT 
    {[Measures].[someMeasureInCube]} ON 0 
, 
    {[Province].[Province].[BeiJing]} 
* {[Facility].[Facility].[test]} ON 1 
FROM [EIDCube]; 
+0

это не работает. Ошибка - это больше, чем одна иерархия. 1 –

+0

@AngelaTian this technique _Works_ - сценарий, который я показал с использованием «AdvWrks», является полностью протестированным скриптом - пожалуйста, адаптируйте его к своей среде. Я не знаю вашу точную среду, так как ваш первоначальный вопрос не дает достаточно подробностей, поэтому мой последний скрипт - частичная догадка. Пожалуйста, добавьте отпечаток из SSMS в свой первоначальный вопрос, чтобы мы могли видеть точные имена ваших иерархий и уровней. – whytheq

-1

Я думаю, что вы можете использовать это:

SELECT 
     {} ON 0, 
     ([Geography].[Admin].[BeiJing],[Geography].[Admin].[Province].[District].[test]) ON 1 
FROM [EIDCube] 

Edit 1: Мой предыдущий ответ был неправильным.

Так что теперь я думаю, что лучшее решение будет создать новую иерархию [admin2] для измерения географии, состоящее из уровня [Facility] только и использовать этот запрос.

SELECT 
     {} ON 0, 
     ([Geography].[Admin].[BeiJing],[Geography].[Admin2].[Facility].[test]) ON 1 
FROM [EIDCube] 
+0

нет, он не работает ... –

+0

@ polux2 вы только что попытались создать кортеж из двух членов из той же иерархии - как это могло когда-либо работать? – whytheq

0

Если предположить, что структура hierarchichal быть

Geography-->Geography.Admin-->Province-->District-->Facility 
(dimension) (hierarchy)  (level 1) (level 2) (level 3) 

Вот MDX сделать это долгий путь (короткий путь быть непосредственно кормил значения в запросе, что удивительно не работает)

select [Geography].[Geography.Admin].CHILDREN 
    having 
     [Geography].[Geography.Admin].currentmember.member_caption = "test" and 
     ancestors([Geography].[Geography.Admin].currentmember, 3).item(0).member_caption = "BeiJing" 
    on 1, 
{} on 0 
from EIDCube]