0

让我们考虑一个报表上的多项选择参数:员工

这个参数有很多可能的值。最初,列表上没有显示任何内容,并且有一个关联的文本字段搜索参数,它使用搜索字符串的前n 个匹配项更新Employee选择列表。

如果输入的搜索查询是John Doe,我们可以想象现在选择列表显示:

  • 约翰·多伊
  • ...
  • 泽维尔·约翰·杜森

现在我可以从这个过滤列表中选择任意数量的项目,但是如果我想同时选择John DoeAlicia Keys,会发生以下情况:

  • 首先,当我输入搜索字符串“John Doe”时,选择列表会相应地填充
  • 我选择John Doe - 好的
  • 我输入搜索字符串“Alicia Keys”,选择列表也被填充
  • John Doe 的选择消失了 - 我希望能够同时选择AliciaJohn,但我不想通过数千个名字的长选择列表

更新:

忘了提到我们在后台有一个维度为“员工”的 OLAP 多维数据集。该维度用作参数的来源,参数数据集使用 MDX 获取值,因此此处无法应用 SQL 解决方案。

当前解决方案使用 MDX 过滤器和头函数创建自定义集,然后在 MDX 查询的 ROWS 部分中使用该集。

以下是该集合的创建方式:

SET setEmployees AS { 
HEAD(
  FILTER( [Employees].[Employees].ALLMEMBERS, 
      INSTR([Employees].[Employees].CURRENTMEMBER.Name,@EmployeeSearch,1 >= 1 ) 
      )
,100) 
}

基本上这个解决方案的问题是如何将多个搜索字符串添加到 instr 函数

这种情况有通用的解决方案吗?我是否从错误的方向解决问题?

4

2 回答 2

0

您可以做的是使搜索参数更加灵活,因此您可以处理以下输入:

约翰或简

如果“OR”查询比“AND”查询更常见,您可以使用以下查询来支持它:

约翰简

请注意,这可能会让人们望而却步,因为他们习惯使用的搜索功能(例如 Google 搜索)通常倾向于以“AND”的含义解释多个单词。

无论如何,棘手的一点当然是Employee数据集背后的 SQL 。这应该以更灵活的方式使用搜索参数。您尚未指定当前的工作方式,但我想您可能正在使用类似的东西:

WHERE Employee.FullName LIKE '%' + @SearchParameter + '%'

您需要扩展它以支持“OR”查询。有各种各样的解决方案,从快速'n 脏手工 SQL(例如字符串拆分结合WHERE...IN)到全文查询。选择最适合您情况的解决方案。

于 2012-12-14T14:08:48.773 回答
0

如果您有固定数量的搜索词,则可以执行以下操作。

FILTER( [Employees].[Employees].ALLMEMBERS, 
  INSTR([Employees].[Employees].CURRENTMEMBER.Name,@EmployeeSearch1,1 >= 1) OR
  INSTR([Employees].[Employees].CURRENTMEMBER.Name,@EmployeeSearch2,1 >= 1) 
  )

即使你能做到,我也不推荐。您没有像 SQL 那样对 Analysis Services 进行索引的奢侈。更好的方法是查询您的数据仓库中的员工并返回适当的键,然后在您的 MDX 语句中按这些键进行过滤。

于 2012-12-14T20:41:15.920 回答