%MDX (MDX)
返りタイプ
構文および詳細
%MDX(mdx_query,parmName1,parmValue1,parmName2,parmValue2)
以下は、この指定の説明です。
-
mdx_query は、引用符付きの MDX クエリです。これは単一の値を返し、左上のセルのみが使用されます。
このクエリには、名前付きパラメータ、計算メンバ、および名前付きセットを含めることができます。
-
parmName1、parmName2 (以降同様) は、クエリの名前付きパラメータ (オプション) です。これらは、引用符で囲む必要があります。
パラメータをリストする順序は、クエリには影響しません。
16 個までのパラメータとその値を指定できます。
-
parmValue1、parmValue2 (以降同様) は、名前付きパラメータの対応値です。
この関数は、指定されたクエリを実行し、単一の値を返します。クエリが複数の行または列を返す場合、この関数は左上のセルのみを返します。これは、別のクエリ内のサブクエリを含めるために使用します。
システムには、%MDX で使用できる特殊な %CONTEXT パラメータが用意されています。詳細は、"%KPI" を参照してください。%KPI にもこのパラメータを使用できます。
%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 になります。