Time ディメンションの変更
SELECT DISTINCT 処理クエリから返されるメンバを決定するには、属性の複合キーを定義します。複合キーを使用する場合、属性メンバの並べ替え順序は複合キーのメンバの順序によって決まります。このトピックの実習では、ユーザー定義階層の名前を変更し、Date、Month、Calendar Quarter、および Calendar Semester 属性に表示されるメンバ名を変更します。また、EnglishMonthName、CalendarQuarter、および CalendarSemester 属性の複合キーを定義し、複合キーのメンバの並べ替え順序を変更します。これにより、ディメンション メンバの並べ替え順序が決定します。
ユーザー定義階層の変更
ユーザー定義階層を変更するには
Business Intelligence Development Studio で Time ディメンションのディメンション デザイナに切り替え、[ディメンション構造] タブをクリックします。
[階層とレベル] ペインで、CalendarYear - CalendarSemester - CalendarQuarter - EnglishMonthName - FullDateAlternateKey 階層をクリックします。次に、[プロパティ] ウィンドウで Name プロパティをクリックし、「Calendar Time」と入力します。
このユーザー定義階層の名前が Calendar Time になりました。
Calendar Time ユーザー定義階層で、English Month Name レベルを Calendar Month に、Full Date Alternate Key レベルを Date に変更します。
Adventure Works DW データ ソース ビューのデータ ソース ビュー デザイナに切り替え、[テーブル] ペインで [Time (dbo.DimTime)] を右クリックし、[新しい名前付き計算] をクリックします。
[名前付き計算の作成] ダイアログ ボックスの [列名] ボックスに「SimpleDate」と入力します。次に、[式] ボックスに次の SQL スクリプトを入力します。
DATENAME(mm, FullDateAlternateKey) + ' ' + DATENAME(dd, FullDateAlternateKey) + ', ' + DATENAME(yy, FullDateAlternateKey)
この SQL スクリプトは、FullDateAlternateKey 列から年、月、および日付の値を取得します。DimTime テーブルの FullDateAlternateKey 列に保存されている元の値を表示せずに、この新しい列の値を表示するには、Time ディメンションで Calendar Time 階層の Date レベルを変更します。
[OK] をクリックして、Time ディメンションのディメンション デザイナに切り替えます。
Calendar Time 階層の Date をクリックします。次に、[プロパティ] ウィンドウで Date レベルのプロパティを確認します。
この階層の Date レベルは、FullDateAlternateKey 属性に基づいている点に注意してください。次の手順では、Date レベルが TimeKey 属性に基づいている属性を変更します。次に、その属性のメンバの名前が先ほど定義した SimpleDate 列の値から取得されるよう、TimeKey 属性のプロパティを修正します。Date レベルが基づいている属性である FullDateAlternateKey はそのまま残しておき、メンバ名が SimpleDate 列から取得されるように属性を変更する方法もあります。ただし、より効果的なのは最初のメソッドです。TimeKey 属性と FullDateAlternateKey 属性のいずれか一方があればよいため、FullDateAlternateKey は削除します。
Calendar Time ユーザー定義階層で、Date レベルの SourceAttribute プロパティの値を TimeKey に変更し、[属性] ペインから FullDateAlternateKey 属性を削除します。
[属性] ペインで TimeKey を選択します。次に、[プロパティ] ウィンドウで NameColumn プロパティ コレクションを展開し、Source プロパティ コレクションを展開します。ColumnID プロパティの値を SimpleDate に変更します。
TimeKey 属性の OrderBy プロパティは、属性階層のメンバをキー値の順に並べ替えるように指定しています。
BI Development Studio で、[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。配置が正常に完了したら、Time ディメンションのディメンション デザイナで [ブラウザ] タブをクリックし、ツール バーの [再接続] をクリックします。
Calendar Time 階層の各レベルを展開し、Date レベルのメンバを確認します。
Date レベルのメンバが、以前よりもわかりやすくなっているはずです。しかし、Calendar Semester、Calendar Quarter、および Month のメンバには、それぞれの親の年度が表示されていません。
次の図は、Date レベルのメンバを示しています。
[階層] ボックスの一覧から [EnglishMonthName] を選択し、[All] メンバを展開します。
各月は一度のみ表示されます。Time ディメンションの年度ごとに各月が表示されることはありません。このトピックの次の実習では、各年度の各月に対して一意な名前を生成します。
[階層] ボックスの一覧から [CalendarQuarter] を選択し、[All] メンバを展開します。
各四半期は一度のみ表示されます。Time ディメンションの年度ごとに各四半期が表示されることはありません。また、月はアルファベット順に並べ替えられています。このトピックの次の実習では、各年度の各四半期に対して一意な名前を生成します。レッスン 4 では、月を古い順に並べ替えます。
一意なディメンション メンバ名の指定
一意なディメンション メンバ名を指定するには
Adventure Works DW データ ソース ビューのデータ ソース ビュー デザイナに切り替え、[テーブル] ペインで [Time (dbo.DimTime)] を右クリックし、[新しい名前付き計算] をクリックします。
[名前付き計算の作成] ダイアログ ボックスの [列名] ボックスに「MonthName」と入力します。次に、[式] ボックスに以下の SQL スクリプトを入力します。
EnglishMonthName+' '+ CONVERT(CHAR (4), CalendarYear)
この SQL スクリプトは、DimTime テーブルの各月に表示されている月と年度を連結し、連結した名前を新しい列に表示します。
[OK] をクリックします。
[テーブル] ペインで [Time (dbo.DimTime)] を右クリックし、[新しい名前付き計算] をクリックします。
[名前付き計算の作成] ダイアログ ボックスの [列名] ボックスに「CalendarQuarterDesc」と入力します。次に、[式] ボックスに以下の SQL スクリプトを入力します。
'Q' + CONVERT(CHAR (1), CalendarQuarter) +' '+ 'CY ' + CONVERT(CHAR (4), CalendarYear)
この SQL スクリプトは、DimTime テーブルの各四半期に表示されている四半期と年度を連結し、連結した名前を新しい列に表示します。
[OK] をクリックします。
[テーブル] ペインで [Time] を右クリックし、[新しい名前付き計算] をクリックします。
[名前付き計算の作成] ダイアログ ボックスの [列名] ボックスに「CalendarSemesterDesc」と入力します。次に、[式] ボックスに以下の SQL スクリプトを入力します。
CASE WHEN CalendarSemester = 1 THEN 'H1' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear) ELSE 'H2' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear) END
この SQL スクリプトは、DimTime テーブルの各半期に表示されている半期と年度を連結し、連結した名前を新しい列に表示します。
[OK] をクリックし、Time ディメンションのディメンション デザイナに切り替えます。[ディメンション構造] タブをクリックします。
新しい列の値をメンバ値として使用するために、Time ディメンションの EnglishMonthName、CalendarQuarter、および CalendarSemester 属性を修正します。
[属性] ペインで、[EnglishMonthName] を選択します。[プロパティ] ウィンドウで [NameColumn] プロパティ、[Source] プロパティの順に展開し、[ColumnID] の値を MonthName に変更します。
同様に、Calendar Quarter 属性および Calendar Semester 属性の ColumnID プロパティを次のように変更します。
- Calendar Quarter — ColumnID プロパティを CalendarQuarterDesc に変更します。
- Calendar Semester — ColumnID プロパティを CalendarSemesterDesc に変更します。
BI Development Studio で、[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。配置が正常に完了したら、Time ディメンションのディメンション デザイナで [ブラウザ] タブをクリックします。
[ブラウザ] タブのツール バーで [再接続] をクリックします。次に、Calendar Quarter 属性階層で CalendarQuarter 属性階層のメンバを確認します。
CalendarQuarter 属性階層のメンバ名がわかりやすい名前になっています。しかし、この属性階層には 4 つのメンバが表示されているだけであり、年度と四半期の組み合わせごとに一意なメンバが表示されているわけではありません。EnglishMonthName と CalendarSemester 属性についても、同様の状態であることがわかります。このトピックの次の実習では、これらの属性に複合キーを指定し、この状態を修正します。
複合キーの値の指定
複合キーの値を指定するには
Time ディメンションのディメンション デザイナで [ディメンション構造] タブを選択し、EnglishMonthName 属性を選択します。次に、属性値を変更するため、[プロパティ] ウィンドウで、KeyColumns プロパティのセルにある参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] が開き、この属性のメンバ キー列が表示されます。Analysis Services は、ディメンションを処理するときに SELECT DISTINCT クエリを送信し、ディメンションのメンバを識別します。[DataItem コレクション エディタ] では、単一キーの代わりに複合キーを属性に指定できます。これにより、新しいディメンション メンバが返されるようになります。
ディメンション属性の 2 番目のメンバを定義するため、[追加] をクリックします。
メンバの一覧に新しいキーが表示されます。次に、この新しいキー メンバのプロパティを定義します。
[新しいバインド (WChar) プロパティ] で、Source プロパティの値を変更するため、このセルにある参照ボタン ([...]) をクリックします。
[オブジェクトのバインド] ダイアログ ボックスが表示されます。このダイアログ ボックスで、指定のテーブルから既存の列を指定します。または、上下階層を構成してリレーショナル スキーマを生成する場合は、作成する列の種類を指定します。
[バインドの種類] ボックスの一覧から [列のバインド] を選択します。
[基になるテーブル] ボックスの一覧で [Time] が選択されていることを確認します。
[基になる列] ボックスの一覧から [CalendarYear] を選択します。
次の図は [オブジェクトのバインド] ダイアログ ボックスです。
[OK] をクリックして [オブジェクトのバインド] ダイアログ ボックスを閉じ、再び [OK] をクリックして [DataItem コレクション エディタ] を閉じます。
KeyColumns プロパティの値が (Collection) に設定されました。
CalendarQuarter 属性を選択します。[プロパティ] ウィンドウで、KeyColumns プロパティの属性値を変更するため、このセルにある参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] が表示されます。
KeyColumns プロパティの 2 番目のメンバを定義するため、[追加] をクリックします。
[新しいバインド (WChar) プロパティ] で、Source プロパティの値を変更するため、このセルにある参照ボタン ([...]) をクリックします。
[オブジェクトのバインド] ダイアログ ボックスが表示されます。
[バインドの種類] ボックスの一覧から [列のバインド] を選択します。
[基になるテーブル] ボックスの一覧で [Time] が選択されていることを確認します。
[基になる列] ボックスの一覧から [CalendarYear] を選択します。
[OK] をクリックし、もう一度 [OK] をクリックします。
CalendarSemester 属性を選択します。[プロパティ] ウィンドウで、KeyColumns プロパティの属性値を変更するため、このセルにある参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] ダイアログ ボックスが表示されます。
KeyColumns プロパティの 2 番目のメンバを定義するため、[追加] をクリックします。
[新しいバインド (WChar) プロパティ] で、Source プロパティの値を変更するため、このセルにある参照ボタン ([...]) をクリックします。
[オブジェクトのバインド] ダイアログ ボックスが表示されます。
[バインドの種類] ボックスの一覧から [列のバインド] を選択します。
[基になるテーブル] ボックスの一覧で [Time] が選択されていることを確認します。
[基になる列] ボックスの一覧から [CalendarYear] を選択します。
[OK] をクリックし、もう一度 [OK] をクリックします。
BI Development Studio で、[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。配置が正常に完了したら、Time ディメンションのディメンション デザイナで [ブラウザ] タブをクリックします。
[ブラウザ] タブのツール バーで [再接続] をクリックします。次に、Calendar Quarter 属性階層で CalendarQuarter 属性階層のメンバを確認します。
CalendarQuarter 属性階層に、各年度の各四半期がメンバとして表示されるようになりました。ただし、これらのメンバは年度順に並んでいません。まず四半期順に並べ替えられ、次に年度順に並べ替えられています。このトピックの次の実習では、この属性階層のメンバが年度順に並べられ、さらに四半期順に並べられるように設定します。
次の図は、CalendarQuarter 属性階層の現在の構造を示しています。
EnglishMonthName および CalendarSemester 属性階層のメンバを確認します。
この 2 つの階層のメンバも日時順には並んでいません。EnglishMonthName は月、CalendarSemester は半期の順にまず並べ替えられ、その後、年度順に並べ替えられています。このトピックの次の実習では、この並べ替え順序が変わるように複合キーを修正します。
複合キーのメンバの順序を変更することによる並べ替え順序の変更
複合キーのメンバの順序を変更するには
Time ディメンションのディメンション デザイナで、[ディメンション構造] タブをクリックします。次に、[属性] ペインで [CalendarSemester] を選択します。
[プロパティ] ウィンドウで、OrderBy プロパティの値を確認します。
CalendarSemester 属性階層のメンバは、キー値に基づいて並べられます。複合キーにより、メンバのキーがまず 1 番目のキーに基づいて並べ替えられ、次に 2 番目のキーに基づいて並べ替えられています。つまり、CalendarSemester 属性階層のメンバはまず半期順に並べ替えられ、続いて年度順に並べ替えられています。
KeyColumns プロパティの値を変更するため、[プロパティ] ウィンドウで参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] が表示されます。
[DataItem コレクション エディタ] の [メンバ] の一覧で、DimTime.CalendarSemester (UnsignedTinyInt) が選択されていることを確認します。次に、下矢印をクリックし、この複合キーのメンバの順序を逆にします。[OK] をクリックします。
CalendarSemester 属性階層のメンバが、まず年度順に並べ替えられ、続いて半期順に並べ替えられるようになりました。
[属性] ペインで CalendarQuarter を選択した後、[プロパティ] ウィンドウで、KeyColumns プロパティの参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] の [メンバ] の一覧で、DimTime.CalendarQuarter (UnsignedTinyInt) が選択されていることを確認します。次に、下矢印をクリックし、この複合キーのメンバの順序を逆にします。[OK] をクリックします。
CalendarQuarter 属性階層のメンバが、まず年度順に並べ替えられ、続いて四半期順に並べ替えられるようになりました。
[属性] ペインで EnglishMonthName を選択した後、[プロパティ] ウィンドウで、KeyColumns プロパティの参照ボタン ([...]) をクリックします。
[DataItem コレクション エディタ] の [メンバ] の一覧で、DimTime.EnglishMonthName (WChar) が選択されていることを確認します。次に、下矢印をクリックし、この複合キーのメンバの順序を逆にします。[OK] をクリックします。
EnglishMonthName 属性階層のメンバが、まず年度順に並べ替えられ、続いて月順に並べ替えられるようになりました。
BI Development Studio で、[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。配置が正常に完了したら、Time ディメンションのディメンション デザイナで [ブラウザ] タブをクリックします。
[ブラウザ] タブのツール バーで [再接続] をクリックします。次に、CalendarQuarter および CalendarSemester 属性階層のメンバを確認します。
これらの階層のメンバは、日時順に並べ替えられるようになりました。まず年度順に並べ替えられ、続いて Calendar Quarter は四半期順に、CalendarSemester は半期順に並べ替えられています。
EnglishMonthName 属性階層のメンバを確認します。
EnglishMontName 属性階層のメンバはまず年度順に並べ替えられ、続いて月名順 (アルファベット順) に並べ替えられました (これは、データ ソース ビューの EnglishCalendarMonth 列のデータ型が、基礎となるリレーショナル データベースでの nvarchar データ型に基づき、文字列型の列となっているためです)。しかし、各年度の月は、月名順ではなく古い順に並べ替えたほうが便利です。この変更は、レッスン 4 で行います。
次の図は、EnglishMonthName 属性階層のメンバを示しています。
ここでチュートリアルを切り上げても途中から再開できるよう、この時点までの Analysis Services Tutorial プロジェクトを保存しておきます。BI Development Studio で、[ファイル] メニューの [すべてを保存] をクリックします。
データ ソース ビューで名前付き計算を作成し、この名前付き計算を属性メンバの名前として使用することにより、Time ディメンションの属性階層のメンバ名をわかりやすい名前に変更しました。また、複合キーを定義し、その複合キーに適切な並べ方を指定して、ディメンション メンバの並べ替え順序が見やすくなるように調整しました。