増分更新とリアルタイム データを構成する
この記事では、セマンティック モデルの増分更新とリアルタイム データを構成する方法について説明します。 データフローの増分更新の構成について詳しくは、「データフローの Premium 機能」の「増分更新」を参照してください。
増分更新の構成には、RangeStart および RangeEnd パラメーターの作成、フィルターの適用、増分更新ポリシーの定義が含まれます。 Power BI サービスに発行した後、モデルに対して最初の更新操作を実行します。 最初の更新操作と、その後の更新操作で、定義した増分更新ポリシーが適用されます。 これらの手順を完了する前に、必ず「セマンティック モデルの増分更新とリアルタイム データ」で説明されている機能を十分理解するようにしてください。
パラメーターを作成する
このタスクでは、Power Query エディターを使って、既定値で RangeStart および RangeEnd パラメーターを作成します。 既定値が適用されるのは、Power BI Desktop でモデルに読み込まれるデータをフィルター処理する場合のみです。 入力する値には、データ ソースからの最新のデータのみが少量含まれている必要があります。 サービスに発行すると、これらの時間の範囲値は増分更新ポリシーによって上書きされます。 つまり、このポリシーの場合、受信データのウィンドウが次々と作成されます。
Power BI Desktop で [ホーム] リボンの [データの変換] を選び、Power Query エディターを起動します。
[パラメーターの管理] ドロップダウンを選び、[新しいパラメーター] を選びます。
[名前] フィールドに「RangeStart」と入力します (大文字と小文字を区別します)。 [型] フィールドでドロップダウンから [日付/時刻] を選びます。 [現在の値] フィールドに、開始日時の値を入力します。
[新規作成] を選び、RangeEnd という名前の 2 番目のパラメーターを作成します。 [型] フィールドで [日付/時刻] を選びます。次に [現在の値] フィールドに終了日時の値を入力します。 [OK] を選択します。
RangeStart と RangeEnd のパラメーターを定義したら、これらのパラメーターに基づいてモデルに読み込まれるデータをフィルター処理します。
データのフィルター処理
注意
このタスクを続行する前に、ソース テーブルに日付/時刻データ型の日付列があることをご確認ください。 日付/時刻列がなく、yyyymmdd
形式の整数代理キーの日付列があるときは、この記事の後半の「DateTime を整数型に変換する」の手順に従って、ソース テーブルの整数代理キーと一致するようにパラメーターの日付/時刻値を変換する関数を作成します。
次に、RangeStart と RangeEnd のパラメーターの "条件" に基づいてフィルターを適用します。
Power Query エディターで、フィルター処理する日付列を選んでから、ドロップダウンの矢印 >[日付/時刻フィルター]>[カスタム フィルター] の順に選びます。
[行のフィルター] で、最初の条件を指定するには、[次より後] または [次の値以降] を選び、[パラメーター] を選んでから [RangeStart] を選びます。
2 番目の条件を指定するには、最初の条件で [次より後] を選んだ場合は、[次の値以前] を選びます。あるいは、最初の条件で [次の値以降] を選んだ場合は、2 番目の条件で [次の前] を選び、[パラメーター] を選んでから [RangeEnd] を選びます。
重要: RangeStart または RangeEnd のいずれか (両方ではなく) に、クエリに等しい (=) があることを確認します。 等しい (=) が両方のパラメーターに存在する場合、行が 2 つのパーティションの条件を満たし、その結果、モデル内にデータが重複する可能性があります。 たとえば、
= Table.SelectRows(#"Changed Type", each [OrderDate] >= RangeStart and [OrderDate] <= RangeEnd)
の場合、RangeStart と RangeEnd の両方に等しい OrderDate があると、重複データになる可能性があります。[OK] を選んで閉じます。
Power Query エディターの [ホーム] リボンから [適用を閉じる] を選びます。 RangeStart および RangeEnd パラメーターで定義されているフィルターと、自分で定義したその他のフィルターに基づき、Power Query によってデータが読み込まれます。
Power Query によって読み込まれるのは、RangeStart および RangeEnd パラメーターの間に指定されたデータのみです。 その期間のデータ量にもよりますが、テーブルはすぐに読み込まれます。 速度が低下し、処理負荷が高いようであれば、クエリがフォールドされていない場合があります。
ポリシーの定義
RangeStart および RangeEnd パラメーターを定義し、それらのパラメーターに基づいてデータをフィルター処理した後、増分更新ポリシーを定義します。 このポリシーは、モデルがサービスに発行され、手動またはスケジュールされた更新操作が実行された後にのみ適用されます。
データ ビューで、[データ] ペインのテーブルを右クリックし、[増分更新] を選びます。
[増分更新とリアルタイム データ]>[テーブルの選択] の順に進み、テーブルを確認または選択します。 [テーブルを選択] リストボックスの既定値は、データ ビューで選んだテーブルです。
必要な設定を指定してください。
[インポートと更新範囲の設定]>[このテーブルを増分更新する] の順に進み、スライダーを動かして [オン] にします。 スライダーが無効になっている場合は、テーブルの Power Query 式に RangeStart および RangeEnd パラメーターに基づくフィルターが含まれていないことを意味します。
[アーカイブ データの開始] で、モデルに含めるストアの履歴期間を指定します。 他のフィルターが適用されない限り、この期間内の日付を含むすべての行がサービスのモデルに読み込まれます。
[増分更新データを開始する] で、"更新" 期間を指定します。 この期間内の日付を含むすべての行は、Power BI サービスで手動またはスケジュールされた更新操作が実行されるたびにモデルで更新されます。
オプションの設定を指定します。
[オプション設定の選択] で、[DirectQuery で最新データをリアルタイムで取得します (Premium のみ)] を選択して、前回の更新期間後にデータ ソースで発生した最新のデータ変更を取り込みます。 この設定を適用すると、増分更新ポリシーによって DirectQuery パーティションがテーブルに追加されます。
[完了期間のみを更新] を選択して、丸 1 日のみを更新します。 更新操作で、ある日が完了していないことが検出された場合、その丸 1 日の行は更新されません。 このオプションは、[DirectQuery で最新データをリアルタイムで取得します (Premium のみ)] を選んだ場合に、自動的に有効になります。
[データ変更の検出] をオンにして識別に使用される日付/時刻列を指定し、データが変更された日のみを更新します。 データ ソースでは、通常、監査目的で日付/時刻列が存在している必要があります。 この列を、RangeStart および RangeEnd パラメーターでデータをパーティション分割するために使用されるのと同じ列にすることはできません。 この列の最大値が、増分範囲の各期間に対して評価されます。 前回の更新以降に変更されていない場合、現在の期間は更新されません。 Premium 容量に発行されたモデルの場合は、カスタム クエリを指定することもできます。 詳細については、詳細増分更新に関するページの「データ変更の検出のためのカスタム クエリ」を参照してください。
使用する設定によっては、ポリシーを次のようにする必要があります。
自分の設定を確認してから、[適用] を選んで更新ポリシーを完了します。 この手順では、データは読み込まれません。
保存してサービスに発行する
RangeStart と RangeEnd のパラメーター、フィルター処理、更新ポリシーの各設定が完了したら、モデルを保存してからサービスに発行してください。 モデルが大きくなる場合は、サービスで最初の更新を呼び出す "前" に、必ず [Large model storage format] (大規模なモデルのストレージ形式) を有効にしてください。
モデルの更新
サービスで、モデルを更新します。 最初の更新では、更新期間内の新規および更新されたデータの両方、および保存期間全体の履歴データが読み込まれます。 データの量によっては、この更新に時間がかかることがあります。 その後の手動によるまたはスケジュールされた更新は通常、より高速になります。これは、増分更新ポリシーが適用され、更新ポリシー設定で指定された期間のデータのみが更新されるためです。
DateTime を整数型に変換する
このタスクが唯一必要になるのは、RangeStart と RangeEnd のフィルター定義に使う日付列内の日付/時刻値ではなく整数の代理キーが、テーブルで使われる場合です。
RangeStart および RangeEnd パラメーターのデータ型は、日付列のデータ型に関係なく、日付/時刻データ型とする必要があります。 しかし、多くのデータ ソースでは、テーブルに日付/時刻データ型の列はありませんが、代わりに yyyymmdd
形式の整数代理キーの日付列があります。 結果が非フォールディング クエリ式になることから、通常、このような整数代理キーを日付/時刻データ型に変換することはできません。しかし、パラメーター内の日付/時刻値を変換して、フォールディング機能を失うことなくデータ ソース テーブルの整数代理キーと一致するようにするための関数を作成することができます。 その後、その関数はフィルター手順で呼び出されます。 この変換手順は、データ ソース テーブルに整数データ型として代理キー "のみ" が含まれている場合に必要になります。
Power Query エディターの [ホーム] リボンで、[新しいソース] ドロップダウンを選び、[空のクエリ] を選びます。
[クエリの設定] に、DateKey などの名前を入力してから、数式エディターで次の式を入力します。
= (x as datetime) => Date.Year(x)*10000 + Date.Month(x)*100 + Date.Day(x)
数式をテストするには、[パラメーターの入力] に日付/時刻値を入力してから、[呼び出し] を選びます。 数式が正しい場合は、日付の整数値が返されます。 確認した後、この新しい [呼び出された関数] クエリを削除します。
[クエリ] でテーブルを選択してから、クエリ式を編集して RangeStart および RangeEnd パラメーターを指定して関数を呼び出します。
= Table.SelectRows(#"Reordered Column OrderDateKey", each [OrderDateKey] > DateKey(RangeStart) and [OrderDateKey] <= DateKey(RangeEnd))