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を指定し、Subcategory属性とCategory属性を製品名属性に関連付け、スノーフラックテーブルをリンクするメンバー キー属性のカスタム エラー処理を定義します。
注
キューブ ウィザードを使用して Analysis Services チュートリアル キューブを最初に定義したときにサブカテゴリ属性とカテゴリ属性を追加した場合、これらの手順は自動的に実行されます。
製品ディメンションでのエラー処理と不明なメンバー プロパティの確認
製品ディメンションのディメンション デザイナーに切り替え、[ディメンション構造] タブをクリックし、[属性] ウィンドウで [製品] を選択します。
これにより、ディメンション自体のプロパティを表示および変更できます。
[プロパティ] ウィンドウで、 UnknownMember プロパティと UnknownMemberName プロパティを 確認します。
UnknownMember プロパティが有効になっていないことに注意してください。その値は Visible または Hidden の代わりに None に設定されており、UnknownMemberName プロパティに名前が指定されていないことに注意してください。
[プロパティ] ウィンドウで、ErrorConfiguration プロパティ セルで (カスタム) を選択し、ErrorConfiguration プロパティ コレクションを展開します。
ErrorConfiguration プロパティを (カスタム) に設定すると、既定のエラー構成設定を表示できます。設定は変更されません。
キーと null キーのエラー構成プロパティを確認しますが、変更は行いません。
既定では、null キーが不明なメンバーに変換され、この変換に関連付けられている処理エラーが無視される場合に注意してください。
次の図は、 ErrorConfiguration プロパティ コレクションのプロパティ設定を示しています。
[ブラウザ]タブをクリックし、[階層]リストで[製品モデルライン]が選択されていることを確認し、
All Products展開します。製品ライン レベルの 5 人のメンバーに注目してください。
[ コンポーネント] を展開し、[ モデル名] レベルのラベルのないメンバーを展開します。
このレベルには、次の図に示すように、 Adjustable Race 製品から始まる他のコンポーネントをビルドするときに使用されるアセンブリ コンポーネントが含まれます。
Snowflaked テーブルおよび製品カテゴリ User-Defined 階層の属性の定義
Adventure Works DW データ ソース ビューのデータ ソース ビュー デザイナーを開き、[ダイアグラム オーガナイザー] ウィンドウで [Reseller Sales] を選択し、SQL Server Data Tools (SSDT) の [データ ソース ビュー] メニューの [オブジェクトの追加と削除] をクリックします。
[ テーブルの追加と削除 ] ダイアログ ボックスが開きます。
[ 含まれるオブジェクト ] ボックスの一覧 で [DimProduct (dbo)] を選択し、[ 関連テーブルの追加] をクリックします。
DimProductSubcategory (dbo) と FactProductInventory (dbo) の両方が追加されます。 FactProductInventory (dbo) を削除して、DimProductSubcategory (dbo) テーブルだけが含まれるオブジェクトの一覧に追加されるようにします。
DimProductSubcategory (dbo) テーブルが最近追加されたテーブルとして既定で選択されている状態で、[関連テーブルの追加] をもう一度クリックします。
DimProductCategory (dbo) テーブルがインクルード オブジェクトの一覧に追加されます。
OK をクリックします。
SQL Server データ ツールの [書式 ] メニューで、[ 自動レイアウト] をポイントし、[ ダイアグラム] をクリックします。
DimProductSubcategory (dbo) テーブルと DimProductCategory (dbo) テーブルが相互にリンクされていること、および Product テーブルを介して ResellerSales テーブルにリンクされていることに注意してください。
製品ディメンションのディメンション デザイナーに切り替えて、[ディメンション構造] タブをクリックします。
[データ ソース ビュー] ウィンドウ内の任意の場所を右クリックし、[すべてのテーブルの表示] をクリックします。
[データ ソース ビュー] ウィンドウで、DimProductCategory テーブルを見つけ、そのテーブルで ProductCategoryKey を右クリックし、[列から新しい属性] をクリックします。
[ 属性 ] ペインで、この新しい属性の名前を
Categoryに変更します。[プロパティ] ウィンドウで、 NameColumn プロパティ フィールドをクリックし、参照ボタン (...) をクリックして [ 名前列 ] ダイアログ ボックスを開きます。
[ソース] 列の一覧で [EnglishProductCategoryName] を選択し、[OK] をクリックします。
[データ ソース ビュー] ウィンドウで、DimProductSubcategory テーブルを見つけ、そのテーブルの ProductSubcategoryKey を右クリックし、[列から新しい属性] をクリックします。
[ 属性 ] ペインで、この新しい属性の名前を
Subcategoryに変更します。[プロパティ] ウィンドウで、 NameColumn プロパティ フィールドをクリックし、参照 ボタン (...) をクリックして [ 名前列 ] ダイアログ ボックスを開きます。
[ソース] 列の一覧で [EnglishProductSubcategoryName] を選択し、[OK] をクリックします。
Category、Subcategory、製品名の順に、製品カテゴリという名前の新しいユーザー定義階層を上から下に作成します。製品カテゴリユーザー定義階層の AllMemberName プロパティの値として
All Productsを指定します。
製品ディメンションの User-Defined 階層を閲覧する
ディメンション デザイナー の 製品ディメンションの ディメンション構造 タブのツールバーにある [処理] をクリックします。
プロジェクトをビルドして配置するには [はい ] をクリックし、[ 実行 ] をクリックして Product ディメンションを処理します。
処理が成功したら、[処理の進行状況] ダイアログ ボックスで [処理ディメンション 'Product' が正常に完了しました] を展開し、[処理ディメンション属性 '製品名" が完了しました] を展開して、[SQL クエリ 1] を展開します。
SELECT DISTINCT クエリをクリックし、[ 詳細の表示] をクリックします。
次の図に示すように、WHERE 句が SELECT DISTINCT 句に追加され、ProductSubcategoryKey 列に値がない製品が削除されていることに注意してください。
[ 閉じる ] を 3 回クリックして、すべての処理ダイアログ ボックスを閉じます。
製品ディメンションのディメンション デザイナーの [ブラウザー] タブをクリックし、[再接続] をクリックします。
[階層] の一覧に [製品モデルの線] が表示されていることを確認し、[
All Products] を展開して、[コンポーネント] を展開します。[階層] ボックスの一覧で [製品カテゴリ] を選択し、[
All Products] を展開して、[コンポーネント] を展開します。どのアセンブリ コンポーネントも表示されない点に注意してください。
前のタスクで説明した動作を変更するには、Products ディメンションの UnknownMember プロパティを有効にし、UnknownMemberName プロパティの値を設定し、Subcategory属性とモデル名属性の NullProcessing プロパティをUnknownMember に設定し、Category属性をSubcategory属性の関連属性として定義してから、Product Line 属性を Model Name 属性の関連属性として定義します。 これらの手順により、Analysis Services では、次のタスクに示すように、 SubcategoryKey 列の値を持たない製品ごとに不明なメンバー名の値が使用されます。
不明なメンバーの有効化、属性リレーションシップの定義、および Null のカスタム処理プロパティの指定
ディメンション デザイナーで 製品 ディメンションの [ディメンション構造] タブをクリックし、[属性] ウィンドウで 製品 を選択します。
[プロパティ] ウィンドウで、UnknownMember プロパティを Visible に変更し、UnknownMemberName プロパティの値を
Assembly Componentsに変更します。UnknownMember プロパティを Visible または Hidden に変更すると、ディメンションの UnknownMember プロパティが有効になります。
[ 属性リレーションシップ ] タブをクリックします。
ダイアグラムで、
Subcategory属性を右クリックし、[ 新しい属性リレーションシップ] を選択します。[ 属性リレーションシップの作成 ] ダイアログ ボックスで、[ ソース属性 ] が
Subcategory。 [関連属性] を [Categoryに設定します。 リレーションシップの種類は [フレキシブル] のままにします。OK をクリックします。
[属性] ウィンドウで、[サブカテゴリ] を選択します。
[プロパティ] ウィンドウで、 KeyColumns プロパティを展開し、 DimProductSubcategory.ProductSubcategoryKey (Integer) プロパティを展開します。
NullProcessing プロパティをUnknownMember に変更します。
[属性] ペイン で 、[ モデル名] を選択します。
[プロパティ] ウィンドウで、 KeyColumns プロパティを展開し、 Product.ModelName (WChar) プロパティを展開します。
NullProcessing プロパティをUnknownMember に変更します。
これらの変更により、処理中に Analysis Services で
Subcategory属性または モデル名 属性の null 値が検出されると、不明なメンバー値がキー値として置き換わり、ユーザー定義階層が正しく構築されます。
製品ディメンションを再度参照する
[ ビルド ] メニューの [ Analysis Services チュートリアルの配置] をクリックします。
配置が正常に完了したら、製品ディメンションのディメンション デザイナーの [ブラウザー] タブをクリックし、[再接続] をクリックします。
[階層] リストで [製品カテゴリ] が選択されていることを確認し、
All Products展開します。アセンブリ コンポーネントは、カテゴリ レベルの新しいメンバーとして表示されます。
CategoryレベルのAssembly Componentsメンバーを展開し、SubcategoryレベルのAssembly Componentsメンバーを展開します。次の図に示すように、すべてのアセンブリ コンポーネントが 製品名 レベルで表示されます。