モデルに組み込む
正しくモデル化するだけです: 分析するメジャーを含むファクト テーブルと、人物ディメンションおよび日付ディメンションへの外部キーがあると仮定して、分析する範囲を含む「年齢グループ」ディメンション用の新しいテーブルを追加します。このテーブルには、たとえば、1 つのレコード「0-9」、1 つの「10-19」などが含まれます。
次に、age group ディメンションを参照する外部キー列をファクト テーブルに追加します。この外部キーの値を設定すると、外部キーによって参照される日付ディメンションの日付と、外部キーによって参照される人の誕生日の差を計算する、ファクト テーブルに対する SQL 更新ステートメントになります。 . この差がその日の年齢です。これから、年齢層を特定し、その主キーを外部キー列の値として使用します。
最後に、年齢層ディメンションの年齢層列から属性を作成します。
その場で計算する
その場で実際に計算したい場合、パフォーマンスが良いかどうかはわかりませんが、次のように試すことができます。「年齢層」ディメンションも必要です。ただし、それをファクト テーブルにリンクする必要はありません。次に、計算されるメンバーを次のように定義します。
member [Measures].[Age at Date] AS
DateDiff('yyyy',
[Person].[BirthDate].CurrentMember.Properties("Key0", TYPED),
Measures.[Date]
)
Member [Measures].[Person Count per Age Group] AS
CASE
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[0-9] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 0 AND [Measures].[Age at Date] < 10
).Count
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[10-19] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 10 AND [Measures].[Age at Date] < 20
).Count
...
END
Measures.[Date]
これは、ファクト テーブルに直接名前が付けられたメジャーの各レコードの日付があることを前提としています。そうでない場合は、Key0
プロパティを介して生年月日が導出される方法と同様に、日付次元の現在のメンバーから、その日付を日付データ型として取得できます。生年月日属性キーのディメンションで実際に日付データ型を使用していると仮定しています。そうでない場合、型変換が必要になる場合があります。このような目的のために、Analysis Services で使用できる VBA 関数が多数あります (上記で使用したものなどDateDiff
) 。