1

我在 MDX 中创建了一个简单的查询来查找值。当我使用它时,它可以工作:

With
MEMBER [Measures].[dummy] as 1

select non empty {
[Measures].[dummy]
} on columns,
non empty {
except([Product].[Code].members, [Product].[Code].[All])
* except([Product].[Description].members, [Product].[Description].[All])
} on Rows

FROM 
(SELECT Filter([Product].[Description].[Description].Members, 
(InStr(1,[Product].[Description].CurrentMember.member_caption,"502080")>0)) 
ON COLUMNS  
FROM [Cube]) 

但是当我尝试使这个动态与 MSRS 一起使用时,它给了我一个错误:“无法解析 SearchFor 参数,因为它在内部子表达式中被引用”

这是我的带参数的代码:

With
MEMBER [Measures].[dummy] as 1

select non empty {
[Measures].[dummy]
} on columns,
non empty {
except([Product].[Code].members, [Product].[Code].[All])
* except([Product].[Description].members, [Product].[Description].[All])
} on Rows

FROM (
 SELECT StrToMember
 ("Filter([Product].[Description].[Description].Members, 
   (InStr(1,[Product].[Description].CurrentMember.member_caption," + StrToMember(@SearchFor) + ")>0))") 
 on Columns

FROM [Cube])

谁知道如何绕过这个错误?请指出我正确的方向。

提前致谢。

4

2 回答 2

0

您使用参数的方式是作为一个简单的字符串,而不是作为一个成员引用。因此,只需离开StrToMembertheFROM子句即可

FROM 
(SELECT Filter([Product].[Description].[Description].Members, 
(InStr(1,[Product].[Description].CurrentMember.member_caption, @SearchFor)>0)) 
ON COLUMNS  
FROM [Cube]) 

如果不访问您的多维数据集,就很难检查这一点。但是,要检查表达式的逻辑,您可以发出如下查询:

WITH MEMBER Measures.[test0] as
     @SearchFor
     MEMBER Measures.[test1] as
     InStr(1,[Product].[Description].CurrentMember.member_caption, @SearchFor) > 0
SELECT { Measures.[test0], Measures.[test1] } on columns,
       {
       [Product].[Description].[ABC],
       [Product].[Description].[DEF],
       [Product].[Description].[GHI],
       [Product].[Description].[JKL]
       } on rows
  FROM [Cube]

您应该将产品列表替换为您的多维数据集中确实存在的一些产品,一些满足搜索条件,一些不满足。然后您应该能够在最后一列中看到TrueFalse,这取决于与搜索条件的匹配是否成功。它左侧的列应在所有行中显示您的搜索参数。

于 2013-09-03T08:14:52.547 回答
0

事实证明,我的报告不会显示我使用 MDX 查询检索到的数据。我从一个新数据集重新开始:

With

MEMBER [Measures].[ParameterCaption] AS [Product].[Description].CURRENTMEMBER.MEMBER_CAPTION 
MEMBER [Measures].[ParameterValue] AS [Product].[Description].CURRENTMEMBER.UNIQUENAME 
MEMBER [Measures].[ParameterLevel] AS [Product].[Description].CURRENTMEMBER.LEVEL.ORDINAL 


select {
[Measures].[ParameterCaption], [Measures].[ParameterValue], [Measures].[ParameterLevel]
} on columns,

EXCEPT([Product].[Description].MEMBERS,[Product].[Description].[All]) * 
EXCEPT([Product].[Code].MEMBERS,[Product].[Code].[All]) 
  ON ROWS 
 FROM ( SELECT FILTER ([Product].[Description].Members, 
 (InStr ([Product].[Description].CurrentMember.Name, 
@SearchFor) <> 0)) ON COLUMNS FROM [Cube])

在我的报告中添加新的 tablix 后,过滤器按预期工作。我仍然不知道为什么我以前的 MDX 无法处理该报告。

于 2013-09-04T08:16:34.907 回答