キューブ、パーティション、およびディメンションの処理についてのエラー構成 (SSAS - 多次元)
処理中にデータ整合性エラーが発生した場合、キューブ、パーティション、またはディメンション オブジェクトのエラー構成プロパティによって、サーバーの応答が決定します。 通常、キー列の重複キー、見つからないキー、および NULL 値がこのようなエラーをトリガーします。エラーの原因となるレコードはデータベースに追加されず、次の動作を指定するプロパティを設定することができます。 既定では、処理が停止します。 ただし、キューブの開発中に、不完全でもインポートされたデータのキューブの動作をテストできるように、エラーが発生した場合に処理を続行する必要がある場合もあります。
このトピックのセクションは次のとおりです。
実行の順序
既定の動作
エラー構成プロパティ
エラー構成プロパティを設定する場所
見つからないキー (KeyNotFound)
ファクト テーブルの NULL 外部キー (KeyNotFound)
ディメンションの NULL キー
一貫性のないリレーションシップをもたらす重複キー (KeyDuplicate)
エラーの上限またはエラーの上限のアクションの変更
エラー ログ パスの設定
次の手順
実行の順序
サーバーは、各レコードに対して ErrorConfiguration ルールの前に NullProcessing ルールを常に実行します。 複数のエラー レコードのキー列にゼロがある場合、NULL をゼロに変換する NULL 処理プロパティによって後で重複キー エラーが生じる可能性があるため、この点を理解することが重要です。
既定の動作
既定では、処理はキー列が関係する最初のエラーで停止します。 この動作は、許可されたエラーの数としてゼロを指定するエラーの上限およびそのエラーの上限に達した場合にサーバーに処理の停止を指示する処理の停止ディレクティブによって制御されます。
NULL、または値が見つからないか、重複するために、エラーをトリガーするレコードは、不明なメンバーに変換されるか、破棄されます。 Analysis Services には、データ整合性制約に違反するデータはインポートされません。
KeyErrorAction の ConvertToUnknown 設定によって、既定では不明なメンバーへの変換が発生します。 不明なメンバーに割り当てられたレコードは、処理が完了した後で調査する必要がある問題の証拠としてデータベースで検疫されます。
不明なメンバーはクエリ ワークロードから除外されますが、UnknownMember が表示に設定されている場合は、一部のクライアント アプリケーションで表示されます。
不明なメンバーに変換された NULL の数を追跡する場合、NullKeyConvertedToUnknown プロパティを変更して、ログまたは処理ウィンドウでエラーを報告することができます。
手動で KeyErrorAction プロパティを DiscardRecord に手動で設定すると、破棄が発生します。
エラー構成プロパティによって、エラーが発生した場合にサーバーがどのように応答するかを決定することができます。 オプションには、処理を直ちに停止する、処理は続行するがログ記録は停止する、または処理とエラーのログ記録の両方を続行するがあります。 既定値はエラーの重大度によって異なります。
エラー数は、エラーが発生した数を記録します。 上限を設定すると、この上限に達した場合にサーバーの応答が変更されます。 既定では、サーバーは上限に達すると処理を停止します。 既定の上限は 0 で、カウントされる最初のエラーで処理が停止します。
キー フィールドでキーが見つからない、または NULL 値のような影響が大きいエラーには、すぐに対処する必要があります。 既定では、これらのエラーによって ReportAndContinue サーバー動作が実行され、サーバーがエラーを見つけるとそのエラーをエラー数に追加して、処理を継続します (エラーの上限がゼロである場合を除きます。この場合、処理は直ちに停止されます)。
他のエラーは、必ずしもデータ整合性の問題を引き起こすわけではないため、生成されても既定では数えられないか、ログに記録されません (これが IgnoreError 設定です)。
エラー数は、NULL 処理設定の影響を受けます。 ディメンション属性の場合、NULL 処理オプションによって NULL 値が発生した場合のサーバーの応答が決定されます。 既定では、文字列型の列の NULL は空の文字列として処理されますが、数値列の NULL はゼロに変換されます。 NullProcessing プロパティをオーバーライドして、KeyNotFound エラーまたは KeyDuplicate エラーになる前に NULL 値を見つけるようにできます。 詳細については、「ディメンションの NULL キー」を参照してください。
エラーは [処理] ダイアログ ボックスで記録されますが、保存されません。 テキスト ファイル内でエラーを収集するキー エラー ログ ファイルの名前を指定できます。
エラー構成プロパティ
エラー構成プロパティは 9 つあります。 特定のエラーが発生した場合のサーバーの応答を決定するために 5 つのプロパティが使用されます。 他の 4 つは、許可されるエラー数、上限に達した場合の動作、ログ ファイルでエラーを収集するかどうかなど、エラー構成のワークロードに範囲が設定されます。
特定のエラーに対するサーバーの応答
プロパティ |
既定値 |
その他の値 |
---|---|---|
CalculationError エラー構成を初期化するときに発生します。 |
IgnoreError は、エラー数が上限より少ない限り、エラーのログ記録やカウントを行わずに処理を続行します。 |
ReportAndContinue は、エラーをログに記録し、カウントします。 ReportAndStop は、エラーの上限に関係なく、エラーを報告し、直ちに処理を停止します。 |
KeyNotFound ファクト テーブルの外部キーに関連ディメンション テーブルで一致する主キーがない場合に発生します (たとえば、Sales ファクト テーブルに Product ディメンション テーブルに存在しない製品 ID のレコードがあります)。 このエラーは、パーティションの処理中、またはスノーフレーク ディメンションのディメンション処理中に発生する可能性があります。 |
ReportAndContinue は、エラーをログに記録し、カウントします。 |
ReportAndStop は、エラーの上限に関係なく、エラーを報告し、直ちに処理を停止します。 IgnoreError は、エラー数が上限より少ない限り、エラーのログ記録やカウントを行わずに処理を続行します。 このエラーをトリガーするレコードは、既定では不明なメンバーに変換されますが、KeyErrorAction プロパティを変更して代わりに破棄することもできます。 |
KeyDuplicate 重複した属性キーがディメンションに見つかったときに発生します。 ほとんどの場合、重複した属性キーは許容されますが、このエラーは重複を通知するため、属性間の一貫性のないリレーションシップにつながる可能性があるデザインの不具合についてディメンションを確認することができます。 |
IgnoreError は、エラー数が上限より少ない限り、エラーのログ記録やカウントを行わずに処理を続行します。 |
ReportAndContinue は、エラーをログに記録し、カウントします。 ReportAndStop は、エラーの上限に関係なく、エラーを報告し、直ちに処理を停止します。 |
NullKeyNotAllowed NullProcessing = Error がディメンション属性で設定されている場合、または NULL 値がメンバーを一意に識別するために使用される属性のキー列に存在するときに発生します。 |
ReportAndContinue は、エラーをログに記録し、カウントします。 |
ReportAndStop は、エラーの上限に関係なく、エラーを報告し、直ちに処理を停止します。 IgnoreError は、エラー数が上限より少ない限り、エラーのログ記録やカウントを行わずに処理を続行します。 このエラーをトリガーするレコードは、既定では不明なメンバーに変換されますが、KeyErrorAction プロパティを設定して代わりに破棄することもできます。 |
NullKeyConvertedToUnknown NULL 値がその後、不明なメンバーに変換されたときに発生します。 ディメンション属性の設定 NullProcessing = ConvertToUnknown は、このエラーをトリガーします。 |
IgnoreError は、エラー数が上限より少ない限り、エラーのログ記録やカウントを行わずに処理を続行します。 |
このエラーが情報であると判断した場合は、既定値のままにします。 それ以外の場合は、ReportAndContinue を選択して、エラーを処理ウィンドウに報告し、エラーの上限にエラーを加算することができます。 ReportAndStop は、エラーの上限に関係なく、エラーを報告し、直ちに処理を停止します。 |
全般プロパティ
プロパティ |
値 |
---|---|
KeyErrorAction |
これは、KeyNotFound エラーが発生した場合にサーバーで行われるアクションです。 このエラーに対する有効な応答には、ConvertToUnknown または DiscardRecord があります。 |
KeyErrorLogFile |
サービス アカウントが読み取り/書き込み権限を持つフォルダーにある、.log ファイル拡張子を持つ必要があるユーザー定義のファイル名です。 このログ ファイルには、処理中に生成されたエラーのみが含まれます。 詳細情報が必要な場合はフライト レコーダーを使用します。 |
KeyErrorLimit |
処理が失敗するまでにサーバーが許可するデータ整合性エラーの最大数です。 値が 1 の場合は、数に制限がないことを示します。 既定値は 0 です。これは、最初のエラーが発生した後に処理が停止することを意味します。 整数に設定することもできます。 |
KeyErrorLimitAction |
これはキー エラー数が上限に達した場合にサーバーが実行するアクションです。 [処理の停止] を選択すると、処理は直ちに終了します。 [ログの停止] を選択すると、処理は続行されますが、エラーは報告またはカウントされなくなります。 |
エラー構成プロパティを設定する場所
データベースを配置した後に SQL Server Data Tools で、または SQL Server Management Studio のモデル プロジェクトで、プロパティ ページを使用します。 両方のツールで同じプロパティが見つかります。 また、msmdrsrv.ini ファイルのエラー構成プロパティを設定してエラー構成についてのサーバーの既定値を変更することも、スクリプト操作として処理される場合は Batch コマンドと Process コマンドで設定することもできます。
スタンドアロン操作として処理できるすべてのオブジェクトのエラー構成を設定できます。
SQL Server Management Studio
オブジェクト エクスプローラーで、[プロパティ]、ディメンション、キューブ、パーティションのオブジェクトの 1 つを右クリックします。
[プロパティ] で、[エラーの構成] をクリックします。
SQL Server Data Tools
ソリューション エクスプローラーで、ディメンションまたはキューブをダブルクリックします。 次のペインの [プロパティ] に、ErrorConfiguration が表示されます。
また、ディメンションが 1 つのみの場合は、ソリューション エクスプローラーでディメンションを右クリックし、[処理] をクリックして、[ディメンションの処理] ダイアログ ボックスの [設定の変更] をクリックします。 エラー構成オプションが [ディメンション キーのエラー] タブに表示されます。
見つからないキー (KeyNotFound)
見つからないキーの値を持つレコードは、エラーが無視される場合またはエラーの上限が無制限である場合でも、データベースに追加できません。
ファクト レコードのテーブルに外部キーの値が含まれている場合、サーバーはパーティション処理中に KeyNotFound エラーを生成しますが外部キーには関連するディメンション テーブルに対応するレコードがありません。 また、このエラーは、関連するディメンション テーブルまたはスノーフレーク ディメンション テーブルを処理する場合に発生し、1 つのディメンションのレコードは関連するディメンションに存在しない外部キーを指定します。
KeyNotFound エラーが発生すると、問題のあるレコードは不明なメンバーに割り当てられます。 この動作は、ConvertToUnknown に設定して、[キーの動作] で制御され、詳細な調査のために割り当てられたレコードを表示するようにできます。
ファクト テーブルの NULL 外部キー (KeyNotFound)
既定では、ファクト テーブルの外部キー列の NULL 値はゼロに変換されます。 ゼロは有効な外部キー値ではないとして、KeyNotFound エラーはログ記録され、既定ではゼロであるエラーの上限に加算されます。
処理を続行できるように、変換してエラーを確認する前に NULL を処理します。 これを実行するには、NullProcessing をエラーに設定します。
メジャーでの NullProcessing プロパティの設定
SQL Server Data Tools のソリューション エクスプローラーで、キューブをダブルクリックしてキューブ デザイナーで開きます。
[メジャー] ペインのメジャーを右クリックし、[プロパティ] をクリックします。
[プロパティ] で、[ソース] を展開して、NullProcessing プロパティを表示します。 これは既定では、OLAP アイテム用である [自動] に設定され、数値データを含むフィールドの NULL をゼロに変換します。
値をエラーに変更して、NULL 値を持つレコードを除外し、NULL から数値 (ゼロ) への変換を回避します。 この変更によって、キー列にゼロがある複数のレコードに関連する重複したキー エラーを回避することができ、また、ゼロ値の外部キーには関連するディメンション テーブルに等価な主キーがない場合に KeyNotFound エラーを回避することができます。
ディメンションの NULL キー
NULL 値がスノーフレーク ディメンションの外部キーにある場合に処理を続行するには、ディメンション属性の KeyColumn に NullProcessing を設定して NULL 値を最初に処理します。 これは、KeyNotFound エラーが発生する前に、レコードを破棄または変換します。
ディメンション属性の NULL の処理には、次の 2 つのオプションがあります。
NullProcessing=UnknownMember を設定して、NULL 値を持つレコードを不明なメンバーに割り当てます。 これによって、既定では無視される、NullKeyConvertedToUnknown エラーが生成されます。
NullProcessing=Error を設定して、NULL 値を持つレコードを除外します。 これによって、NullKeyNotAllowed エラーが生成されて記録され、キー エラーの上限に加算されます。 [許可されていない NULL キー] のエラー構成プロパティを IgnoreError に設定して、処理を続行するようにできます。
NULL は非キー フィールドで問題になる可能性があります。NULL がゼロまたは空として解釈されるかどうかによって MDX クエリが異なる結果を返します。 このため、Analysis Services には変換動作をあらかじめ定義するために使用できる NULL 処理オプションが用意されています。 詳細については、「不明なメンバーと NULL 処理のプロパティの定義」および「NullProcessing」を参照してください。
ディメンション属性での NullProcessing プロパティの設定
SQL Server Data Tools のソリューション エクスプローラーで、ディメンションをダブルクリックしてディメンション デザイナーで開きます。
[属性] ペインの属性を右クリックし、[プロパティ] をクリックします。
[プロパティ] で、[KeyColumns] を展開して、NullProcessing プロパティを表示します。 これは既定では、[自動] に設定され、数値データを含むフィールドで NULL をゼロに変換します。 値をエラーまたは UnknownMember に変更します。
この変更によって、エラーを確認する前にレコードを破棄または変換して、KeyNotFound をトリガーする基になる条件を削除します。
エラーの構成に応じて、報告およびカウントされるエラーがこれらのアクションのいずれかによって発生する場合があります。 これらのエラーが報告されて、カウントされた場合に処理を続行できるように、追加のプロパティを調整する必要がある場合があります (たとえば、KeyNotFound を ReportAndContinue に設定、または KeyErrorLimit をゼロ以外の値に設定)。
一貫性のないリレーションシップをもたらす重複キー (KeyDuplicate)
既定では、重複キーの存在によって処理は停止されませんが、エラーは無視され、重複するレコードはデータベースから除外されます。
この動作を変更するには、KeyDuplicate を ReportAndContinue または ReportAndStop に設定して、エラーを報告するようにします。 次に、このエラーを調査して、ディメンションのデザインの潜在的な不具合を確認することができます。
エラーの上限またはエラーの上限のアクションの変更
エラーの上限を引き上げて、処理中により多くのエラーを見逃すようにできます。 エラーの上限を引き上げるためのガイダンスはありません。適切な値は使用しているシナリオによって異なります。 エラーの上限は、SQL Server Data Tools の ErrorConfiguration プロパティで KeyErrorLimit として指定されるか、または SQL Server Management Studio でディメンション、キューブ、メジャー グループのプロパティの [エラー構成] タブで [エラー数] として指定されます。
エラーの上限に達すると、処理を停止するか、ログ記録を停止するかを指定できます。 たとえば、エラーの上限が 100 である場合にアクションを StopLogging に設定するとします。 101 番目のエラーでは、処理は続行されますが、エラーはログ記録されなくなります。 エラーの上限アクションは、SQL Server Data Tools の ErrorConfiguration プロパティで KeyErrorLimitAction として指定されるか、または SQL Server Management Studio でディメンション、キューブ、メジャー グループのプロパティの [エラー構成] タブで [エラー時のアクション] として指定されます。
エラー ログ パスの設定
ファイルを指定して、処理中に報告されるキー関連のエラー メッセージを保存することができます。 既定では、エラーは処理ウィンドウでの対話形式の処理中には表示され、ウィンドウまたはセッションを閉じると破棄されます。 ログには、処理ダイアログ ボックスに表示されるエラーと同一の、キーに関連するエラー情報のみが含まれます。
エラーはテキスト ファイルにログ記録され、.log ファイル拡張子が必要です。 ファイルはエラーが発生しなければ空です。 既定では、ファイルは DATA フォルダーに作成されます。 Analysis Services サービス アカウントがその場所に書き込むことができる限り、別のフォルダーを指定することができます。
次の手順
エラーによって処理を停止するか、または無視するかを決定します。 エラーのみが無視されることに注意してください。 エラーの原因となったレコードは無視されず、破棄されるか、不明なメンバーに変換されます。 データの整合性規則に違反するレコードは、データベースには追加されません。 既定では、最初のエラーが発生したときに処理が停止しますが、エラーの上限を引き上げることによってこれを変更できます。 キューブの開発では、処理を続行できるようにエラー構成ルールを緩和することが役立つ場合があります。これによって、確認するデータが存在するようになります。
既定の NULL 処理動作を変更するかどうかを決定します。 既定では、文字列型の列の NULL は空の値として処理されますが、数値列の NULL はゼロとして処理されます。 属性の NULL 処理を設定する手順については、「不明なメンバーと NULL 処理のプロパティの定義」を参照してください。