レッスン 4-7 - 不明なメンバーおよび Null 処理プロパティの定義

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

ディメンションSQL Server Analysis Services処理する場合、テーブル内の基になる列またはデータ ソース ビューのビューからのすべての個別の値によって、ディメンション内の属性が設定されます。 SQL Server Analysis Services処理中に null 値が検出された場合、既定では、この null は数値列の場合は 0 に変換され、文字列列の場合は空の文字列に変換されます。 この既定の設定を変更したり、基礎的なリレーショナル データ ウェアハウスに固有の抽出、変換、読み込みプロセスがあればそれらを使用して NULL 値を変換したりできます。 さらに、ディメンションの UnknownMember プロパティと UnknownMemberName プロパティと、ディメンションのキー属性の NullProcessing プロパティの 3 つのプロパティを構成することで、null 値を指定された値に変換SQL Server Analysis Services。

ディメンション ウィザードおよびキューブ ウィザードでは、ディメンションのキー属性が NULL 値を許容するかどうか、またはスノーフレーク ディメンションのルート属性が NULL 値を許容する列に基づいているかどうかを基準にして、これらのプロパティを有効化します。 この場合では、キー属性の NullProcessing プロパティは UnknownMember に設定され、 UnknownMember プロパティは Visibleに設定されます。

ただし、このチュートリアルで Product ディメンションに対して行っているようにスノーフレーク ディメンションを段階的に構築する場合、またはディメンション デザイナーを使用してディメンションを定義してこれらの既存のディメンションをキューブに組み込む場合は、 UnknownMember プロパティおよび NullProcessing プロパティを手動で設定する必要があります。

このトピックのタスクでは、Adventure Works DW データ ソース ビューに追加するスノーフラック テーブルから Product ディメンションに製品カテゴリと製品サブカテゴリ属性を追加します。 次に、Product ディメンションの UnknownMember プロパティを有効にします。 UnknownMemberName プロパティの値には Assembly Components を指定し、 Subcategory 属性と Category 属性を製品名の属性に関連付けます。最後に、スノーフレーク テーブルを結合しているメンバー キー属性に対し、カスタム エラー処理を定義します。

注意

キューブ ウィザードを使用して SQL Server Analysis Services Tutorial キューブを最初に定義したときに、Subcategory 属性と Category 属性を追加した場合は、これらの手順が自動的に実行されます。

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 ユーザー定義階層の属性の定義

  1. Adventure Works DW データ ソース ビューの [データ ソース ビュー] Designerを開き、[ダイアグラム オーガナイザー] ウィンドウで [Reseller Sales] を選択し、SQL Server Data Toolsの [データ ソース ビュー] メニューの [オブジェクトの追加と削除] をクリックします。

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

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

    DimProductSubcategory (dbo)FactProductInventory (dbo) の両方が追加されます。 FactProductInventory (dbo) を削除して、 DimProductSubcategory (dbo) テーブルだけが [含まれているオブジェクト] の一覧に追加されるようにします。

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

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

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

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

    DimProductSubcategory (dbo) テーブルと DimProductCategory (dbo) テーブルは互いにリンクしています。また、 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 ディメンションのユーザー定義階層の表示

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

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

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

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

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

    WHERE 句を示す SELECT DISTINCT 句

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

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

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

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

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

前の実習で説明した動作を変更するには、Product ディメンションの UnknownMember プロパティを有効にし、 UnknownMemberName の値を設定します。次に、 Subcategory 属性と Model Name 属性の NullProcessing プロパティを UnknownMemberに設定します。最後に、 Category 属性を Subcategory 属性の関連する属性として定義し、 Product Line 属性を Model Name 属性の関連する属性として定義します。 これらの手順により、次のタスクに示すように、SQL Server Analysis Servicesは SubcategoryKey 列の値を持たない各製品の不明なメンバー名の値を使用します。

不明なメンバーの有効化、属性リレーションシップの定義、および 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に変更します。

    これらの変更により、SQL Server Analysis Services処理中に Subcategory 属性または Model Name 属性の null 値が検出されると、不明なメンバー値がキー値として置き換わり、ユーザー定義階層が正しく構築されます。

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: ディメンションおよびメジャー グループ間のリレーションシップの定義