Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

%FILTER 節 (MDX)

SELECT 文にフィルタを適用します。SELECT 文の結果をスライスする方法について説明します。この節は WHERE に似ていますが、1 つの文に複数の %FILTER 節を含めることができる点が異なります。%FILTER は、インターシステムズによる MDX への拡張機能です。

構文および詳細

select_statement %FILTER set_expression

以下は、この指定の説明です。

InterSystems MDX では、必要に応じてタイプが自動的に変換されるため、セット式の代わりに、単一のメンバ式またはタプル式を使用することもできます。

%FILTER 節は、必要な数だけ含めることができます。この節は、SELECT 文に付加するだけで、結果をさらにフィルタ処理できるため、プログラムでクエリを実行する場合に特に便利です (これに対して、WHERE 節を使用して別のフィルタ項目を追加する必要がある場合、許可される WHERE 節が 1 つのみであるため、WHERE 節を書き換える必要があります)。

Important:

各セット要素は別のスライサ軸として使用され、(すべての %FILTER 節の) すべてのスライサ軸の結果がいっしょに集約されます。これは軸のたたみ込みのプロセスです (フィルタはクエリ軸と見なされます)。軸のたたみ込みを実行すると、どのスライサ軸にも NULL の結果がないソース・レコードは複数回カウントされます。

軸のたたみ込みでは、キューブの定義での指定に従い、対象としているメジャーの集約メソッドに基づいて値が組み合わされます (ここの例では、%COUNT が追加されます)。

詳細は、"InterSystems Business Intelligence の実装" の付録 "Business Intelligence クエリ・エンジンの仕組み" にある "軸のたたみ込み" を参照してください。

%FILTER 節をメジャー検索式で使用する場合、この節は、ファクト・テーブルの行のうち、指定された条件を満たした行を使用します (メジャー検索式は、インターシステムズによる MDX への拡張機能で、ファクト・テーブル自体のメジャー値を考慮するものです)。

SELECT MEASURES.[%COUNT] ON 0 FROM patients %FILTER %SEARCH.&[[MEASURES].[age]<10]
                             Patient Count
                                      1,370

%SQLRESTRICT

キューブに対して %SQLRESTRICT ディメンジョンを有効にしている場合、そのキューブに対する MDX クエリに SQL SELECT 文または WHERE 節を含めることができます。これにより、MDX クエリの SQL 文によって実行時の制限を有効にできます。%SQLRESTRICT ディメンジョンを使用するには、以下の構文で %FILTER 節を使用します。

%FILTER %SQLRESTRICT.&[sqlStatement]

sqlStatement は、SQL SELECT 文または SQL WHERE 節です。SELECT 文は、キューブのソース・テーブルから ID のリストを返すように設計する必要があります。これらのID により、最終的な MDX 結果で考慮されるファクトを制限します。最終的な結果には、返される ID リスト内に ID があるレコードに対応するファクトのみが含まれます。sqlStatementSELECT 文を使用する以下の MDX クエリの例について考えてみます。

SELECT FROM HOLEFOODS 
WHERE [Comments].[H1].[Comments].&[SELECT ID FROM HoleFoods.SalesTransaction WHERE ID IN (1,2,3,4)]

外部参照テーブルにクエリを実行することもできます。例えば、以下のような単純なテーブルがあるとします。

キューブ・ソース・テーブルの例
ID Name
1 Bill
2 Sally
3 Tom
4 Mike
5 Teresa
6 Alice
外部参照テーブルの例 (Cohort.Table)
ID PatientID Name Age
1 1 Bill 1
2 6 Sally 10
3 4 Tom 45

以下の %SQLRESTRICT サブクエリは PatientID 値 1 および 6 を返し、MDX クエリに対して考えられる結果として、キューブ・ソース・テーブルの例で ID 1 と 6 を持つ Bill と Alice のみが残ります。

%SQLRESTRICT.&[SELECT PatientID From Cohort.Table WHERE Age < 35]

上のサンプル・テーブルは非常に単純化されたもので、例を示す目的でのみ使用されています。

%SQLRESTRICT サブクエリは、ソース・テーブルの ID と想定される 1 列の数値を返します。

または、WHERE 節をショートカットとして使用して、ソース・レコードの制限を直接記述することもできます。以下の例を検討します。

SELECT FROM HOLEFOODS %FILTER %SQLRESTRICT.&[WHERE ID IN (1,2,3,5,10)]

SELECT FROM HOLEFOODS %FILTER %SQLRESTRICT.&[WHERE Outlet = 24]
SELECT NON EMPTY [DateOfSale].[Actual].[YearSold].Members ON 1 
FROM [HOLEFOODS] %FILTER %SQLRESTRICT.&[WHERE YEAR(DateOfSale)='2017']

内部的には、この WHERE 節構文は、MDX クエリでクエリされるキューブのソース・クラスをターゲットとして、システムにより SELECT 文を %SQLRESTRICT サブクエリに挿入します。例えば、Holefoods.SalesTransaction は Holefoods キューブのソース・クラスであるため、以下の 2 つのクエリは同等です。

SELECT FROM HOLEFOODS %FILTER %SQLRESTRICT.&[SELECT ID FROM Holefoods.SalesTransaction WHERE ID IN (1,2,3,4)]

SELECT FROM HOLEFOODS %FILTER %SQLRESTRICT.&[WHERE ID IN (1,2,3,4)]

関連項目

"WHERE 節" を参照してください。

FeedbackOpens in a new tab