MDX-запрос для куба возвращает разные результаты для «С членом», если имя идентификатора элемента отличается - PullRequest
0 голосов
/ 15 мая 2019

Я запускаю mdxquery для извлечения различных комбинаций наборов кортежей для разных ячеек, используя "With Member".Мое требование - запросить кортежи с несколькими измерениями в одном запросе MDX.Насколько я понимаю, идентификатор члена является просто псевдонимом, и он не должен влиять на результат запроса.Но он возвращает другой набор результатов для того же запроса, если я использую отдельные идентификаторы членов.Слайсер, где фильтр тоже то же самое.Мое требование состоит в том, чтобы у меня был набор кортежей, и у каждого кортежа есть разные члены. Комбинация измерений / атрибутов, и я хочу запустить только один запрос, чтобы получить данные для каждого из этих наборов кортежей.Поэтому я использую опцию «С элементом», которая позволяет именовать наборы элементов, имеющие различную размерность.

Запрос 1, Запрос 2, Запрос 3 практически одинаков, только используемое имя элемента отличается для всех них.Любая помощь или предложения высоко ценится.

Query 1: 
With 
MEMBER [Account].[9] AS '([Account].&[500],[Department].&[102])' 
MEMBER [Account].[1] AS '([Account_Text].[Account_Text_Level].&[-1],[Account].&[161])' 
MEMBER [Account].[6] AS '([Account].&[500],[Account_Group].&[214])' 
MEMBER [Account].[10] AS '([Account].&[1])' 
MEMBER [Account].[13] AS '([Account].&[2881],[Company].&[173])' 
MEMBER [Account].[4] AS '([Company].&[1],[Company_Text].&[-1],[Account].&[500],[Account_Group].&[215],[Account_Text].[Account_Text_Level].&[-1],[Department].&[103])' 
Select 
{[Account].[9],[Account].[1],[Account].[6],[Account].[10],[Account].[13],[Account].[4]} 
Dimension Properties [Parent_Unique_Name] On Columns From [Adventure Works] 
Where ([BusinessCenter].&[1],[CalculatedDim].&[1],[CostCenter].&[1],[Department].&[1],[Geography].&[1],[ICSegment].&[1],
[ProductLine].&[1],[Reporting].[Level 1].&[14],[Company].&[1],[Scenario].&[1],[Time].&[2014])


Query 2:
With 
MEMBER [Test9] AS '([Account].&[500],[Department].&[102])' 
MEMBER [Test1] AS '([Account_Text].[Account_Text_Level].&[-1],[Account].&[161])' 
MEMBER [Test2] AS '([Account].&[500],[Account_Group].&[214])' 
MEMBER [Test10] AS '([Account].&[1])' 
MEMBER [Test13] AS '([Account].&[2881],[Company].&[173])' 
MEMBER [Test4] AS '([Company].&[1],[Company_Text].&[-1],[Account].&[500],[Account_Group].&[215],[Account_Text].[Account_Text_Level].&[-1],[Department].&[103])' 
Select 
{[Test9],[Test1],[Test2],[Test10],[Test13],[Test4]} 
Dimension Properties [Parent_Unique_Name] 
On Columns From  [Adventure Works]  
Where ([BusinessCenter].&[1],[CalculatedDim].&[1],[CostCenter].&[1],[Department].&[1],[Geography].&[1],
[ICSegment].&[1],
[ProductLine].&[1],[Reporting].[Level 1].&[14],[Company].&[1],[Scenario].&[1],[Time].&[2014]
)

Query 3:

With 
MEMBER [Company].[9] AS '([Account].&[500],[Department].&[102])' 
MEMBER [Company].[1] AS '([Account_Text].[Account_Text_Level].&[-1],[Account].&[161])' 
MEMBER [Company].[6] AS '([Account].&[500],[Account_Group].&[214])' 
MEMBER [Company].[10] AS '([Account].&[1])' 
MEMBER [Company].[13] AS '([Account].&[2881],[Company].&[173])' 
MEMBER [Company].[4] AS '([Company].&[1],[Company_Text].&[-1],[Account].&[500],[Account_Group].&[215],[Account_Text].[Account_Text_Level].&[-1],[Department].&[103])' 
Select 
{[Company].[9],[Company].[1], [Company].[6],[Company].[10],[Company].[13],[Company].[4]} 
Dimension Properties [Parent_Unique_Name] On Columns From  [Adventure Works]  
Where ([BusinessCenter].&[1],[CalculatedDim].&[1],[CostCenter].&[1],[Department].&[1],[Geography].&[1],[ICSegment].&[1],
[ProductLine].&[1],[Reporting].[Level 1].&[14],[Scenario].&[1],[Time].&[2014],[Account].&[1])

1 Ответ

1 голос
/ 15 мая 2019

Мой ответ основан на вашем комментарии.

У меня есть набор кортежей, и у каждого из них есть разные члены, и я хочу запустить только один запрос, чтобы получить данные для каждого из этих наборов кортежей. Так что я Я использую опцию «С членом», которая позволяет именовать наборы членов имея разную размерность. - Суди

Ваша проблема связана с концепцией размерности и иерархии. Иерархия говорит, что все кортежи в наборе должны содержать одинаковые иерархии измерений, а Dimensionality говорит, что они должны быть в одном и том же порядке. Поэтому, если в кортеже отсутствует член, вы используете его элемент по умолчанию в запросе, чтобы удовлетворить это свойство. Это не повлияет на результат, так как это то, что процессор запросов делает для каждого dimesnion, который вы пропускаете в своем кортеже. Ваш запрос будет как.

Select 
{
([Account].&[500], [Department].&[102],                       [Account_Text].[Account_Text_Level].defaultmember, [Account_Group].[YourHierarchy].defaultmember, [Company].[YourHierarchy].defaultmember,[Company_Text].[YourHierarchy].defaultmember),
([Account].&[161], [Department].[Youhierarchy].defaultmember, [Account_Text].[Account_Text_Level].&[-1],         [Account_Group].[YourHierarchy].defaultmember, [Company].[YourHierarchy].defaultmember,[Company_Text].[YourHierarchy].defaultmember),
([Account].&[500], [Department].[Youhierarchy].defaultmember, [Account_Text].[Account_Text_Level].defaultmember, [Account_Group].&[214]                       , [Company].[YourHierarchy].defaultmember,[Company_Text].[YourHierarchy].defaultmember),
([Account].&[1],   [Department].[Youhierarchy].defaultmember, [Account_Text].[Account_Text_Level].defaultmember, [Account_Group].[YourHierarchy].defaultmember, [Company].[YourHierarchy].defaultmember,[Company_Text].[YourHierarchy].defaultmember),
([Account].&[2881],[Department].[Youhierarchy].defaultmember, [Account_Text].[Account_Text_Level].defaultmember, [Account_Group].[YourHierarchy].defaultmember, [Company].&[173]),
([Account].&[500], [Department].&[103],                       [Account_Text].[Account_Text_Level].&[-1],         [Account_Group].&[215]                       ,[Company].&[1]                          ,[Company_Text].&[-1])
} 
Dimension Properties [Parent_Unique_Name] On Columns 
From [Adventure Works] 
Where 
([BusinessCenter].&[1],[CalculatedDim].&[1],
[CostCenter].&[1],[Department].&[1],
[Geography].&[1],[ICSegment].&[1],
[ProductLine].&[1],[Reporting].[Level 1].&[14],
[Company].&[1],[Scenario].&[1],[Time].&[2014])

Редактировать: на основе комментария ниже

Взгляните на

select 
[Measures].[Internet Sales Amount]
on columns,
([Date].[Calendar Year].&[2012],[Product].[Category].&[1])
on 
rows 
from [Adventure Works]

Результат enter image description here

Второй кортеж

select 
[Measures].[Internet Sales Amount]
on columns,
([Date].[Calendar Year].&[2012],[Customer].[Country].&[United States])
on 
rows 
from [Adventure Works]

Результат: enter image description here

Третий кортеж

select 
[Measures].[Internet Sales Amount]
on columns,
{
([Customer].[Gender].&[F],[Product].[Category].&[3])
}
on 
rows 
from [Adventure Works]

Результат enter image description here

Теперь давайте объединим их

select 
[Measures].[Internet Sales Amount]
on columns,
{
([Date].[Calendar Year].&[2012],[Product].[Category].&[1],[Customer].[Country].defaultmember,[Customer].[Gender].defaultmember),
([Date].[Calendar Year].&[2012],[Product].[Category].defaultmember,[Customer].[Country].&[United States],[Customer].[Gender].defaultmember),
([Date].[Calendar Year].defaultmember,[Product].[Category].&[3],[Customer].[Country].defaultmember,[Customer].[Gender].&[F])
}
on 
rows 
from [Adventure Works]

Результат enter image description here

...