不明なメンバーと NULL 処理のプロパティの定義
Analysis Services がディメンションを処理する場合、テーブル内の基になる列またはデータ ソース ビューのビューからのすべての個別の値が、ディメンションの属性に設定されます。 Analysis Services で処理中に null 値が検出された場合、既定では、この null は数値列の場合は 0 に変換され、文字列列の場合は空の文字列に変換されます。 この既定の設定を変更したり、基礎的なリレーショナル データ ウェアハウスに固有の抽出、変換、読み込みプロセスがあればそれらを使用して NULL 値を変換したりできます。 さらに、Analysis Services では、ディメンションの UnknownMember プロパティと UnknownMemberName プロパティ、およびディメンションのキー属性の NullProcessing プロパティの 3 つのプロパティを構成することで、null 値を指定された値に変換できます。
ディメンション ウィザードおよびキューブ ウィザードでは、ディメンションのキー属性が NULL 値を許容するかどうか、またはスノーフレーク ディメンションのルート属性が NULL 値を許容する列に基づいているかどうかを基準にして、これらのプロパティを有効化します。 この場合では、キー属性の NullProcessing プロパティは UnknownMember に設定され、 UnknownMember プロパティは Visibleに設定されます。
ただし、このチュートリアルで Product ディメンションに対して行っているようにスノーフレーク ディメンションを段階的に構築する場合、またはディメンション デザイナーを使用してディメンションを定義してこれらの既存のディメンションをキューブに組み込む場合は、 UnknownMember プロパティおよび NullProcessing プロパティを手動で設定する必要があります。
このトピックのタスクでは、Adventure Works DW データ ソース ビューに追加するスノーフラック テーブルから Product ディメンションに製品カテゴリと製品サブカテゴリ属性を追加します。 次に、Product ディメンションの UnknownMember プロパティを有効にし、UnknownMemberName プロパティの値として を指定Assembly Components
し、 属性と Category
属性を製品名属性に関連付Subcategory
け、スノーフラックテーブルをリンクするメンバー キー属性のカスタム エラー処理を定義します。
Note
キューブ ウィザードを使用して Analysis Services チュートリアル キューブを最初に定義したときに、Subcategory 属性と Category 属性を追加した場合、これらの手順は自動的に実行されます。
Product ディメンションでのエラー処理のプロパティと不明なメンバーのプロパティの確認
Product ディメンションのディメンション デザイナーに切り替え、 [ディメンション構造] タブをクリックします。次に、 [属性] ペインで [Product] をクリックします。
ディメンション自体のプロパティを表示し、修正できるようになりました。
[プロパティ] ウィンドウで、 UnknownMember プロパティと UnknownMemberName プロパティを確認します。
UnknownMember プロパティは有効になっていません。このプロパティの値が Visible または Hidden ではなく、 Noneに設定されているためです。また、 UnknownMemberName プロパティには名前が指定されていません。
[プロパティ] ウィンドウで、 ErrorConfiguration プロパティのセルをクリックして、 [(カスタム)] を選択します。次に、 ErrorConfiguration プロパティ コレクションを展開します。
ErrorConfiguration プロパティを [(Custom)] に設定すると、既定のエラー構成設定を表示できます。既定のエラー構成設定は変更されていません。
キーおよび NULL キーについて、エラーの構成のプロパティを確認します。変更はしないでください。
NULL キーが不明なメンバーに変換される際に、この変換に関連する処理エラーが無視されていることがわかります (これが既定の動作です)。
次の図は、 ErrorConfiguration プロパティ コレクションのプロパティ設定を示しています。
[ブラウザー] タブをクリックし、[階層] ボックスの一覧で [製品モデル行] が選択されていることを確認し、 を展開
All Products
します。Product Line レベルには 5 つのメンバーが存在します。
[Components]を展開します。 Model Name レベルのメンバーのうち、ラベルが付いていないメンバーを展開します。
次の図のように、このレベルには、アジャスタブル レース ( Adjustable Race ) など、他の部品を組み立てるときに使用するアセンブリ部品が含まれています。
スノーフレーク テーブルおよび Product Category ユーザー定義階層の属性の定義
Adventure Works DW データ ソース ビューの [データ ソース ビュー] Designerを開き、[ダイアグラム オーガナイザー] ウィンドウで [Reseller Sales] を選択し、[SQL Server Data Tools (SSDT)] の [データ ソース ビュー] メニューの [オブジェクトの追加と削除] をクリックします。
[テーブルの追加と削除] ダイアログ ボックスが開きます。
[含まれているオブジェクト] ボックスの一覧の [DimProduct (dbo)]をクリックします。次に、 [関連テーブルの追加]をクリックします。
DimProductSubcategory (dbo) と FactProductInventory (dbo) の両方が追加されます。 FactProductInventory (dbo) を削除して、 DimProductSubcategory (dbo) テーブルだけが [含まれているオブジェクト] の一覧に追加されるようにします。
既定では、最後に追加した DimProductSubcategory (dbo) テーブルが選択されます。この状態で、 [関連テーブルの追加] をもう一度クリックします。
[含まれているオブジェクト] の一覧に DimProductCategory (dbo) テーブルが追加されます。
[OK] をクリックします。
SQL Server Data Toolsの [書式] メニューの [自動レイアウト] をポイントし、[ダイアグラム] をクリックします。
DimProductSubcategory (dbo) テーブルと DimProductCategory (dbo) テーブルは互いにリンクしています。また、 Product テーブルを介して ResellerSales テーブルにもリンクしています。
Product ディメンションのディメンション デザイナーに切り替え、 [ディメンション構造] タブをクリックします。
[データ ソース ビュー] ペイン内を右クリックし、 [すべてのテーブルを表示]をクリックします。
[データ ソース ビュー] ペインで、 DimProductCategory テーブルを探します。次に、このテーブルの ProductCategoryKey を右クリックし、 [列から新しい属性を作成]をクリックします。
[属性] ペイン で 、この新しい属性の名前を に
Category
変更します。プロパティ ウィンドウで、[NameColumn] プロパティ フィールドをクリックし、参照 (...) ボタンをクリックして [名前列] ダイアログ ボックスを開きます。
[基になる列] ボックスの一覧で [EnglishProductCategoryName] を選択し、 [OK]をクリックします。
[データ ソース ビュー] ペインで、 DimProductSubcategory テーブルを探します。このテーブルの ProductSubcategoryKey を右クリックし、 [列から新しい属性を作成]をクリックします。
[属性] ペイン で 、この新しい属性の名前を に
Subcategory
変更します。プロパティ ウィンドウで、[NameColumn] プロパティ フィールドをクリックし、参照ボタン (...) をクリックして [名前列] ダイアログ ボックスを開きます。
[基になる列] ボックスの一覧で [EnglishProductSubcategoryName] を選択し、 [OK]をクリックします。
上から下の順に、製品カテゴリという名前の新しいユーザー定義階層を作成します。
Category
Subcategory
Product Categories ユーザー定義階層の AllMemberName プロパティの値として を指定
All Products
します。
Product ディメンションのユーザー定義階層の表示
Product ディメンションの ディメンション デザイナー で、 [ディメンションの構造] タブのツール バーにある [処理]をクリックします。
[はい] をクリックして、プロジェクトを作成し、配置します。次に、 [実行] をクリックして、 Product ディメンションを処理します。
処理が正常に完了したら、 [処理の進行状況] ダイアログ ボックスで [ディメンション 'Product' の処理が正常に完了しました] を展開し、 [ディメンション属性 'Product Name' の処理が完了しました]を展開します。次に、 [SQL クエリ数 1]を展開します。
SELECT DISTINCT クエリをクリックし、 [詳細表示]をクリックします。
SELECT DISTINCT 句に WHERE 句が追加されています。次の図のように、この WHERE 句は、値を持たない製品を ProductSubcategoryKey から削除します。
[閉じる] を 3 回クリックし、処理中のダイアログ ボックスをすべて閉じます。
Product ディメンションのディメンション デザイナーで、 [ブラウザー] タブをクリックします。次に、 [再接続]をクリックします。
[階層] ボックスの一覧に [製品モデルライン] が表示されていることを確認し、[] を展開
All Products
し、[コンポーネント] を展開します。[階層] ボックスの一覧で [製品カテゴリ] を選択し、 を展開
All Products
して、 [コンポーネント] を展開します。アセンブリ部品は何も表示されません。
前のタスクで説明した動作を変更するには、Products ディメンションの UnknownMember プロパティを有効にし、UnknownMemberName プロパティの値を設定し、および Model Name 属性の Subcategory
NullProcessing プロパティをUnknownMember に設定し、属性を属性のSubcategory
関連属性として定義Category
し、Product Line 属性を Model Name 属性の関連属性として定義します。 これらの手順により、Analysis Services は、次のタスクに示すように、 SubcategoryKey 列の値を持たない製品ごとに不明なメンバー名の値を使用します。
不明なメンバーの有効化、属性リレーションシップの定義、および NULL のカスタム処理プロパティの指定
Product ディメンションのディメンション デザイナーで [ディメンション構造] タブをクリックし、 [属性] ペインで [Product] をクリックします。
[ プロパティ ] ウィンドウで、 UnknownMember プロパティを Visible に変更し、 UnknownMemberName プロパティの値を に
Assembly Components
変更します。UnknownMember プロパティを Visible または Hidden に変更すると、ディメンションの [UnknownMember] プロパティが有効になります。
[属性リレーションシップ] タブをクリックします。
ダイアグラムで属性を右クリックし、[
Subcategory
新しい属性リレーションシップ] を選択します。[ 属性リレーションシップの作成 ] ダイアログ ボックスの [ソース属性 ] は です
Subcategory
。 [関連属性] を にCategory
設定します。 リレーションシップの種類の設定は [可変]のままにします。[OK] をクリックします。
[属性] ペインで、 [Subcategory]を選択します。
[プロパティ] ウィンドウで、 [KeyColumns] プロパティ、 [DimProductSubcategory.ProductSubcategoryKey (Integer)] プロパティの順に展開します。
NullProcessing プロパティを UnknownMemberに変更します。
[属性] ペインで、 [Model Name]を選択します。
[プロパティ] ウィンドウで、 [KeyColumns] プロパティ、 [Product.ModelName (WChar)] プロパティの順に展開します。
NullProcessing プロパティを UnknownMemberに変更します。
これらの変更により、処理中に Analysis Services で属性またはモデル名属性の null 値
Subcategory
が検出されると、不明なメンバー値がキー値として置き換わり、ユーザー定義階層が正しく構築されます。
Product ディメンションの再表示
[ビルド] メニューの [Analysis Services Tutorial の配置]をクリックします。
配置が正常に完了したら、 Product ディメンションのディメンション デザイナーで [ブラウザー] タブをクリックし、 [再接続]をクリックします。
[階層] ボックスの一覧で [製品カテゴリ] が選択されていることを確認し、 を展開します
All Products
。Category レベルの新しいメンバーとして Assembly Components が表示されています。
レベルのメンバーを
Assembly Components
Category
展開し、レベルのメンバーをAssembly Components
Subcategory
展開します。次の図のように、 Product Name レベルにアセンブリ部品が表示されるようになりました。