機械翻訳について

Filter

検索条件の基準を満たすセットのタプルを返します。

構文

FILTER ( set, search_condition )

パラメータ

set

反復処理の基準となるセット。

search_condition

ブール式(「MDX文法ルール」を参照)。 検索条件は、セット内のすべてのタプルのコンテキストで評価されます。

ノート

この関数は、検索条件の値がTRUEであるsetのタプルのサブセットを戻します。 返されるセット内のタプルの順序は、入力セット内の順序と同じです。

例 1

次の「フィルタされていない」問合せは、すべてのlevel-0製品の利益を返します:

SELECT
  { [Profit] }
ON COLUMNS,
 [Product].levels(0).members
ON ROWS
FROM Sample.Basic

次の問合せは、グリッドを返します:

表4-64 MDXからの出力グリッドの例

(軸) Profit
100-10 22777
100-20 5708
100-30 1983
200-10 7201
200-20 12025
200-30 4636
200-40 4092
300-10 12195
300-20 2511
300-30 11093
400-10 11844
400-20 9851
400-30 -394
100-20 5708
200-20 12025
300-30 11093

負の利益のみを表示するように前述の結果をフィルタするには、Filter関数を使用して、元のセットと検索条件を渡します。 フィルタは、検索条件がtrue (利益がゼロ未満)のメンバーのセットのみを戻します。

SELECT
  { Profit }
ON COLUMNS,
 Filter( [Product].levels(0).members, Profit < 0)
ON ROWS
FROM Sample.Basic

結果の問合せでは、負の利益を持つ製品のみが返されます:

表4-65 MDXからの出力グリッドの例

(軸) Profit
400-30 -394

例 2

例1の検索式では、値式(Profit)が値と比較されています。 メンバー属性を検索条件として使用してフィルタすることもできます。 たとえば、Filter関数を使用して、Caffeinated属性がTRUEのメンバーのみを選択できます。

SELECT
  { [Profit] }
ON COLUMNS,
 Filter( [Product].levels(0).members, Product.CurrentMember.[Caffeinated])
ON ROWS
FROM Sample.Basic

次の問合せは、カフェインされたメンバーの利益を戻します:

表4-66 MDXからの出力グリッドの例

(軸) Profit
100-10 22777
100-20 5708
200-10 7201
200-20 12025
300-10 12195
300-20 2511
300-30 11093

検索条件Product.CurrentMember.[Caffeinated]を理解するには、右から左に読むと役立つ場合があります: フィルタは、Productディメンションのメンバーごとに、現在のメンバーのCaffeinatedプロパティの保持を検索しています(CurrentMember関数では、その引数としてディメンション名が必要です)。

Filterは反復関数です。つまり、Filterが入力セット全体をループして各タプルの検索条件を評価するまで、評価されるセット内のすべてのメンバーまたはタプルで操作されるメンバーが現在のメンバーになります。 したがって、前の問合せ結果がどのように生成されたかを確認するには、最初にCaffeinated属性がtrueに設定されているメンバーを確認すると便利です。 次のフィルタ処理されていない問合せでは、計算済メンバーを使用して、どのlevel-0製品メンバーがキャッシュされているかを明らかにします。 IIF関数は、Caffeinated属性がTRUEに設定されているメンバーごとに値1を戻し、それ以外の場合は値0を戻します。

WITH MEMBER Measures.IsCaffeinated 
AS 'IIF(Product.CurrentMember.[Caffeinated], 1, 0)'
SELECT
  { IsCaffeinated }
ON COLUMNS,
 [Product].levels(0).members
ON ROWS
FROM Sample.Basic

次の問合せは、グリッドを返します:

表4-67 MDXからの出力グリッドの例

(軸) IsCaffeinated
100-10 1
100-20 1
100-30 0
200-10 1
200-20 1
200-30 0
200-40 0
300-10 1
300-20 1
300-30 1
400-10 0
400-20 0
400-30 0
100-20 0
200-20 0
300-30 0

2番目の問合せの結果を見ると、入力セット内の各タプルについて検索条件が評価され、検索条件を満たすタプルのみが返されることがわかります。

例 3

例2 CurrentMember関数が導入されました。 CurrentMemberが明示的にコールされていない場合でも、フィルタはセットを反復しながら現在のメンバーのコンテキストで動作します。 フィルタおよびその他の反復関数は、ネストされたコンテキストで処理されます。

デフォルトでは、フィルタは最上位ディメンション・メンバーの現在のメンバー・コンテキストで動作します。 MDXコンテキストは、組込みの最上位ディメンション・コンテキストをオーバーライドするスライサ(Where句)を使用して小さくします。 また、Filterの検索条件引数にコンテキストを指定することで、スライサ・コンテキストをオーバーライドできます。

次の問合せは、Qtr1の西部リージョンの利益の値を返します。 MDXコンテキストはWest, Qtr1であることに注意してください。

SELECT
  { [Profit] }
ON COLUMNS,
 [Product].levels(0).members
ON ROWS
FROM Sample.Basic
Where (West, Qtr1)

前述の問合せにフィルタを追加しても、フィルタのサブ・コンテキストはメイン・コンテキストに基づいているため、Profitの値は(Profit, West, Qtr1)として評価されます。

SELECT
  { [Profit] }
ON COLUMNS,
 Filter( [Product].levels(0).members, Profit < 0)
ON ROWS
FROM Sample.Basic
Where (West, Qtr1)

次の問合せでは、外部コンテキストが(Profit, Market, Qtr1)であっても、Profitの値は(Profit, West, Qtr1)として評価されます。 これは、Filter関数の内部コンテキストがスライサの外部コンテキストをオーバーライドするためです(WestがMarketを置き換えます)。

SELECT
  { [Sales] }
ON COLUMNS,
Filter( [Product].levels(0).members, (Profit, West) < 0)
ON ROWS
FROM Sample.Basic
Where (Market, Qtr1)

前述の問合せは、Westの場合はSales値を返し、Westの場合はProfit、Qtr1の場合は0未満のProductメンバーの場合はQtr1を返します。

表4-68 MDXからの出力グリッドの例

(軸) 売上高
100-20 2153
400-30 1862
100-20 2153

その他の例

Sample Basicに対する次の問合せでは、Qtr1以降、販売が少なくとも10%増加した製品のQtr2販売高が返されます。

SELECT 
{ 
  Filter (
    [Product].Members,
    [Measures].[Sales] >  
    1.1 * 
      ( [Measures].[Sales], [Year].CurrentMember.PrevMember )
  ) 
}
on columns
FROM sample.basic
WHERE ([Year].[Qtr2], [Measures].[Sales])

表4-69 MDXからの出力グリッドの例

コーラ ダーク・クリーム
16048 11993

Sample Basicに対する次の問合せでは、製品ファミリ"100"の月次販売が8,570を超える販売高が返されます。 フィルタリング・ロジックは、WITHセクションに名前付きセットとして格納されます。

WITH SET [High-Sales Months] as 
' 
 Filter( 
 [Year].Levels(0).members, 
 [Measures].[Sales] > 8570 
 ) 
' 
SELECT 
   {[Measures].[Sales]} 
ON COLUMNS, 
    {[High-Sales Months]}    
ON ROWS 
FROM 
  sample.basic 
WHERE 
 ([Product].[100]) 

表4-70 MDXからの出力グリッドの例

(軸) 売上高
4月 8685
5月 8945
6月 9557
7月 9913
8月 9787
9月 8844
12月 8772