プロパティの問合せ
MDXでは、propertiesはデータおよびメタデータの特定の特性を記述します。 MDXを使用すると、プロパティを使用してデータを取得および分析する問合せを記述できます。 プロパティは、固有またはカスタムのいずれかです。
固有のプロパティは、すべてのディメンションのメンバーに対して定義されます。 Essbaseデータベース・アウトラインのすべてのメンバーに定義されている固有メンバー・プロパティは、MEMBER_NAME、MEMBER_ALIAS、LEVEL_NUMBER、GEN_NUMBER、IS_EXPENSE、COMMENTSおよびMEMBER_UNIQUE_NAMEです。
EssbaseのMDXでは、次のタイプのカスタム・プロパティがサポートされています: 属性プロパティおよびUDAプロパティ。 属性プロパティは、アウトラインの属性ディメンションによって定義されます。 Sample.Basicデータベースでは、Pkg Type属性ディメンションは、Productディメンションのメンバーのパッケージ特性を示します。 この情報は、MDXでプロパティ名[Pkg Type]を使用して問い合せることができます。
属性プロパティは、特定のディメンションに対してのみ、および各ディメンションの特定のレベルに対してのみ定義されます。 たとえば、Sample.Basicアウトラインでは、[Ounces]
はProductディメンションのメンバーに対してのみ定義された属性プロパティであり、このプロパティはProductディメンションのレベル0のメンバーに対してのみ有効な値を持ちます。 [Ounces]プロパティは、Marketなどの他のディメンションには存在しません。 Productディメンションのレベル0以外のメンバーの[Ounces]プロパティがNULL値です。 アウトラインの属性プロパティは、そのアウトラインの属性ディメンションの名前によって識別されます。
カスタム・プロパティにはUDAも含まれます。 たとえば、[Major Market]はMarketディメンション・メンバーで定義されたUDAプロパティです。 メンバーに[Major Market] UDAが定義されている場合はTRUE値を戻し、それ以外の場合はFALSEを戻します。
メンバー・プロパティの問合せ
MDX問合せ内では、次の2つの方法でプロパティを使用できます。
-
各軸セットのディメンションとプロパティの組合せをリストできます。 問合せが実行されると、指定されたディメンションのすべてのメンバーについて指定されたプロパティが評価され、結果セットに含められます。
たとえば、列軸で、次の問合せを実行すると、すべてのMarketディメンション・メンバーのGEN_NUMBER情報が返されます。 行軸では、問合せはすべてのProductディメンション・メンバーのMEMBER_ALIAS情報を返します。
SELECT [Market].Members DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns, Filter ([Product].Members, Sales > 5000) DIMENSION PROPERTIES [Product].[MEMBER_ALIAS] on rows FROM Sample.Basic
軸の「DIMENSION PROPERTIES」セクションを使用してメンバー・プロパティを問い合せる場合、プロパティはディメンション名とプロパティ名、またはプロパティ名自体を使用して識別できます。 プロパティ名が単独で使用される場合、そのプロパティ情報は、そのプロパティが適用されるその軸上のすべてのディメンションのすべてのメンバーに対して返されます。 次の問合せでは、MEMBER_ALIASプロパティが年およびProductディメンションの行軸で評価されます。
SELECT [Market].Members DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns, CrossJoin([Product].Children, Year.Children) DIMENSION PROPERTIES [MEMBER_ALIAS] on rows FROM Sample.Basic
-
プロパティはMDX問合せの値式内で使用できます。 たとえば、入力セットのメンバーのプロパティを使用する値式に基づいてセットをフィルタできます。
次の問合せは、缶にパッケージ化されているすべてのカフェイン製品を返します。
SELECT Filter([Product].levels(0).members, [Product].CurrentMember.Caffeinated and [Product].CurrentMember.[Pkg Type] = "Can") xDimension Properties [Caffeinated], [Pkg Type] on columns FROM Sample.Basic
次の問合せは、UDA [Major Market]を使用して、現在の市場が主要市場かどうかに基づいて値[BudgetedExpenses]を計算します。
WITH MEMBER [Measures].[BudgetedExpenses] AS 'IIF([Market].CurrentMember.[Major Market], [Marketing] * 1.2, [Marketing])' SELECT {[Measures].[BudgetedExpenses]} ON COLUMNS, [Market].Members ON ROWS FROM Sample.Basic WHERE ([Budget])
プロパティの値タイプ
EssbaseのMDXプロパティの値には、数値、ブールまたは文字列タイプを指定できます。 MEMBER_NAMEおよびMEMBER_ALIASプロパティは文字列値を返します。 LEVEL_NUMBERおよびGEN_NUMBERプロパティは数値を返します。
属性プロパティは、属性ディメンション・タイプに基づいて数値、ブール値または文字列値を返します。 たとえば、Sample.Basicでは、[Ounces]属性プロパティは数値プロパティです。 [Pkg Type]属性プロパティは文字列プロパティです。 [Caffeinated]属性プロパティはブール型プロパティです。
Essbaseでは、日付型の属性ディメンションを使用できます。 MDXでは、日付タイプ・プロパティは数値プロパティとして扱われます。 これらのプロパティ値を日付と比較する場合は、TODATE関数を使用して日付文字列を数値に変換してから比較します。
次の問合せは、日付03/25/2018に導入されたすべてのProductディメンション・メンバーを返します。 プロパティ[Intro Date]は日付型であるため、TODATE関数を使用して日付文字列"03-25-2018"を数値に変換してから比較する必要があります。
SELECT
Filter ([Product].Members,
[Product].CurrentMember.[Intro Date] =
TODATE("mm-dd-yyyy","03-25-2018"))ON COLUMNS
FROM Sample.Basic
プロパティが値式で使用される場合、その値タイプに基づいて適切に使用する必要があります: 文字列、数値またはブール。
数値範囲を使用して属性ディメンションを問い合せることもできます。
次の問合せは、小、中および大の母集団範囲の販売データを取得します。
SELECT
{Sales} ON COLUMNS,
{Small, Medium, Large} ON ROWS
FROM Sample.Basic
属性が値式でプロパティとして使用されている場合、IN演算子を使用して、範囲メンバーを使用してメンバー・プロパティ値が特定の範囲内にあるかどうかを確認できます。
たとえば、次の問合せでは、母集団範囲がMediumのMarketディメンション・メンバーがすべて返されます:
SELECT
Filter(
Market.Members, Market.CurrentMember.Population
IN "Medium"
)
ON AXIS(0)
FROM Sample.Basic
NULLプロパティ値
すべてのメンバーが特定のプロパティ名に対して有効な値を持つとはかぎりません。 たとえば、MEMBER_ALIASプロパティは、アウトラインで定義されているように、指定されたメンバーの代替名を戻しますが、すべてのメンバーに別名が定義されているわけではありません。 このような場合、別名を持たないメンバーに対してNULL値が戻されます。
次の問合せでは、
SELECT
[Year].Members
DIMENSION PROPERTIES [MEMBER_ALIAS]
ON COLUMNS
FROM Sample.Basic
Yearディメンションのどのメンバーにも別名が定義されていません。 したがって、問合せでは、YearディメンションのメンバーのMEMBER_ALIASプロパティにNULL値が返されます。
属性プロパティは、特定のディメンションのメンバーおよびそのディメンションの特定のレベルに対して定義されます。 Sample.Basicデータベースでは、[Ounces]プロパティはProductディメンションのレベル0メンバーに対してのみ定義されます。
したがって、次の問合せに示すように、Marketディメンションからメンバーの[Ounces]プロパティを問い合せると、構文エラーが発生します:
SELECT
Filter([Market].members,
[Market].CurrentMember.[Ounces] = 32) ON COLUMNS
FROM Sample.Basic
また、ディメンションのレベル0以外のメンバーの[Ounces]プロパティを問い合せると、NULL値が取得されます。
値式でプロパティ値を使用する場合、IsValid()関数を使用してNULL値をチェックできます。 次の問合せは、NULL値を持つメンバーを削除した後、[Ounces]プロパティ値が12のすべてのProductディメンション・メンバーを戻します。
SELECT
Filter([Product].Members,
IsValid([Product].CurrentMember.[Ounces]) AND
[Product].CurrentMember.[Ounces] = 12)
ON COLUMNS
FROM Sample.Basic