【问题标题】:PerformancePoint Filter MDX Query with or conditionsPerformancePoint 过滤器 MDX 查询与或条件
【发布时间】:2015-03-12 20:20:26
【问题描述】:

我试图在 PerformancePoint MDX 查询过滤器中模拟此过滤器功能,然后将其连接到记分卡。

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 分析器中获取了查询,这就是它最终的样子:

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]

【问题讨论】:

  • 当您认为与strtomember('[Dim Project].[PAL Login].&[' + CUSTOMDATA() + ']') 一起使用时,您确定数据正确吗?
  • 是的,数据是正确的,customdata就是连接字符串中经过认证的用户名
  • 嗯。我现在要回家,但明天会看看这个。有点迷失方向 - 我们现在要回答的问题是什么?!
  • 笑。如何在 PerformancePoint(用于 SharePoint 2010)MDX 查询筛选器中使用多个或条件
  • 不确定您包含的第二个脚本与第一个脚本有何关系。甚至是第一行!为什么它会拉出它创建的集合[7afbf0ad32e34820ab610fb5927a5f6e] 的前 5001 个成员?只是一个评论,但 PerformancePoint 不会永远存在 - 您是否尝试使用 SSRS 来解决这个问题?

标签: filter mdx performancepoint


【解决方案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() + ']')
}

【讨论】:

  • 它不允许我编写整个查询,它只是对为记分卡返回的集合应用过滤器。我无法准确确定它是如何应用过滤器的,例如它是像 Filter() 函数还是 Where 子句一样使用。我已经尝试通过将它们括在括号中,用逗号分隔,使用或等...
  • 我没有提到这是 SharePoint 2010,我相信 SharePoint 2013 中的 PerformancePoint mdx 过滤器允许指定整个查询
  • @Aaron 好的 - 让我玩,因为我怀疑会有另一种方法
  • @Sourav_Agasti (点数无关紧要:我不会删除的最反对的问题:stackoverflow.com/questions/11644853/…)+ 如果您阅读了 cmets,那么此尝试无效不是我的错.
  • @Aaron - 是否有另一个查询在服务器上并行运行,而您正在向我们提供该脚本?
猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
相关资源
最近更新 更多