財務報告のデータ マートのリセット
この記事では、Microsoft Dynamics 365 Finance の財務報告データ マートをリセットする方法について説明します。 データマートは、ユーザーの役割 と クライアント や インフラストラクチャー へのアクセス権に応じて、複数の方法でリセットすることができます。
データ マートのリセットの実行は重大な操作であるため、ほとんど行うべきではありません。 ただし、いくつかの特別なケースでは、これが必要になる場合があります。 リセットが必要と思われる状況に遭遇した場合は、まずサポートに連絡することを強く推奨します。 サポート チームは、リセットの必要性を促している可能性のある製品の問題を適切に調査するお手伝いをいたします。 この調査により、一時的な対処ではなく、根本原因に対処していることを確認することができます。
データマートのリセットは、データベース で あまり処理が行われていないときだけに留めるようにしてください。 財務報告は、リセット プロセス中は使用できません。
注意
データ マートのリセットが必要なことを確認するには、データ マートをリセットする場合 を参照してください。
データマートのリセットは、レポートの構造を定義しているレポートの定義には影響しません。 しかし、レポートのエクスポートを実行してバックアップを取っておくことをお勧めします。 レポート定義をエクスポートする手順は、この記事の後半にあるレポート定義のエクスポートとインポートという名前の記事の最後に記載されています。
レポート デザイナーからの財務報告のデータ マートのリセット
Report Designer のバージョンを検索するには、次のビデオをご覧ください: Report Designer のバージョンを検索する方法。
レポート デザイナーでデータマートをリセットするには、 以下の図に示されているように、 ツール メニューで データマートのリセット を選択します。 表示されるダイアログ ボックスには2つのセクションがあります: 統計 および リセット。
統合試行回数
統合試行回数 グリッドは、システムがトランザクションの統合を試みた回数を表示します。 システムは、最初のいくつかの試行ができなかった場合は、日の期間にわたってデータを統合するまで続行されます。 試行回数が 8 回以上の場合、および分析コードの組み合わせやトランザクション レコードが多い場合、データ マートをリセットする必要があります。 このような状況では、データはレポートされません。
データのステータス
データのステータス グリッドは、データ マート内のトランザクション、為替レート、および分析コード値のスナップショットを表示します。 バージョン付きのレコードが多数ある場合、レコードに多数の更新が行われたことを示しています。 この場合は、レポートの生成に要する時間が長くなることがあります。
正しく整合されていない主勘定カテゴリ
財務報告 7.2.1 以前のリリースを使用している場合で、勘定の名前を変更して勘定カテゴリの間で勘定を移動する場合、データ マートをリセットする必要がある場合があります。 これらのアクションにより、主勘定カテゴリが正しく整合されなくなることがあります。 正しく整合されていない主勘定カテゴリ フィールドには問題が発生しているかどうかが表示されます。
データマートをリセットし、理由をひとつ選択してください
データ マートのリセットが必要であると判断した場合は、データ マートのリセット チェック ボックスを選択し、理由フィールドで理由を選択します。 次のオプションを使用できます。
- データが不足しているか、正しくありません – 統計に基づき、決定したデータが存在しない可能性があります。 続行する前に、根本原因を判断するためにサポートを使用することをお勧めします。
- データベースの復元 – データベースが復元されましたが、財務報告のデータ マートのデータベースは復元されませんでした。
- その他 – 別の理由によりデータ マートをリセットしています。 問題があるのではないかと心配な場合は、サポートに問い合わせて問題を特定してください。
注意
リセットを開始する前に、すべてのデータ マート リセット タスクが初回の読み込みを完了したことを確認します。 ツール>統合の状態を選択して、前回のランタイム列で値を探すことにより、これを確定できます。
ユーザーと会社をクリア
データベースの復元後にユーザーまたは会社を変更した場合は、 ユーザーと企業の削除 チェックボックスを選択します。 このチェックボックスをオンにすることはほとんどありません。
リセット プロセスを開始する準備ができたら、OKを選択します。 プロセスを開始する準備ができていることを確認するように求められます。 リセット中およびその後に発生する初期データ統合中は、財務報告は利用できません。
統合の状態を確認する場合は、ツール>統合の状態を選択し、統合が最後に実行された時刻と状態を表示します。
メモ
すべてのマッピングの状態が RanToCompletion と表示され、 統合の状態 ダイアログボックスの左下隅に「統合が完了しました」というメッセージが表示されたら、リセットは完了です。
SQL Server Management Studio を介して、Dynamics 365 Finance + Operations (CHE, LBD and VHD) の Financial Reporting データマート をリセットする
注意
次の手順は、クラウドによってホストされる環境 (CHE Tier 1 Lb)、ダウンロード可能な KM 画像、および LBD オンサイト向けです。
作業を開始する前に、すべてのユーザーがレポート デザイナーを閉じて、財務報告エリアを終了していることを確認してください。
Financial Reporting に使用されるデータベース (CHE & CHE CHE- ManagementReporter または MRDB;[LBD - FinancialReporting] を選択)、次のスクリプトを実行します。 2020 年 4 月 9 日更新: Reset Datamart Begin.txt
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ --setup for servicing mode BEGIN TRANSACTION IF NOT EXISTS(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'Servicing') BEGIN EXEC ('CREATE SCHEMA Servicing') END IF (DATABASE_PRINCIPAL_ID('GeneralUser') IS NULL) BEGIN CREATE ROLE [GeneralUser] AUTHORIZATION [dbo]; END ALTER AUTHORIZATION ON SCHEMA::Servicing TO [GeneralUser] IF NOT EXISTS(SELECT NAME FROM SYS.TABLES WHERE Name = 'ServicingLock') BEGIN CREATE TABLE [Servicing].[ServicingLock] ([Name] nvarchar(255) not null, [Value] int not null, [LastServiceTimestamp] datetime null) END IF NOT EXISTS(SELECT 1 FROM [Servicing].[ServicingLock]) BEGIN INSERT INTO [Servicing].[ServicingLock] (Name, Value) VALUES ('ServicingLockMode', 0) END COMMIT TRANSACTION PRINT 'Entering servicing mode' DECLARE @result int; EXEC @result = sp_getapplock @DbPrincipal='public', @Resource='ServicingLock', @LockMode='Exclusive', @LockOwner='Session', @LockTimeout=300000; IF @result < 0 RAISERROR ('Unable to acquire SQL applock. Result: %d', 16, 1, @result); BEGIN TRY IF EXISTS(SELECT TOP 1 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Scheduling' COLLATE DATABASE_DEFAULT AND TABLE_NAME = 'SchedulerRegister' COLLATE DATABASE_DEFAULT AND COLUMN_NAME = 'ServicingMode' COLLATE DATABASE_DEFAULT) BEGIN UPDATE Scheduling.SchedulerRegister SET ServicingMode = 1 WHERE ServicingMode = 0 UPDATE [Servicing].[ServicingLock] SET Name = 'SchedulerServicingMode', Value = 1, LastServiceTimestamp = GETUTCDATE() WHERE Value = 0 END PRINT 'Acquired servicing locks' --Disable maps DECLARE @triggerIds table(id uniqueidentifier, taskTypeId uniqueidentifier) INSERT INTO @triggerIds SELECT tr.[Id], tt.[Id] FROM [Scheduling].[Task] t with(nolock) JOIN [Scheduling].[Trigger] tr ON t.[TriggerId] = tr.[Id] JOIN [Scheduling].[TaskState] ts ON ts.[TaskId] = t.[Id] LEFT JOIN [Scheduling].[TaskCategory] tc ON tc.[Id] = t.[CategoryId] JOIN [Scheduling].[TaskType] tt ON t.[TypeId] = tt.[Id] WHERE tt.[Id] IN ('D81C1197-D486-4FB7-AF8C-078C110893A0', '55D3F71A-2618-4EAE-9AA6-D48767B974D8') -- 'Maintenance Task', 'Map Task' PRINT 'Disable integration tasks' UPDATE [Scheduling].[Trigger] SET IsEnabled = 0 WHERE [Id] in (SELECT id FROM @triggerIds) ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ ------------------------------ PRINT 'Save and Drop Indexes Of FactAttributeValue and DimensionValueAttributeValue' ------------------------------ IF EXISTS(SELECT 1 FROM sys.procedures WHERE object_id = OBJECT_ID('[Datamart].[SaveAndDropAttributeValueIndexes]')) BEGIN IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Datamart' AND TABLE_NAME = 'AttributeValueIndexesBackUp')) BEGIN --create table to store indexses -- Indexes of different table can have same index_id,but we need unique index id Create table [Datamart].[AttributeValueIndexesBackUp] ( IndexID INT not null IDENTITY(1,1) PRIMARY KEY, IndexName NVARCHAR(255), IsUnique BIT, IndexType NVARCHAR(60), FilterDefinition NVARCHAR(max), KeyColumns NVARCHAR(max), IncludedColumns NVARCHAR(max), IndexRetry INT, IndexStatus NVARCHAR(60), AttributeType INT, ) END IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Datamart' AND TABLE_NAME = 'FactAttributeValue')) BEGIN --truncate table to increase index drop performance PRINT('TRUNCATE TABLE [Datamart].[FactAttributeValue]') EXEC('TRUNCATE TABLE [Datamart].[FactAttributeValue]') EXEC [Datamart].[SaveAndDropAttributeValueIndexes] 'FACTID','[Datamart].[FactAttributeValue]' END IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Datamart' AND TABLE_NAME = 'DimensionValueAttributeValue')) BEGIN --truncate table to increase index drop performance PRINT('TRUNCATE TABLE [Datamart].[DimensionValueAttributeValue]') EXEC('TRUNCATE TABLE [Datamart].[DimensionValueAttributeValue]') EXEC [Datamart].[SaveAndDropAttributeValueIndexes] 'DIMENSIONVALUEID','[Datamart].[DimensionValueAttributeValue]' END End ------------------------------ PRINT 'Drop archive tables' ------------------------------ DECLARE @stagingTableName nvarchar(max) DECLARE dropCursor CURSOR LOCAL FAST_FORWARD FOR SELECT t.TABLE_NAME as TableName FROM INFORMATION_SCHEMA.TABLES t WITH (NOLOCK) WHERE t.TABLE_SCHEMA = 'Datamart' and (t.TABLE_NAME like 'FactStaging[0-9]%' or t.TABLE_NAME like 'DimensionCombinationStaging[0-9]%') OPEN dropCursor FETCH NEXT FROM dropCursor INTO @stagingTableName WHILE @@FETCH_STATUS = 0 BEGIN EXEC('DROP TABLE IF EXISTS [Datamart].' + @stagingTableName) FETCH NEXT FROM dropCursor INTO @stagingTableName END CLOSE dropCursor DEALLOCATE dropCursor ------------------------------ PRINT 'Dropping tables with dynamic columns' ------------------------------ DROP TABLE IF EXISTS [Datamart].DimensionCombinationProcessing DROP TABLE IF EXISTS [Datamart].DimensionCombination DROP TABLE IF EXISTS [Datamart].DimensionCombinationResolving DROP TABLE IF EXISTS [Datamart].DimensionCombinationStaging DROP TABLE IF EXISTS [Datamart].DimensionCombinationUnreferenced DROP TABLE IF EXISTS [Datamart].DimensionValueAttributeValue DROP TABLE IF EXISTS [Datamart].FactAttributeValue DROP TABLE IF EXISTS [Datamart].TranslatedPeriodBalance DROP TABLE IF EXISTS [Datamart].TranslatedPeriodBalanceChanges ------------------------------ PRINT 'Begin Truncating tables' ------------------------------ DECLARE @tablename nvarchar(200) DECLARE @schemaname nvarchar(200) DECLARE clear_tables CURSOR FOR SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Datamart' AND TABLE_TYPE='BASE TABLE' PRINT 'remove check constraints' OPEN clear_tables FETCH NEXT FROM clear_tables INTO @tablename, @schemaname WHILE @@FETCH_STATUS = 0 BEGIN IF @tablename <> 'VersionHistory' BEGIN EXEC('ALTER TABLE [' + @schemaname + '].[' + @tablename + '] NOCHECK CONSTRAINT ALL') END FETCH NEXT FROM clear_tables INTO @tablename, @schemaname END CLOSE clear_tables ------------------------------ PRINT 'delete data from tables and rebuild indexes' ------------------------------ OPEN clear_tables FETCH NEXT FROM clear_tables INTO @tablename, @schemaname WHILE @@FETCH_STATUS = 0 BEGIN IF @tablename <> 'VersionHistory' and @tablename <> 'AttributeValueIndexesBackUp' BEGIN IF(EXISTS (select TOP 1 1 from sys.foreign_keys where referenced_object_id = OBJECT_ID(@schemaname + '.' + @tablename)) OR EXISTS(SELECT TOP 1 1 FROM sys.sql_expression_dependencies sed INNER JOIN sys.objects o ON sed.referencing_id = o.[object_id] WHERE o.[type] = 'V' AND referenced_schema_name = @schemaname AND referenced_entity_name = @tablename)) BEGIN PRINT 'deleting from ' + @tablename EXEC('DELETE FROM [' + @schemaname + '].[' + @tablename + ']') END ELSE BEGIN PRINT 'truncating from ' + @tablename EXEC('TRUNCATE TABLE [' + @schemaname + '].[' + @tablename + ']') END END EXEC('ALTER INDEX ALL ON [' + @schemaname + '].[' + @tablename + '] REBUILD') FETCH NEXT FROM clear_tables INTO @tablename, @schemaname END CLOSE clear_tables ------------------------------ PRINT 'reenable check constraints' ------------------------------ OPEN clear_tables FETCH NEXT FROM clear_tables INTO @tablename, @schemaname WHILE @@FETCH_STATUS = 0 BEGIN IF @tablename <> 'VersionHistory' BEGIN EXEC('ALTER TABLE [' + @schemaname + '].[' + @tablename +'] WITH CHECK CHECK CONSTRAINT ALL') END FETCH NEXT FROM clear_tables INTO @tablename, @schemaname END CLOSE clear_tables DEALLOCATE clear_tables ------------------------------ PRINT 'Complete Truncating tables' ------------------------------ -- Rebuild the tables with dynamic columns IF EXISTS(SELECT 1 FROM sys.procedures WHERE object_id = OBJECT_ID('[Datamart].[AddDynamicTables]')) BEGIN EXEC [Datamart].AddDynamicTables END ELSE BEGIN ---- Basically a copy of sproc AddDynamicTables IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME = 'DimensionCombinationStaging' AND TABLE_SCHEMA = 'Datamart') BEGIN CREATE TABLE [Datamart].[DimensionCombinationStaging]( [Id] [bigint] NOT NULL, [OrganizationId] [int] NULL, [Description] [nvarchar](51) NULL, [SourceKey] [nvarchar](100) NOT NULL, [OrganizationKey] [nvarchar](100) NULL, [FreshnessDate][datetime2] NULL default sysutcdatetime()) CREATE STATISTICS [stat_dcs_org] ON [Datamart].DimensionCombinationStaging (OrganizationKey) END IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME = 'DimensionCombinationResolving' AND TABLE_SCHEMA = 'Datamart') BEGIN CREATE TABLE [Datamart].[DimensionCombinationResolving] ( [Id] [BIGINT] NOT NULL, [Description] [NVARCHAR](51) NULL, [SourceKey] [NVARCHAR](100) NULL, [OrganizationId] [INT] NULL ) END IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='DimensionCombination' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].[DimensionCombination]( [Id] [bigint] NOT NULL, [Description] [nvarchar](51) NULL, [SourceKey] [nvarchar](100) NULL, [OrganizationId] [int] NULL ) END IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='FactAttributeValue' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].[FactAttributeValue]( [FactId] [bigint] NOT NULL ) END IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='DimensionValueAttributeValue' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].[DimensionValueAttributeValue]( [DimensionValueId] [bigint] NOT NULL ) END IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='PeriodExchangeRate' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].[PeriodExchangeRate] ( [PeriodId] INT NOT NULL, [FromUnitOfMeasureId] INT NOT NULL, [CurrencyMethod] TINYINT NOT NULL, [ExchangeRateTypeId] INT NOT NULL, CONSTRAINT [PK_PeriodExchangeRates] PRIMARY KEY ([FromUnitOfMeasureId], [PeriodId], [CurrencyMethod], [ExchangeRateTypeId]) ) END IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='TranslatedPeriodBalance' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].[TranslatedPeriodBalance]( [PeriodId] [INT] NOT NULL, [DimensionsId] [BIGINT] NOT NULL, [ScenarioId] [INT] NOT NULL, [FactType] [SMALLINT] NOT NULL, [PostingLayerId] [INT] NULL ) END IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_NAME='TranslatedPeriodBalanceChanges' AND TABLE_SCHEMA='Datamart') BEGIN CREATE TABLE [Datamart].TranslatedPeriodBalanceChanges(PeriodId bigint, DimensionsId bigint, ScenarioId int, PostingLayerId int null, FactType smallint, constraint [IDX_BC1] unique Clustered (PeriodId, DimensionsId, ScenarioId, PostingLayerId, FactType DESC)) END IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DimensionCombinationArchive' AND TABLE_SCHEMA='Datamart') BEGIN IF EXISTS (SELECT TOP 1 * FROM [Datamart].[DimensionCombinationArchive]) BEGIN -- move archived combinations from the obsolete DimensionCombinationArchive table to a new table in the archive -- and set its generation to 5, so it will run in 4 hours (which is how long the archived combinations were attempted originally before moving to the archive table). DECLARE @archiveId INT = 0 INSERT INTO [Datamart].[Archive] (Generation, NextAttempt) VALUES (5, DATEADD(MINUTE, POWER(3, 5), SYSUTCDATETIME())) SET @archiveId = SCOPE_IDENTITY() DECLARE @comboArchiveTableName nvarchar(100) = 'DimensionCombinationStaging' + CAST(@archiveId as nvarchar(10)) EXEC sp_rename 'Datamart.DimensionCombinationArchive', @comboArchiveTableName DECLARE @factArchiveTableName nvarchar(100) = 'FactStaging' + CAST(@archiveId as nvarchar(10)) EXEC ('select top 0 * into Datamart.' + @factArchiveTableName + ' from Datamart.FactStaging') END ELSE BEGIN DROP TABLE [Datamart].[DimensionCombinationArchive] END END IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME = 'DimensionCombinationUnreferenced' and TABLE_SCHEMA ='Datamart') BEGIN CREATE TABLE [Datamart].[DimensionCombinationUnreferenced] ( [Id] [bigint] NOT NULL, [Description] [nvarchar](51) NULL, [SourceKey] [nvarchar](100) NULL, [OrganizationId] [int] NULL ) DECLARE @columnIndex int DECLARE @idColumn nvarchar(128) DECLARE columnCursor CURSOR LOCAL FAST_FORWARD FOR SELECT DISTINCT ColumnIndex FROM [Datamart].DimensionDefinition ORDER BY ColumnIndex OPEN columnCursor FETCH NEXT FROM columnCursor INTO @columnIndex WHILE (@@FETCH_STATUS <> -1) BEGIN SET @idColumn = 'Dimension' + CAST(@columnIndex as nvarchar(3)) + 'Id' EXEC [Datamart].AddColumn @schemaName = 'Datamart', @tableName = 'DimensionCombinationUnreferenced', @columnName = @idColumn, @columnType = 'bigint NULL' FETCH NEXT FROM columnCursor INTO @columnIndex END CLOSE columnCursor DEALLOCATE columnCursor DECLARE @dcColumnList nvarchar(max) = '' DECLARE @rowsCopied bigint DECLARE @columnName nvarchar(100) DECLARE columnNameCursor cursor local fast_forward for select distinct Name from sys.columns c where c.object_id = OBJECT_ID('DimensionCombination') OPEN columnNameCursor FETCH NEXT FROM columnNameCursor INTO @columnName WHILE (@@FETCH_STATUS <> -1) BEGIN IF @dcColumnList <> '' SET @dcColumnList = @dcColumnList + ', ' SET @dcColumnList = @dcColumnList + @columnName FETCH NEXT FROM columnNameCursor INTO @columnName END CLOSE columnNameCursor DEALLOCATE columnNameCursor if @dcColumnList <> '' BEGIN exec (' insert into [Datamart].DimensionCombinationUnreferenced (' + @dcColumnList + ') select ' + @dcColumnList + ' from [Datamart].DimensionCombination dc where dc.Id not in (Select distinct DimensionsId from [Datamart].Fact)') SET @rowsCopied = @@ROWCOUNT IF @rowsCopied > 0 BEGIN DECLARE @comboCount bigint EXEC [Datamart].GetRowCount 'DimensionCombination', @comboCount IF (@rowsCopied * 2) > @comboCount BEGIN -- most of the combinations in the combination table were unreferenced, so it would be faster to move the referenced out, truncate the table, then move back SELECT * INTO #referencedCombos from [Datamart].DimensionCombination dc WHERE dc.Id NOT IN (SELECT Id from [Datamart].DimensionCombinationUnreferenced) TRUNCATE TABLE [Datamart].[DimensionCombination] INSERT INTO [Datamart].[DimensionCombination] SELECT * FROM #referencedCombos DROP TABLE #referencedCombos END ELSE BEGIN -- we didn't find many unreferenced combinations, so delete them DELETE FROM [Datamart].[DimensionCombination] WHERE Id in (SELECT Id FROM [Datamart].[DimensionCombinationUnreferenced]) END END END END END -- Rebuild dropped indexes that are dynamic EXEC [Datamart].ConfigureIndexesAndConstraints EXEC sys.sp_releaseapplock @Resource='ServicingLock', @LockOwner='Session' END TRY BEGIN CATCH EXEC sys.sp_releaseapplock @Resource='ServicingLock', @LockOwner='Session' ;THROW; END CATCH
(オプション) Financial Reporting で使用されるデータベースでは、2020 年 2 月 25 日に最後に更新された次のスクリプトを実行します: ResetUsersAndCompanies.txt
メモ
すべてのユーザーおよび会社を削除する必要がない限り、このスクリプトを実行しないでください。 このスクリプトは、以前に生成されたレポートからユーザー参照を削除し、割り当てられたセキュリティ グループからユーザーを削除します。 ほとんどの場合、この手順は必須ではありません。
-- Attempt to delete integrated users
DECLARE @userId nvarchar(max)
DECLARE removeUserCursor CURSOR LOCAL FAST_FORWARD FOR
select UserID from Reporting.SecurityUser where UserID <> '00000000-0000-0000-0000-000000000002'
OPEN removeUserCursor
FETCH NEXT FROM removeUserCursor INTO @userId
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
exec Reporting.SecurityUserDeleteRelatedEntities @userId
delete from Reporting.SecurityGroupUser where UserID = @userId
delete from Reporting.SecurityUser where UserID = @userId
END TRY
BEGIN CATCH
-- Just skip if we cannot delete a user, integration should take care of it
END CATCH
FETCH NEXT FROM removeUserCursor INTO @userId
END
CLOSE removeUserCursor
DEALLOCATE removeUserCursor
-- Attempt to delete integrated companies
DECLARE @companyId nvarchar(max)
DECLARE removeCompanyCursor CURSOR LOCAL FAST_FORWARD FOR
select cc.ID from Reporting.ControlCompany cc join Reporting.ControlCompanyIntegration cci on cc.ID = cci.ID
OPEN removeCompanyCursor
FETCH NEXT FROM removeCompanyCursor INTO @companyId
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
delete from Reporting.ControlCompany where ID = @companyId
END TRY
BEGIN CATCH
-- Just skip if we cannot delete a company
END CATCH
FETCH NEXT FROM removeCompanyCursor INTO @companyId
END
CLOSE removeCompanyCursor
DEALLOCATE removeCompanyCursor
- Dynamics 365 Finance のデータベースである AXDB 上で、以下のスクリプトを使用して、財務報告関連テーブルをクリアします。 スクリプトの最終更新日 2019 年 2 月 25 日: Datamart AXDB.txt のリセット
IF EXISTS (SELECT 1 FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'FINANCIALREPORTS')
BEGIN
TRUNCATE TABLE [dbo].[FINANCIALREPORTS]
END
IF EXISTS (SELECT 1 FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'FINANCIALREPORTVERSION')
BEGIN
TRUNCATE TABLE [dbo].[FINANCIALREPORTVERSION]
END
- 財務報告に使用されるデータベースで、次のスクリプトを使用して統合とエンドサービスモードを再度有効にします。このスクリプトの最終更新日は 2019 年 2 月 25 日;: Reset Datamart END.txt です
DECLARE @triggerIds table(id uniqueidentifier, taskTypeId uniqueidentifier)
INSERT INTO @triggerIds SELECT tr.[Id], tt.[Id]
FROM [Scheduling].[Task] t with(nolock)
JOIN [Scheduling].[Trigger] tr ON t.[TriggerId] = tr.[Id]
JOIN [Scheduling].[TaskState] ts ON ts.[TaskId] = t.[Id]
LEFT JOIN [Scheduling].[TaskCategory] tc ON tc.[Id] = t.[CategoryId]
JOIN [Scheduling].[TaskType] tt ON t.[TypeId] = tt.[Id]
WHERE tt.[Id] IN ('D81C1197-D486-4FB7-AF8C-078C110893A0', '55D3F71A-2618-4EAE-9AA6-D48767B974D8') -- 'Maintenance Task', 'Map Task'
------------------------------------------
------------------------------------------
PRINT 'Reset the map tokens'
UPDATE [Connector].[Map] SET InitalLoad = 0, ReaderToken=NULL, LastQuerySuccess='1900-01-01' WHERE MapId IN (SELECT t.[Id]
FROM [Scheduling].[Task] t with(nolock)
JOIN [Scheduling].[Trigger] tr ON t.[TriggerId] = tr.[Id]
JOIN [Scheduling].[TaskState] ts ON ts.[TaskId] = t.[Id]
LEFT JOIN [Scheduling].[TaskCategory] tc ON tc.[Id] = t.[CategoryId]
JOIN [Scheduling].[TaskType] tt ON t.[TypeId] = tt.[Id]
WHERE tt.[Id] = '55D3F71A-2618-4EAE-9AA6-D48767B974D8')
PRINT 'Reset the tasks'
UPDATE [Scheduling].[TaskState] SET StateType = 0, Progress = 0.0, LastRunTime = NULL, NextRunTime = NULL WHERE TaskId IN (SELECT ts.[TaskId]
FROM [Scheduling].[Task] t with(nolock)
JOIN [Scheduling].[Trigger] tr ON t.[TriggerId] = tr.[Id]
JOIN [Scheduling].[TaskState] ts ON ts.[TaskId] = t.[Id]
LEFT JOIN [Scheduling].[TaskCategory] tc ON tc.[Id] = t.[CategoryId]
JOIN [Scheduling].[TaskType] tt ON t.[TypeId] = tt.[Id]
WHERE tt.[Id] IN ('D81C1197-D486-4FB7-AF8C-078C110893A0', '55D3F71A-2618-4EAE-9AA6-D48767B974D8'))
PRINT 'Enable integration tasks, RunImmediately'
UPDATE [Scheduling].[Trigger] SET IsEnabled = 1, RunImmediately = 1, StartBoundary = '1900-01-01'
WHERE Id in (SELECT [id] from @triggerIds WHERE taskTypeId = '55D3F71A-2618-4EAE-9AA6-D48767B974D8')
PRINT 'Enable the Maintenance Task'
UPDATE [Scheduling].[Trigger] SET IsEnabled = 1, RunImmediately = 0, StartBoundary = GETDATE() WHERE Id in
(SELECT [id] from @triggerIds WHERE taskTypeId = 'D81C1197-D486-4FB7-AF8C-078C110893A0')
------------------------------------------
------------------------------------------
UPDATE [Servicing].[ServicingLock] SET [Value] = 0 WHERE [Value] = 1
IF EXISTS(SELECT TOP 1 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Scheduling' COLLATE DATABASE_DEFAULT AND TABLE_NAME = 'SchedulerRegister' COLLATE DATABASE_DEFAULT AND COLUMN_NAME = 'ServicingMode' COLLATE DATABASE_DEFAULT)
BEGIN
UPDATE Scheduling.SchedulerRegister SET ServicingMode = 0
END
リセット後は、手動で財務諸表データベースに対して次のクエリを実行し、データの再読み込みを確認することができます。
select ReaderObjectName, WriterObjectName, LastRunTime, StateType from Connector.MapsWithDetail with (nolock)
すべての行の LastRunTime 値、およびその StateType が 5 に設定されていることを確認してください。 5 の StateType 値はデータが正常に再読み込みされたことを示します。 7 の値はエラー状態を示します。 組織階層マップは、初めて実行される時にこの状態になることがあります。 ただし、エラー状態は自動的に解決されます。
レポートの定義を エクスポート/インポートする
データ マートのリセットは、どのレポート定義にも影響しませんが、データ移動のアクティビティによってはレポート定義が失われる場合があります。 ユーザー受け入れテスト(UAT)テスト環境で新しいレポートを作成する場合は、UAT環境を運用環境のコピーで上書きするなどして、データ移動アクティビティを実行の際には十分に注意してください。 レポート定義をエクスポートしておくと、定義を復元する必要が生じた場合にバックアップとして利用できます。
レポート定義のエクスポート
最初に、以下の手順を実行しレポート デザイナーからレポート デザインをエクスポートします。
Report Designer で、会社>レポート パーツ グループを選択します。
エクスポートする構成要素グループを選択し、エクスポートを選択します。
メモ
財務と運用では、1 つの構成要素グループのみが対応しています: 既定。
エクスポートするレポート定義を選択します:
- レポート定義および関連するレポート パーツのすべてをエクスポートするには、すべて選択を選択します。
- 特定のレポート、行、列、ツリー、または分析コード セットをエクスポートするには、適切なタブを選択してエクスポートする項目を選択します。 タブにて複数のレコードを選択するには、キーボードの Ctrl キー を押しながら選択します。 エクスポートをするレポートを選択すると、関連する行、列、ツリー、各要素のセットが選択されます。
エクスポート の選択
ファイル名を入力し、エクスポートしたレポート定義を保存する保護された安全な場所を選択します。
保存 を選択します。
ファイルを安全な場所にコピーまたはアップロードできます。
警告
Microsoft Azure Virtual Machines (VMs) の Dドライブ の挙動には気をつけてください。 Dドライブに、エクスポートしたレポート パーツ グループを完全には保存しません。一時的なドライブの詳細については、次を参照してください。Windows Azure 仮想マシン上のテンポラリー ドライブを理解する.
レポート定義のインポート
次に、エクスポートの課程で作成されたファイルを使用して、レポート デザイナー から レポートのデザイン を インポートします。
Report Designer で、会社>レポート パーツ グループを選択します。
既定の構成要素を選択し、インポートをクリックします。
エクスポート済みのレポート定義を含むファイルを選択し、開くをクリックします。
インポート ダイアログ ボックスで、インポートするレポート定義を選択します。
- レポート定義および関連するレポート パーツのすべてをインポートするには、すべて選択を選択します。
- 特定のレポートをインポートするには、行、列、ツリー、あるいは必要な要素を選択してください。
インポート を選択します。