2015-03-12 4 views
1

Я пытаюсь имитировать эту функцию фильтра в фильтре запросов PerformancePoint MDX, который затем подключается к оценочной карточке.PerformancePoint Filter MDX Query with or conditions

SELECT 
[Dim Status Month].[MONTHS].MEMBERS ON COLUMNS, 

FILTER ([Dim Project].[LOB].MEMBERS, 

    (
    strtomember('[Dim Project].[PM Login].&[' + CUSTOMDATA() + ']') 
    or 
    strtomember('[Dim Project].[TM Login].&[' + CUSTOMDATA() + ']') 
    or 
    strtomember('[Dim Project].[PAL Login].&[' + CUSTOMDATA() + ']') 
    or 
    strtomember('[Dim Project].[DO Login].&[' + CUSTOMDATA() + ']') 
    or 
    strtomember('[Dim Project].[ED Login].&[' + CUSTOMDATA() + ']') 

    ) 
) ON ROWS 
FROM [GLOBALDELIVERYREPORTING] 

CustomerData() является текущим именем пользователя.

Он отлично работает с одиночными условиями, такие как:

strtomember('[Dim Project].[PAL Login].&[' + CUSTOMDATA() + ']') 

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

Итак, я упал фильтр Текст Здесь в окне MDX запросов фильтра, и схватил запрос из SQL Profiler, и это то, что он заканчивает тем, как:

WITH SET [7afbf0ad32e34820ab610fb5927a5f6e] AS HEAD({ StrToSet("Filter Text Here") }, 5001) 
         SELECT 
         { 
          IIF(COUNT([7afbf0ad32e34820ab610fb5927a5f6e])=0, { }, 
          {(EXTRACT([7afbf0ad32e34820ab610fb5927a5f6e], [7afbf0ad32e34820ab610fb5927a5f6e](0)(0).Dimension) AS [7afbf0ad32e34820ab610fb5927a5f6eX]), 
          (GENERATE(
           [7afbf0ad32e34820ab610fb5927a5f6eX], 
           { 
            { [7afbf0ad32e34820ab610fb5927a5f6eX].CURRENT.ITEM(0).PARENT, [7afbf0ad32e34820ab610fb5927a5f6eX].CURRENT.ITEM(0) }(0) 
           }, 
           ALL))}) 
         } 
         DIMENSION PROPERTIES MEMBER_TYPE ON 0, 
         { } ON 1 
         FROM [GlobalDeliveryReporting] 
+0

Вы уверены, что данные верны, если вы думаете, что это работает с 'strtomember ('[Dim Project]. [PAL Login]. & [' + CUSTOMDATA() + ']')'? – whytheq

+0

Да, данные верны, customdata - это просто имя пользователя, прошедшего проверку подлинности, в строке подключения – Aaron

+0

hmmm. Я пойду домой, но завтра посмотрю на это. Потерянный след немного - в чем вопрос, который мы сейчас пытаемся ответить? – whytheq

ответ

1

ли это позволяет перемещать фильтр в пункт WHERE?

SELECT 
    [Dim Status Month].[MONTHS].MEMBERS ON COLUMNS, 
    [Dim Project].[LOB].MEMBERS ON ROWS 
FROM [GLOBALDELIVERYREPORTING] 
WHERE 
    (
    strtomember('[Dim Project].[PM Login].&[' + CUSTOMDATA() + ']') 
    ,strtomember('[Dim Project].[TM Login].&[' + CUSTOMDATA() + ']') 
    ,strtomember('[Dim Project].[PAL Login].&[' + CUSTOMDATA() + ']') 
    ,strtomember('[Dim Project].[DO Login].&[' + CUSTOMDATA() + ']') 
    ,strtomember('[Dim Project].[ED Login].&[' + CUSTOMDATA() + ']') 
    ); 

Попробуйте EXISTS функцию вместо:

SELECT 
    [Dim Status Month].[MONTHS].MEMBERS ON COLUMNS 
,Exists 
    (
    [Dim Project].[LOB].MEMBERS 
    ,{ 
     StrToMember('[Dim Project].[PM Login].&[' + CustomData() + ']') 
    ,StrToMember('[Dim Project].[TM Login].&[' + CustomData() + ']') 
    ,StrToMember('[Dim Project].[PAL Login].&[' + CustomData() + ']') 
    ,StrToMember('[Dim Project].[DO Login].&[' + CustomData() + ']') 
    ,StrToMember('[Dim Project].[ED Login].&[' + CustomData() + ']') 
    } 
) ON ROWS 
FROM [GLOBALDELIVERYREPORTING]; 

Или, если вы уверены, что FILTER работает попробуйте вложенности фильтры, как это:

SELECT 
    [Dim Status Month].[MONTHS].MEMBERS ON COLUMNS 
,Filter 
    (
    Filter 
    (
     Filter 
     (
     Filter 
     (
      Filter 
      (
      [Dim Project].[LOB].MEMBERS 
      ,StrToMember('[Dim Project].[PM Login].&[' + CustomData() + ']') 
     ), 
     ,StrToMember('[Dim Project].[TM Login].&[' + CustomData() + ']') 
     ) 
     ,StrToMember('[Dim Project].[PAL Login].&[' + CustomData() + ']') 
    ) 
    ,StrToMember('[Dim Project].[DO Login].&[' + CustomData() + ']') 
    ) 
    ,StrToMember('[Dim Project].[ED Login].&[' + CustomData() + ']') 
) ON ROWS 
FROM [GLOBALDELIVERYREPORTING]; 

Может быть, вам просто нужен простой набор обозначений например:

{ 
    StrToMember('[Dim Project].[PM Login].&[' + CustomData() + ']') 
,StrToMember('[Dim Project].[TM Login].&[' + CustomData() + ']') 
,StrToMember('[Dim Project].[PAL Login].&[' + CustomData() + ']') 
,StrToMember('[Dim Project].[DO Login].&[' + CustomData() + ']') 
,StrToMember('[Dim Project].[ED Login].&[' + CustomData() + ']') 
} 
+0

Это не позволяет мне написать весь запрос, он просто применяет фильтр к набору, возвращенному для оценочной карты. Я не смог точно определить, как он применяет фильтр, например, используется ли он как функция Filter() или предложение Where. Я попробовал это, заключая их в скобки, разделяя их запятыми, используя или, и т. Д. – Aaron

+0

Я пренебрег упоминанием об этом - это SharePoint 2010, я считаю, что фильтр mdx PerformancePoint в SharePoint 2013 позволяет задать весь запрос – Aaron

+0

@ Aaron ok - позвольте мне играть, поскольку я подозреваю, что будет другой подход – whytheq