<level>
詳細
<level> 要素には以下のコンテンツがあります。
属性 | 目的 |
---|---|
name、displayName、description、disabled | "キューブの共通属性" を参照してください。 |
sourceProperty、sourceExpression | これらの属性のどちらかを指定します。構文は、アーキテクトで [プロパティ] または [式] に使用する構文とほとんど同じです。"ディメンジョンまたはレベルのソース値の定義" を参照してください。メモ :
時刻ディメンジョンまたは年齢ディメンジョン内のレベルの要件については、"時間レベルの定義" および "年齢レベルの定義" を参照してください。 NLP ディメンジョンのレベルの場合、ソース値の指定に使用するメカニズムが異なるため、sourceProperty と sourceExpression は無視されます。"キューブでの Text Analytics の使用法" を参照してください。 |
timeFunction | 時刻ディメンジョンまたは年齢ディメンジョン内のレベルでのみ使用されます。"時間レベルの定義" および "年齢レベルの定義" を参照してください。 |
timeOffset | (オプション) 時刻ディメンジョンのレベルでのみ使用されます。"日付オフセットの指定" を参照してください。 |
timeFormat | (オプション) 時刻ディメンジョンのレベルでのみ使用されます。"レベルの定義の詳細" の "時刻形式の指定" を参照してください。 |
list | (オプション) この属性が "true" の場合、ソース値はリストであることが期待され、リスト内の各項目がこのレベルのメンバになります。
既定は "false" です。 既定の場合、リストは $LIST 形式であることが期待されます。文字区切りリストで構成される文字列を使用するには、listDelimiter を指定します。リスト・ベース・レベルは、親レベルおよび子レベルを持つことはできません。 |
listDelimiter | (オプション) レベルのソース・データとして使用されるリストの項目の区切りに使用される区切り文字を指定します。これは、リストが文字区切りリストである場合に使用します。 |
nullReplacement | (オプション) このレベルのソース・データが NULL の場合に、メンバ名として使用する文字列を指定します。例えば、nullReplacement="No City" と指定します。 |
rangeExpression | (オプション) 数値データの場合は、ビンに数値を割り当てる方法を指定します (各ビンはこのレベルのメンバです)。その他のデータの場合は、この属性によって置換値が指定されます。この属性は、このレベルのメンバの既定の順序も制御します。サブセクション "基本的な範囲式の定義" と "複数範囲式の圧縮の定義" を参照してください。 |
useDisplayValue | (オプション) DISPLAYLIST および VALUELIST パラメータの値があるプロパティの場合、この属性によってインデックスに組み込む値が指定されます。 この属性が "false" (既定) の場合は、VALUELIST で指定された値が使用されます。この属性が "true" の場合は、DISPLAYLIST で指定された値が使用されます。
linkClass および linkProperty を指定した場合、このオプションは無視されます。 |
sort | (オプション) このレベルのメンバの既定の並べ替え方法を指定します。時刻ディメンジョンのレベルの場合、"asc" または "desc" を指定します。
データ・ディメンジョンのレベルの場合、"asc"、"asc numeric"、"desc"、または "desc numeric" を指定します。 |
linkClass、linkProperty | (オプション) "他のテーブルへのリンク" を参照してください。 |
factName | (オプション) 生成されたファクト・テーブルにおける、このレベルに対応する列の名前。この属性が NULL の場合はシステムによって名前が生成されます。このオプションは、時間レベルまたは NLP レベルには適用されません。
<measure> の factName の説明を参照してください。 |
factNumber | このレベルに割り当てられている内部 ID。キューブの namedFactNums が "true" の場合は必須です。 |
dependsOn | (オプション) このレベルが依存関係を持つレベル (またはリレーションシップ) を指定します。レベル (またはリレーションシップ) の完全な MDX 識別子を指定します。または、MDX レベル (またはリレーションシップ) 識別子のコンマ区切りリストを指定します。"異なる階層に含まれるレベル間での依存関係の定義" を参照してください。この属性は、DependsOn コンパイラ・キーワードとはまったく関係ありません。 |
useAsFilter | (オプション) ダッシュボードのフィルタ・コントロールとしてレベルを使用できるかどうかを指定します。この属性が "true" (既定) の場合、ユーザは、フィルタ・コントロールを追加するときにこのレベルを選択できます。この属性が "false" の場合、このレベルはオプションとしてリストされません。このオプションの目的は、ダッシュボード・エディタに表示される選択肢の数を減らすことのみです。アナライザやエンジンには影響しません。 |
factSelectivity | (オプション、システムでは不使用) 生成されたレベル・テーブル内のプロパティの生成 SELECTIVITY をオーバーライドするための値。Business Intelligence のクエリでは、このパラメータは使用しません。このオプションは、レベル・テーブルに対して直接 SQL を使用するときに、生成された SELECTIVITY をオーバーライドする必要がある場合に使用します。
1 以下の正の値を指定します。詳細は、%SYSTEM.SQLOpens in a new tab の SetFieldSelectivity() を参照してください。 |
hidden | (オプション) hidden="true" の場合、レベルは定義され、クエリで使用することができますが、アナライザはレベルを使用可能なものとして表示しません。既定は "false" です。 |
<member> | (オプション) 任意の数の <member> 要素を含むことができます。このそれぞれがレベルのメンバを定義します。 |
<property> | (オプション) 任意の数の <property> 要素を含むことができます。このそれぞれがレベルのプロパティを定義します。 |
例
以下はその例です。
<level name="ZIP" sourceProperty="HomeCity.PostalCode" />
別の例として、以下のレベル定義は、そのレベルのプロパティも定義します。
<level name="City" sourceProperty="HomeCity.Name">
<property name="Population" sourceProperty="HomeCity.Population" />
他のテーブルへのリンク
<level>、<measure>、または <property> 要素内では、linkClass 属性と linkProperty 属性により、ドット構文ではアクセスできない別のクラスのプロパティを使用できます。このリンク機能を使用するには、レコードの ID を使用して別のクラスのレコードを検索できる必要があります。
この機能は、以下のように実行されます。
-
他のクラスの必要なレコードの ID を指定する値として、sourceProperty または sourceExpression を指定します。
-
他のクラスの完全なパッケージおよびクラス名として linkClass を指定します。
-
定義しているレベルの基とする他のクラスのプロパティとして linkProperty を指定します。
例えば、Hole Foods のサンプルに、以下を追加することができます。
<level name="Product" sourceProperty ="Product" linkClass="HoleFoods.Product" linkProperty="Name" />
外部クラス linkClass とプロパティ linkProperty が定義されていると、システムによって外部クラスに対してクエリが実行され、指定された sourceProperty または sourceExpression に等しい ID のレコードについて、そのクラスから指定プロパティの値がフェッチされます。
日付オフセットの指定
場合によっては、開始日が 1 月 1 日ではない企業の財務カレンダーに時間レベルを一致させることが必要になります。例えば、会計年度は多くの企業で 10 月 1 日に開始します。以下のピボット・テーブルで考えてみましょう。
この場合、メンバ FY 2005 は、2004 年 10 月 1 日から 2005 年 9 月 30 日までの (端点を含む) 売上レコードで構成されています。
このようなレベルを作成するには、レベル (時間タイプのディメンジョン内にある必要があります) の timeOffset 属性と timeFormat 属性を指定します。ここでは、timeOffset 属性について説明します。timeFormat については次のセクションで説明します。
timeOffset 属性は、このレベルで使用されるソース値に加えられる時間量を指定します。この時間量は、負でも正でもかまいません。これは、キューブの構築時に使用されます。
timeOffset では、以下の形式の文字列を指定することによって、時間量を指定します。
#y#m#d
# は数です。#y は年単位の時間量、#m は月単位の時間量、#d は日単位の時間量を表します。要素を省略した場合、その位置にはゼロが使用されます。例えば、文字列 3m15d は、3 か月と 15 日を表します。
timeOffset で最も使用頻度の高い値は -3m です。これは会計年度が前年 10 月 1 日から開始される場合に使用されます。timeOffset="-3m" の場合、このレベルで使用される各時間値から 3 か月が差し引かれます。例えば、このレベルの日付 2010 年 1 月 1 日は、2009 年 10 月 1 日に変換されます。
同一ディメンジョン内であっても、他のレベルに影響はありません。このため、実際の日付を表示する、より詳細なレベルも定義できます。この例については、"日付オフセットがあるカレンダーの処理" を参照してください。
timeFunction 属性は同じであるが、timeOffset 属性が異なる 2 つのレベルがある場合、アーキテクトはこれらを同じファクトの 2 つの異なる値として認識します。これらは、ファクト・テーブルの 2 つの異なる列に自動的にマップされ、それぞれ別個の factNumber が割り当てられます。
基本的な範囲式の定義
rangeExpression の基本的な構文は以下のとおりです。
value_or_range:new_value;value_or_range:new_value; ... ;
ここで、new_value は単一の値で、システムはこれを文字列として処理し、レベル・メンバの名前として使用します。また、value_or_range は、以下のいずれかになります。
-
5 や Louisiana などの単一の値
-
(value1,value2) 形式の範囲
-
[value1,value2] 形式の範囲
-
(value1,value2] 形式の範囲
-
[value1,value2) 形式の範囲
これらの式で、value1 と value2 は、数値または NULL (式では省略される) です。左丸括弧と右丸括弧は、指定された端点がその範囲に含まれないことを示します。左角括弧と右角括弧は、指定された端点がその範囲に含まれることを示します。例えば、(45,49] は、45 より大きく 49 以下のすべての値を表します。
複数範囲式の圧縮の定義
場合によっては、指定されたレベルの複数の範囲を定義する必要があります。これは単調なプロセスになる可能性があります。また、結果の範囲式は、スタジオで表示したときに読みづらくなります。このような場合には、以下に示す rangeExpression の値の代替構文を使用できます。
rangeExpression="[start:increment:end]:replacement;"
または、両方の角括弧の代わりに適切な括弧を使用できます (下記の詳細を参照)。
この構文は一連の範囲を生成します。
この start は最初の範囲の開始値 (数値)、end は最後の範囲の終了値 (数値)、increment は範囲を定義する数値です。最初の範囲は start と start + increment の間などになります。
また、replacement は、置換値として使用される式です。replacement では、以下の要素を使用できます。
-
%1 — 範囲の開始値で置換します。
-
%2 — 範囲の終了値で置換します。
-
$$$eval(expression) — これにより、システムは含まれた式を評価します。例えば、$$$eval(%2-1) は範囲の終了値から 1 を引いた数を返します。
角括弧や括弧は、生成された start および end の範囲内で start 値と end 値がどのように処理されるかに影響を与えます。
-
角括弧は値を範囲に含めます。
-
括弧は値を範囲から除外します。
中間範囲の境界では、境界値は下位の範囲ではなく、常に上位の範囲に割り当てられます。つまり中間範囲では、開く括弧は常に [、閉じる括弧は常に ) になります。
以下の範囲式を考えてみます。
rangeExpression="[0:30:90]:%1 to $$$eval(%2-1);"
これは、以下に示す長い式と同じメンバを生成します。
rangeExpression="[0,30):0 to 29;[30,60):30 to 59;[60,90]:60 to 90;"
値 end - start が increment の整数倍でない場合、最後の範囲は end を超えます。例えば、以下の範囲式を考えてみます。
rangeExpression="[0:30:100]:%1 to $$$eval(%2-1);"
これは、以下に示す長い式と同じメンバを生成します。
rangeExpression="[0,30):0 to 29;[30,60):30 to 59;[60,90):60 to 90;[90,119]:90 to 119;"