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 |