UNION несколько запросов MDX в службах SSAS (powerpivot)

У меня какие-то трудности с попыткой объединить 2 запроса MDX. При отдельном запуске работают нормально. Скрипт ниже

WITH 
  MEMBER [Measures].[ParameterCaption] AS 
    [Main_Incidents].[Priority].CurrentMember.Member_Caption 
  MEMBER [Measures].[ParameterValue] AS 
    [Main_Incidents].[Priority].CurrentMember.UniqueName 
  MEMBER [Measures].[ParameterLevel] AS 
    [Main_Incidents].[Priority].CurrentMember.Level.Ordinal 
SELECT 
  {
    [Measures].[ParameterCaption]
   ,[Measures].[# Incidents]
   ,[Measures].[%SLA]
  } ON COLUMNS
 ,[Main_Incidents].[Priority].ALLMEMBERS ON ROWS
FROM [Model];


WITH 
  MEMBER [Measures].[ParameterCaption] AS 
    [Main_Incidents].[usr_directorate].CurrentMember.Member_Caption 
  MEMBER [Measures].[ParameterValue] AS 
    [Main_Incidents].[usr_directorate].CurrentMember.UniqueName 
  MEMBER [Measures].[ParameterLevel] AS 
    [Main_Incidents].[usr_directorate].CurrentMember.Level.Ordinal 
SELECT 
  {
    [Measures].[ParameterCaption]
   ,[Measures].[# Incidents]
   ,[Measures].[%SLA]
  } ON COLUMNS
 ,[Main_Incidents].[usr_directorate].ALLMEMBERS ON ROWS
FROM [Model];

Самый важный бит для меня - это то, что мне нужно, чтобы столбец метки отображался. Итак, я хочу UNION 2 запроса вместе, чтобы ParameterCaption захватывал значения из измерения "Приоритет" и измерения "Директорат"....

Пожалуйста, помогите мне достичь этого?


person PeddiePooh    schedule 31.05.2015    source источник
comment
Краткий ответ: UNION работает только с элементами из той же иерархии. Так что нет, не получится. Если вы попытаетесь их UNION, вы получите следующее сообщение об ошибке: Members, tuples or sets must use the same hierarchies in the UNION function.. Почему бы вам вместо этого не попробовать скрестить их?   -  person SouravA    schedule 01.06.2015
comment
если бы [Priority] и [usr_directorate] были двумя уровнями в многоуровневой пользовательской иерархии, ваш запрос был бы достаточно простым. Жаль, что это отдельные иерархии. Я думаю   -  person whytheq    schedule 01.06.2015


Ответы (1)


Это немного сложно, но определенно возможно.

Объединение в многомерных выражениях работает только для членов одной иерархии, поэтому для этого нам нужно преобразовать элементы строки в Кортежи, объединяющие две иерархии. Мы можем сделать это путем перекрестного соединения каждого из наборов ALLMEMBERS с членом [All] для другой иерархии. Затем нам просто нужно изменить заголовок параметра, значение и уровень, чтобы условно получить значение из соответствующей иерархии.

Это может выглядеть примерно так:

WITH 
  MEMBER [Measures].[ParameterCaption] AS
    IIF([Main_Incidents].[Priority].CurrentMember.Level.Ordinal = 0, [Main_Incidents].[usr_directorate].CurrentMember.Member_Caption, [Main_Incidents].[Priority].CurrentMember.Member_Caption)
  MEMBER [Measures].[ParameterValue] AS
    IIF([Main_Incidents].[Priority].CurrentMember.Level.Ordinal = 0, [Main_Incidents].[usr_directorate].CurrentMember.UniqueName, [Main_Incidents].[Priority].CurrentMember.UniqueName)
  MEMBER [Measures].[ParameterLevel] AS
    IIF([Main_Incidents].[Priority].CurrentMember.Level.Ordinal = 0, [Main_Incidents].[usr_directorate].CurrentMember.Level.Ordinal , [Main_Incidents].[Priority].CurrentMember.Level.Ordinal)
SELECT 
  {
    [Measures].[ParameterCaption]
   ,[Measures].[# Incidents]
   ,[Measures].[%SLA]
  } ON COLUMNS
 ,{
    [Main_Incidents].[Priority].ALLMEMBERS * [Main_Incidents].[usr_directorate].[All],
    [Main_Incidents].[Priority].[All] * [Main_Incidents].[usr_directorate].ALLMEMBERS
  } ON ROWS
FROM [Model];
person Brenton    schedule 20.08.2017