PowerPivot で使用する日付
ここでは、日付を含むデータのインポートに関するベスト プラクティス、およびリレーションシップでの日付の処理とピボットテーブルでの日付の処理に関するベスト プラクティスについて説明します。
日付データのインポートに関するベスト プラクティス
日付/時刻データを含むデータをインポートする場合 (特に複数のソースからインポートする場合)、それらのデータには異なる書式の日付や、粒度のレベルが異なる日付が含まれていることがよくあります。
たとえば、Excel には、現在の日付/時刻を返す 2 つの関数が用意されています。TODAY 関数は NOW 関数と同じ日付を返しますが、NOW 関数が正確な時刻を返すのに対し、TODAY 関数は常に既定の時刻として 12 AM を返します。
この場合の問題は、時間情報の追加によって値が一致しなくなる可能性があることです。そのため、ピボットテーブル内の値を合計するときに、意図する方法で値をグループ化できないことがあります。
粒度のレベルが異なる日付があることに加えて、使用するデータ ソースにはさまざまなテキスト形式で記述された日付、異なる地域別設定の日付、または異なる会計年度に基づく日付が含まれていることがあります。
データのインポート後に、こうしたさまざまな種類の日付を 1 つのモデルで処理するためには、次のことが必要です。
計算列で DAX 数式を使用することにより、値を切り捨てたり、日付/時刻値の一貫性を確保したりする。
日付列間のリレーションシップを作成する場合に使用できる、日付/時刻のマスター テーブルを作成する。
以下のセクションで詳しく説明します。
日付に関する要件を特定する。
日付値を変更する前に、その日付を使用して実施する分析について検討し、次の質問事項を確認してください。
日、時間、週、四半期など、どのような数値要素のレベルや粒度レベルを計算またはグループ化の対象とするか。
週や会計年度など、どのような粒度レベルを日付のグループ化に使用するか。
日付が欠落しているか。日付またはその他の値の欠落を許容できるかどうか。許容できない場合、プレースホルダーとなる値や日付を挿入する必要があるかどうか。値が欠落している場合、未知の値を表すために選択したゼロまたはその他の値を使用するか。
日付を一貫性のある日付書式に変換する式を使用する。
インポートしたデータに含まれる日付が複数の書式にわたっている場合は、列をそのまま残し、DAX 数式を使用することで、正しい書式と指定した粒度のレベルで日付を表す計算列を作成できます。
例については、次のトピックを参照してください。
DAX 関数を使用し、必要に応じて日、年、月などの値を抽出する。
DAX 関数を使用し、値を日付/時刻の書式に構成する。
日付値が日付として書式設定されていない場合や、一貫性のない書式である場合は、DAX に提供されている日付および時刻関数を使用して、正しい日付を作成できます。
- FORMAT 関数を使用して、カスタムの数値書式や日付/時刻書式で処理する。
すべての日付および時刻関数の一覧については、「PowerPivot の DAX 関数リファレンス」を参照してください。
日、週、および月を使用する必要がある場合に時刻を切り捨てる。
日は、DAX タイム インテリジェンス関数で使用できる最小の時間単位です。したがって、時刻値を使用する必要がない場合は、データの粒度を下げて最小単位として日を使用する必要があります。
不必要に詳細な時刻値に関する問題を解決するには、次の作業を行います。
日付/時刻値から時刻を切り捨てる、またはすべての日付/時刻値で同じ既定の時刻値を使用するようにする。
時、分、秒などの時刻を使用する必要がある場合は、計算列を使用することにより、時間の増分を表す 1 つまたは複数のフィールドを作成する。それにより、時刻を別々に分析できるようになります。
PowerPivot で使用する日付/時刻データ型は SQL Server データ型であり、既定では、各日付の時刻値を作成します。
インポート時にフィルター処理して不正データを除外する。
外部データに不正な値が含まれている場合は、インポート時にその不正なデータを除外できます。詳細については、次のトピックを参照してください。
ピボットテーブルでのデータの処理に関するベスト プラクティス
ここでは、ピボットテーブルでの日付の処理、および DAX タイム インテリジェンス関数を使用する式の処理に役立つヒントをいくつか示します。
リレーションシップで整数の代理キーを使用しない。
リレーショナル データ ソースから外部データをインポートする場合、日付および時刻列が代理キーで表されることがよくあります。代理キーは、一意の日付の表示に使用される整数列です。ただし、PowerPivot ブックでは、整数の日付/時刻キーを使用したリレーションシップの作成を避けてください。その代わり、キーについては、date データ型の一意の値を含む列を使用します。
代理キーの使用は、従来のデータ ウェアハウスでは最適な方法であると考えられていましたが、PowerPivot では、整数キーは不要であり、このキーのために異なる期間によるピボットテーブル内の値のグループ化が難しくなることがあります。
日付のマスター テーブルを作成する。
使用するブックの各データ テーブルに日付/時刻値が含まれている場合、それらの日付/時刻列でテーブルを結合すると、多くの値が一致しなくなる可能性があります。たとえば、Sales テーブルには 2008 年下半期のみの日付が含まれているが、Suppliers テーブルには 2006 ~ 2008 年の日付が表示されているといった場合があります。
異なる日付と時刻を含む多数の列でさまざまなデータ テーブルを結合する代わりに、日付情報だけを含むマスター テーブルを作成することで、より適切な結果が得られます。そうすれば、リレーションシップを使用してそのテーブルをデータ テーブルにリンクさせることができ、一貫性のある一連のデータを備えることのメリットを得られます。
DAX サンプル ブックには、リレーションシップを使用して他のテーブルに結合された日付/時刻のマスター テーブルの例が用意されています。
マスター テーブルには、使用するそれぞれの日付に固有の日付/時刻値があることに加えて、階層が含まれています。この階層を使用することで、次のテーブルに示すようにピボットテーブルで日付をグループ化できます。
DayNumberOfWeek |
WeekNumberOfYear |
CalendarQuarter |
FiscalQuarter |
DayNameOfWeek |
WeekNumberOfMonth |
CalendarSemester |
FiscalSemester |
DayNumberOfMonth |
MonthName |
CalendarYear |
FiscalYear |
DayNumberOfYear |
MonthNumberOfYear |
|
|
必要に応じて日付列のコピーを作成する。
日付ディメンションを使用して日付を表示およびグループ化する、従来の Analysis Services データベースを使用してきた環境では、日付のマスター テーブルの概念は親しみやすいものとなるでしょう。
PowerPivot における相違点は、PowerPivot テーブルの一意の各列は、任意の 2 つのテーブル間の 1 つのリレーションシップでしか使用できないことです。したがって、1 つのテーブルに日付キーに関連付ける列が複数存在する場合は、その日付キー列とリンクのコピーを作成する必要があります。
たとえば、使用する Orders テーブルに SalesDate、TransactionDate、および ShippingDate という日付列がある場合を考えてみましょう。これらすべての列を日付のマスター テーブルの日付キー列にリンクさせる必要がありますが、PowerPivot では、それぞれのリレーションシップで値全体にわたる一意の明確なパスを確保していなければならないので、このリンクを設定することはできません。代わりに、追加の日付列を個別のテーブルに移動したうえで、それぞれのテーブルの日付列を日付のマスター テーブルの日付キーにリンクさせる必要があります。たとえば、SalesDate 列を Orders テーブルに保持したまま、トランザクション用の新しいテーブル 1 つと、出荷情報用の別のテーブル 1 つを作成することが必要になる場合があります。この場合は、計算列を使用することで ShippingDate 列と TransactionDate 列のコピーを作成して、それらが同期した状態を維持するようにできます。
DAX サンプル ブックには、日付列のコピーを作成して効果的に使用する方法の例が用意されています。サンプルの入手先の詳細については、「PowerPivot のサンプル データの入手」を参照してください。