不明なメンバと NULL 処理のプロパティの定義

Analysis Services がディメンションを処理するときに、ディメンションの属性を生成しているのは、データ ソース ビューのテーブルまたはビュー内の基になる列の各値です。Analysis Services での処理中に NULL 値があった場合は、既定によって NULL は数値列ではゼロに、文字列型の列では空の文字列に変換されます。この既定の設定を変更したり、基礎的なリレーショナル データ ウェアハウスに固有の抽出、変換、読み込みプロセスがあればそれらを使用して 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 Tutorial キューブを最初に定義したときに Subcategory 属性と Category 属性を追加していれば、これらの手順は自動的に実行されます。

Product ディメンションでのエラー処理のプロパティと不明なメンバのプロパティの確認

Product ディメンションで、エラー処理のプロパティと不明なメンバのプロパティを確認するには

  1. Product ディメンションのディメンション デザイナに切り替え、[ディメンション構造] タブをクリックします。次に、[属性] ペインで [Product] をクリックします。

    ディメンション自体のプロパティを表示し、修正できるようになりました。

  2. [プロパティ] ウィンドウで、UnknownMember プロパティと UnknownMemberName プロパティを確認します。

    UnknownMember プロパティは有効になっていません。このプロパティの値が Visible または Hidden ではなく、None に設定されているためです。また、UnknownMemberName プロパティには名前が指定されていません。

  3. [プロパティ] ウィンドウで、ErrorConfiguration プロパティのセルをクリックして、[(カスタム)] を選択します。次に、ErrorConfiguration プロパティ コレクションを展開します。

    ErrorConfiguration プロパティを [(Custom)] に設定すると、既定のエラー構成設定を表示できます。既定のエラー構成設定は変更されていません。

  4. キーおよび NULL キーについて、エラーの構成のプロパティを確認します。変更はしないでください。

    NULL キーが不明なメンバに変換される際に、この変換に関連する処理エラーが無視されていることがわかります (これが既定の動作です)。

    次の図は、ErrorConfiguration プロパティ コレクションのプロパティ設定を示しています。

    ErrorConfiguration プロパティ コレクション

  5. [ブラウザ] タブをクリックし、[階層] ボックスで [Product Model Lines] が選択されていることを確認します。[All Products] を展開します。

    Product Line レベルには 5 つのメンバが存在します。

  6. [Components] を展開します。Model Name レベルのメンバのうち、ラベルが付いていないメンバを展開します。

    次の図のように、このレベルには、アジャスタブル レース (Adjustable Race) など、他の部品を組み立てるときに使用するアセンブリ部品が含まれています。

    他の部品を組み立てるのに使用するアセンブリ部品

スノーフレーク テーブルおよび Product Category ユーザー定義階層の属性の定義

スノーフレーク テーブルおよび Product Category ユーザー定義階層の属性を定義するには

  1. Adventure Works DW データ ソース ビューのデータ ソース ビュー デザイナを開き、[ダイアグラム オーガナイザ] ペインで [Reseller Sales] を選択します。次に、Business Intelligence Development Studio の [データ ソース ビュー] メニューから [テーブルの追加と削除] をクリックします。

    [テーブルの追加と削除] ダイアログ ボックスが開きます。

  2. [含まれているオブジェクト] ボックスの一覧で [dbo.DimProduct] をクリックします。次に、[関連テーブルの追加] をクリックします。

    [含まれているオブジェクト] の一覧に dbo.DimProductSubcategory テーブルが追加されます。

  3. 既定では、最後に追加した dbo.DimProductSubcategory テーブルが選択されます。この状態で、[関連テーブルの追加] をもう一度クリックします。

    [含まれているオブジェクト] の一覧に dbo.DimProductCategory テーブルが追加されます。

  4. [OK] をクリックします。

  5. BI Development Studio の [書式] メニューで [自動レイアウト] をポイントし、[ダイアグラム] をクリックします。

    dbo.DimProductSubcategory テーブルと dbo.DimProductCategory テーブルは互いにリンクしています。また、Product テーブルを介して ResellerSales テーブルにもリンクしています。

  6. Product ディメンションのディメンション デザイナに切り替え、[ディメンション構造] タブをクリックします。

  7. [データ ソース ビュー] ペイン内を右クリックし、[すべてのテーブルを表示] をクリックします。

  8. [データ ソース ビュー] ペインで、DimProductCategory テーブルを探します。次に、このテーブルの ProductCategoryKey を右クリックし、[列から新しい属性を作成] をクリックします。

  9. [属性] ペインで、この新しい属性の名前を「Category」に変更します。

  10. [プロパティ] ウィンドウで、[NameColumn] プロパティ フィールド内をクリックし、参照ボタン ([...]) をクリックして、[名前列] ダイアログ ボックスを開きます。

  11. [基になる列] ボックスの一覧で [EnglishProductCategoryName] を選択し、[OK] をクリックします。

  12. [データ ソース ビュー] ペインで、DimProductSubcategory テーブルを探します。このテーブルの ProductSubcategoryKey を右クリックし、[列から新しい属性を作成] をクリックします。

  13. [属性] ペインで、この新しい属性の名前を「Subcategory」に変更します。

  14. [プロパティ] ウィンドウで、[NameColumn] プロパティ フィールド内をクリックし、参照ボタン ([...]) をクリックして、[名前列] ダイアログ ボックスを開きます。

  15. [基になる列] ボックスの一覧で [EnglishProductSubcategoryName] を選択し、[OK] をクリックします。

  16. Product Categories という名前の新しいユーザー定義階層を作成します。この階層の最上位レベルに Category レベルを配置し、その下に Subcategory レベル、さらにその下に Product Name レベルを配置します。

  17. Product Categories ユーザー定義階層の AllMemberName の値として、「All Products」と入力します。

Product ディメンションのユーザー定義階層の表示

Product ディメンションのユーザー定義階層を表示するには

  1. Product ディメンションのディメンション デザイナで、[ディメンションの構造] タブのツール バーにある [処理] をクリックします。

  2. [はい] をクリックして、プロジェクトを作成し、配置します。次に、[実行] をクリックして、Product ディメンションを処理します。

  3. 処理が正常に完了したら、[処理の進行状況] ダイアログ ボックスで [ディメンション 'Product' の処理が正常に完了しました] を展開し、[ディメンション属性 'Product Name' の処理が正常に完了しました] を展開します。次に、[SQL クエリ数 1] を展開します。

  4. SELECT DISTINCT クエリをクリックし、[詳細表示] をクリックします。

    SELECT DISTINCT 句に WHERE 句が追加されています。次の図のように、この WHERE 句は、値を持たない製品を ProductSubcategoryKey から削除します。

    SELECT DISTINCT 句に含まれた WHERE 句

  5. [閉じる] を 3 回クリックし、処理中のダイアログ ボックスをすべて閉じます。

  6. Product ディメンションのディメンション デザイナで、[ブラウザ] タブをクリックします。次に、[再接続] をクリックします。

  7. [階層] ボックスの一覧に [Product Model Lines] が表示されていることを確認し、[All Products][Components] の順に展開します。

    次の図のように、SELECT DISTINCT ステートメントの WHERE 句により、アセンブリ部品が何も表示されなくなりました。

    表示されない部品を示す階層の一覧

  8. [階層] ボックスの一覧から [Product Categories] を選択し、[All Products][Components] の順に展開します。

    アセンブリ部品は何も表示されません。

前の実習で説明した動作を変更するには、Product ディメンションの UnknownMember プロパティを有効にし、UnknownMemberName の値を設定します。次に、Subcategory 属性と Model Name 属性の NullProcessing プロパティを UnknownMember に設定します。最後に、Category 属性を Subcategory 属性の関連する属性として定義し、Product Line 属性を Model Name 属性の関連する属性として定義します。以上の操作により、Analysis Services では、SubcategoryKey 列に値を持たないそれぞれの製品について、UnknownMemberName の値が使用されるようになります。次の実習でそれを確認します。

不明なメンバの有効化、属性リレーションシップの定義、および NULL のカスタム処理プロパティの指定

不明なメンバを有効にし、属性リレーションシップを定義して、NULL のカスタム処理プロパティを指定するには

  1. Product ディメンションのディメンション デザイナで [ディメンション構造] タブをクリックし、[属性] ペインで [Product] をクリックします。

  2. [プロパティ] ウィンドウで、UnknownMember プロパティを Visible に変更します。次に、UnknownMemberName プロパティのセルをクリックし、値として「Assembly Components」と入力します。

    UnknownMember プロパティを Visible または Hidden に変更すると、ディメンションの [UnknownMember] プロパティが有効になります。

  3. [属性リレーションシップ] タブをクリックします。

  4. ダイアグラムで、[Subcategory] 属性を右クリックし、[新しい属性リレーションシップ] をクリックします。

  5. [属性リレーションシップの作成] ダイアログ ボックスで、[基になる属性][Subcategory] を指定します。[関連属性][Category] に設定します。リレーションシップの種類の設定は [可変] のままにします。

  6. [OK] をクリックします。

  7. [属性] ペインで、[Subcategory] を選択します。

  8. [プロパティ] ウィンドウで、[KeyColumns] プロパティ、[DimProductSubcategory.ProductSubcategoryKey (Integer)] プロパティの順に展開します。

  9. NullProcessing プロパティを UnknownMember に変更します。

  10. [属性] ペインで、[Model Name] を選択します。

  11. [プロパティ] ウィンドウで、[KeyColumns] プロパティ、[Product.ModelName (WChar)] プロパティの順に展開します。

  12. NullProcessing プロパティを UnknownMember に変更します。

    これらの変更により、処理中に Analysis Services が Subcategory 属性または Model Name 属性に NULL 値を検出すると、不明なメンバの値がキー値として働き、ユーザー定義階層が適切に作成されます。

Product ディメンションの再表示

Product ディメンションを表示するには

  1. [ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。

  2. 配置が正常に完了したら、Product ディメンションのディメンション デザイナで [ブラウザ] タブをクリックし、[再接続] をクリックします。

  3. [階層] ボックスで [Product Categories] が選択されていることを確認し、[All Products] を展開します。

    Category レベルの新しいメンバとして Assembly Components が表示されています。

  4. Category レベルの Assembly Components メンバを展開し、Subcategory レベルの Assembly Components メンバを展開します。

    次の図のように、Product Name レベルにアセンブリ部品が表示されるようになりました。

    アセンブリ コンポーネントを示す製品名レベル

  5. [階層] ボックスの一覧から [Product Model Lines] を選択し、[All Products] を展開します。次に、Product Line レベルの Assembly Components メンバを展開し、Model Name レベルの Assembly Components メンバを展開します。

    すべてのアセンブリ部品が Product Name レベルに表示されるようになりました。