Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

%MDX

現在のクエリのコンテキストの外側で MDX クエリを実行し、単一の結果を返します。この関数は、MDX に対する DeepSee 拡張機能です。

返りタイプ

この関数は、数値または文字列を返します。

構文および詳細

%MDX(mdx_query,parmName1,parmValue1,parmName2,parmValue2)

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

  • mdx_query は、引用符付きの MDX クエリです。これは単一の値を返し、左上のセルのみが使用されます。

    このクエリには、名前付きパラメータ、計算メンバ、および名前付きセットを含めることができます。

  • parmName1parmName2 (以降同様) は、クエリの名前付きパラメータ (オプション) です。これらは、引用符で囲む必要があります。

    パラメータをリストする順序は、クエリには影響しません。

    16 個までのパラメータとその値を指定できます。

  • parmValue1parmValue2 (以降同様) は、名前付きパラメータの対応値です。

この関数は、指定されたクエリを実行し、単一の値を返します。クエリが複数の行または列を返す場合、この関数は左上のセルのみを返します。これは、別のクエリ内のサブクエリを含めるために使用します。

DeepSee には、%MDX で使用できる特殊な %CONTEXT パラメータが用意されています。詳細は、"%KPI" を参照してください。%KPI にもこのパラメータを使用できます。

Important:

%CONTEXT パラメータを使用する場合は、引用符で囲むことを忘れないでください。

%MDX を使用して、クエリに含める値を取得します。ただしこの値は、クエリに含めないと、クエリの行および列の定義の影響を受ける値です。例えば、合計レコード数にアクセスする必要がある場合に使用できます。

WITH MEMBER A.FRACTION AS 'MEASURES.[%COUNT]/%MDX("SELECT FROM patients")' 
SELECT { MEASURES.[%COUNT], A.FRACTION } ON 0, diagd.MEMBERS ON 1 FROM patients
 
                       Patient Count             FRACTION
1 None                          8,428                 0.84
2 asthma                          712                 0.07
3 CHD                             343                 0.03
4 diabetes                        485                 0.05
5 osteoporosis                    212                 0.02

以下の例では、%MDX を名前付きパラメータ (City) と共に使用しています。

SELECT 
%MDX("WITH %PARM City AS 'value:[All Cities]' SELECT FROM HOLEFOODS WHERE Outlet.@City",
"City",Outlet.CurrentMember.Properties("NAME")) ON 0,
Outlet.City.Members on 1 FROM HOLEFOODS
 
                                      NAME
 1 Amsterdam                          1,633
 2 Antwerp                              421
 3 Atlanta                            3,331
 4 Bangalore                          3,786
...

この場合、サブクエリは以下のようになります。

WITH %PARM City AS 'value:[All Cities]' SELECT FROM HOLEFOODS WHERE Outlet.@City

以下の例で、%CONTEXT の効果を示します。まず、以下のクエリでは、%CONTEXT を使用せずに %MDX を使用します。

WITH 
MEMBER [MEASURES].[PercentOfAllRevenue] AS '100 * MEASURES.[Amount Sold] / 
%MDX("SELECT MEASURES.[Amount Sold] ON 0 FROM holefoods")' 

SELECT NON EMPTY [Channel].[H1].[Channel Name].Members ON 0,
NON EMPTY [Product].[P1].[Product Category].Members ON 1 
FROM [HoleFoods] 
WHERE [MEASURES].[PERCENTOFALLREVENUE]
 
                        No Channel             Online             Retail
1 Candy                        0.28               0.83               0.61
2 Cereal                       0.11               0.58               0.39
3 Dairy                        0.23               2.43               1.01
4 Fruit                        1.04               7.55               3.76
5 Pasta                        0.79               7.19               4.14
6 Seafood                      3.60              22.23              10.41
7 Snack                        2.58              10.84               7.28
8 Vegetable                    1.42               6.63               4.05

計算メンバ [MEASURES].[PercentOfAllRevenue] は現在のピボット・テーブルのセルの Amount Sold メジャーを計算します (キューブ全体にわたるこのメジャーの集約値で除算されます)。その後この値は 100 で除算されるため、結果に表示された値の合計が 100 になります。

これに対し、"rows" として %CONTEXT を使用した場合の結果について考えてみます。

WITH 
MEMBER [MEASURES].[PercentOfRows] AS '100 * MEASURES.[Amount Sold] / 
%MDX("SELECT MEASURES.[Amount Sold] ON 0 FROM holefoods","%CONTEXT","rows")' 

SELECT NON EMPTY [Channel].[H1].[Channel Name].Members ON 0,
NON EMPTY [Product].[P1].[Product Category].Members ON 1 
FROM [HoleFoods] 
WHERE [MEASURES].[PercentOfRows]
 
                        No Channel             Online             Retail
1 Candy                       16.08              48.30              35.62
2 Cereal                      10.29              53.69              36.02
3 Dairy                        6.38              66.15              27.48
4 Fruit                        8.41              61.14              30.45
5 Pasta                        6.49              59.33              34.18
6 Seafood                      9.93              61.34              28.73
7 Snack                       12.46              52.38              35.16
8 Vegetable                   11.72              54.77              33.51

この場合、%MDX サブクエリは、行コンテキストを使用します。その結果、各行の数値の合計が 100 になります。

今度は、"columns" として %CONTEXT を使用した場合の結果について考えてみます。

WITH 
MEMBER [MEASURES].[PercentOfCols] AS '100 * MEASURES.[Amount Sold] / 
%MDX("SELECT MEASURES.[Amount Sold] ON 0 FROM holefoods","%CONTEXT","columns")' 

SELECT NON EMPTY [Channel].[H1].[Channel Name].Members ON 0,
NON EMPTY [Product].[P1].[Product Category].Members ON 1 
FROM [HoleFoods] 
WHERE [MEASURES].[PercentOfCols]
 
                        No Channel             Online             Retail
1 Candy                        2.76               1.43               1.94
2 Cereal                       1.10               0.99               1.22
3 Dairy                        2.34               4.18               3.19
4 Fruit                       10.35              12.96              11.88
5 Pasta                        7.83              12.34              13.08
6 Seafood                     35.83              38.14              32.89
7 Snack                       25.67              18.60              22.99
8 Vegetable                   14.12              11.37              12.80

この場合、各列の数値の合計が 100 になります。

関連項目

FeedbackOpens in a new tab