0

レポートの複数選択パラメータを考えてみましょう:従業員

このパラメータには多くの可能な値があります。最初はリストに何も表示されず、関連付けられたテキストフィールド検索パラメーターがあり、検索された文字列の上位n件の一致で従業員選択リストを更新します。

入力した検索クエリがJohn Doeの場合、選択リストに次のように表示されると想像できます。

  • ジョン・ドウ
  • ...
  • ザビエル・ジョン・ドーソン

これで、このフィルター処理されたリストから必要な数の項目を選択できますが、 John DoeAlicia Keysの両方を選択する場合は、次のようになります。

  • 最初に検索文字列「John Doe」を入力すると、それに応じて選択リストが入力されます
  • John Doeを選択します- OK
  • 検索文字列「Alicia Keys」を入力すると、選択リストにも入力されます
  • John Doe の選択がなくなりました。AliciaJohnの両方を同時に選択できるようにしたいのですが、何千もの名前の長い選択リストを調べたくありません。

アップデート:

背景にディメンション「従業員」を持つ OLAP キューブがあることを忘れていました。このディメンションはパラメータのソースとして使用され、param データセットは MDX を使用して値をフェッチするため、ここでは SQL ソリューションを適用できません。

現在のソリューションでは、MDX Filter および Head 関数を使用してカスタム セットを作成し、このセットを 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」クエリをサポートするには、それを拡張する必要があります。そのためのさまざまなソリューションがあります。簡単で汚い手作りの 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 に答える