-- SCHEMA: fw --------------------------------------------- -- TABLES --------------------------------------------- --------------------------------------------- -- fw.ABBBudgetedCostPerRVU ------------------ --------------------------------------------- CREATE TABLE [fw].[ABBBudgetedCostPerRVU] ( [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] int NOT NULL, [CostComponentID] int NOT NULL, [CostingConfigGuid] uniqueidentifier NOT NULL, [VariableDirectUnitCostPerRVU] decimal NULL, [TotalVariableDirectCost] decimal NULL, [TotalCost] decimal NULL ); GO --------------------------------------------- --------------------------------------------- -- fw.ABBFlexingReconciliation ------------------ --------------------------------------------- CREATE TABLE [fw].[ABBFlexingReconciliation] ( [RowID] int NOT NULL, [CostingConfigGUID] uniqueidentifier NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [EntityID] int NOT NULL, [DepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [AccountID] int NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] int NOT NULL, [CostComponentID] int NOT NULL, [ActualChargeUnits] decimal NOT NULL, [ActualChargeUnitsYTD] decimal NOT NULL, [ActualVariableDirectCost] decimal NOT NULL, [ActualVariableDirectCostYTD] decimal NOT NULL, [ActualFixedDirectCost] decimal NOT NULL, [ActualFixedDirectCostYTD] decimal NOT NULL, [BudgetChargeUnits] decimal NOT NULL, [BudgetChargeUnitsYTD] decimal NOT NULL, [BudgetVariableDirectCost] decimal NOT NULL, [BudgetVariableDirectCostYTD] decimal NOT NULL, [BudgetFixedDirectCost] decimal NOT NULL, [BudgetFixedDirectCostYTD] decimal NOT NULL, [FlexedVariableDirectCost] decimal NOT NULL, [FlexedVariableDirectCostYTD] decimal NOT NULL, PRIMARY KEY ([RowID]) ); CREATE UNIQUE CLUSTERED INDEX [IX_Unique] ON [fw].[ABBFlexingReconciliation] ([CostingConfigGUID], [FiscalYearID], [FiscalMonthID], [EntityID], [DepartmentID], [ChargeCodeID], [AccountID], [JobCodeID], [PayCodeID], [CostComponentID]); GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Costi__2637F561] DEFAULT (newid()) FOR [CostingConfigGUID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Fisca__272C199A] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Fisca__28203DD3] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Entit__2914620C] DEFAULT ((0)) FOR [EntityID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Depar__2A088645] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Charg__2AFCAA7E] DEFAULT ((0)) FOR [ChargeCodeID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Accou__2BF0CEB7] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__JobCo__2CE4F2F0] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__PayCo__2DD91729] DEFAULT ((0)) FOR [PayCodeID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__CostC__2ECD3B62] DEFAULT ((0)) FOR [CostComponentID]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__2FC15F9B] DEFAULT ((0)) FOR [ActualChargeUnits]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__30B583D4] DEFAULT ((0)) FOR [ActualChargeUnitsYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__31A9A80D] DEFAULT ((0)) FOR [ActualVariableDirectCost]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__329DCC46] DEFAULT ((0)) FOR [ActualVariableDirectCostYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__3391F07F] DEFAULT ((0)) FOR [ActualFixedDirectCost]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Actua__348614B8] DEFAULT ((0)) FOR [ActualFixedDirectCostYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__357A38F1] DEFAULT ((0)) FOR [BudgetChargeUnits]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__366E5D2A] DEFAULT ((0)) FOR [BudgetChargeUnitsYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__37628163] DEFAULT ((0)) FOR [BudgetVariableDirectCost]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__3856A59C] DEFAULT ((0)) FOR [BudgetVariableDirectCostYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__394AC9D5] DEFAULT ((0)) FOR [BudgetFixedDirectCost]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Budge__3A3EEE0E] DEFAULT ((0)) FOR [BudgetFixedDirectCostYTD]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Flexe__3B331247] DEFAULT ((0)) FOR [FlexedVariableDirectCost]; GO ALTER TABLE [fw].[ABBFlexingReconciliation] ADD CONSTRAINT [DF__ABBFlexin__Flexe__3C273680] DEFAULT ((0)) FOR [FlexedVariableDirectCostYTD]; GO --------------------------------------------- --------------------------------------------- -- fw.ABBFlexingReconciliationCostingData ------------------ --------------------------------------------- CREATE TABLE [fw].[ABBFlexingReconciliationCostingData] ( [CostingConfigGUID] uniqueidentifier NOT NULL, [EntityID] int NOT NULL, [OriginalDepartmentID] int NOT NULL, [OriginalJobCodeID] int NOT NULL, [OriginalPayCodeID] int NOT NULL, [OriginalAccountID] int NOT NULL, [ChargeCodeID] int NOT NULL, [FiscalYearID] int NOT NULL, [FiscalMonthID] int NOT NULL, [CostComponentID] int NOT NULL, [FixedDirectUnitCost] decimal NOT NULL, [VariableDirectUnitCost] decimal NOT NULL, [BudgetFixedDirectUnitCost] decimal NOT NULL, [BudgetVariableDirectUnitCost] decimal NOT NULL, [ActualMonthlyVolume] decimal NOT NULL, [BudgetedMonthlyVolume] decimal NOT NULL, [RVU] money NOT NULL ); CREATE NONCLUSTERED INDEX [IX_BudgetedMonthlyVolume] ON [fw].[ABBFlexingReconciliationCostingData] ([CostingConfigGUID], [OriginalDepartmentID], [OriginalJobCodeID], [OriginalPayCodeID], [OriginalAccountID], [ChargeCodeID], [FiscalYearID], [CostComponentID], [FiscalMonthID]) INCLUDE ([BudgetFixedDirectUnitCost], [BudgetedMonthlyVolume]); CREATE NONCLUSTERED INDEX [IX_OriginalDepartmentID] ON [fw].[ABBFlexingReconciliationCostingData] ([OriginalDepartmentID]) INCLUDE ([CostingConfigGUID], [EntityID], [OriginalJobCodeID], [OriginalPayCodeID], [OriginalAccountID], [ChargeCodeID], [FiscalYearID], [FiscalMonthID], [CostComponentID], [FixedDirectUnitCost], [VariableDirectUnitCost], [BudgetFixedDirectUnitCost], [BudgetVariableDirectUnitCost], [ActualMonthlyVolume], [BudgetedMonthlyVolume]); CREATE NONCLUSTERED INDEX [IX_viewABBFlexingReconciliation] ON [fw].[ABBFlexingReconciliationCostingData] ([EntityID], [OriginalDepartmentID], [ChargeCodeID], [FiscalYearID], [FiscalMonthID]) INCLUDE ([CostingConfigGUID], [OriginalJobCodeID], [OriginalPayCodeID], [OriginalAccountID], [CostComponentID], [FixedDirectUnitCost], [VariableDirectUnitCost], [BudgetFixedDirectUnitCost], [BudgetVariableDirectUnitCost], [ActualMonthlyVolume], [BudgetedMonthlyVolume]); CREATE NONCLUSTERED INDEX [IX_ABBFlexingReconciliationCostingData_Perf1] ON [fw].[ABBFlexingReconciliationCostingData] ([CostingConfigGUID], [EntityID], [OriginalDepartmentID], [OriginalJobCodeID], [OriginalPayCodeID], [OriginalAccountID], [ChargeCodeID], [FiscalYearID], [CostComponentID], [FiscalMonthID]) INCLUDE ([BudgetFixedDirectUnitCost], [BudgetedMonthlyVolume]); CREATE NONCLUSTERED INDEX [IX_ABBFlexingReconciliationCostingData_Perf2] ON [fw].[ABBFlexingReconciliationCostingData] ([CostingConfigGUID], [OriginalDepartmentID], [OriginalAccountID], [ChargeCodeID], [FiscalYearID]) INCLUDE ([EntityID], [OriginalJobCodeID], [OriginalPayCodeID], [FiscalMonthID], [CostComponentID], [FixedDirectUnitCost], [VariableDirectUnitCost], [BudgetFixedDirectUnitCost], [BudgetVariableDirectUnitCost], [ActualMonthlyVolume], [BudgetedMonthlyVolume], [RVU]); GO ALTER TABLE [fw].[ABBFlexingReconciliationCostingData] ADD CONSTRAINT [DF__ABBFlexingR__RVU__4C32B5C0] DEFAULT ((0.0)) FOR [RVU]; GO --------------------------------------------- --------------------------------------------- -- fw.ABBFlexingReconciliationEncounterInfoData ------------------ --------------------------------------------- CREATE TABLE [fw].[ABBFlexingReconciliationEncounterInfoData] ( [DepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [ServiceLineID] int NOT NULL, [FiscalYearID] int NOT NULL, [PatientClassID] int NOT NULL, [FiscalMonthID] int NOT NULL, [EncounterCount] int NOT NULL ); GO --------------------------------------------- --------------------------------------------- -- fw.DepartmentChargeCodePrimaryStatisticMappingCache ------------------ --------------------------------------------- CREATE TABLE [fw].[DepartmentChargeCodePrimaryStatisticMappingCache] ( [RowID] bigint NOT NULL, [FiscalYearID] smallint NOT NULL, [DepartmentID] int NOT NULL, [OriginalDepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [PatientTypeRollupID] int NOT NULL, [AccountID] int NOT NULL, [Weight] decimal NOT NULL, [IsStaffing] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [CORE_OriginalDepartmentID_FiscalYearID_ChargeCodeID_PatientTypeRollupID_IsStaffing] ON [fw].[DepartmentChargeCodePrimaryStatisticMappingCache] ([OriginalDepartmentID], [FiscalYearID], [ChargeCodeID], [PatientTypeRollupID], [IsStaffing]); GO --------------------------------------------- --------------------------------------------- -- fw.DepartmentChargeCodeStatisticMapping ------------------ --------------------------------------------- CREATE TABLE [fw].[DepartmentChargeCodeStatisticMapping] ( [RowID] bigint NOT NULL, [FiscalYearID] smallint NOT NULL, [DepartmentRollupLevelMemberID] int NOT NULL, [ChargeCodeID] int NOT NULL, [PatientTypeRollupID] tinyint NOT NULL, [AccountID] int NOT NULL, [Weight] decimal NOT NULL, [IsReviewed] bit NOT NULL, [DepartmentRollupLevelMemberColumnName] nvarchar(64) NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [FK__Departmen__Charg__67D1ABB5] FOREIGN KEY ([ChargeCodeID]) REFERENCES [fw].[DimChargeCode] ([ChargeCodeID]); GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_DepartmentID] DEFAULT ((0)) FOR [DepartmentRollupLevelMemberID]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_ChargeCodeID] DEFAULT ((0)) FOR [ChargeCodeID]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_PatientTypeRollupID] DEFAULT ((0)) FOR [PatientTypeRollupID]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_Weight] DEFAULT ((0)) FOR [Weight]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_DepartmentRollupLevelMemberColumnName] DEFAULT ('DepartmentID') FOR [DepartmentRollupLevelMemberColumnName]; GO ALTER TABLE [fw].[DepartmentChargeCodeStatisticMapping] ADD CONSTRAINT [DF_DepartmentChargeCodeStatisticMapping_IsReviewed] DEFAULT ((0)) FOR [IsReviewed]; GO --------------------------------------------- --------------------------------------------- -- fw.DepartmentChargeCodeStatisticMappingCache ------------------ --------------------------------------------- CREATE TABLE [fw].[DepartmentChargeCodeStatisticMappingCache] ( [FiscalYearID] smallint NOT NULL, [DepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [PatientTypeRollupID] int NOT NULL, [AccountID] int NOT NULL, [Weight] decimal NOT NULL ); CREATE NONCLUSTERED INDEX [NCNU_DepartmentFisclaYearAccount] ON [fw].[DepartmentChargeCodeStatisticMappingCache] ([DepartmentID], [FiscalYearID], [AccountID]) INCLUDE ([ChargeCodeID], [PatientTypeRollupID], [Weight]); GO --------------------------------------------- --------------------------------------------- -- fw.DepartmentChargeCodeStatisticMappingStaffingCache ------------------ --------------------------------------------- CREATE TABLE [fw].[DepartmentChargeCodeStatisticMappingStaffingCache] ( [RowID] bigint NOT NULL, [FiscalYearID] smallint NOT NULL, [DepartmentID] int NOT NULL, [OriginalDepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [PatientTypeRollupID] int NOT NULL, [AccountID] int NOT NULL, [Weight] decimal NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [CORE_OriginalDepartmentID_FiscalYearID_ChargeCodeID_PatientTypeRollupID] ON [fw].[DepartmentChargeCodeStatisticMappingStaffingCache] ([OriginalDepartmentID], [FiscalYearID], [ChargeCodeID], [PatientTypeRollupID]); GO --------------------------------------------- --------------------------------------------- -- fw.DepartmentRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DepartmentRollup] ( [DepartmentRollupLevelID] tinyint NOT NULL, [Description] nvarchar(100) NOT NULL, PRIMARY KEY ([DepartmentRollupLevelID]) ); GO ALTER TABLE [fw].[DepartmentRollup] ADD CONSTRAINT [CHK_FW_DepartmentRollup_DepartmentRollupLevelID] CHECK ([DepartmentRollupLevelID]>=(1) AND [DepartmentRollupLevelID]<=(9)); GO --------------------------------------------- --------------------------------------------- -- fw.DimAccount ------------------ --------------------------------------------- CREATE TABLE [fw].[DimAccount] ( [AccountID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [AccountCode] nvarchar(40) NULL, [Description] nvarchar(80) NOT NULL, [GLRollup] nvarchar(100) NOT NULL, [IsInverted] bit NOT NULL, [Inversion] int NOT NULL, [PatientClassID] int NOT NULL, [PatientClass] nvarchar(100) NOT NULL, [CAPIsDefined] bit NOT NULL, [DSSIsDefined] bit NOT NULL, [DSSCostComponent] nvarchar(50) NOT NULL, [DSSStatisticDriver] nvarchar(50) NOT NULL, [DSSAccountRollup1ID] int NOT NULL, [DSSAccountRollup1Name] nvarchar(100) NOT NULL, [DSSAccountRollup1Category] nvarchar(100) NOT NULL, [DSSAccountRollup2ID] int NOT NULL, [DSSAccountRollup2Name] nvarchar(100) NOT NULL, [DSSAccountRollup3ID] int NOT NULL, [DSSAccountRollup3Name] nvarchar(100) NOT NULL, [MRIsDefined] bit NOT NULL, [FlexStatistic] nvarchar(100) NOT NULL, [FlexValue] money NOT NULL, [FlexBucketGUID] uniqueidentifier NOT NULL, [OBIsDefined] bit NOT NULL, [IsStat] bit NOT NULL, [IsGlobal] bit NOT NULL, [IsExpense] bit NOT NULL, [Variability] money NOT NULL, [OBDollarsFinancialReportingID] int NOT NULL, [OBDollarsFinancialReporting] varchar(200) NOT NULL, [OBDollarsFinancialReportingCategory] nvarchar(100) NOT NULL, [OBDollarsFinancialReportingLineName] nvarchar(100) NOT NULL, [OBDollarsFinancialReportingSortOrder] int NOT NULL, [OBUnitsFinancialReportingID] int NOT NULL, [OBUnitsFinancialReporting] varchar(200) NOT NULL, [OBUnitsFinancialReportingCategory] nvarchar(100) NOT NULL, [OBUnitsFinancialReportingLineName] nvarchar(100) NOT NULL, [OBUnitsFinancialReportingSortOrder] int NOT NULL, [OBAccountPHID] int NOT NULL, [OBModelSectionName] nvarchar(100) NOT NULL, [OBStatModelSectionID] int NOT NULL, [OBStatModelSectionName] nvarchar(100) NOT NULL, [OBStatUnitTypeID] tinyint NOT NULL, [OBUnitType] nvarchar(100) NOT NULL, [OBPayorID] int NOT NULL, [OBPayor] nvarchar(100) NOT NULL, [OBPayorGroupID] int NOT NULL, [OBPayorGroup] nvarchar(100) NOT NULL, [SPIsDefined] bit NOT NULL, [PatientTypeRollupID] tinyint NOT NULL, [PatientTypeRollupName] nvarchar(200) NOT NULL, [SPAccountRollupID] int NOT NULL, [SPAccountRollupName] nvarchar(200) NOT NULL, [SPStatAccountRollup] int NOT NULL, [SPStatAccountRollupName] nvarchar(100) NOT NULL, [SPAccountRollupCategory] nvarchar(100) NOT NULL, [SPPayorGroupID] int NOT NULL, [SPPayorGroupName] nvarchar(200) NOT NULL, [SPPhysicianGroupID] int NOT NULL, [SPPhysicianGroupName] nvarchar(200) NOT NULL, [SPJobCodeGroupID] int NOT NULL, [SPJobCodeGroupName] nvarchar(200) NOT NULL, [SPCapitalRollupID] int NOT NULL, [SPCapitalRollupName] nvarchar(200) NOT NULL, [SPDebtIssuanceID] int NOT NULL, [SPDebtIssuanceName] nvarchar(200) NOT NULL, [SPIsPhysicianOverride] bit NOT NULL, [PatientTypeID] int NOT NULL, [OBStaffing] nvarchar(100) NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [DSSAccountRollup4ID] int NOT NULL, [DSSAccountRollup4] varchar(100) NOT NULL, [DSSAccountRollup4Name] varchar(200) NOT NULL, [Name] nvarchar(123) NOT NULL, [DSSAccountRollup2Category] nvarchar(100) NOT NULL, [DSSAccountRollup3Category] nvarchar(100) NOT NULL, [DSSAccountRollup4Category] varchar(200) NOT NULL, [FWIsDefined] bit NOT NULL, [AccountCodeRaw] nvarchar(100) NOT NULL, [GMAccountRollup1] nvarchar(200) NOT NULL, [GMAccountRollup2] nvarchar(200) NOT NULL, [GMAccountRollup3] nvarchar(200) NOT NULL, [GMAccountRollup4] nvarchar(200) NOT NULL, [GMAccountRollup5] nvarchar(200) NOT NULL, [GMAccountRollup6] nvarchar(200) NOT NULL, [DSSAccountRollup5ID] int NOT NULL, [DSSAccountRollup5Name] nvarchar(100) NOT NULL, [DSSAccountRollup6ID] int NOT NULL, [DSSAccountRollup6Name] nvarchar(100) NOT NULL, [DSSAccountRollup7ID] int NOT NULL, [DSSAccountRollup7Name] nvarchar(100) NOT NULL, [SPHAccountRollupID] int NOT NULL, [SPHAccountRollupName] varchar(606) NOT NULL, [SPHAccountRollupConfidenceScore] float NOT NULL, [SPHVariability] decimal NOT NULL, [SPHCostComponent] nvarchar(400) NOT NULL, [SPHCostComponentRollup] nvarchar(400) NOT NULL, [GMAccountRollup7] nvarchar(200) NOT NULL, [IsSPHCostModel] bit NOT NULL, [SPHLineItem] nvarchar(200) NOT NULL, [SPHStatement] nvarchar(200) NOT NULL, [SPHCategory] nvarchar(200) NOT NULL, [SPHSection] nvarchar(200) NOT NULL, [SPHAccountRollupIsValidated] bit NOT NULL, [IsCBP] bit NOT NULL, PRIMARY KEY ([AccountID]) ); CREATE NONCLUSTERED INDEX [IX_AccountID_OBRollupIDs] ON [fw].[DimAccount] ([AccountID], [OBUnitsFinancialReportingID], [OBDollarsFinancialReportingID]); CREATE UNIQUE NONCLUSTERED INDEX [IX_Name] ON [fw].[DimAccount] ([Name]); CREATE UNIQUE NONCLUSTERED INDEX [IX_AccountCode] ON [fw].[DimAccount] ([AccountCode]); CREATE UNIQUE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimAccount] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_AccountID] ON [fw].[DimAccount] ([AccountID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_AccountCode] ON [fw].[DimAccount] ([AccountCode]) INCLUDE ([AccountID]); GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [FK_DimAccount_DimPatientType] FOREIGN KEY ([PatientTypeID]) REFERENCES [fw].[DimPatientType] ([PatientTypeID]); GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBIsD__3981D270] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__IsSta__3ECB39DB] DEFAULT ((0)) FOR [IsStat]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_IsGlobal] DEFAULT ((0)) FOR [IsGlobal]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__IsExp__4B7B9146] DEFAULT ((0)) FOR [IsExpense]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__FWIsD__053F7F3C] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_Variability] DEFAULT ((1)) FOR [Variability]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBDol__6DE91709] DEFAULT ((0)) FOR [OBDollarsFinancialReportingID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBDol__77728143] DEFAULT ('') FOR [OBDollarsFinancialReporting]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHAc__07AD771D] DEFAULT ((0)) FOR [SPHAccountRollupIsValidated]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SDSAc__08489CE8] DEFAULT ((0)) FOR [SPHAccountRollupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBDol__7866A57C] DEFAULT ('') FOR [OBDollarsFinancialReportingCategory]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SDSAc__093CC121] DEFAULT ('') FOR [SPHAccountRollupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBDol__7A4EEDEE] DEFAULT ('') FOR [OBDollarsFinancialReportingLineName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBDol__2AF88001] DEFAULT ((0)) FOR [OBDollarsFinancialReportingSortOrder]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Confi__0B250993] DEFAULT ((0)) FOR [SPHAccountRollupConfidenceScore]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBUni__6EDD3B42] DEFAULT ((0)) FOR [OBUnitsFinancialReportingID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBUni__7B431227] DEFAULT ('') FOR [OBUnitsFinancialReporting]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBUni__7C373660] DEFAULT ('') FOR [OBUnitsFinancialReportingCategory]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBUni__7E1F7ED2] DEFAULT ('') FOR [OBUnitsFinancialReportingLineName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBUni__2BECA43A] DEFAULT ((0)) FOR [OBUnitsFinancialReportingSortOrder]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBAcc__1178418C] DEFAULT ((0)) FOR [OBAccountPHID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBMod__6C52D8C0] DEFAULT ('') FOR [OBModelSectionName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBSta__20484969] DEFAULT ((0)) FOR [OBStatModelSectionID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBSta__213C6DA2] DEFAULT ('') FOR [OBStatModelSectionName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBSta__6A33241F] DEFAULT ((0)) FOR [OBStatUnitTypeID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_OBUnitType] DEFAULT ('') FOR [OBUnitType]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBPay__7CBCB405] DEFAULT ((0)) FOR [OBPayorID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_OBPayor] DEFAULT ('') FOR [OBPayor]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBPay__05F1E3DB] DEFAULT ((0)) FOR [OBPayorGroupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__OBPay__06E60814] DEFAULT ('') FOR [OBPayorGroup]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPIsD__3A75F6A9] DEFAULT ((0)) FOR [SPIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Patie__6433C725] DEFAULT ((0)) FOR [PatientTypeRollupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Patie__7EB84298] DEFAULT ('') FOR [PatientTypeRollupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_FWDIMACCOUNTSPACCOUNTROLLUPID] DEFAULT ((0)) FOR [SPAccountRollupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPAcc__7FAC66D1] DEFAULT ('') FOR [SPAccountRollupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPSta__171085C4] DEFAULT ((0)) FOR [SPStatAccountRollup]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPSta__1804A9FD] DEFAULT ('') FOR [SPStatAccountRollupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPAcc__568D8309] DEFAULT ('') FOR [SPAccountRollupCategory]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_FWDIMACCOUNTSPPAYORGROUPID] DEFAULT ((0)) FOR [SPPayorGroupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPPay__00A08B0A] DEFAULT ('') FOR [SPPayorGroupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPPhy__431DB774] DEFAULT ((0)) FOR [SPPhysicianGroupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPPhy__0194AF43] DEFAULT ('') FOR [SPPhysicianGroupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_FWDIMACCOUNTSPJOBCODEGROUPID] DEFAULT ((0)) FOR [SPJobCodeGroupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPJob__0288D37C] DEFAULT ('') FOR [SPJobCodeGroupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__26C5CC2F] DEFAULT ((0)) FOR [DSSAccountRollup4ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_FWDIMACCOUNTSPCAPITALROLLUPID] DEFAULT ((0)) FOR [SPCapitalRollupID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__27B9F068] DEFAULT ('') FOR [DSSAccountRollup4]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPCap__037CF7B5] DEFAULT ('') FOR [SPCapitalRollupName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Histo__1AB06CF4] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__28AE14A1] DEFAULT ('') FOR [DSSAccountRollup4Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_FWDIMACCOUNTSPDEBTISSUANCEID] DEFAULT ((0)) FOR [SPDebtIssuanceID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPDeb__04711BEE] DEFAULT ('') FOR [SPDebtIssuanceName]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPIsP__6985EB4D] DEFAULT ((0)) FOR [SPIsPhysicianOverride]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_PatientTypeID] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_OBAccountRollup] DEFAULT ('') FOR [OBStaffing]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__FW_DimAccount_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__337C4859] DEFAULT ((0)) FOR [DSSAccountRollup5ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_FlexMetricGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [FlexBucketGUID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__34706C92] DEFAULT ('') FOR [DSSAccountRollup5Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__356490CB] DEFAULT ((0)) FOR [DSSAccountRollup6ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__3658B504] DEFAULT ('') FOR [DSSAccountRollup6Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHVa__36E526EE] DEFAULT ((0)) FOR [SPHVariability]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__3AE6977F] DEFAULT ('') FOR [DSSAccountRollup2Category]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__3BDABBB8] DEFAULT ('') FOR [DSSAccountRollup3Category]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__3CCEDFF1] DEFAULT ('') FOR [DSSAccountRollup4Category]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__IsSPH__490F8F78] DEFAULT ((1)) FOR [IsSPHCostModel]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHCo__55F3BDF3] DEFAULT ('') FOR [SPHCostComponent]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHCo__56E7E22C] DEFAULT ('') FOR [SPHCostComponentRollup]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Accou__5B694101] DEFAULT ('') FOR [AccountCodeRaw]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHLi__68FE0774] DEFAULT ('') FOR [SPHLineItem]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHSt__69F22BAD] DEFAULT ('') FOR [SPHStatement]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHCa__6AE64FE6] DEFAULT ('') FOR [SPHCategory]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__SPHSe__6BDA741F] DEFAULT ('') FOR [SPHSection]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Membe__19BC48BB] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__6CDEB11D] DEFAULT ('') FOR [GMAccountRollup1]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_Code] DEFAULT ('') FOR [AccountCode]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__6DD2D556] DEFAULT ('') FOR [GMAccountRollup2]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_Description] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__6EC6F98F] DEFAULT ('') FOR [GMAccountRollup3]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GLRol__7BA49B88] DEFAULT ('') FOR [GLRollup]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__6FBB1DC8] DEFAULT ('') FOR [GMAccountRollup4]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__6FF38718] DEFAULT ('') FOR [GMAccountRollup7]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_IsInverted_1] DEFAULT ((0)) FOR [IsInverted]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__70AF4201] DEFAULT ('') FOR [GMAccountRollup5]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Patie__2765843A] DEFAULT ((0)) FOR [PatientClassID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__GMAcc__71A3663A] DEFAULT ('') FOR [GMAccountRollup6]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__Patie__2859A873] DEFAULT ('') FOR [PatientClass]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__72F7AEF0] DEFAULT ((0)) FOR [DSSAccountRollup7ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__CAPIs__36A565C5] DEFAULT ((0)) FOR [CAPIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__73EBD329] DEFAULT ('') FOR [DSSAccountRollup7Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSIs__379989FE] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSCo__64355DD3] DEFAULT ('') FOR [DSSCostComponent]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSSt__1EBE2B32] DEFAULT ('') FOR [DSSStatisticDriver]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__07C9AFF4] DEFAULT ((0)) FOR [DSSAccountRollup1ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__0AA61C9F] DEFAULT ('') FOR [DSSAccountRollup1Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__08BDD42D] DEFAULT ('') FOR [DSSAccountRollup1Category]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__09B1F866] DEFAULT ((0)) FOR [DSSAccountRollup2ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__0B9A40D8] DEFAULT ('') FOR [DSSAccountRollup2Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__0D82894A] DEFAULT ((0)) FOR [DSSAccountRollup3ID]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__DSSAc__0C8E6511] DEFAULT ('') FOR [DSSAccountRollup3Name]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__MRIsD__388DAE37] DEFAULT ((0)) FOR [MRIsDefined]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__IsCBP__7E266EE8] DEFAULT ((0)) FOR [IsCBP]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF_DimAccount_FlexStatistic] DEFAULT ('') FOR [FlexStatistic]; GO ALTER TABLE [fw].[DimAccount] ADD CONSTRAINT [DF__DimAccoun__FlexV__5CCDD875] DEFAULT ((0)) FOR [FlexValue]; GO --------------------------------------------- --------------------------------------------- -- fw.DimAgeCohort ------------------ --------------------------------------------- CREATE TABLE [fw].[DimAgeCohort] ( [AgeCohortID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [TimeMin] int NOT NULL, [TimeMax] int NOT NULL, [TimeMinUnit] nvarchar(100) NOT NULL, [TimeMaxUnit] nvarchar(100) NOT NULL, PRIMARY KEY ([AgeCohortID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimAgeCohort] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimAgeCohort] ([Name]); GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__Histo__6CAF9E17] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__TimeM__12BB0C99] DEFAULT ((0)) FOR [TimeMin]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__TimeM__13AF30D2] DEFAULT ((0)) FOR [TimeMax]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__TimeM__177FC1B6] DEFAULT ('') FOR [TimeMinUnit]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__TimeM__1873E5EF] DEFAULT ('') FOR [TimeMaxUnit]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoho__Name__6AC755A5] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__Membe__6BBB79DE] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__Trans__6DA3C250] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoho__Code__6E97E689] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimAgeCohort] ADD CONSTRAINT [DF__DimAgeCoh__SortO__6F8C0AC2] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimAssumption ------------------ --------------------------------------------- CREATE TABLE [fw].[DimAssumption] ( [MemberGUID] uniqueidentifier NOT NULL, [AssumptionID] int NOT NULL, [Name] nvarchar(100) NOT NULL, [Category] nvarchar(100) NOT NULL, [SubCategory] nvarchar(100) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [DisplayFormat] nvarchar(200) NOT NULL, [SPIsPastingValues] bit NOT NULL, [SPIsProtectingRollingValues] bit NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([AssumptionID]) ); CREATE UNIQUE NONCLUSTERED INDEX [UQ__DimAssum__A67B3853390AD6E2] ON [fw].[DimAssumption] ([MemberGUID]); GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__Histo__3EC3B038] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__SPIsP__0D3215CF] DEFAULT ((0)) FOR [SPIsProtectingRollingValues]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__SPIsP__0FBE0EFF] DEFAULT ((0)) FOR [SPIsPastingValues]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__Membe__3AF31F54] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssumpt__Name__3BE7438D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__Categ__3CDB67C6] DEFAULT ('') FOR [Category]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__SubCa__3DCF8BFF] DEFAULT ('') FOR [SubCategory]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__FW_DimAssumption_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimAssumption] ADD CONSTRAINT [DF__DimAssump__Displ__7895EE7B] DEFAULT ('') FOR [DisplayFormat]; GO --------------------------------------------- --------------------------------------------- -- fw.DimCareSetting ------------------ --------------------------------------------- CREATE TABLE [fw].[DimCareSetting] ( [CareSettingID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [IsActive] bit NOT NULL, PRIMARY KEY ([CareSettingID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimCareSetting] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimCareSetting] ([Name]); GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSet__Name__2EBC8D3F] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSet__Code__2FB0B178] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSe__SortO__30A4D5B1] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSe__Membe__3198F9EA] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSe__Trans__3381425C] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSe__Histo__328D1E23] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimCareSetting] ADD CONSTRAINT [DF__DimCareSe__IsAct__77A48FDB] DEFAULT ((1)) FOR [IsActive]; GO --------------------------------------------- --------------------------------------------- -- fw.DimCareSettingPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimCareSettingPH] ( [CareSettingPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([CareSettingPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimCareSettingPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimCareSettingPH] ADD CONSTRAINT [DF__DimCareSet__Name__3E5F8ED9] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimCareSettingPH] ADD CONSTRAINT [DF__DimCareSe__Membe__3F53B312] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimCareSettingPH] ADD CONSTRAINT [DF__DimCareSe__Trans__413BFB84] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimCareSettingPH] ADD CONSTRAINT [DF__DimCareSe__Histo__4047D74B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimChargeCode ------------------ --------------------------------------------- CREATE TABLE [fw].[DimChargeCode] ( [ChargeCodeID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [ChargeCode] nvarchar(100) NOT NULL, [Description] nvarchar(400) NOT NULL, [IsDefined] bit NOT NULL, [OBIsDefined] bit NOT NULL, [IsRVU] bit NOT NULL, [IsStatDriver] bit NOT NULL, [ChargeIncrease] decimal NOT NULL, [Category] nvarchar(200) NOT NULL, [RVUWeight] decimal NOT NULL, [StatType] nvarchar(50) NOT NULL, [PatientTypeID] int NOT NULL, [DSSIsDefined] bit NOT NULL, [DayTypeID] int NOT NULL, [DayType2ID] int NOT NULL, [DayType3ID] int NOT NULL, [UBRevenueCodeID] int NOT NULL, [CPTID] int NOT NULL, [IsActivityCost] bit NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [CostDriver] nvarchar(100) NOT NULL, [Rollup] nvarchar(200) NOT NULL, [IsPatientSpecific] bit NOT NULL, [FWIsDefined] bit NOT NULL, [DayType] nvarchar(443) NOT NULL, [DayType2] nvarchar(443) NOT NULL, [DayType3] nvarchar(443) NOT NULL, [TimeStampWeight] decimal NOT NULL, [IsTimeStamp] bit NOT NULL, [TimeStampPrecedent] int NOT NULL, [Name] nvarchar(503) NOT NULL, [IsSPHSupplyCosting] bit NOT NULL, [IsSPHTDCosting] bit NOT NULL, [SPHChargeCodePrefix] nvarchar(100) NOT NULL, PRIMARY KEY ([ChargeCodeID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_ChargeCode] ON [fw].[DimChargeCode] ([ChargeCode]) INCLUDE ([ChargeCodeID]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimChargeCode] ([MemberGUID]); CREATE NONCLUSTERED INDEX [NCNU_DateTypeID] ON [fw].[DimChargeCode] ([DayTypeID]); CREATE NONCLUSTERED INDEX [NUNC_ChargeCodeID_Name] ON [fw].[DimChargeCode] ([ChargeCodeID]) INCLUDE ([Name]); CREATE NONCLUSTERED INDEX [NC_IDX_ChargeCode_IsPatntSpecifc] ON [fw].[DimChargeCode] ([IsPatientSpecific]) INCLUDE ([ChargeCodeID]); GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_DimChargeCode_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_DimChargeCode_Code] DEFAULT ('') FOR [ChargeCode]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_DimChargeCode_IsDefined] DEFAULT ((1)) FOR [IsDefined]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__FWIsD__0727C7AE] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__OBIsD__520432CE] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__IsRVU__42B8672A] DEFAULT ((0)) FOR [IsRVU]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__IsSta__7A0C62FD] DEFAULT ((1)) FOR [IsStatDriver]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__Charg__7BF4AB6F] DEFAULT ((0)) FOR [ChargeIncrease]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__Categ__78241A8B] DEFAULT ('') FOR [Category]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__RVUWe__7ED1181A] DEFAULT ((1)) FOR [RVUWeight]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_IsPatient_Specific] DEFAULT ((1)) FOR [IsPatientSpecific]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__StatT__43AC8B63] DEFAULT ('') FOR [StatType]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__Patie__745389A7] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DSSIs__52F85707] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__19CCF6DE] DEFAULT ((0)) FOR [DayTypeID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__647D465B] DEFAULT ((0)) FOR [DayType2ID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__65716A94] DEFAULT ((0)) FOR [DayType3ID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__UBRev__6B40E931] DEFAULT ((0)) FOR [UBRevenueCodeID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__CPTID__6C350D6A] DEFAULT ((0)) FOR [CPTID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__IsAct__481D061C] DEFAULT ((0)) FOR [IsActivityCost]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__FW_DimChargeCode_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__Descr__50D54340] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__IsSPH__36460870] DEFAULT ((0)) FOR [IsSPHSupplyCosting]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_DimChargeCode_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__IsSPH__373A2CA9] DEFAULT ((0)) FOR [IsSPHTDCosting]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__SPHCh__382E50E2] DEFAULT ('') FOR [SPHChargeCodePrefix]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__TimeS__38FC1ED2] DEFAULT ((0)) FOR [TimeStampWeight]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__TimeS__39F0430B] DEFAULT ((0)) FOR [IsTimeStamp]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__TimeS__3AE46744] DEFAULT ((0)) FOR [TimeStampPrecedent]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF_DimChargeCode_Rollup] DEFAULT ('') FOR [Rollup]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__6177EB69] DEFAULT ('') FOR [DayType]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__626C0FA2] DEFAULT ('') FOR [DayType2]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__DayTy__636033DB] DEFAULT ('') FOR [DayType3]; GO ALTER TABLE [fw].[DimChargeCode] ADD CONSTRAINT [DF__DimCharge__CostD__6D4D57B1] DEFAULT ('') FOR [CostDriver]; GO --------------------------------------------- --------------------------------------------- -- fw.DimChargeCodePH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimChargeCodePH] ( [ChargeCodePHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ChargeCodePHID]) ); GO ALTER TABLE [fw].[DimChargeCodePH] ADD CONSTRAINT [DF__DimChargeCodePH_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimChargeCodePH] ADD CONSTRAINT [DF__DimChargeCodePH_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimChargeCodePH] ADD CONSTRAINT [DF__DimChargeCodePH_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimChargeCodePH] ADD CONSTRAINT [DF__DimChargeCodePH_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimColumnHider ------------------ --------------------------------------------- CREATE TABLE [fw].[DimColumnHider] ( [ColumnHiderID] tinyint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ColumnHiderID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_DimColumnHider] ON [fw].[DimColumnHider] ([MemberGUID]); GO ALTER TABLE [fw].[DimColumnHider] ADD CONSTRAINT [DF_DimColumnHider_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimColumnHider] ADD CONSTRAINT [DF_DimColumnHider_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimColumnHider] ADD CONSTRAINT [DF__FW_DimColumnHider_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimColumnHider] ADD CONSTRAINT [DF__fw_DimColumnHider_Name] DEFAULT ('') FOR [Name]; GO --------------------------------------------- --------------------------------------------- -- fw.DimCompAnDepartment ------------------ --------------------------------------------- CREATE TABLE [fw].[DimCompAnDepartment] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [CompAnDepartmentID] int NOT NULL, [CompAnDepartmentCode] nvarchar(10) NOT NULL, [Description] nvarchar(200) NOT NULL, [DescriptionLong] nvarchar(400) NOT NULL, [CompAnDepartmentRollup1] nvarchar(200) NOT NULL, [CompAnDepartmentRollup2] nvarchar(200) NOT NULL, [CompAnDepartmentRollup3] nvarchar(200) NOT NULL, [CompAnDepartmentRollup4] nvarchar(200) NOT NULL, [CompAnPrimaryStat] nvarchar(200) NOT NULL, [SPHDepartmentRollupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([CompAnDepartmentID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_CompAnDepartmentCode] ON [fw].[DimCompAnDepartment] ([CompAnDepartmentCode]) INCLUDE ([CompAnDepartmentID]); GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__Histo__62E79D70] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__64CFE5E2] DEFAULT ('') FOR [CompAnDepartmentCode]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__Descr__65C40A1B] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__Descr__66B82E54] DEFAULT ('') FOR [DescriptionLong]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__67AC528D] DEFAULT ('') FOR [CompAnDepartmentRollup1]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__68A076C6] DEFAULT ('') FOR [CompAnDepartmentRollup2]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__69949AFF] DEFAULT ('') FOR [CompAnDepartmentRollup3]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__6A88BF38] DEFAULT ('') FOR [CompAnDepartmentRollup4]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__CompA__6B7CE371] DEFAULT ('') FOR [CompAnPrimaryStat]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__SPHDe__6C7107AA] DEFAULT ((0)) FOR [SPHDepartmentRollupID]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__Membe__6D652BE3] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimCompAnDepartment] ADD CONSTRAINT [DF__DimCompAn__Trans__6E59501C] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimCompAnPeerGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimCompAnPeerGroup] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [CompAnPeerGroupID] int NOT NULL, [Name] nvarchar(300) NOT NULL, [Description] nvarchar(500) NOT NULL, [CompAnPeerGroupCode] nvarchar(10) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([CompAnPeerGroupID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_CompAnPeerGroupCode] ON [fw].[DimCompAnPeerGroup] ([CompAnPeerGroupCode]) INCLUDE ([CompAnPeerGroupID]); GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAn__Histo__3793F66E] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAnP__Name__397C3EE0] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAn__Descr__3A706319] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAn__CompA__3B648752] DEFAULT ('') FOR [CompAnPeerGroupCode]; GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAn__Trans__3C58AB8B] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimCompAnPeerGroup] ADD CONSTRAINT [DF__DimCompAn__Membe__3D4CCFC4] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimConsolidatedFinancialReporting ------------------ --------------------------------------------- CREATE TABLE [fw].[DimConsolidatedFinancialReporting] ( [ConsolidatedFinancialReportingID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Statement] nvarchar(100) NOT NULL, [Section] nvarchar(100) NOT NULL, [LineName] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [Name] nvarchar(306) NOT NULL, PRIMARY KEY ([ConsolidatedFinancialReportingID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimConsolidatedFinancialReporting] ([MemberGUID]); GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__Membe__24E2AF8A] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__State__26CAF7FC] DEFAULT ('') FOR [Statement]; GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__Secti__27BF1C35] DEFAULT ('') FOR [Section]; GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__LineN__28B3406E] DEFAULT ('') FOR [LineName]; GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__SortO__29A764A7] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimConsolidatedFinancialReporting] ADD CONSTRAINT [DF__DimConsol__Histo__25D6D3C3] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDataType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDataType] ( [DataTypeID] tinyint NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [GlobalID] varchar(32) NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([DataTypeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDataType] ([MemberGUID]); GO ALTER TABLE [fw].[DimDataType] ADD CONSTRAINT [DF__DimDataTyp__Name__363E1B39] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimDataType] ADD CONSTRAINT [DF__DimDataTy__Globa__3D40E9DA] DEFAULT ('') FOR [GlobalID]; GO ALTER TABLE [fw].[DimDataType] ADD CONSTRAINT [DF__DimDataTy__Membe__37323F72] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDataType] ADD CONSTRAINT [DF__DimDataTy__Histo__382663AB] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDataType] ADD CONSTRAINT [DF__FW_DimDataType_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDate ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDate] ( [DateID] int NOT NULL, [DayNumberOfWeek] tinyint NOT NULL, [DayNameOfWeek] nvarchar(10) NOT NULL, [DayNumberOfMonth] tinyint NOT NULL, [DayNumberOfYear] smallint NOT NULL, [WeekNumberOfYear] tinyint NOT NULL, [IsWeekDay] bit NOT NULL, [CalendarQuarter] tinyint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [CalendarDateTime] smalldatetime NOT NULL, [CalendarYear] smallint NOT NULL, [CalendarMonth] tinyint NOT NULL, [CalendarMonthName] varchar(100) NOT NULL, [FiscalYear] smallint NOT NULL, [FiscalYearName] varchar(6) NOT NULL, [FiscalMonth] tinyint NOT NULL, [TransactionID] int NOT NULL, [FiscalQuarter] varchar(15) NOT NULL, [YearMonth] nvarchar(25) NOT NULL, [MonthYear] nvarchar(100) NOT NULL, [PremierMapping] varchar(8000) NULL, [DaysInMonth] int NOT NULL, PRIMARY KEY ([DateID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDate] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_CalendarDateTime] ON [fw].[DimDate] ([CalendarDateTime]); GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__DaysInM__0105A55B] DEFAULT ((0)) FOR [DaysInMonth]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__FiscalQ__4E0FADA6] DEFAULT ('') FOR [FiscalQuarter]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__YearMon__11882458] DEFAULT ('') FOR [YearMonth]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__MonthYe__1CB7E171] DEFAULT ('Not Specified') FOR [MonthYear]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__FiscalM__1F65094C] DEFAULT ((0)) FOR [FiscalMonth]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__DayNumb__087F41EF] DEFAULT ((0)) FOR [DayNumberOfWeek]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__DayName__09736628] DEFAULT ((0)) FOR [DayNameOfWeek]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__DayNumb__0A678A61] DEFAULT ((0)) FOR [DayNumberOfMonth]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__DayNumb__0B5BAE9A] DEFAULT ((0)) FOR [DayNumberOfYear]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__WeekNum__0C4FD2D3] DEFAULT ((0)) FOR [WeekNumberOfYear]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__IsWeekD__0D43F70C] DEFAULT ((0)) FOR [IsWeekDay]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__Calenda__0E381B45] DEFAULT ((0)) FOR [CalendarQuarter]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__History__102063B7] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF_CalendarDateTime] DEFAULT ('1900-01-01 0:00') FOR [CalendarDateTime]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__Calenda__7EC0CD8B] DEFAULT ((0)) FOR [CalendarYear]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__Calenda__7FB4F1C4] DEFAULT ((1)) FOR [CalendarMonth]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__Calenda__00A915FD] DEFAULT ('') FOR [CalendarMonthName]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__DimDate__FiscalY__019D3A36] DEFAULT ((0)) FOR [FiscalYear]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF__FW_DimDate_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDate] ADD CONSTRAINT [DF_FWDIMDATEMEMBERGUID] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDayType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDayType] ( [DayTypeID] int NOT NULL, [DayTypeCode] nvarchar(40) NOT NULL, [Description] nvarchar(400) NOT NULL, [PrecedentOrder] int NOT NULL, [GlobalID] nvarchar(50) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Rollup] nvarchar(100) NOT NULL, [TransactionID] int NOT NULL, [Name] nvarchar(443) NOT NULL, PRIMARY KEY ([DayTypeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDayType] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_DayTypeCode] ON [fw].[DimDayType] ([DayTypeCode]) INCLUDE ([DayTypeID]); GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__DayTy__15FC65FA] DEFAULT ('') FOR [DayTypeCode]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Prece__17E4AE6C] DEFAULT ((0)) FOR [PrecedentOrder]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Globa__18D8D2A5] DEFAULT ('') FOR [GlobalID]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Descr__16F08A33] DEFAULT ('Not Specified') FOR [Description]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Membe__5AA69602] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Rollu__69D3CAF9] DEFAULT ('') FOR [Rollup]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__DimDayTyp__Histo__5B9ABA3B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDayType] ADD CONSTRAINT [DF__FW_DimDayType_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDayofStay ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDayofStay] ( [DayofStayID] int NOT NULL, [Name] nvarchar(50) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([DayofStayID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDayofStay] ([MemberGUID]); GO ALTER TABLE [fw].[DimDayofStay] ADD CONSTRAINT [DF__DimDayofS__Histo__60C0F8B9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDayofStay] ADD CONSTRAINT [DF__DimDayofSt__Name__5ED8B047] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimDayofStay] ADD CONSTRAINT [DF__DimDayofS__Membe__5FCCD480] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDayofStay] ADD CONSTRAINT [DF__FW_DimDayofStay_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartment ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartment] ( [DepartmentID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [DepartmentCode] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, [SystemID] smallint NOT NULL, [System] nvarchar(100) NOT NULL, [SystemSortOrder] int NOT NULL, [EntityID] int NOT NULL, [Entity] nvarchar(303) NULL, [EntitySortOrder] int NOT NULL, [EntityTypeOverride] smallint NOT NULL, [DepartmentRollup1ID] smallint NOT NULL, [DepartmentRollup1] nvarchar(200) NOT NULL, [DepartmentRollup1SortOrder] int NOT NULL, [DepartmentRollup2ID] smallint NOT NULL, [DepartmentRollup2] nvarchar(200) NOT NULL, [DepartmentRollup2SortOrder] int NOT NULL, [DepartmentRollup3ID] smallint NOT NULL, [DepartmentRollup3] nvarchar(200) NOT NULL, [DepartmentRollup3SortOrder] int NOT NULL, [DepartmentRollup4ID] int NOT NULL, [DepartmentRollup4] nvarchar(200) NOT NULL, [DepartmentRollup4SortOrder] int NOT NULL, [DepartmentRollup5ID] smallint NOT NULL, [DepartmentRollup5] nvarchar(200) NOT NULL, [DepartmentRollup5SortOrder] int NOT NULL, [DepartmentRollup6ID] smallint NOT NULL, [DepartmentRollup6] nvarchar(200) NOT NULL, [DepartmentRollup6SortOrder] int NOT NULL, [CareSettingID] int NOT NULL, [CareSetting] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [IsDepartmentRollup] bit NOT NULL, [FunctionalAreaID] int NOT NULL, [FunctionalArea] nvarchar(100) NOT NULL, [ResearchDepartmentCategoryID] int NOT NULL, [ResearchDepartmentCategoryName] nvarchar(100) NOT NULL, [ResearchDepartmentCategorySortOrder] int NOT NULL, [AttributionTypeID] int NOT NULL, [AttributionType] nvarchar(200) NOT NULL, [CAPIsDefined] bit NOT NULL, [IsCAP] bit NOT NULL, [DSSIsDefined] bit NOT NULL, [IsDSS] bit NOT NULL, [DepartmentTypeOLD] nvarchar(100) NOT NULL, [DSSDeptGrouping] nvarchar(200) NOT NULL, [DSSDepartmentRollup1ID] int NOT NULL, [DSSDepartmentRollup1Name] nvarchar(100) NOT NULL, [DSSDepartmentRollup2ID] int NOT NULL, [DSSDepartmentRollup2Name] nvarchar(100) NOT NULL, [DSSDepartmentRollup3ID] int NOT NULL, [DSSDepartmentRollup3Name] nvarchar(100) NOT NULL, [IsOverhead] bit NOT NULL, [OBIsDefined] bit NOT NULL, [IsOB] bit NOT NULL, [IsMRPlan] bit NOT NULL, [IsActive] bit NOT NULL, [IsVariable] bit NOT NULL, [IsAccountFlexing] bit NOT NULL, [FlexingBucketGUID] uniqueidentifier NOT NULL, [OBGlobalStatisticsPlanID] int NOT NULL, [OBGlobalStatisticsPlan] nvarchar(1000) NOT NULL, [OBReimbursementPlanID] int NOT NULL, [OBReimbursementPlan] nvarchar(458) NOT NULL, [OBServiceLinePlanID] int NOT NULL, [OBServiceLinePlan] nvarchar(458) NOT NULL, [SPIsDefined] bit NOT NULL, [IsLRFP] bit NOT NULL, [RollingPlanID] int NOT NULL, [SPRollingForecastPlanName] nvarchar(200) NOT NULL, [OpsPlanID] int NOT NULL, [SPOperationsPlanName] nvarchar(200) NOT NULL, [BalPlanID] int NOT NULL, [SPBalanceSheetPlanName] nvarchar(200) NOT NULL, [PatientTypeRollup] tinyint NOT NULL, [PatientTypeRollupName] nvarchar(100) NOT NULL, [SPJobCodeGroup] int NOT NULL, [SPJobCodeGroupName] nvarchar(100) NOT NULL, [SPPhysicianGroup] int NOT NULL, [SPPhysicianGroupName] nvarchar(100) NOT NULL, [SPAccountRollup] int NOT NULL, [SPAccountRollupName] nvarchar(100) NOT NULL, [SPServiceLineForecastType] smallint NOT NULL, [ConsolidatedCode] nvarchar(100) NOT NULL, [IsConsolidated] bit NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Name] nvarchar(203) NOT NULL, [SecureGroupID] int NOT NULL, [WorkWeekID] int NOT NULL, [CAPDefaultSalesTax] float NOT NULL, [EntityCode] nvarchar(100) NOT NULL, [FundID] int NOT NULL, [Fund] nvarchar(100) NOT NULL, [FundSortOrder] int NOT NULL, [ProjectID] int NOT NULL, [Project] nvarchar(100) NOT NULL, [ProjectSortOrder] int NOT NULL, [HomeDepartmentID] int NOT NULL, [HomeDepartment] nvarchar(100) NOT NULL, [HomeDepartmentSortOrder] int NOT NULL, [ProgramID] int NOT NULL, [Program] nvarchar(100) NOT NULL, [ProgramSortOrder] int NOT NULL, [PayCycleID] int NOT NULL, [FWIsDefined] bit NOT NULL, [DepartmentTypeID] int NOT NULL, [DepartmentType] nvarchar(200) NOT NULL, [DepartmentCodeRaw] nvarchar(100) NOT NULL, [IsPR] bit NOT NULL, [MRVicePresident] nvarchar(400) NOT NULL, [MRDirector] nvarchar(400) NOT NULL, [MRManager] nvarchar(400) NOT NULL, [IsMROrPR] int NOT NULL, [IsMRMetricTracking] bit NOT NULL, [IsHealthPlanAdmin] bit NOT NULL, [DepartmentRollup1Code] nvarchar(200) NOT NULL, [DepartmentRollup2Code] nvarchar(200) NOT NULL, [DepartmentRollup3Code] nvarchar(200) NOT NULL, [DepartmentRollup4Code] nvarchar(200) NOT NULL, [DepartmentRollup5Code] nvarchar(200) NOT NULL, [DepartmentRollup6Code] nvarchar(200) NOT NULL, [DSSDepartmentRollup4Name] nvarchar(100) NOT NULL, [DSSDepartmentRollup4ID] int NOT NULL, [DSSDepartmentRollup5ID] int NOT NULL, [DSSDepartmentRollup5Name] nvarchar(100) NOT NULL, [DSSDepartmentRollup6ID] int NOT NULL, [DSSDepartmentRollup6Name] nvarchar(200) NOT NULL, [DSSDepartmentRollup7ID] int NOT NULL, [DSSDepartmentRollup7Name] nvarchar(100) NOT NULL, [SPHDepartmentRollupID] int NOT NULL, [SPHDepartmentRollupName] nvarchar(200) NOT NULL, [SPHDepartmentRollupConfidenceScore] float NOT NULL, [SPHDepartmentTypeID] int NOT NULL, [SPHDepartmentType] nvarchar(200) NOT NULL, [IsClaimsCosting] bit NOT NULL, [SPHDepartmentRollupIsValidated] bit NOT NULL, [CompAnDepartmentID] int NOT NULL, [ProductivityPercentileID] int NOT NULL, [ProductivityPercentile] nvarchar(200) NOT NULL, [CompAnDepartment] nvarchar(200) NOT NULL, [SPHDepartmentID] int NOT NULL, [SPHDepartmentConfidenceScore] float NOT NULL, [SPHDepartmentIsValidated] bit NOT NULL, [SPHDepartmentName] nvarchar(200) NOT NULL, PRIMARY KEY ([DepartmentID]) ); CREATE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimDepartment] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_Hierarchy] ON [fw].[DimDepartment] ([DepartmentID], [DepartmentRollup1ID], [DepartmentRollup2ID], [DepartmentRollup3ID], [DepartmentRollup4ID], [DepartmentRollup5ID], [DepartmentRollup6ID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_DepartmentCode] ON [fw].[DimDepartment] ([DepartmentCode]) INCLUDE ([DepartmentID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup1ID] ON [fw].[DimDepartment] ([DepartmentRollup1ID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup2ID] ON [fw].[DimDepartment] ([DepartmentRollup2ID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup3ID] ON [fw].[DimDepartment] ([DepartmentRollup3ID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup4ID] ON [fw].[DimDepartment] ([DepartmentRollup4ID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup5ID] ON [fw].[DimDepartment] ([DepartmentRollup5ID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup6ID] ON [fw].[DimDepartment] ([DepartmentRollup6ID]); CREATE NONCLUSTERED INDEX [NCNU_EntityID] ON [fw].[DimDepartment] ([DepartmentID], [EntityID]); CREATE NONCLUSTERED INDEX [NCNU_DimDepartment_IsMRorPR_DepartmentID] ON [fw].[DimDepartment] ([IsMROrPR], [DepartmentID]) INCLUDE ([Name]); GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CareS__459FF297] DEFAULT ('') FOR [CareSetting]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__PayCy__481E3507] DEFAULT ((0)) FOR [PayCycleID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__485769AE] DEFAULT ((0)) FOR [DSSDepartmentRollup4ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Entit__485BCA24] DEFAULT ('') FOR [EntityCode]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SortO__71693472] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__494B8DE7] DEFAULT ((0)) FOR [DSSDepartmentRollup5ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsDep__59BF8EFC] DEFAULT ((0)) FOR [IsDepartmentRollup]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__4A3FB220] DEFAULT ('') FOR [DSSDepartmentRollup5Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Funct__11FA2A12] DEFAULT ((0)) FOR [FunctionalAreaID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__FundI__4B24BEE4] DEFAULT ((0)) FOR [FundID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__4B33D659] DEFAULT ((0)) FOR [DSSDepartmentRollup6ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Funct__12EE4E4B] DEFAULT ('') FOR [FunctionalArea]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepartm__Fund__4C18E31D] DEFAULT ('') FOR [Fund]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Resea__3B12E4EC] DEFAULT ((0)) FOR [ResearchDepartmentCategoryID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__FundS__4D0D0756] DEFAULT ((0)) FOR [FundSortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__4D1C1ECB] DEFAULT ((0)) FOR [DSSDepartmentRollup7ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Resea__3C070925] DEFAULT ('') FOR [ResearchDepartmentCategoryName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Proje__4E012B8F] DEFAULT ((0)) FOR [ProjectID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__4E104304] DEFAULT ('') FOR [DSSDepartmentRollup7Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Resea__3CFB2D5E] DEFAULT ((0)) FOR [ResearchDepartmentCategorySortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Proje__4EF54FC8] DEFAULT ('') FOR [Project]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Attri__4E4FD692] DEFAULT ((0)) FOR [AttributionTypeID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Proje__4FE97401] DEFAULT ((0)) FOR [ProjectSortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Attri__4F43FACB] DEFAULT ('') FOR [AttributionType]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__HomeD__50DD983A] DEFAULT ((0)) FOR [HomeDepartmentID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CAPIs__3B6A1AE2] DEFAULT ((0)) FOR [CAPIsDefined]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__HomeD__51D1BC73] DEFAULT ('') FOR [HomeDepartment]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__HomeD__52C5E0AC] DEFAULT ((0)) FOR [HomeDepartmentSortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSIs__3C5E3F1B] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Progr__53BA04E5] DEFAULT ((0)) FOR [ProgramID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsDSS__3A68A7AC] DEFAULT ((0)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Progr__54AE291E] DEFAULT ('') FOR [Program]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Entit__3D5D504C] DEFAULT ((0)) FOR [EntityID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTDEPARTMENTTYPE] DEFAULT ('Not Specified') FOR [DepartmentTypeOLD]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Progr__55A24D57] DEFAULT ((0)) FOR [ProgramSortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__6711CA7E] DEFAULT ('') FOR [DSSDeptGrouping]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__3C3D7833] DEFAULT ((0)) FOR [DSSDepartmentRollup1ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__3D319C6C] DEFAULT ('') FOR [DSSDepartmentRollup1Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__3E25C0A5] DEFAULT ((0)) FOR [DSSDepartmentRollup2ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__3F19E4DE] DEFAULT ('') FOR [DSSDepartmentRollup2Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__5A751CC8] DEFAULT ('') FOR [DepartmentCodeRaw]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__400E0917] DEFAULT ((0)) FOR [DSSDepartmentRollup3ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__41022D50] DEFAULT ('') FOR [DSSDepartmentRollup3Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_IsCAP] DEFAULT ((0)) FOR [IsCAP]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsOve__191A2EAB] DEFAULT ((0)) FOR [IsOverhead]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBIsD__3D526354] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTISOB] DEFAULT ((0)) FOR [IsOB]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTISMRPLAN] DEFAULT ((0)) FOR [IsMRPlan]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__60630048] DEFAULT ((0)) FOR [DepartmentTypeID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTISACTIVE] DEFAULT ((0)) FOR [IsActive]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__61572481] DEFAULT ('') FOR [DepartmentType]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsVar__5062D5C3] DEFAULT ((0)) FOR [IsVariable]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_IsAcctFlexing] DEFAULT ((0)) FOR [IsAccountFlexing]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBGlo__69DEE9BB] DEFAULT ((0)) FOR [OBGlobalStatisticsPlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__MRVic__65137223] DEFAULT ('') FOR [MRVicePresident]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBGlo__6AD30DF4] DEFAULT ('') FOR [OBGlobalStatisticsPlan]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__MRDir__6607965C] DEFAULT ('') FOR [MRDirector]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBRei__6BC7322D] DEFAULT ((0)) FOR [OBReimbursementPlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__MRMan__66FBBA95] DEFAULT ('') FOR [MRManager]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBRei__6CBB5666] DEFAULT ('') FOR [OBReimbursementPlan]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBSer__6DAF7A9F] DEFAULT ((0)) FOR [OBServiceLinePlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__OBSer__6EA39ED8] DEFAULT ('') FOR [OBServiceLinePlan]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPIsD__3E46878D] DEFAULT ((0)) FOR [SPIsDefined]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_FlexingBucketGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [FlexingBucketGUID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_IsLRFP] DEFAULT ((1)) FOR [IsLRFP]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTROLLINGPLANID] DEFAULT ((0)) FOR [RollingPlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsCla__6CAD0619] DEFAULT ((0)) FOR [IsClaimsCosting]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPRol__22017ED5] DEFAULT ('') FOR [SPRollingForecastPlanName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTOPSPLANID] DEFAULT ((0)) FOR [OpsPlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPOpe__363D81AC] DEFAULT ('') FOR [SPOperationsPlanName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CompA__6F4D7455] DEFAULT ((0)) FOR [CompAnDepartmentID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_FWDIMDEPARTMENTBALPLANID] DEFAULT ((0)) FOR [BalPlanID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPBal__72526BB3] DEFAULT ('') FOR [SPBalanceSheetPlanName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Patie__05630FEC] DEFAULT ((0)) FOR [PatientTypeRollup]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__46620409] DEFAULT ((0)) FOR [SPHDepartmentID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Patie__06573425] DEFAULT ('') FOR [PatientTypeRollupName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__47562842] DEFAULT ((0)) FOR [SPHDepartmentConfidenceScore]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__JobCo__074B585E] DEFAULT ((0)) FOR [SPJobCodeGroup]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__484A4C7B] DEFAULT ((0)) FOR [SPHDepartmentIsValidated]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__JobCo__083F7C97] DEFAULT ('') FOR [SPJobCodeGroupName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPPhy__0933A0D0] DEFAULT ((0)) FOR [SPPhysicianGroup]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPPhy__0A27C509] DEFAULT ('') FOR [SPPhysicianGroupName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPAcc__0B1BE942] DEFAULT ((0)) FOR [SPAccountRollup]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPAcc__0C100D7B] DEFAULT ('') FOR [SPAccountRollupName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPSer__595774EA] DEFAULT ((0)) FOR [SPServiceLineForecastType]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_ConsolidatedCode] DEFAULT ('') FOR [ConsolidatedCode]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsHea__020F09F7] DEFAULT ((0)) FOR [IsHealthPlanAdmin]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_IsConsolidated] DEFAULT ((0)) FOR [IsConsolidated]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__FWIsD__044B5B03] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__4FEB6E43] DEFAULT ('') FOR [SPHDepartmentName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__FW_DimDepartment_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__05C52EAB] DEFAULT ((0)) FOR [SPHDepartmentRollupIsValidated]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Produ__0BB4A8D9] DEFAULT ((0)) FOR [ProductivityPercentileID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__17CBA2F1] DEFAULT ((0)) FOR [SPHDepartmentRollupID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__18BFC72A] DEFAULT ('') FOR [SPHDepartmentRollupName]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__IsMRM__1988D110] DEFAULT ((0)) FOR [IsMRMetricTracking]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__19B3EB63] DEFAULT ((0)) FOR [SPHDepartmentRollupConfidenceScore]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__WorkW__20F64D92] DEFAULT ((0)) FOR [WorkWeekID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_datacap_DimCapitalDepartment_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_IsPR] DEFAULT ((0)) FOR [IsPR]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimCapitalDepartment_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimDepartment_Code] DEFAULT ('') FOR [DepartmentCode]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF_DimCapitalDepartment_Department] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Syste__3A80E3A1] DEFAULT ((0)) FOR [SystemID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Syste__3B7507DA] DEFAULT ('') FOR [System]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__30C9F8E0] DEFAULT ('') FOR [DepartmentRollup1Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Syste__3C692C13] DEFAULT ((0)) FOR [SystemSortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__4C27FA92] DEFAULT ('') FOR [DSSDepartmentRollup6Name]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__31BE1D19] DEFAULT ('') FOR [DepartmentRollup2Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__32B24152] DEFAULT ('') FOR [DepartmentRollup3Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Entit__3E517485] DEFAULT ('') FOR [Entity]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__33A6658B] DEFAULT ('') FOR [DepartmentRollup4Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Entit__3F4598BE] DEFAULT ((0)) FOR [EntitySortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__349A89C4] DEFAULT ('') FOR [DepartmentRollup5Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Entit__7898B414] DEFAULT ((-1)) FOR [EntityTypeOverride]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__358EADFD] DEFAULT ('') FOR [DepartmentRollup6Code]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__39DB38A1] DEFAULT ((0)) FOR [DepartmentRollup1ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__3D2D71EF] DEFAULT ('') FOR [DepartmentRollup1]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Produ__37932B17] DEFAULT ('') FOR [ProductivityPercentile]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__5C6E178C] DEFAULT ((0)) FOR [DepartmentRollup1SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__37D94B27] DEFAULT ((0)) FOR [SPHDepartmentTypeID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CompA__38874F50] DEFAULT ('') FOR [CompAnDepartment]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__7313B5FD] DEFAULT ((0)) FOR [DepartmentRollup2ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__3E219628] DEFAULT ('') FOR [DepartmentRollup2]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__5D623BC5] DEFAULT ((0)) FOR [DepartmentRollup2SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__043E41FF] DEFAULT ((0)) FOR [DepartmentRollup3ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__3F15BA61] DEFAULT ('') FOR [DepartmentRollup3]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__5E565FFE] DEFAULT ((0)) FOR [DepartmentRollup3SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__05326638] DEFAULT ((0)) FOR [DepartmentRollup4ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__4009DE9A] DEFAULT ('') FOR [DepartmentRollup4]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__5F4A8437] DEFAULT ((0)) FOR [DepartmentRollup4SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__06268A71] DEFAULT ((0)) FOR [DepartmentRollup5ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__40FE02D3] DEFAULT ('') FOR [DepartmentRollup5]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__603EA870] DEFAULT ((0)) FOR [DepartmentRollup5SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__071AAEAA] DEFAULT ((0)) FOR [DepartmentRollup6ID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__41F2270C] DEFAULT ('') FOR [DepartmentRollup6]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CAPDe__457F5D79] DEFAULT ((0)) FOR [CAPDefaultSalesTax]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__Depar__6132CCA9] DEFAULT ((0)) FOR [DepartmentRollup6SortOrder]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__CareS__44ABCE5E] DEFAULT ((0)) FOR [CareSettingID]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__SPHDe__471B8EB7] DEFAULT ('') FOR [SPHDepartmentType]; GO ALTER TABLE [fw].[DimDepartment] ADD CONSTRAINT [DF__DimDepart__DSSDe__47634575] DEFAULT ('') FOR [DSSDepartmentRollup4Name]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentPH] ( [MemberGUID] uniqueidentifier NOT NULL, [DepartmentPHID] tinyint NOT NULL, [Name] nvarchar(100) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([DepartmentPHID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_DimDepartmentPH] ON [fw].[DimDepartmentPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimDepartmentPH] ADD CONSTRAINT [DF_DimDepartmentPH_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentPH] ADD CONSTRAINT [DF_DimDepartmentPH_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimDepartmentPH] ADD CONSTRAINT [DF_DimDepartmentPH_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentPH] ADD CONSTRAINT [DF__FW_DimDepartmentPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup1 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup1] ( [DepartmentRollup1ID] smallint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Code] nvarchar(200) NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(303) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup1ID]) ); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup1ID] ON [fw].[DimDepartmentRollup1] ([DepartmentRollup1ID]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup1] ([MemberGUID]); GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepart__Histo__0A612FA9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepart__Elimi__518DFE68] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepart__SortO__52E4AD52] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepart__Membe__096D0B70] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepartm__Code__0B5553E2] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__FW_DimDepartmentRollup1_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup1] ADD CONSTRAINT [DF__DimDepart__Descr__780914CE] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup2 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup2] ( [DepartmentRollup2ID] smallint NOT NULL, [Code] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(303) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup2ID]) ); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup2ID] ON [fw].[DimDepartmentRollup2] ([DepartmentRollup2ID]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup2] ([MemberGUID]); GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepart__Histo__16C7068E] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepart__SortO__4A4F6751] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepart__Elimi__528222A1] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepartm__Code__14DEBE1C] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepart__Membe__15D2E255] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__FW_DimDepartmentRollup2_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup2] ADD CONSTRAINT [DF__DimDepart__Descr__78FD3907] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup3 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup3] ( [DepartmentRollup3ID] smallint NOT NULL, [Code] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(200) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup3ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup3] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup3ID] ON [fw].[DimDepartmentRollup3] ([DepartmentRollup3ID]); GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepart__SortO__41BA2150] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepart__Elimi__537646DA] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepart__Histo__26FD6E57] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepartm__Code__251525E5] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepart__Membe__26094A1E] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__FW_DimDepartmentRollup3_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup3] ADD CONSTRAINT [DF__DimDepart__Descr__79F15D40] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup4 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup4] ( [DepartmentRollup4ID] int NOT NULL, [Code] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(100) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup4ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup4] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup4ID] ON [fw].[DimDepartmentRollup4] ([DepartmentRollup4ID]); GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepart__Histo__3363453C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepart__SortO__3924DB4F] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepart__Elimi__546A6B13] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepartm__Code__317AFCCA] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepart__Membe__326F2103] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__FW_DimDepartmentRollup4_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup4] ADD CONSTRAINT [DF__DimDepart__Descr__7AE58179] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup5 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup5] ( [DepartmentRollup5ID] smallint NOT NULL, [Code] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(100) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup5ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup5] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup5ID] ON [fw].[DimDepartmentRollup5] ([DepartmentRollup5ID]); GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepartm__Code__3DE0D3AF] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepart__Membe__3ED4F7E8] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepart__SortO__308F954E] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepart__Elimi__555E8F4C] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepart__Histo__3FC91C21] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__FW_DimDepartmentRollup5_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup5] ADD CONSTRAINT [DF__DimDepart__Descr__7BD9A5B2] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentRollup6 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentRollup6] ( [DepartmentRollup6ID] smallint NOT NULL, [Code] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(100) NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([DepartmentRollup6ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimDepartmentRollup6] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_DepartmentRollup6ID] ON [fw].[DimDepartmentRollup6] ([DepartmentRollup6ID]); GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepartm__Code__4A46AA94] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepart__Membe__4B3ACECD] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepart__SortO__27FA4F4D] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepart__Elimi__5652B385] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepart__Histo__4C2EF306] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__FW_DimDepartmentRollup6_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentRollup6] ADD CONSTRAINT [DF__DimDepart__Descr__7CCDC9EB] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimDepartmentType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimDepartmentType] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [DepartmentTypeID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Rollup] nvarchar(1000) NOT NULL, PRIMARY KEY ([DepartmentTypeID]) ); GO ALTER TABLE [fw].[DimDepartmentType] ADD CONSTRAINT [DF__DimDepart__Histo__59B602B9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimDepartmentType] ADD CONSTRAINT [DF__DimDepartm__Name__5B9E4B2B] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimDepartmentType] ADD CONSTRAINT [DF__DimDepart__Trans__5C926F64] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimDepartmentType] ADD CONSTRAINT [DF__DimDepart__Membe__5D86939D] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimDepartmentType] ADD CONSTRAINT [DF__DimDepart__Rollu__5E7AB7D6] DEFAULT ('') FOR [Rollup]; GO --------------------------------------------- --------------------------------------------- -- fw.DimEmployee ------------------ --------------------------------------------- CREATE TABLE [fw].[DimEmployee] ( [EmployeeID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [NameLast] nvarchar(200) NOT NULL, [NameFirst] nvarchar(200) NOT NULL, [Number] nvarchar(200) NOT NULL, [JobCodeID] int NOT NULL, [JobCode] nvarchar(151) NOT NULL, [JobCodeCode] nvarchar(100) NOT NULL, [Code] nvarchar(200) NOT NULL, [OBIsDefined] bit NOT NULL, [WageRate] money NOT NULL, [IsProvider] bit NOT NULL, [ProviderID] int NOT NULL, [IsVariable] bit NOT NULL, [HireDate] datetime NOT NULL, [IsActive] bit NOT NULL, [Status] nvarchar(100) NOT NULL, [NextReview] datetime NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [WorkWeekOverrideID] int NOT NULL, [HomeDepartmentID] int NOT NULL, [HomeDepartment] nvarchar(203) NOT NULL, [HomeDepartmentCode] nvarchar(100) NOT NULL, [NameFull] nvarchar(401) NOT NULL, [EmployeeCohortID] int NOT NULL, [EmployeeCohortName] nvarchar(100) NOT NULL, [EmployeeCohortContractDate] datetime NOT NULL, [EmployeeCohortMeritType] nvarchar(100) NOT NULL, [StandardHours] nvarchar(100) NOT NULL, [FWIsDefined] bit NOT NULL, [TerminationDate] datetime NOT NULL, [AdjustedHireDate] datetime NOT NULL, [FTETotal] float NOT NULL, [HomeAccountID] int NOT NULL, [HomeAccount] nvarchar(100) NOT NULL, [HomeAccountCode] nvarchar(100) NOT NULL, [EmployeeClass] nvarchar(100) NOT NULL, [Name] nvarchar(707) NOT NULL, [NPI] nvarchar(50) NOT NULL, [PositionControlNumber] nvarchar(100) NOT NULL, PRIMARY KEY ([EmployeeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimEmployee] ([MemberGUID]); CREATE NONCLUSTERED INDEX [NCNU_IsProvider] ON [fw].[DimEmployee] ([EmployeeID], [IsProvider]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Code] ON [fw].[DimEmployee] ([Code]) INCLUDE ([EmployeeID]); CREATE NONCLUSTERED INDEX [CORE_HomeDepartmentID_inc] ON [fw].[DimEmployee] ([HomeDepartmentID]) INCLUDE ([Name]); GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__FWIsD__081BEBE7] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Emplo__100E1AB7] DEFAULT ((0)) FOR [EmployeeCohortID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Emplo__11023EF0] DEFAULT ('') FOR [EmployeeCohortName]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Emplo__11F66329] DEFAULT (getdate()) FOR [EmployeeCohortContractDate]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Emplo__12EA8762] DEFAULT ('') FOR [EmployeeCohortMeritType]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Stand__13DEAB9B] DEFAULT ('40') FOR [StandardHours]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__WorkW__24C6DE76] DEFAULT ((0)) FOR [WorkWeekOverrideID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF_DimEmployee_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__NameL__4D6EC6B0] DEFAULT ('') FOR [NameLast]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__NameF__4C7AA277] DEFAULT ('') FOR [NameFirst]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Numbe__574A0949] DEFAULT ('') FOR [Number]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__JobCo__59F6619E] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__JobCo__690C57C1] DEFAULT ('') FOR [JobCode]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Posit__454AB6E3] DEFAULT ('') FOR [PositionControlNumber]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__JobCo__150BA0E7] DEFAULT ('') FOR [JobCodeCode]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__CodeN__1170E584] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__OBIsD__18F14064] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__WageR__58E0795C] DEFAULT ((0)) FOR [WageRate]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__IsPro__5C19DD28] DEFAULT ((0)) FOR [IsProvider]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Provi__72A7A338] DEFAULT ((0)) FOR [ProviderID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__IsVar__6A007BFA] DEFAULT ((0)) FOR [IsVariable]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF_FWDIMEMPLOYEEHIREDATE] DEFAULT (getdate()) FOR [HireDate]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__IsAct__5BBEE049] DEFAULT ((1)) FOR [IsActive]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF_DimEmployee_Status] DEFAULT ('') FOR [Status]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF_FWDIMEMPLOYEENEXTREVIEW] DEFAULT (getdate()) FOR [NextReview]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__FW_DimEmployee_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF_DimEmployee_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeD__5F943537] DEFAULT ((0)) FOR [HomeDepartmentID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeD__60885970] DEFAULT ('') FOR [HomeDepartment]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Termi__61221A57] DEFAULT ('1900-01-01 0:00') FOR [TerminationDate]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeD__617C7DA9] DEFAULT ('') FOR [HomeDepartmentCode]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Adjus__62163E90] DEFAULT ('1900-01-01 0:00') FOR [AdjustedHireDate]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__FTETo__630A62C9] DEFAULT ((0)) FOR [FTETotal]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeA__63FE8702] DEFAULT ((0)) FOR [HomeAccountID]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmployee__NPI__648666AC] DEFAULT ('') FOR [NPI]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeA__64F2AB3B] DEFAULT ('') FOR [HomeAccount]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__HomeA__65E6CF74] DEFAULT ('') FOR [HomeAccountCode]; GO ALTER TABLE [fw].[DimEmployee] ADD CONSTRAINT [DF__DimEmploy__Emplo__66DAF3AD] DEFAULT ('') FOR [EmployeeClass]; GO --------------------------------------------- --------------------------------------------- -- fw.DimEmployeeCohort ------------------ --------------------------------------------- CREATE TABLE [fw].[DimEmployeeCohort] ( [EmployeeCohortID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(200) NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] nvarchar(100) NOT NULL, [MeritType] nvarchar(100) NOT NULL, [ContractDate] datetime NOT NULL, PRIMARY KEY ([EmployeeCohortID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimEmployeeCohort] ([MemberGUID]); GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Histo__755A247B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploye__Name__7371DC09] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Membe__74660042] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Trans__764E48B4] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Descr__77426CED] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploye__Code__78369126] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__SortO__792AB55F] DEFAULT ('') FOR [SortOrder]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Merit__7A1ED998] DEFAULT ('') FOR [MeritType]; GO ALTER TABLE [fw].[DimEmployeeCohort] ADD CONSTRAINT [DF__DimEmploy__Contr__7C07220A] DEFAULT (getdate()) FOR [ContractDate]; GO --------------------------------------------- --------------------------------------------- -- fw.DimEmployeePH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimEmployeePH] ( [EmployeePHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([EmployeePHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimEmployeePH] ([MemberGUID]); GO ALTER TABLE [fw].[DimEmployeePH] ADD CONSTRAINT [DF__DimEmploy__Membe__64A40467] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimEmployeePH] ADD CONSTRAINT [DF__DimEmploye__Name__63AFE02E] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimEmployeePH] ADD CONSTRAINT [DF__FW_DimEmployeePH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimEntity ------------------ --------------------------------------------- CREATE TABLE [fw].[DimEntity] ( [EntityID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Code] nvarchar(200) NOT NULL, [Description] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [EntityType] smallint NOT NULL, [IsActive] bit NOT NULL, [CAPIsDefined] bit NOT NULL, [DSSIsDefined] bit NOT NULL, [OBIsDefined] bit NOT NULL, [OBBenefitsDepartmentID] int NOT NULL, [OBBenefitsDepartment] nvarchar(203) NOT NULL, [OBHasGlobalStatisticsPlan] bit NOT NULL, [OBHasReimbursementPlan] bit NOT NULL, [OBHasServiceLinePlan] bit NOT NULL, [OBIsUsingProviderComp] bit NOT NULL, [SPIsDefined] bit NOT NULL, [SPGrossChargesPatientTypeRollup] smallint NOT NULL, [SPGrossChargesPayorGroup] smallint NOT NULL, [SPContractualsPatientTypeRollup] smallint NOT NULL, [SPContractualsPayorGroup] smallint NOT NULL, [SPIPVolumesPatientTypeRollup] smallint NOT NULL, [SPIPVolumesPayorGroup] smallint NOT NULL, [SPIPDaysPatientTypeRollup] smallint NOT NULL, [SPIPDaysPayorGroup] smallint NOT NULL, [SPOPVolumesPatientTypeRollup] smallint NOT NULL, [SPOPVolumesPayorGroup] smallint NOT NULL, [SPFTEsJobCodeGroup] smallint NOT NULL, [SPSalariesJobCodeGroup] smallint NOT NULL, [SPClinicGrossChargesPayorGroup] smallint NOT NULL, [SPClinicContractualsPayorGroup] smallint NOT NULL, [SPClinicPrimaryVolumePhysicianGroup] smallint NOT NULL, [SPClinicSecondaryVolumePhysicianGroup] smallint NOT NULL, [SPClinicFTEsPhysicianGroup] smallint NOT NULL, [SPClinicSalariesPhysicianGroup] smallint NOT NULL, [SPServiceLineForecastType] smallint NOT NULL, [SPOperationsSLDrivenModelID] int NOT NULL, [SPRollingForecastSLDrivenModelID] int NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Name] nvarchar(303) NOT NULL, [SecureGroupID] int NOT NULL, [WorkWeekID] int NOT NULL, [CAPDefaultSalesTax] float NOT NULL, [PayCycleID] int NOT NULL, [FWIsDefined] bit NOT NULL, [EliminationsDepartmentID] int NOT NULL, [CompAnPeerGroupID] int NOT NULL, PRIMARY KEY ([EntityID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimEntity] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [CORE_CodeUnique] ON [fw].[DimEntity] ([Code]); GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__FWIsD__0633A375] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Membe__30F77967] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Code__33D3E612] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Descr__34C80A4B] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Histo__31EB9DA0] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SortO__35BC2E84] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Entit__0E6D5739] DEFAULT ((0)) FOR [EntityType]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__IsAct__56439C10] DEFAULT ((1)) FOR [IsActive]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__CAPIs__35F4660A] DEFAULT ((0)) FOR [CAPIsDefined]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__DSSIs__36E88A43] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBIsD__37DCAE7C] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBBen__6A84FC7E] DEFAULT ('') FOR [OBBenefitsDepartment]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBHas__6F97C311] DEFAULT ((0)) FOR [OBHasGlobalStatisticsPlan]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBHas__337982C0] DEFAULT ((0)) FOR [OBHasReimbursementPlan]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBHas__346DA6F9] DEFAULT ((0)) FOR [OBHasServiceLinePlan]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBIsU__2E02373A] DEFAULT ((0)) FOR [OBIsUsingProviderComp]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPIsD__38D0D2B5] DEFAULT ((0)) FOR [SPIsDefined]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__WorkW__20022959] DEFAULT ((0)) FOR [WorkWeekID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPGro__0F617B72] DEFAULT ((0)) FOR [SPGrossChargesPatientTypeRollup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPGro__1149C3E4] DEFAULT ((0)) FOR [SPGrossChargesPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCon__10559FAB] DEFAULT ((0)) FOR [SPContractualsPatientTypeRollup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCon__123DE81D] DEFAULT ((0)) FOR [SPContractualsPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPIPV__13320C56] DEFAULT ((0)) FOR [SPIPVolumesPatientTypeRollup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPIPV__1426308F] DEFAULT ((0)) FOR [SPIPVolumesPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPIPD__151A54C8] DEFAULT ((0)) FOR [SPIPDaysPatientTypeRollup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPIPD__160E7901] DEFAULT ((0)) FOR [SPIPDaysPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPOPV__17029D3A] DEFAULT ((0)) FOR [SPOPVolumesPatientTypeRollup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPOPV__17F6C173] DEFAULT ((0)) FOR [SPOPVolumesPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPFTE__1EA3BF02] DEFAULT ((0)) FOR [SPFTEsJobCodeGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPSal__1DAF9AC9] DEFAULT ((0)) FOR [SPSalariesJobCodeGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__1BC75257] DEFAULT ((0)) FOR [SPClinicGrossChargesPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__1CBB7690] DEFAULT ((0)) FOR [SPClinicContractualsPayorGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__1F97E33B] DEFAULT ((0)) FOR [SPClinicPrimaryVolumePhysicianGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__208C0774] DEFAULT ((0)) FOR [SPClinicSecondaryVolumePhysicianGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__19DF09E5] DEFAULT ((0)) FOR [SPClinicFTEsPhysicianGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPCli__1AD32E1E] DEFAULT ((0)) FOR [SPClinicSalariesPhysicianGroup]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPSer__52AA775B] DEFAULT ((0)) FOR [SPServiceLineForecastType]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPOpe__0CD7E447] DEFAULT ((0)) FOR [SPOperationsSLDrivenModelID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__OBBen__5D2B0160] DEFAULT ((0)) FOR [OBBenefitsDepartmentID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__SPRol__0DCC0880] DEFAULT ((0)) FOR [SPRollingForecastSLDrivenModelID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Trans__32DFC1D9] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__CompA__3E40F3FD] DEFAULT ((0)) FOR [CompAnPeerGroupID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__CAPDe__448B3940] DEFAULT ((0)) FOR [CAPDefaultSalesTax]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__PayCy__472A10CE] DEFAULT ((0)) FOR [PayCycleID]; GO ALTER TABLE [fw].[DimEntity] ADD CONSTRAINT [DF__DimEntity__Elimi__5099DA2F] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimEntityPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimEntityPH] ( [EntityPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([EntityPHID]) ); GO ALTER TABLE [fw].[DimEntityPH] ADD CONSTRAINT [DF__DimEntityPH_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimEntityPH] ADD CONSTRAINT [DF__DimEntityPH_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimEntityPH] ADD CONSTRAINT [DF__DimEntityPH_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimEntityPH] ADD CONSTRAINT [DF__DimEntityPH_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFiscalMonth ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFiscalMonth] ( [MemberGUID] uniqueidentifier NOT NULL, [FiscalMonthID] tinyint NOT NULL, [SortOrder] tinyint NOT NULL, [FiscalMonthCode] nvarchar(20) NOT NULL, [Name] nvarchar(100) NOT NULL, [Abbreviation] nvarchar(3) NOT NULL, [DaysInMonth] int NOT NULL, [YTDDaysInMonth] int NOT NULL, [QuarterID] tinyint NOT NULL, [MonthColumnName] nvarchar(7) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [DaysInLeapYearMonth] int NOT NULL, [YTDDaysInLeapYearMonth] int NOT NULL, [IsReal] bit NOT NULL, PRIMARY KEY ([FiscalMonthID]) ); CREATE NONCLUSTERED INDEX [IX_Name] ON [fw].[DimFiscalMonth] ([Name]); CREATE NONCLUSTERED INDEX [IX_FiscalMonthCode] ON [fw].[DimFiscalMonth] ([FiscalMonthCode]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFiscalMonth] ([MemberGUID]); GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_CalendarMonthID] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_Abbreviation] DEFAULT ('') FOR [Abbreviation]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_FWDIMFISCALMONTHFISCALMONTHCODE] DEFAULT ('0') FOR [FiscalMonthCode]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_DaysInMonth] DEFAULT ((0)) FOR [DaysInMonth]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_YTDDaysInMonth] DEFAULT ((0)) FOR [YTDDaysInMonth]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF__DimFiscal__Quart__6B860C20] DEFAULT ((0)) FOR [QuarterID]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_DimFiscalMonth_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF__DimFiscal__IsRea__4EA04A0D] DEFAULT ((0)) FOR [IsReal]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF__DimFiscal__DaysI__5551D9DC] DEFAULT ((0)) FOR [DaysInLeapYearMonth]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF__DimFiscal__YTDDa__5645FE15] DEFAULT ((0)) FOR [YTDDaysInLeapYearMonth]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF_FWDIMFISCALMONTHFISCALMONTHID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[DimFiscalMonth] ADD CONSTRAINT [DF__FW_DimFiscalMonth_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFiscalTime ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFiscalTime] ( [FiscalTimeID] int NOT NULL, [FiscalTime] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [YearMonth] nvarchar(25) NOT NULL, [FiscalYearMonth] nvarchar(12) NOT NULL, [CountFromCurrentMonth] int NOT NULL, [StartDate] datetime NOT NULL, [EndDate] datetime NOT NULL, PRIMARY KEY ([FiscalTimeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFiscalTime] ([MemberGUID]); GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Fisca__07354875] DEFAULT ('') FOR [FiscalTime]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Membe__08296CAE] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Trans__0A11B520] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Fisca__0B05D959] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Fisca__0BF9FD92] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__YearM__0CEE21CB] DEFAULT ('') FOR [YearMonth]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Histo__091D90E7] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Fisca__4F8782DD] DEFAULT ('') FOR [FiscalYearMonth]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Count__72BC7BD8] DEFAULT ((0)) FOR [CountFromCurrentMonth]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__Start__73B0A011] DEFAULT (getdate()) FOR [StartDate]; GO ALTER TABLE [fw].[DimFiscalTime] ADD CONSTRAINT [DF__DimFiscal__EndDa__74A4C44A] DEFAULT (getdate()) FOR [EndDate]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFiscalYear ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFiscalYear] ( [MemberGUID] uniqueidentifier NOT NULL, [FiscalYearID] smallint NOT NULL, [Name] nvarchar(20) NOT NULL, [SortOrder] nvarchar(10) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [IsSP] bit NOT NULL, [TransactionID] int NOT NULL, [IsCAP] bit NOT NULL, PRIMARY KEY ([FiscalYearID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimFiscalYear] ([MemberGUID]); GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF__DimFiscalY__IsSP__01014914] DEFAULT ((0)) FOR [IsSP]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF_FWDIMFISCALYEARFISCALYEARID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF_DimFiscalYear_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF_DimFiscalYear_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF_DimFiscalYear_SortOrder] DEFAULT ('') FOR [SortOrder]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF_DimFiscalYear_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF__DimFiscal__IsCAP__4F946E46] DEFAULT ((0)) FOR [IsCAP]; GO ALTER TABLE [fw].[DimFiscalYear] ADD CONSTRAINT [DF__FW_DimFiscalYear_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFiscalYearPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFiscalYearPH] ( [MemberGUID] uniqueidentifier NOT NULL, [FiscalYearPHID] tinyint NOT NULL, [Name] nvarchar(100) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([FiscalYearPHID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_DimFiscalYearPH] ON [fw].[DimFiscalYearPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimFiscalYearPH] ADD CONSTRAINT [DF__FW_DimFiscalYearPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFiscalYearPH] ADD CONSTRAINT [DF_DimFiscalYearPH_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFiscalYearPH] ADD CONSTRAINT [DF_DimFiscalYearPH_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFiscalYearPH] ADD CONSTRAINT [DF_DimFiscalYearPH_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFlag ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFlag] ( [FlagID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, PRIMARY KEY ([FlagID]) ); CREATE NONCLUSTERED INDEX [NCU_Code] ON [fw].[DimFlag] ([Code]); GO ALTER TABLE [fw].[DimFlag] ADD CONSTRAINT [DF__DimFlag__MemberG__1A867D5D] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFlag] ADD CONSTRAINT [DF__DimFlag__History__1B7AA196] DEFAULT (newid()) FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFlag] ADD CONSTRAINT [DF__DimFlag__Transac__1C6EC5CF] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFlag] ADD CONSTRAINT [DF__DimFlag__Code__1D62EA08] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimFlag] ADD CONSTRAINT [DF__DimFlag__Descrip__1E570E41] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFlexJobCodeGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFlexJobCodeGroup] ( [FlexJobCodeGroupID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([FlexJobCodeGroupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFlexJobCodeGroup] ([MemberGUID]); GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJo__Histo__3F076A14] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJob__Name__3D1F21A2] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJo__Membe__3E1345DB] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJo__Trans__3FFB8E4D] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJob__Code__40EFB286] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimFlexJobCodeGroup] ADD CONSTRAINT [DF__DimFlexJo__SortO__41E3D6BF] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimForecastDetail ------------------ --------------------------------------------- CREATE TABLE [fw].[DimForecastDetail] ( [ForecastDetailID] int NOT NULL, [ForecastDetailCode] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(200) NOT NULL, [Name] nvarchar(403) NOT NULL, [OBForecastDetailID] int NOT NULL, [CAPForecastDetailID] int NOT NULL, [SPCostComponentID] int NOT NULL, [SPAccountRollupID] int NOT NULL, [SPIsDefined] bit NOT NULL, [CPIsDefined] bit NOT NULL, [OBIsDefined] bit NOT NULL, PRIMARY KEY ([ForecastDetailID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimForecastDetail] ([MemberGUID]); GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__Histo__790F4C0E] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__CPIsD__6D695A8F] DEFAULT ((0)) FOR [CPIsDefined]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__OBIsD__6E5D7EC8] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__Forec__7727039C] DEFAULT ('') FOR [ForecastDetailCode]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__Membe__781B27D5] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__Trans__7A037047] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__Descr__7AF79480] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__OBFor__7BEBB8B9] DEFAULT ((0)) FOR [OBForecastDetailID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__CAPFo__7CDFDCF2] DEFAULT ((0)) FOR [CAPForecastDetailID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__SPCos__7DD4012B] DEFAULT ((0)) FOR [SPCostComponentID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__SPAcc__7EC82564] DEFAULT ((0)) FOR [SPAccountRollupID]; GO ALTER TABLE [fw].[DimForecastDetail] ADD CONSTRAINT [DF__DimForeca__SPIsD__7FBC499D] DEFAULT ((0)) FOR [SPIsDefined]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFramework ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFramework] ( [MemberGUID] uniqueidentifier NOT NULL, [FrameworkID] tinyint NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Abbreviation] nvarchar(10) NOT NULL, [FrameworkSchemaName] nvarchar(10) NOT NULL, [ClientSchemaName] nvarchar(10) NOT NULL, [TransactionID] int NOT NULL, [IsLatestDataModel] bit NOT NULL, [Dependencies] nvarchar(100) NOT NULL, PRIMARY KEY ([FrameworkID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFramework] ([MemberGUID]); GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF__FW_DimFramework_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_Dependencies] DEFAULT ('') FOR [Dependencies]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_Abbreviation] DEFAULT ('') FOR [Abbreviation]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_FrameworkSchemaName] DEFAULT ('') FOR [FrameworkSchemaName]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_ClientSchemaName] DEFAULT ('') FOR [ClientSchemaName]; GO ALTER TABLE [fw].[DimFramework] ADD CONSTRAINT [DF_DimFramework_IsLatestDataModel] DEFAULT ((0)) FOR [IsLatestDataModel]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFunctionalArea ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFunctionalArea] ( [FunctionalAreaID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([FunctionalAreaID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFunctionalArea] ([MemberGUID]); GO ALTER TABLE [fw].[DimFunctionalArea] ADD CONSTRAINT [DF__DimFunctio__Name__0A59084A] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimFunctionalArea] ADD CONSTRAINT [DF__DimFuncti__Membe__0B4D2C83] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFunctionalArea] ADD CONSTRAINT [DF__DimFuncti__Trans__0D3574F5] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFunctionalArea] ADD CONSTRAINT [DF__DimFuncti__Histo__0C4150BC] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimFund ------------------ --------------------------------------------- CREATE TABLE [fw].[DimFund] ( [FundID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, [Code] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(203) NOT NULL, PRIMARY KEY ([FundID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimFund] ([MemberGUID]); GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__History__78B67F6A] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__MemberG__77C25B31] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__Transac__79AAA3A3] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__SortOrd__7A9EC7DC] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__Code__7B92EC15] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimFund] ADD CONSTRAINT [DF__DimFund__Descrip__7C87104E] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimHomeDepartment ------------------ --------------------------------------------- CREATE TABLE [fw].[DimHomeDepartment] ( [HomeDepartmentID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Code] nvarchar(100) NOT NULL, PRIMARY KEY ([HomeDepartmentID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimHomeDepartment] ([MemberGUID]); GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDe__Histo__466009C7] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDe__Membe__456BE58E] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDe__Trans__47542E00] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDe__SortO__48485239] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDe__Descr__493C7672] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimHomeDepartment] ADD CONSTRAINT [DF__DimHomeDep__Code__4A309AAB] DEFAULT ('') FOR [Code]; GO --------------------------------------------- --------------------------------------------- -- fw.DimInitiative ------------------ --------------------------------------------- CREATE TABLE [fw].[DimInitiative] ( [InitiativeID] int NOT NULL, [Name] nvarchar(400) NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [InitiativeStatusID] int NOT NULL, [InitiativeStatus] nvarchar(200) NOT NULL, [AuthorGUID] uniqueidentifier NOT NULL, [Author] nvarchar(200) NOT NULL, [CostLeaderGUID] uniqueidentifier NOT NULL, [CostLeader] nvarchar(200) NOT NULL, [OwnerGUID] uniqueidentifier NOT NULL, [Owner] nvarchar(200) NOT NULL, [ExecutiveSponsorGUID] uniqueidentifier NOT NULL, [ExecutiveSponsor] nvarchar(200) NOT NULL, [Workstream] nvarchar(200) NOT NULL, [Description] nvarchar(max) NOT NULL, [SourceOfSavingsId] int NOT NULL, [SourceOfSavings] nvarchar(200) NOT NULL, [DateCreated] datetime NOT NULL, [EffectiveDate] datetime NOT NULL, [GoalStartDate] datetime NOT NULL, [GoalEndDate] datetime NOT NULL, [AnnualGoal] decimal NOT NULL, [SavingsEstimate] decimal NOT NULL, [InitiativeRollup1] nvarchar(400) NOT NULL, [InitiativeRollup1Id] int NOT NULL, [InitiativeRollup2] nvarchar(400) NOT NULL, [InitiativeRollup2Id] int NOT NULL, [InitiativeRollup3] nvarchar(400) NOT NULL, [InitiativeRollup3Id] int NOT NULL, PRIMARY KEY ([InitiativeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimInitiative] ([MemberGUID]); GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitiat__Name__58137294] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Membe__590796CD] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Histo__59FBBB06] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Trans__5AEFDF3F] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Initi__5BE40378] DEFAULT ((0)) FOR [InitiativeStatusID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Initi__5CD827B1] DEFAULT ('') FOR [InitiativeStatus]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Autho__5DCC4BEA] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [AuthorGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Autho__5EC07023] DEFAULT ('') FOR [Author]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__CostL__5FB4945C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [CostLeaderGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__CostL__60A8B895] DEFAULT ('') FOR [CostLeader]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Owner__619CDCCE] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [OwnerGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Owner__62910107] DEFAULT ('') FOR [Owner]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Execu__63852540] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [ExecutiveSponsorGUID]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Execu__64794979] DEFAULT ('') FOR [ExecutiveSponsor]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Works__656D6DB2] DEFAULT ('') FOR [Workstream]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Descr__666191EB] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Sourc__6755B624] DEFAULT ((0)) FOR [SourceOfSavingsId]; GO ALTER TABLE [fw].[DimInitiative] ADD CONSTRAINT [DF__DimInitia__Sourc__6849DA5D] DEFAULT ('') FOR [SourceOfSavings]; GO --------------------------------------------- --------------------------------------------- -- fw.DimInitiativeStatus ------------------ --------------------------------------------- CREATE TABLE [fw].[DimInitiativeStatus] ( [InitiativeStatusID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([InitiativeStatusID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimInitiativeStatus] ([MemberGUID]); GO ALTER TABLE [fw].[DimInitiativeStatus] ADD CONSTRAINT [DF__DimInitia__Histo__4466DD39] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimInitiativeStatus] ADD CONSTRAINT [DF__DimInitiat__Name__427E94C7] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimInitiativeStatus] ADD CONSTRAINT [DF__DimInitia__Membe__4372B900] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimInitiativeStatus] ADD CONSTRAINT [DF__DimInitia__Trans__455B0172] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimJobCode ------------------ --------------------------------------------- CREATE TABLE [fw].[DimJobCode] ( [JobCodeID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(151) NOT NULL, [JobCode] nvarchar(20) NOT NULL, [Description] nvarchar(128) NOT NULL, [JobCodeGroupID] int NOT NULL, [IsVariable] bit NOT NULL, [IsActive] bit NOT NULL, [IsProvider] bit NOT NULL, [IsAgency] bit NOT NULL, [DSSIsDefined] bit NOT NULL, [DSSCostingRollup] nvarchar(100) NOT NULL, [DSSRate] money NOT NULL, [OBIsDefined] bit NOT NULL, [FlexBucketGUID] uniqueidentifier NOT NULL, [SPIsDefined] bit NOT NULL, [Rollup] nvarchar(128) NOT NULL, [Variability] float NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [WorkWeekOverrideID] int NOT NULL, [FlexJobCodeGroupID] int NOT NULL, [DSSCostingRollup2] nvarchar(100) NOT NULL, [DSSCostingRollup3] nvarchar(100) NOT NULL, [FWIsDefined] bit NOT NULL, [IsPatientCare] bit NOT NULL, [IsBedside] bit NOT NULL, [IsLicensed] bit NOT NULL, [ManagementLevel] nvarchar(100) NOT NULL, [SkillMix] nvarchar(100) NOT NULL, [DSSJobCodeRollup1ID] int NOT NULL, [DSSJobCodeRollup1] varchar(200) NOT NULL, [DSSJobCodeRollup2] nvarchar(200) NOT NULL, [DSSJobCodeRollup2ID] int NOT NULL, [PRIsDefined] bit NOT NULL, [CIIsDefined] bit NOT NULL, [IsPR] bit NOT NULL, [DSSCostComponent] varchar(200) NOT NULL, [DSSJobCodeRollup3ID] int NOT NULL, [DSSJobCodeRollup3] nvarchar(100) NOT NULL, [IsDaily] bit NOT NULL, [DSSCostComponentID] int NOT NULL, [SPHJobCodeRollupID] int NOT NULL, [SPHJobCodeRollupName] nvarchar(200) NOT NULL, [SPHJobCodeRollupConfidenceScore] float NOT NULL, [SPHVariability] decimal NOT NULL, [SPHJobCodeRollupIsValidated] bit NOT NULL, [StaffingCategoryID] int NOT NULL, PRIMARY KEY ([JobCodeID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_MemberGUID_JC] ON [fw].[DimJobCode] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_JobCodeID] ON [fw].[DimJobCode] ([JobCodeID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_JobCode] ON [fw].[DimJobCode] ([JobCode]) INCLUDE ([JobCodeID]); CREATE NONCLUSTERED INDEX [NCNU_StaffingReconciliation] ON [fw].[DimJobCode] ([JobCodeID], [JobCodeGroupID], [IsProvider]); GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__Histo__54DD0E89] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__PRIsD__03C2E1CC] DEFAULT ((0)) FOR [PRIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__CIIsD__04B70605] DEFAULT ((0)) FOR [CIIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__Staff__055B1A57] DEFAULT ((0)) FOR [StaffingCategoryID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPHJo__08A19B56] DEFAULT ((0)) FOR [SPHJobCodeRollupIsValidated]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__FWIsD__09101020] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__15C19676] DEFAULT ('') FOR [DSSJobCodeRollup2]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__WorkW__21EA71CB] DEFAULT ((-1)) FOR [WorkWeekOverrideID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__22276D5B] DEFAULT ((0)) FOR [DSSJobCodeRollup2ID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__28747837] DEFAULT ((0)) FOR [DSSJobCodeRollup1ID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__29689C70] DEFAULT ('') FOR [DSSJobCodeRollup1]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_FlexBucketGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [FlexBucketGUID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSCo__380A2AD4] DEFAULT ('') FOR [DSSCostingRollup2]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPHVa__38CD6F60] DEFAULT ((0)) FOR [SPHVariability]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSCo__38FE4F0D] DEFAULT ('') FOR [DSSCostingRollup3]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_IsPR] DEFAULT ((1)) FOR [IsPR]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__431391A4] DEFAULT ((0)) FOR [DSSJobCodeRollup3ID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__FlexJ__43CC1F31] DEFAULT ((0)) FOR [FlexJobCodeGroupID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSJo__4407B5DD] DEFAULT ('') FOR [DSSJobCodeRollup3]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSCo__55674C09] DEFAULT ('') FOR [DSSCostComponent]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsPat__5C5D653A] DEFAULT ((0)) FOR [IsPatientCare]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsBed__5D518973] DEFAULT ((0)) FOR [IsBedside]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsLic__5E45ADAC] DEFAULT ((0)) FOR [IsLicensed]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSCo__5EA8342E] DEFAULT ((0)) FOR [DSSCostComponentID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__Manag__5F39D1E5] DEFAULT ('') FOR [ManagementLevel]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__Skill__602DF61E] DEFAULT ('') FOR [SkillMix]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPHJo__616F9240] DEFAULT ((0)) FOR [SPHJobCodeRollupID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPHJo__6263B679] DEFAULT ('Not Specified') FOR [SPHJobCodeRollupName]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPHJo__6357DAB2] DEFAULT ((0)) FOR [SPHJobCodeRollupConfidenceScore]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__Membe__53E8EA50] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCode__Code__5200A1DE] DEFAULT ('') FOR [JobCode]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCode__Name__510C7DA5] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__JobCo__7C53D2CB] DEFAULT ((0)) FOR [JobCodeGroupID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsVar__47CD8FC2] DEFAULT ((0)) FOR [IsVariable]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_IsActive] DEFAULT ((1)) FOR [IsActive]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsPro__3C5A7832] DEFAULT ((0)) FOR [IsProvider]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__IsAge__3BF12F35] DEFAULT ((0)) FOR [IsAgency]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSIs__3F3AABC6] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSCo__0B332816] DEFAULT ('') FOR [DSSCostingRollup]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__DSSRa__0C274C4F] DEFAULT ((0)) FOR [DSSRate]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__OBIsD__402ECFFF] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__DimJobCod__SPIsD__4122F438] DEFAULT ((0)) FOR [SPIsDefined]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_Category] DEFAULT ('') FOR [Rollup]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_Variability] DEFAULT ((0)) FOR [Variability]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF__FW_DimJobCode_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimJobCode] ADD CONSTRAINT [DF_DimJobCode_IsDaily] DEFAULT ((1)) FOR [IsDaily]; GO --------------------------------------------- --------------------------------------------- -- fw.DimJobCodeGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimJobCodeGroup] ( [JobCodeGroupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [Category] nvarchar(200) NOT NULL, [SortOrder] int NOT NULL, [IsCapital] bit NOT NULL, [IsDSS] bit NOT NULL, [IsMR] bit NOT NULL, [IsOB] bit NOT NULL, [IsSP] bit NOT NULL, [SPStaffType] nvarchar(100) NOT NULL, [SPSalariesFinancialReportingID] int NOT NULL, [SPSalariesFinancialReporting] varchar(4000) NOT NULL, [SPFTEsFinancialReportingID] int NOT NULL, [SPFTEsFinancialReporting] varchar(200) NOT NULL, [CAPFinancialReportingID] int NOT NULL, [CAPFinancialReporting] nvarchar(2000) NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SPDefaultVolumeDriver] nvarchar(400) NOT NULL, [WorkWeekOverrideID] int NOT NULL, PRIMARY KEY ([JobCodeGroupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimJobCodeGroup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimJobCodeGroup] ([Name]); GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__FW_DimJobCodeGroup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__Membe__70E2201F] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCode__Name__71D64458] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__Categ__178A1950] DEFAULT ('') FOR [Category]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SortO__187E3D89] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__IsCap__21B1D6B1] DEFAULT ((0)) FOR [IsCapital]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__IsDSS__248E435C] DEFAULT ((0)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCode__IsMR__239A1F23] DEFAULT ((0)) FOR [IsMR]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCode__IsOB__22A5FAEA] DEFAULT ((0)) FOR [IsOB]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCode__IsSP__20BDB278] DEFAULT ((0)) FOR [IsSP]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPSta__7685EADC] DEFAULT ('') FOR [SPStaffType]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPFin__777A0F15] DEFAULT ((0)) FOR [SPSalariesFinancialReportingID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPSal__02AE5E6E] DEFAULT ('') FOR [SPSalariesFinancialReporting]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPFTE__03A282A7] DEFAULT ((0)) FOR [SPFTEsFinancialReportingID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPFTE__0496A6E0] DEFAULT ('') FOR [SPFTEsFinancialReporting]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__CAPFi__3291B063] DEFAULT ((0)) FOR [CAPFinancialReportingID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__SPDef__2232F3E0] DEFAULT ('') FOR [SPDefaultVolumeDriver]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__CAPFi__3385D49C] DEFAULT ('') FOR [CAPFinancialReporting]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__Histo__72CA6891] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimJobCodeGroup] ADD CONSTRAINT [DF__DimJobCod__WorkW__79340BA9] DEFAULT ((-1)) FOR [WorkWeekOverrideID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimJobCodeGroupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimJobCodeGroupPH] ( [JobCodeGroupPHID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([JobCodeGroupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimJobCodeGroupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimJobCodeGroupPH] ADD CONSTRAINT [DF__FW_DimJobCodeGroupPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimJobCodeGroupPH] ADD CONSTRAINT [DF__DimJobCod__Membe__778F1DAE] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimJobCodeGroupPH] ADD CONSTRAINT [DF__DimJobCode__Name__788341E7] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimJobCodeGroupPH] ADD CONSTRAINT [DF__DimJobCod__Histo__79776620] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimJobCodePH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimJobCodePH] ( [JobCodePHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([JobCodePHID]) ); CREATE NONCLUSTERED INDEX [IX_JobCodePHID] ON [fw].[DimJobCodePH] ([JobCodePHID]); CREATE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimJobCodePH] ([MemberGUID]); GO ALTER TABLE [fw].[DimJobCodePH] ADD CONSTRAINT [DF__FW_DimJobCodePH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimJobCodePH] ADD CONSTRAINT [DF__DimJobCode__Name__0DA619FA] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimJobCodePH] ADD CONSTRAINT [DF__DimJobCod__Membe__0E9A3E33] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimLineNumber ------------------ --------------------------------------------- CREATE TABLE [fw].[DimLineNumber] ( [LineNumberID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([LineNumberID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimLineNumber] ([MemberGUID]); GO ALTER TABLE [fw].[DimLineNumber] ADD CONSTRAINT [DF__FW_DimLineNumber_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimLineNumber] ADD CONSTRAINT [DF__DimLineNu__Membe__36E78D22] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimLineNumber] ADD CONSTRAINT [DF__DimLineNu__Histo__37DBB15B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimManufacturer ------------------ --------------------------------------------- CREATE TABLE [fw].[DimManufacturer] ( [ManufacturerID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, PRIMARY KEY ([ManufacturerID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimManufacturer] ([MemberGUID]); GO ALTER TABLE [fw].[DimManufacturer] ADD CONSTRAINT [DF__DimManufa__Membe__317C5D7F] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimManufacturer] ADD CONSTRAINT [DF__DimManufa__Trans__3364A5F1] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimManufacturer] ADD CONSTRAINT [DF__DimManufac__Code__3458CA2A] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimManufacturer] ADD CONSTRAINT [DF__DimManufa__Descr__354CEE63] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimManufacturer] ADD CONSTRAINT [DF__DimManufa__Histo__327081B8] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimMedicalSurgical ------------------ --------------------------------------------- CREATE TABLE [fw].[DimMedicalSurgical] ( [MedicalSurgicalID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([MedicalSurgicalID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimMedicalSurgical] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimMedicalSurgical] ([Name]); GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedica__Histo__7A099935] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedical__Name__782150C3] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedica__Membe__791574FC] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedica__Trans__7AFDBD6E] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedical__Code__7BF1E1A7] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimMedicalSurgical] ADD CONSTRAINT [DF__DimMedica__SortO__7CE605E0] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimModelingServiceLine ------------------ --------------------------------------------- CREATE TABLE [fw].[DimModelingServiceLine] ( [ModelingServiceLineID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(912) NOT NULL, [PatientClassID] int NOT NULL, [PatientClass] nvarchar(200) NOT NULL, [PatientClassCode] nvarchar(100) NOT NULL, [PatientClassSortOrder] int NOT NULL, [AgeCohortID] int NOT NULL, [AgeCohort] nvarchar(200) NOT NULL, [AgeCohortCode] nvarchar(100) NOT NULL, [AgeCohortSortOrder] int NOT NULL, [ServiceLineID] int NOT NULL, [ServiceLine] nvarchar(303) NOT NULL, [ServiceLineCode] nvarchar(100) NOT NULL, [ServiceLineSortOrder] int NOT NULL, [ServiceLineRollup] nvarchar(200) NOT NULL, [ServiceLineRollupSortOrder] int NOT NULL, [MedicalSurgicalID] int NOT NULL, [MedicalSurgical] nvarchar(200) NOT NULL, [MedicalSurgicalCode] nvarchar(100) NOT NULL, [MedicalSurgicalSortOrder] int NOT NULL, [SortOrder] varchar(49) NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([ModelingServiceLineID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimModelingServiceLine] ([MemberGUID]); GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Membe__37D1C184] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Patie__3BA25268] DEFAULT ((0)) FOR [PatientClassID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Patie__43437430] DEFAULT ('') FOR [PatientClass]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Patie__44379869] DEFAULT ('') FOR [PatientClassCode]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Patie__452BBCA2] DEFAULT ((0)) FOR [PatientClassSortOrder]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__AgeCo__3C9676A1] DEFAULT ((0)) FOR [AgeCohortID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__AgeCo__4DC102A3] DEFAULT ('') FOR [AgeCohort]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__AgeCo__4EB526DC] DEFAULT ('') FOR [AgeCohortCode]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__AgeCo__4FA94B15] DEFAULT ((0)) FOR [AgeCohortSortOrder]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__3D8A9ADA] DEFAULT ((0)) FOR [ServiceLineID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__461FE0DB] DEFAULT ('') FOR [ServiceLine]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__47140514] DEFAULT ('') FOR [ServiceLineCode]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__4808294D] DEFAULT ((0)) FOR [ServiceLineSortOrder]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__48FC4D86] DEFAULT ('') FOR [ServiceLineRollup]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Histo__38C5E5BD] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Servi__49F071BF] DEFAULT ((0)) FOR [ServiceLineRollupSortOrder]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Medic__3E7EBF13] DEFAULT ((0)) FOR [MedicalSurgicalID]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Medic__4AE495F8] DEFAULT ('') FOR [MedicalSurgical]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Medic__4BD8BA31] DEFAULT ('') FOR [MedicalSurgicalCode]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Medic__4CCCDE6A] DEFAULT ((0)) FOR [MedicalSurgicalSortOrder]; GO ALTER TABLE [fw].[DimModelingServiceLine] ADD CONSTRAINT [DF__DimModeli__Trans__39BA09F6] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimModelingServiceLinePH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimModelingServiceLinePH] ( [ModelingServiceLinePHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ModelingServiceLinePHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimModelingServiceLinePH] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimModelingServiceLinePH] ([Name]); GO ALTER TABLE [fw].[DimModelingServiceLinePH] ADD CONSTRAINT [DF__DimModelin__Name__09D5ECAA] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimModelingServiceLinePH] ADD CONSTRAINT [DF__DimModeli__Membe__0ACA10E3] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimModelingServiceLinePH] ADD CONSTRAINT [DF__DimModeli__Trans__0CB25955] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimModelingServiceLinePH] ADD CONSTRAINT [DF__DimModeli__Histo__0BBE351C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimOpportunity ------------------ --------------------------------------------- CREATE TABLE [fw].[DimOpportunity] ( [OpportunityKey] nvarchar(20) NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [EntityID] int NOT NULL, [SourceOfSavingsID] int NOT NULL, [SourceOfSavings] nvarchar(200) NOT NULL, [IsHidden] bit NOT NULL, [HasInitiative] bit NOT NULL, [InitiativeGUID] uniqueidentifier NOT NULL, [Initiative] nvarchar(400) NOT NULL, [InitiativeStatusID] int NOT NULL, [InitiativeStatus] nvarchar(200) NOT NULL, [Owner] nvarchar(130) NOT NULL, [CostLeader] nvarchar(130) NOT NULL, [ExecutiveSponsor] nvarchar(130) NOT NULL, [Workstream] nvarchar(200) NOT NULL, [DateCreated] datetime NOT NULL, [BaselineStartDate] datetime NOT NULL, [BaselineEndDate] datetime NOT NULL, [SavingsIdentified] decimal NOT NULL, [SavingsGoal] decimal NOT NULL, [AnnualGoal] decimal NOT NULL, [SavingsEstimate] decimal NOT NULL, [InitiativeRollup1Id] int NOT NULL, [InitiativeRollup1] nvarchar(400) NOT NULL, [InitiativeRollup2Id] int NOT NULL, [InitiativeRollup2] nvarchar(400) NOT NULL, [InitiativeRollup3Id] int NOT NULL, [InitiativeRollup3] nvarchar(400) NOT NULL, PRIMARY KEY ([OpportunityKey]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimOpportunity] ([MemberGUID]); GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Oppor__41300D3C] DEFAULT ('') FOR [OpportunityKey]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpportu__Name__42243175] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Membe__431855AE] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Histo__440C79E7] DEFAULT (CONVERT([uniqueidentifier],0x00)) FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Trans__45009E20] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Entit__45F4C259] DEFAULT ((0)) FOR [EntityID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Sourc__46E8E692] DEFAULT ((0)) FOR [SourceOfSavingsID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Sourc__47DD0ACB] DEFAULT ('') FOR [SourceOfSavings]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__IsHid__48D12F04] DEFAULT ((0)) FOR [IsHidden]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__HasIn__49C5533D] DEFAULT ((0)) FOR [HasInitiative]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Initi__4AB97776] DEFAULT (CONVERT([uniqueidentifier],0x00)) FOR [InitiativeGUID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Initi__4BAD9BAF] DEFAULT ('') FOR [Initiative]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Initi__4CA1BFE8] DEFAULT ((0)) FOR [InitiativeStatusID]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Initi__4D95E421] DEFAULT ('') FOR [InitiativeStatus]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Owner__4E8A085A] DEFAULT ('') FOR [Owner]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__CostL__4F7E2C93] DEFAULT ('') FOR [CostLeader]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Execu__507250CC] DEFAULT ('') FOR [ExecutiveSponsor]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Works__51667505] DEFAULT ('') FOR [Workstream]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Savin__525A993E] DEFAULT ((0)) FOR [SavingsIdentified]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Savin__534EBD77] DEFAULT ((0)) FOR [SavingsGoal]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Annua__5442E1B0] DEFAULT ((0)) FOR [AnnualGoal]; GO ALTER TABLE [fw].[DimOpportunity] ADD CONSTRAINT [DF__DimOpport__Savin__553705E9] DEFAULT ((0)) FOR [SavingsEstimate]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientClass ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientClass] ( [PatientClassID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [IsActive] bit NOT NULL, [IncludeInAdjustedCalculations] bit NOT NULL, [OBServiceLinePrimaryVolumeAccountID] int NOT NULL, PRIMARY KEY ([PatientClassID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPatientClass] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimPatientClass] ([Name]); GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatient__Name__1DDC1A00] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatient__Code__1ED03E39] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__SortO__1FC46272] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__OBSer__20890BE2] DEFAULT ((0)) FOR [OBServiceLinePrimaryVolumeAccountID]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__Membe__20B886AB] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__Trans__22A0CF1D] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__IsAct__554F77D7] DEFAULT ((0)) FOR [IsActive]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__Histo__21ACAAE4] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientClass] ADD CONSTRAINT [DF__DimPatien__Inclu__6AF4A033] DEFAULT ((0)) FOR [IncludeInAdjustedCalculations]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientReimbursementGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientReimbursementGroup] ( [PatientReimbursementGroupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [PatientClassID] int NOT NULL, [CareSettingID] int NOT NULL, [PatientClass] nvarchar(200) NOT NULL, [PatientClassCode] nvarchar(100) NOT NULL, [PatientClassSortOrder] int NOT NULL, [CareSetting] nvarchar(200) NOT NULL, [CareSettingCode] nvarchar(100) NOT NULL, [CareSettingSortOrder] int NOT NULL, [Name] nvarchar(403) NOT NULL, [Code] nvarchar(203) NOT NULL, [SortOrder] varchar(203) NULL, PRIMARY KEY ([PatientReimbursementGroupID]) ); CREATE NONCLUSTERED INDEX [NCNU_MemberGUID] ON [fw].[DimPatientReimbursementGroup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_PreventDuplicates] ON [fw].[DimPatientReimbursementGroup] ([PatientClassID], [CareSettingID]); GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Histo__57BEA2D2] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Membe__56CA7E99] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Trans__58B2C70B] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Patie__5B8F33B6] DEFAULT ((0)) FOR [PatientClassID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__CareS__5C8357EF] DEFAULT ((0)) FOR [CareSettingID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Patie__660CC229] DEFAULT ('') FOR [PatientClass]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Patie__6700E662] DEFAULT ('') FOR [PatientClassCode]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__Patie__67F50A9B] DEFAULT ((0)) FOR [PatientClassSortOrder]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__CareS__68E92ED4] DEFAULT ('') FOR [CareSetting]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__CareS__69DD530D] DEFAULT ('') FOR [CareSettingCode]; GO ALTER TABLE [fw].[DimPatientReimbursementGroup] ADD CONSTRAINT [DF__DimPatien__CareS__6AD17746] DEFAULT ((0)) FOR [CareSettingSortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientReimbursementGroupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientReimbursementGroupPH] ( [PatientReimbursementGroupPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PatientReimbursementGroupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPatientReimbursementGroupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPatientReimbursementGroupPH] ADD CONSTRAINT [DF__DimPatien__Histo__2E878315] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroupPH] ADD CONSTRAINT [DF__DimPatient__Name__2C9F3AA3] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPatientReimbursementGroupPH] ADD CONSTRAINT [DF__DimPatien__Membe__2D935EDC] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPatientReimbursementGroupPH] ADD CONSTRAINT [DF__DimPatien__Trans__2F7BA74E] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientType] ( [Code] nvarchar(50) NOT NULL, [PatientTypeID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [PatientTypeRollupID] tinyint NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(153) NOT NULL, [DSSRollup] nvarchar(100) NOT NULL, PRIMARY KEY ([PatientTypeID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_PatientTypeCode] ON [fw].[DimPatientType] ([Code]) INCLUDE ([PatientTypeID]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPatientType] ([MemberGUID]); GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__DimPatien__Descr__03F78862] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__DimPatient__Code__0451B9EA] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__FW_DimPatientType_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__DimPatien__Membe__063A025C] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__DimPatien__DSSRo__54A1A578] DEFAULT ('') FOR [DSSRollup]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__DimPatien__Histo__496564B9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientType] ADD CONSTRAINT [DF__fw_DimPatientType_PatientTypeRollupID] DEFAULT ((0)) FOR [PatientTypeRollupID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientTypeRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientTypeRollup] ( [PatientTypeRollupID] tinyint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [Type] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [IsCapital] bit NOT NULL, [IsDSS] bit NOT NULL, [IsMR] bit NOT NULL, [IsOB] bit NOT NULL, [IsSP] bit NOT NULL, [SPChargesFinancialReportingID] int NOT NULL, [SPChargesFinancialReporting] nvarchar(100) NOT NULL, [SPContractualsFinancialReportingID] int NOT NULL, [SPContractualsFinancialReporting] nvarchar(100) NOT NULL, [SPPrimaryStatisticFinancialReportingID] int NOT NULL, [SPPrimaryStatisticFinancialReporting] nvarchar(100) NOT NULL, [SPPrimaryStatisticFinancialReportingLineName] nvarchar(100) NOT NULL, [SPSecondaryStatisticFinancialReportingID] int NOT NULL, [SPSecondaryStatisticFinancialReporting] nvarchar(100) NOT NULL, [SPSecondaryStatisticFinancialReportingLineName] nvarchar(100) NOT NULL, [SPTertiaryStatisticFinancialReportingID] int NOT NULL, [SPTertiaryStatisticFinancialReporting] nvarchar(100) NOT NULL, [SPTertiaryStatisticFinancialReportingLineName] nvarchar(100) NOT NULL, [CAPChargesFinancialReportingID] int NOT NULL, [CAPChargesFinancialReporting] nvarchar(100) NOT NULL, [CAPContractualsFinancialReportingID] int NOT NULL, [CAPContractualsFinancialReporting] nvarchar(100) NOT NULL, [CAPPrimaryStatisticFinancialReportingID] int NOT NULL, [CAPPrimaryStatisticFinancialReporting] nvarchar(100) NOT NULL, [CAPSecondaryStatisticFinancialReportingID] int NOT NULL, [CAPSecondaryStatisticFinancialReporting] nvarchar(100) NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [CareSettingID] int NOT NULL, [CareSettingName] nvarchar(200) NOT NULL, [PatientClassID] int NOT NULL, [PatientClassName] nvarchar(200) NOT NULL, [CAPPrimaryStatisticFinancialReportingLineName] nvarchar(100) NOT NULL, [CAPSecondaryStatisticFinancialReportingLineName] nvarchar(100) NOT NULL, [Sg2PatientTypeRollup] nvarchar(400) NOT NULL, PRIMARY KEY ([PatientTypeRollupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPatientTypeRollup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimPatientTypeRollup] ([Name]); GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__FW_DimPatientTypeRollup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Sg2Pa__184B9135] DEFAULT ('') FOR [Sg2PatientTypeRollup]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CareS__260DA665] DEFAULT ((0)) FOR [CareSettingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CareS__2701CA9E] DEFAULT ('') FOR [CareSettingName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPPr__27C5A8B7] DEFAULT ('') FOR [CAPPrimaryStatisticFinancialReportingLineName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Patie__27F5EED7] DEFAULT ((0)) FOR [PatientClassID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPSe__28B9CCF0] DEFAULT ('') FOR [CAPSecondaryStatisticFinancialReportingLineName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Patie__28EA1310] DEFAULT ('') FOR [PatientClassName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__PatientTy__Membe__12B81536] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__PatientTyp__Name__11C3F0FD] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatient__Type__7714F095] DEFAULT ('') FOR [Type]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__SortO__047D9F94] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__IsCap__195BEE45] DEFAULT ((0)) FOR [IsCapital]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__IsDSS__1C385AF0] DEFAULT ((0)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Histo__69D2344B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatient__IsMR__1B4436B7] DEFAULT ((0)) FOR [IsMR]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatient__IsOB__1A50127E] DEFAULT ((0)) FOR [IsOB]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatient__IsSP__1867CA0C] DEFAULT ((0)) FOR [IsSP]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Charg__22257319] DEFAULT ((0)) FOR [SPChargesFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Charg__26EA2836] DEFAULT ('') FOR [SPChargesFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Contr__23199752] DEFAULT ((0)) FOR [SPContractualsFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Contr__27DE4C6F] DEFAULT ('') FOR [SPContractualsFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Prima__240DBB8B] DEFAULT ((0)) FOR [SPPrimaryStatisticFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Prima__28D270A8] DEFAULT ('') FOR [SPPrimaryStatisticFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Prima__0B4CFAB9] DEFAULT ('') FOR [SPPrimaryStatisticFinancialReportingLineName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Secon__2501DFC4] DEFAULT ((0)) FOR [SPSecondaryStatisticFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Secon__29C694E1] DEFAULT ('') FOR [SPSecondaryStatisticFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Secon__0C411EF2] DEFAULT ('') FOR [SPSecondaryStatisticFinancialReportingLineName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Terti__25F603FD] DEFAULT ((0)) FOR [SPTertiaryStatisticFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Terti__2ABAB91A] DEFAULT ('') FOR [SPTertiaryStatisticFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__Terti__0D35432B] DEFAULT ('') FOR [SPTertiaryStatisticFinancialReportingLineName]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPCh__271FFDB7] DEFAULT ((0)) FOR [CAPChargesFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPCh__2AF08E9B] DEFAULT ('') FOR [CAPChargesFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPCo__281421F0] DEFAULT ((0)) FOR [CAPContractualsFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPCo__2BE4B2D4] DEFAULT ('') FOR [CAPContractualsFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPPr__29084629] DEFAULT ((0)) FOR [CAPPrimaryStatisticFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPPr__2CD8D70D] DEFAULT ('') FOR [CAPPrimaryStatisticFinancialReporting]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPSe__29FC6A62] DEFAULT ((0)) FOR [CAPSecondaryStatisticFinancialReportingID]; GO ALTER TABLE [fw].[DimPatientTypeRollup] ADD CONSTRAINT [DF__DimPatien__CAPSe__2DCCFB46] DEFAULT ('') FOR [CAPSecondaryStatisticFinancialReporting]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPatientTypeRollupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPatientTypeRollupPH] ( [PatientTypeRollupPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PatientTypeRollupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPatientTypeRollupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPatientTypeRollupPH] ADD CONSTRAINT [DF__FW_DimPatientTypeRollupPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPatientTypeRollupPH] ADD CONSTRAINT [DF__DimPatien__Histo__1D60BDFC] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPatientTypeRollupPH] ADD CONSTRAINT [DF__DimPatient__Name__1B78758A] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPatientTypeRollupPH] ADD CONSTRAINT [DF__DimPatien__Membe__1C6C99C3] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayCode ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayCode] ( [PayCodeID] smallint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(203) NOT NULL, [Description] nvarchar(100) NOT NULL, [PayCode] nvarchar(100) NOT NULL, [PayCodeGroupID] int NOT NULL, [PayCodeGroup] nvarchar(100) NOT NULL, [PayCodeGroupSortOrder] int NOT NULL, [PayClass] nvarchar(100) NOT NULL, [ProductiveClass] nvarchar(200) NOT NULL, [IsAccrued] bit NOT NULL, [IsHoursIgnored] bit NOT NULL, [IsDollarsIgnored] bit NOT NULL, [DSSIsDefined] bit NOT NULL, [DSSCostingRollup] nvarchar(50) NOT NULL, [OBIsDefined] bit NOT NULL, [OBForecastDetailID] int NOT NULL, [SPIsDefined] bit NOT NULL, [ImportIDAlt] nvarchar(100) NOT NULL, [IsPayCodeGroup] bit NOT NULL, [Rollup] nvarchar(100) NOT NULL, [SubRollup] nvarchar(100) NOT NULL, [FlexBucketGUID] uniqueidentifier NOT NULL, [Variability] money NOT NULL, [ReportingCategory] nvarchar(100) NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [DSSCostingRollup2] nvarchar(100) NOT NULL, [FWIsDefined] bit NOT NULL, [DSSPayCodeRollup2ID] int NOT NULL, [DSSPayCodeRollup2] nvarchar(100) NOT NULL, [DSSPayCodeRollup1] nvarchar(200) NOT NULL, [DSSPayCodeRollup1ID] int NOT NULL, [ProviderLineItemID] int NOT NULL, [SPHPayCodeRollupName] nvarchar(100) NOT NULL, [SPHProductiveClass] nvarchar(100) NOT NULL, [ProviderLineItem] nvarchar(200) NOT NULL, [SPHPayCodeRollupIsValidated] bit NOT NULL, [SPHPayCodeRollupID] int NOT NULL, [SPHPayCodeRollupConfidenceScore] float NOT NULL, PRIMARY KEY ([PayCodeID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_PayCode] ON [fw].[DimPayCode] ([PayCode]); CREATE UNIQUE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimPayCode] ([MemberGUID]); CREATE NONCLUSTERED INDEX [NCNU_StaffingReconciliation] ON [fw].[DimPayCode] ([PayCodeID], [PayCodeGroupID], [IsDollarsIgnored], [IsHoursIgnored]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_PayCode] ON [fw].[DimPayCode] ([PayCode]) INCLUDE ([PayCodeID]); GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__Provi__0327EDCB] DEFAULT ('') FOR [ProviderLineItem]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPHPa__0995BF8F] DEFAULT ((0)) FOR [SPHPayCodeRollupIsValidated]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__FWIsD__0A043459] DEFAULT ((0)) FOR [FWIsDefined]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__Provi__0A8781C3] DEFAULT ((0)) FOR [ProviderLineItemID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSPa__16B5BAAF] DEFAULT ('') FOR [DSSPayCodeRollup1]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSPa__240FB5CD] DEFAULT ((0)) FOR [DSSPayCodeRollup1ID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSPa__31D2F9E8] DEFAULT ((0)) FOR [DSSPayCodeRollup2ID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSPa__32C71E21] DEFAULT ('') FOR [DSSPayCodeRollup2]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSCo__39F27346] DEFAULT ('') FOR [DSSCostingRollup2]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPHPa__3BC08152] DEFAULT ('') FOR [SPHPayCodeRollupName]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPHPr__3CB4A58B] DEFAULT ('') FOR [SPHProductiveClass]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPHPa__3DD47DA4] DEFAULT ((0)) FOR [SPHPayCodeRollupID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPHPa__3EC8A1DD] DEFAULT ((0)) FOR [SPHPayCodeRollupConfidenceScore]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_Description] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_ImportID1] DEFAULT ('') FOR [PayCode]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_PayCodeGroupID] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__PayCo__2ECB0F56] DEFAULT ('') FOR [PayCodeGroup]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__PayCo__2FBF338F] DEFAULT ((0)) FOR [PayCodeGroupSortOrder]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__PayCl__30B357C8] DEFAULT ('') FOR [PayClass]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__Produ__2DD6EB1D] DEFAULT ('') FOR [ProductiveClass]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__IsAcc__27BF4DFF] DEFAULT ((1)) FOR [IsAccrued]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_IsHoursIgnored] DEFAULT ((0)) FOR [IsHoursIgnored]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__IsDol__2451AB60] DEFAULT ((0)) FOR [IsDollarsIgnored]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSIs__5DBF32E6] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__DSSCo__7377A163] DEFAULT ('') FOR [DSSCostingRollup]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__OBIsD__5EB3571F] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__OBFor__1DC70B67] DEFAULT ((0)) FOR [OBForecastDetailID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__SPIsD__5FA77B58] DEFAULT ((0)) FOR [SPIsDefined]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_ImportID2] DEFAULT ('') FOR [ImportIDAlt]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_IsPayCodeGroup] DEFAULT ((0)) FOR [IsPayCodeGroup]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_Rollup1] DEFAULT ('') FOR [Rollup]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF_DimPayCode_Rollup2] DEFAULT ('') FOR [SubRollup]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__FlexB__254BC6BD] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [FlexBucketGUID]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__Varia__02228611] DEFAULT ((0)) FOR [Variability]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__DimPayCod__Repor__2B0CC343] DEFAULT ('') FOR [ReportingCategory]; GO ALTER TABLE [fw].[DimPayCode] ADD CONSTRAINT [DF__FW_DimPayCode_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayCodeGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayCodeGroup] ( [PayCodeGroupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [PayCodeGroupCode] nvarchar(100) NOT NULL, [PayClass] nvarchar(100) NOT NULL, [ProductiveClassID] int NOT NULL, [IsVariable] bit NOT NULL, [IsOvertime] bit NOT NULL, [IsAgency] bit NOT NULL, [IsExcludedFromBenefits] bit NOT NULL, [WageRateMultiplier] decimal NOT NULL, [DefaultPayCodeID] int NOT NULL, [ReportingCategory] nvarchar(100) NOT NULL, [AccountID] int NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [IsDirect] bit NOT NULL, [IsPremium] bit NOT NULL, PRIMARY KEY ([PayCodeGroupID]) ); CREATE UNIQUE NONCLUSTERED INDEX [UQ__DimPayCo__A67B38530990CDEA] ON [fw].[DimPayCodeGroup] ([MemberGUID]); CREATE NONCLUSTERED INDEX [IX_PayCodeGroupID] ON [fw].[DimPayCodeGroup] ([PayCodeGroupID]); GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__Histo__0D615ECE] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsDir__3A42B4F7] DEFAULT ((0)) FOR [IsDirect]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsPre__5FA0B8DD] DEFAULT ((0)) FOR [IsPremium]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__Membe__0B79165C] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCode__Name__0C6D3A95] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF_DimPayCodeGroup_PayCodeSortOrder] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF_DimPayCodeGroup_PayCodeGroupCode] DEFAULT ('') FOR [PayCodeGroupCode]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF_DimPayCodeGroup_PayClass] DEFAULT ('') FOR [PayClass]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__Produ__281D4670] DEFAULT ((0)) FOR [ProductiveClassID]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsVar__1D17A25A] DEFAULT ((0)) FOR [IsVariable]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsOve__38209E51] DEFAULT ((0)) FOR [IsOvertime]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsAge__372C7A18] DEFAULT ((0)) FOR [IsAgency]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__IsExc__46C2F80C] DEFAULT ((0)) FOR [IsExcludedFromBenefits]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__WageR__58D2C29C] DEFAULT ((1)) FOR [WageRateMultiplier]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__Defau__54D2B6EF] DEFAULT ((0)) FOR [DefaultPayCodeID]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__DimPayCod__Repor__30C59C99] DEFAULT ('') FOR [ReportingCategory]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF_DimPayCodeGroup_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[DimPayCodeGroup] ADD CONSTRAINT [DF__FW_DimPayCodeGroup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayCodeGroupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayCodeGroupPH] ( [PayCodeGroupPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PayCodeGroupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayCodeGroupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayCodeGroupPH] ADD CONSTRAINT [DF__DimPayCod__Histo__5DB1E3E9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayCodeGroupPH] ADD CONSTRAINT [DF__DimPayCode__Name__5BC99B77] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayCodeGroupPH] ADD CONSTRAINT [DF__DimPayCod__Membe__5CBDBFB0] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayCodeGroupPH] ADD CONSTRAINT [DF__DimPayCod__Trans__5EA60822] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayCycle ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayCycle] ( [PayCycleID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(200) NOT NULL, [SortOrder] int NOT NULL, [AccrualMethod] nvarchar(100) NOT NULL, [PeriodDays] tinyint NOT NULL, [FirstPayPeriodStartDate] datetime NOT NULL, [CurrentPayPeriodID] smallint NOT NULL, PRIMARY KEY ([PayCycleID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayCycle] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Curre__2D778DC8] DEFAULT ((0)) FOR [CurrentPayPeriodID]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Histo__3F88EF06] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCycl__Name__3DA0A694] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Membe__3E94CACD] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Trans__407D133F] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCycl__Code__41713778] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__SortO__42655BB1] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Accru__43597FEA] DEFAULT ('') FOR [AccrualMethod]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__Perio__444DA423] DEFAULT ((0)) FOR [PeriodDays]; GO ALTER TABLE [fw].[DimPayCycle] ADD CONSTRAINT [DF__DimPayCyc__First__4541C85C] DEFAULT (getdate()) FOR [FirstPayPeriodStartDate]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayPeriod ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayPeriod] ( [MemberGUID] uniqueidentifier NOT NULL, [PayPeriodID] smallint NOT NULL, [PayPeriodCode] nvarchar(100) NULL, [PeriodNumber] tinyint NOT NULL, [PeriodStartCalendarDate] datetime NULL, [PeriodEndCalendarDate] datetime NOT NULL, [PeriodDays] tinyint NOT NULL, [FiscalMonthIDStart] int NULL, [FiscalMonthIDSecond] int NULL, [CalendarDaysStart] int NULL, [CalendarDaysSecond] int NULL, [PeriodDaysStart] int NULL, [PeriodDaysSecond] int NULL, [PeriodWeightStart] numeric NULL, [PeriodWeightSecond] numeric NULL, [DaysInPeriodWeightStart] numeric NULL, [DaysInPeriodWeightSecond] numeric NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [FiscalYearIDStart] int NOT NULL, [FiscalYearIDSecond] int NOT NULL, [Name] nvarchar(350) NULL, [TransactionID] int NOT NULL, [WorkingDays] tinyint NOT NULL, [WorkingDaysInPeriodStart] int NULL, [WorkingDaysInPeriodSecond] int NULL, [WorkingDaysInPeriodWeightStart] float NULL, [WorkingDaysInPeriodWeightSecond] float NULL, [PayCycleID] int NOT NULL, [Code] nvarchar(350) NOT NULL, [PayCycleName] nvarchar(200) NOT NULL, [PayCycleCode] nvarchar(200) NOT NULL, [PayCycleSortOrder] int NOT NULL, [AccrualMethod] nvarchar(100) NOT NULL, [IsCurrentPayPeriod] bit NOT NULL, [CountFromCurrentPayPeriod] int NOT NULL, PRIMARY KEY ([PayPeriodID]) ); CREATE UNIQUE NONCLUSTERED INDEX [UQ__DimDimPa__A67B38536BC073E1] ON [fw].[DimPayPeriod] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_FWDIMPAYPERIODPERIODNUMBER] DEFAULT ((0)) FOR [PeriodNumber]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_FWDIMPAYPERIODWORKINGDAYS] DEFAULT ((10)) FOR [WorkingDays]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__FW_DimPayPeriod_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__Count__290C08E3] DEFAULT ((0)) FOR [CountFromCurrentPayPeriod]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__Fisca__2B38DEE6] DEFAULT ((0)) FOR [FiscalYearIDStart]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__Fisca__2C2D031F] DEFAULT ((0)) FOR [FiscalYearIDSecond]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_DimPayPeriod_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__IsCur__48EEC890] DEFAULT ((0)) FOR [IsCurrentPayPeriod]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__PayCy__49125940] DEFAULT ((0)) FOR [PayCycleID]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPeri__Code__4A067D79] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_DimPayPeriod_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_DimPayPeriod_PeriodEndCalendarDate] DEFAULT (getdate()) FOR [PeriodEndCalendarDate]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_DimPayPeriod_DaysInPayPeriod] DEFAULT ((14)) FOR [PeriodDays]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPeri__Name__627E58A2] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__PayCy__63C64F7C] DEFAULT ('') FOR [PayCycleName]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__PayCy__64BA73B5] DEFAULT ('') FOR [PayCycleCode]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__PayCy__65AE97EE] DEFAULT ((0)) FOR [PayCycleSortOrder]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF__DimPayPer__Accru__66A2BC27] DEFAULT ('') FOR [AccrualMethod]; GO ALTER TABLE [fw].[DimPayPeriod] ADD CONSTRAINT [DF_FWDIMPAYPERIODPAYPERIODCODE] DEFAULT ('') FOR [PayPeriodCode]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayor ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayor] ( [PayorID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(253) NOT NULL, [Description] nvarchar(200) NOT NULL, [DescriptionLong] nvarchar(200) NOT NULL, [PayorCode] nvarchar(50) NOT NULL, [PayorGroupID] int NOT NULL, [FinancialClassID] int NOT NULL, [FinancialClass] nvarchar(30) NOT NULL, [IsDSS] bit NOT NULL, [IsOB] bit NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [OBDefaultInpatientReimbursementMethod] nvarchar(100) NOT NULL, [OBDefaultOutpatientReimbursementMethod] nvarchar(100) NOT NULL, PRIMARY KEY ([PayorID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayor] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [FK_DimPayor_PayorGroup] FOREIGN KEY ([PayorGroupID]) REFERENCES [fw].[DimPayorGroup] ([PayorGroupID]); GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__Member__2B6B870B] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__Descri__777F9E76] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__Descri__7873C2AF] DEFAULT ('') FOR [DescriptionLong]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__PayorC__7967E6E8] DEFAULT ('') FOR [PayorCode]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__PayorG__7A6B8A59] DEFAULT ((0)) FOR [PayorGroupID]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__Financ__7A5C0B21] DEFAULT ((0)) FOR [FinancialClassID]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF_DimPayor_FinancialClass] DEFAULT ('') FOR [FinancialClass]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__IsDSS__07A5ED7A] DEFAULT ((0)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__IsOB__06B1C941] DEFAULT ((0)) FOR [IsOB]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__FW_DimPayor_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__OBDefa__42167EE4] DEFAULT ('Per IP Volume') FOR [OBDefaultInpatientReimbursementMethod]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__OBDefa__430AA31D] DEFAULT ('Per OP Volume') FOR [OBDefaultOutpatientReimbursementMethod]; GO ALTER TABLE [fw].[DimPayor] ADD CONSTRAINT [DF__DimPayor__Histor__7B502F5A] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayorGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayorGroup] ( [PayorGroupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [Category] nvarchar(200) NOT NULL, [ReimbursementType] nvarchar(200) NOT NULL, [PayorGroupCode] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [IsCapital] bit NOT NULL, [CAPChargesFinancialReportingID] int NOT NULL, [CAPChargesFinancialReporting] varchar(4000) NOT NULL, [CAPContractualsFinancialReportingID] int NOT NULL, [CAPContractualsFinancialReporting] varchar(200) NOT NULL, [IsDSS] bit NOT NULL, [IsOB] bit NOT NULL, [IsMR] bit NOT NULL, [IsSP] bit NOT NULL, [SPHCRType] nvarchar(100) NOT NULL, [SPHCRPayorID] int NOT NULL, [SPHCRPayor] nvarchar(200) NOT NULL, [SPChargesFinancialReportingID] int NOT NULL, [SPChargesFinancialReporting] varchar(200) NOT NULL, [SPContractualsFinancialReportingID] int NOT NULL, [SPContractualsFinancialReporting] varchar(200) NOT NULL, [SPDefaultInpatientReimbursementMethod] nvarchar(100) NOT NULL, [SPDefaultOutpatientReimbursementMethod] nvarchar(100) NOT NULL, [SPDefaultClinicReimbursementMethod] nvarchar(100) NOT NULL, [SPCMISamplingSourceType] int NOT NULL, [SPCMISamplingAccountID] int NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [OBDefaultInpatientReimbursementMethod] nvarchar(100) NOT NULL, [OBDefaultOutpatientReimbursementMethod] nvarchar(100) NOT NULL, PRIMARY KEY ([PayorGroupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayorGroup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimPayorGroup] ([Name]); GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__Membe__4F812C54] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorGr__Name__5075508D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__Categ__79059230] DEFAULT ('') FOR [Category]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__Reimb__79F9B669] DEFAULT ('') FOR [ReimbursementType]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__Payor__545B539E] DEFAULT ('') FOR [PayorGroupCode]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SortO__00A6B3F8] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__IsCap__2A471CB2] DEFAULT ((0)) FOR [IsCapital]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__CAPCh__665478E7] DEFAULT ((0)) FOR [CAPChargesFinancialReportingID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__CAPCh__67489D20] DEFAULT ('') FOR [CAPChargesFinancialReporting]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__CAPCo__683CC159] DEFAULT ((0)) FOR [CAPContractualsFinancialReportingID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__CAPCo__6930E592] DEFAULT ('') FOR [CAPContractualsFinancialReporting]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__IsDSS__2D23895D] DEFAULT ((0)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorGr__IsOB__2B3B40EB] DEFAULT ((0)) FOR [IsOB]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorGr__IsMR__2C2F6524] DEFAULT ((0)) FOR [IsMR]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorGr__IsSP__2952F879] DEFAULT ((0)) FOR [IsSP]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPHCR__79625787] DEFAULT ('') FOR [SPHCRType]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPHCR__50158FA4] DEFAULT ((0)) FOR [SPHCRPayorID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPHCR__4F216B6B] DEFAULT ('') FOR [SPHCRPayor]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCha__262CA4D5] DEFAULT ((0)) FOR [SPChargesFinancialReportingID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCha__2AF159F2] DEFAULT ('') FOR [SPChargesFinancialReporting]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCon__2720C90E] DEFAULT ((0)) FOR [SPContractualsFinancialReportingID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCon__2BE57E2B] DEFAULT ('') FOR [SPContractualsFinancialReporting]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPDef__18A989A6] DEFAULT ('Per Diem') FOR [SPDefaultInpatientReimbursementMethod]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPDef__199DADDF] DEFAULT ('% of Charge') FOR [SPDefaultOutpatientReimbursementMethod]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPDef__1A91D218] DEFAULT ('% of Charge') FOR [SPDefaultClinicReimbursementMethod]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCMI__6A7A0F86] DEFAULT ((0)) FOR [SPCMISamplingSourceType]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__SPCMI__6B6E33BF] DEFAULT ((0)) FOR [SPCMISamplingAccountID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__FW_DimPayorGroup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__Histo__516974C6] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__OBDef__61CE5608] DEFAULT ('Per Diem') FOR [OBDefaultInpatientReimbursementMethod]; GO ALTER TABLE [fw].[DimPayorGroup] ADD CONSTRAINT [DF__DimPayorG__OBDef__62C27A41] DEFAULT ('% of Charge') FOR [OBDefaultOutpatientReimbursementMethod]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayorGroupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayorGroupPH] ( [PayorGroupPHID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PayorGroupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayorGroupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayorGroupPH] ADD CONSTRAINT [DF__FW_DimPayorGroupPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayorGroupPH] ADD CONSTRAINT [DF__DimPayorG__Membe__562E29E3] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPayorGroupPH] ADD CONSTRAINT [DF__DimPayorGr__Name__57224E1C] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayorGroupPH] ADD CONSTRAINT [DF__DimPayorG__Histo__58167255] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPayorPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPayorPH] ( [PayorPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PayorPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPayorPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPayorPH] ADD CONSTRAINT [DF__FW_DimPayorPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPayorPH] ADD CONSTRAINT [DF__DimPayorPH__Name__31246061] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPayorPH] ADD CONSTRAINT [DF__DimPayorP__Membe__3218849A] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPhysicianGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPhysicianGroup] ( [PhysicianGroupID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [Category] nvarchar(200) NOT NULL, [Subcategory] nvarchar(200) NOT NULL, [PhysicianType] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [IsCapital] bit NOT NULL, [IsDSS] bit NOT NULL, [IsMR] bit NOT NULL, [IsOB] bit NOT NULL, [IsSP] bit NOT NULL, [SPSalariesFinancialReportingID] int NOT NULL, [SPSalariesFinancialReporting] nvarchar(100) NOT NULL, [SPFTEsFinancialReportingID] int NOT NULL, [SPFTEsFinancialReporting] varchar(200) NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [SPSalariesVolumeDriverID] int NOT NULL, [SPSalariesVolumeDriver] nvarchar(100) NOT NULL, [SPPhysicianBenefitsTypeID] int NOT NULL, [SPPhysicianBenefitsType] nvarchar(100) NOT NULL, [WorkWeekOverrideID] int NOT NULL, PRIMARY KEY ([PhysicianGroupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPhysicianGroup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimPhysicianGroup] ([Name]); GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__FW_DimPhysicianGroup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPSal__28CD1311] DEFAULT ((0)) FOR [SPSalariesVolumeDriverID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPSal__29C1374A] DEFAULT ('') FOR [SPSalariesVolumeDriver]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPPhy__2AB55B83] DEFAULT ((0)) FOR [SPPhysicianBenefitsTypeID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPPhy__2BA97FBC] DEFAULT ('') FOR [SPPhysicianBenefitsType]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Membe__0F1C8E7C] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Physi__3A7100D5] DEFAULT ('Not specified') FOR [Name]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Categ__26CC5CE0] DEFAULT ('') FOR [Category]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Subca__27C08119] DEFAULT ('') FOR [Subcategory]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Physi__7B4A9FF9] DEFAULT ('') FOR [PhysicianType]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SortO__28B4A552] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__IsCap__48BCEFF1] DEFAULT ((1)) FOR [IsCapital]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__IsDSS__4B995C9C] DEFAULT ((1)) FOR [IsDSS]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysici__IsMR__4AA53863] DEFAULT ((1)) FOR [IsMR]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysici__IsOB__49B1142A] DEFAULT ((1)) FOR [IsOB]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysici__IsSP__47C8CBB8] DEFAULT ((1)) FOR [IsSP]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Salar__71F4DB05] DEFAULT ((0)) FOR [SPSalariesFinancialReportingID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Salar__72E8FF3E] DEFAULT ('') FOR [SPSalariesFinancialReporting]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPFTE__0773138B] DEFAULT ((0)) FOR [SPFTEsFinancialReportingID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__SPFTE__086737C4] DEFAULT ('') FOR [SPFTEsFinancialReporting]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__Histo__3B65250E] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPhysicianGroup] ADD CONSTRAINT [DF__DimPhysic__WorkW__7A282FE2] DEFAULT ((-1)) FOR [WorkWeekOverrideID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPhysicianGroupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPhysicianGroupPH] ( [PhysicianGroupPHID] int NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PhysicianGroupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPhysicianGroupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPhysicianGroupPH] ADD CONSTRAINT [DF__DimPhysic__Membe__1010B2B5] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPhysicianGroupPH] ADD CONSTRAINT [DF__FW_DimPhysicianGroupPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPhysicianGroupPH] ADD CONSTRAINT [DF__DimPhysic__Physi__4029DA2B] DEFAULT ('Not specified') FOR [Name]; GO ALTER TABLE [fw].[DimPhysicianGroupPH] ADD CONSTRAINT [DF__DimPhysic__Histo__411DFE64] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPhysicianPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPhysicianPH] ( [PhysicianPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([PhysicianPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPhysicianPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimPhysicianPH] ADD CONSTRAINT [DF__DimPhysic__Histo__4C8063A2] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPhysicianPH] ADD CONSTRAINT [DF__DimPhysici__Name__4A981B30] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPhysicianPH] ADD CONSTRAINT [DF__DimPhysic__Membe__4B8C3F69] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPhysicianPH] ADD CONSTRAINT [DF__DimPhysic__Trans__4D7487DB] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPhysicianSpecialty ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPhysicianSpecialty] ( [PhysicianSpecialtyID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [PhysicianSpecialtyCode] nvarchar(100) NOT NULL, [SpecialtyGroup] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, [RVUTarget] nvarchar(100) NOT NULL, PRIMARY KEY ([PhysicianSpecialtyID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimPhysicianSpecialty] ([MemberGUID]); GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Membe__0F775562] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Trans__115F9DD4] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Physi__1253C20D] DEFAULT ('') FOR [PhysicianSpecialtyCode]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Speci__1347E646] DEFAULT ('') FOR [SpecialtyGroup]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Descr__143C0A7F] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__Histo__106B799B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPhysicianSpecialty] ADD CONSTRAINT [DF__DimPhysic__RVUTa__5F933816] DEFAULT ('') FOR [RVUTarget]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPositionType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPositionType] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [PositionTypeID] int NOT NULL, [Name] nvarchar(255) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [PositionTypeAssignmentTypeID] int NOT NULL, PRIMARY KEY ([PositionTypeID]) ); GO ALTER TABLE [fw].[DimPositionType] ADD CONSTRAINT [DF__DimPositi__Histo__3F33B352] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPositionType] ADD CONSTRAINT [DF__DimPositio__Name__411BFBC4] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPositionType] ADD CONSTRAINT [DF__DimPositi__Trans__42101FFD] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPositionType] ADD CONSTRAINT [DF__DimPositi__Membe__43044436] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimPositionType] ADD CONSTRAINT [DF__DimPositi__Posit__43F8686F] DEFAULT ((1)) FOR [PositionTypeAssignmentTypeID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimPositionTypeAssignmentType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimPositionTypeAssignmentType] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [PositionTypeAssignmentTypeID] int NOT NULL, [Name] nvarchar(255) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([PositionTypeAssignmentTypeID]) ); GO ALTER TABLE [fw].[DimPositionTypeAssignmentType] ADD CONSTRAINT [DF__DimPositi__Histo__397AD9FC] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimPositionTypeAssignmentType] ADD CONSTRAINT [DF__DimPositio__Name__3B63226E] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimPositionTypeAssignmentType] ADD CONSTRAINT [DF__DimPositi__Trans__3C5746A7] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimPositionTypeAssignmentType] ADD CONSTRAINT [DF__DimPositi__Membe__3D4B6AE0] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimProductiveClass ------------------ --------------------------------------------- CREATE TABLE [fw].[DimProductiveClass] ( [ProductiveClassID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ProductiveClassID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimProductiveClass] ([MemberGUID]); GO ALTER TABLE [fw].[DimProductiveClass] ADD CONSTRAINT [DF__FW_DimProductiveClass_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimProductiveClass] ADD CONSTRAINT [DF__DimProduc__Histo__1D9FB7FD] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimProductiveClass] ADD CONSTRAINT [DF__DimProduct__Name__1BB76F8B] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimProductiveClass] ADD CONSTRAINT [DF__DimProduc__Membe__1CAB93C4] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimProductiveClass] ADD CONSTRAINT [DF_DimProductiveClass_SortOrder] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimProgram ------------------ --------------------------------------------- CREATE TABLE [fw].[DimProgram] ( [ProgramID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ProgramID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimProgram] ([MemberGUID]); GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgra__Membe__3629A1FE] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgra__Histo__371DC637] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgra__Trans__3811EA70] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgram__Code__39060EA9] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgra__Descr__39FA32E2] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimProgram] ADD CONSTRAINT [DF__DimProgra__SortO__3AEE571B] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimProject ------------------ --------------------------------------------- CREATE TABLE [fw].[DimProject] ( [ProjectID] int NOT NULL, [Name] nvarchar(203) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, [Code] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, PRIMARY KEY ([ProjectID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimProject] ([MemberGUID]); GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProjec__Histo__3EBEE7FF] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProjec__Membe__3DCAC3C6] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProjec__Trans__3FB30C38] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProjec__SortO__40A73071] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProject__Code__419B54AA] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimProject] ADD CONSTRAINT [DF__DimProjec__Descr__428F78E3] DEFAULT ('') FOR [Description]; GO --------------------------------------------- --------------------------------------------- -- fw.DimProvider ------------------ --------------------------------------------- CREATE TABLE [fw].[DimProvider] ( [ProviderID] int NOT NULL, [Type] nvarchar(100) NOT NULL, [NameFirst] nvarchar(100) NOT NULL, [NameLast] nvarchar(100) NOT NULL, [ProviderName] nvarchar(202) NOT NULL, [ProviderCode] nvarchar(100) NOT NULL, [PhysicianSpecialtyID] int NOT NULL, [StateLicenseNumber] nvarchar(100) NOT NULL, [NPI] nvarchar(100) NOT NULL, [GroupAffiliaition] nvarchar(100) NOT NULL, [DSSIsDefined] bit NOT NULL, [OBIsDefined] bit NOT NULL, [OBIsActive] bit NOT NULL, [IsEmployee] bit NOT NULL, [OBVolumeTarget1] decimal NOT NULL, [OBVolumeTarget2] decimal NOT NULL, [OBTier1Threshold] decimal NOT NULL, [OBTier2Threshold] decimal NOT NULL, [OBTier3Threshold] decimal NOT NULL, [OBTier4Threshold] int NOT NULL, [OBTier5Threshold] int NOT NULL, [OBTier6Threshold] int NOT NULL, [OBTier1Rate] money NOT NULL, [OBTier2Rate] money NOT NULL, [OBTier3Rate] money NOT NULL, [OBTier4Rate] money NOT NULL, [OBTier5Rate] money NOT NULL, [OBTier6Rate] money NOT NULL, [BasePay] money NOT NULL, [PayRate] money NOT NULL, [CompensationMethod] nvarchar(100) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [WorkWeekOverrideID] int NOT NULL, [IsPhysician] int NOT NULL, [Name] nvarchar(304) NOT NULL, [IsVariable] bit NOT NULL, [OBVolumeTarget3] decimal NOT NULL, PRIMARY KEY ([ProviderID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimProvider] ([MemberGUID]); GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Histo__2690903B] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__WorkW__22DE9604] DEFAULT ((-1)) FOR [WorkWeekOverrideID]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBVol__46C02E44] DEFAULT ((0)) FOR [OBVolumeTarget3]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__IsVar__47BE741E] DEFAULT ((0)) FOR [IsVariable]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvide__Type__296CFCE6] DEFAULT ('') FOR [Type]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__NameF__423CA363] DEFAULT ('') FOR [NameFirst]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__NameL__4330C79C] DEFAULT ('') FOR [NameLast]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Provi__2E31B203] DEFAULT ('') FOR [ProviderCode]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Physi__310E1EAE] DEFAULT ((0)) FOR [PhysicianSpecialtyID]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__State__320242E7] DEFAULT ('') FOR [StateLicenseNumber]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvider__NPI__32F66720] DEFAULT ('') FOR [NPI]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Group__33EA8B59] DEFAULT ('') FOR [GroupAffiliaition]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__DSSIs__00B5CB6D] DEFAULT ((0)) FOR [DSSIsDefined]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBIsD__7FC1A734] DEFAULT ((0)) FOR [OBIsDefined]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBIsA__2D3D8DCA] DEFAULT ((1)) FOR [OBIsActive]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__IsEmp__3019FA75] DEFAULT ((0)) FOR [IsEmployee]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBVol__2B6B1F48] DEFAULT ((0)) FOR [OBVolumeTarget1]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBVol__2C5F4381] DEFAULT ((0)) FOR [OBVolumeTarget2]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__7CE53A89] DEFAULT ((0)) FOR [OBTier1Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__7DD95EC2] DEFAULT ((0)) FOR [OBTier2Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__7ECD82FB] DEFAULT ((0)) FOR [OBTier3Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__55703EBF] DEFAULT ((0)) FOR [OBTier4Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__566462F8] DEFAULT ((0)) FOR [OBTier5Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OTTie__57588731] DEFAULT ((0)) FOR [OBTier6Threshold]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Thres__2B554558] DEFAULT ((0)) FOR [OBTier1Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__7AFCF217] DEFAULT ((0)) FOR [OBTier2Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__7BF11650] DEFAULT ((0)) FOR [OBTier3Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__5293D214] DEFAULT ((0)) FOR [OBTier4Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__5387F64D] DEFAULT ((0)) FOR [OBTier5Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__OBTie__547C1A86] DEFAULT ((0)) FOR [OBTier6Rate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__BaseP__2878D8AD] DEFAULT ((0)) FOR [BasePay]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__PayRa__2C496991] DEFAULT ((0)) FOR [PayRate]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Compe__2A61211F] DEFAULT ('') FOR [CompensationMethod]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Membe__259C6C02] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimProvider] ADD CONSTRAINT [DF__DimProvid__Trans__2784B474] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimProviderPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimProviderPH] ( [ProviderPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ProviderPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimProviderPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimProviderPH] ADD CONSTRAINT [DF__DimProvide__Name__39A364AF] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimProviderPH] ADD CONSTRAINT [DF__DimProvid__Membe__3A9788E8] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimProviderPH] ADD CONSTRAINT [DF__DimProvid__Trans__3C7FD15A] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimProviderPH] ADD CONSTRAINT [DF__DimProvid__Histo__3B8BAD21] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimQuarter ------------------ --------------------------------------------- CREATE TABLE [fw].[DimQuarter] ( [MemberGUID] uniqueidentifier NOT NULL, [QuarterID] tinyint NOT NULL, [Name] nvarchar(100) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([QuarterID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimQuarter] ([MemberGUID]); GO ALTER TABLE [fw].[DimQuarter] ADD CONSTRAINT [DF__FW_DimQuarter_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimQuarter] ADD CONSTRAINT [DF_DimQuarter_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimQuarter] ADD CONSTRAINT [DF_DimQuarter_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimQuarter] ADD CONSTRAINT [DF_DimQuarter_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimReportDetailType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimReportDetailType] ( [ReportDetailTypeID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [TableName] nvarchar(200) NOT NULL, PRIMARY KEY ([ReportDetailTypeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimReportDetailType] ([MemberGUID]); GO ALTER TABLE [fw].[DimReportDetailType] ADD CONSTRAINT [DF__DimReport__Histo__78A799BF] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimReportDetailType] ADD CONSTRAINT [DF__DimReportD__Name__76BF514D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimReportDetailType] ADD CONSTRAINT [DF__DimReport__Membe__77B37586] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimReportDetailType] ADD CONSTRAINT [DF__DimReport__Trans__799BBDF8] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimReportDetailType] ADD CONSTRAINT [DF__DimReport__Table__7A8FE231] DEFAULT ('') FOR [TableName]; GO --------------------------------------------- --------------------------------------------- -- fw.DimResearchDepartmentCategory ------------------ --------------------------------------------- CREATE TABLE [fw].[DimResearchDepartmentCategory] ( [ResearchDepartmentCategoryID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ResearchDepartmentCategoryID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimResearchDepartmentCategory] ([MemberGUID]); GO ALTER TABLE [fw].[DimResearchDepartmentCategory] ADD CONSTRAINT [DF__DimResear__Histo__7DD4CC82] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimResearchDepartmentCategory] ADD CONSTRAINT [DF__DimResearc__Name__7BEC8410] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimResearchDepartmentCategory] ADD CONSTRAINT [DF__DimResear__Membe__7CE0A849] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimResearchDepartmentCategory] ADD CONSTRAINT [DF__DimResear__Trans__7EC8F0BB] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimResearchDepartmentCategory] ADD CONSTRAINT [DF__DimResear__SortO__7FBD14F4] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimRowNumber ------------------ --------------------------------------------- CREATE TABLE [fw].[DimRowNumber] ( [RowNumberID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([RowNumberID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimRowNumber] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimRowNumber] ([Name]); GO ALTER TABLE [fw].[DimRowNumber] ADD CONSTRAINT [DF__FW_DimRowNumber_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimRowNumber] ADD CONSTRAINT [DF__DimRowNumb__Name__58B36098] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimRowNumber] ADD CONSTRAINT [DF__DimRowNum__Membe__59A784D1] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimRowNumber] ADD CONSTRAINT [DF__DimRowNum__Histo__5A9BA90A] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHAccountRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHAccountRollup] ( [SPHAccountRollupID] int NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Statement] nvarchar(200) NOT NULL, [Category] nvarchar(200) NOT NULL, [Section] nvarchar(200) NOT NULL, [SortOrder] int NOT NULL, [IsStandard] bit NOT NULL, [SPHCostComponent] nvarchar(400) NOT NULL, [SPHCostComponentRollup] nvarchar(400) NOT NULL, [SPHAccountRollupCode] nvarchar(100) NOT NULL, [LineItem] nvarchar(200) NOT NULL, [Name] nvarchar(606) NOT NULL, PRIMARY KEY ([SPHAccountRollupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimSPHAccountRollup] ([MemberGUID]); GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__Trans__318AA99D] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__Membe__327ECDD6] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__State__34671648] DEFAULT ('Not Specified') FOR [Statement]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__Categ__355B3A81] DEFAULT ('Not Specified') FOR [Category]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__Secti__374382F3] DEFAULT ('') FOR [Section]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__SortO__3837A72C] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__IsSta__392BCB65] DEFAULT ((0)) FOR [IsStandard]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__SPHAc__2723C071] DEFAULT ('') FOR [SPHAccountRollupCode]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__SPHCo__2A153BB5] DEFAULT ('') FOR [SPHCostComponent]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__SPHCo__2B095FEE] DEFAULT ('') FOR [SPHCostComponentRollup]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__LineI__6809E33B] DEFAULT ('Not Specified') FOR [LineItem]; GO ALTER TABLE [fw].[DimSPHAccountRollup] ADD CONSTRAINT [DF__DimSPHAcc__Histo__3372F20F] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHDepartment ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHDepartment] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [SPHDepartmentID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [SPHDepartmentCode] nvarchar(100) NOT NULL, [SPHDepartmentRollup] nvarchar(200) NOT NULL, PRIMARY KEY ([SPHDepartmentID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_SPHDepartmentCode] ON [fw].[DimSPHDepartment] ([SPHDepartmentCode]) INCLUDE ([SPHDepartmentID]); GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDep__Histo__3FB5067A] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDepa__Name__419D4EEC] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDep__Trans__42917325] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDep__Membe__4385975E] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDep__SPHDe__4479BB97] DEFAULT ('') FOR [SPHDepartmentCode]; GO ALTER TABLE [fw].[DimSPHDepartment] ADD CONSTRAINT [DF__DimSPHDep__SPHDe__456DDFD0] DEFAULT ('') FOR [SPHDepartmentRollup]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHDepartmentRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHDepartmentRollup] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [SPHDepartmentRollupID] int NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [SortOrder] int NOT NULL, [IsStandard] bit NOT NULL, [Name] nvarchar(200) NOT NULL, [SPHDepartmentRollupCode] nvarchar(100) NOT NULL, PRIMARY KEY ([SPHDepartmentRollupID]) ); GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__Trans__1212C99B] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__Membe__1306EDD4] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__SortO__13FB120D] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__IsSta__14EF3646] DEFAULT ((0)) FOR [IsStandard]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDepa__Name__15E35A7F] DEFAULT ('Not Specified') FOR [Name]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__Histo__102A8129] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSPHDepartmentRollup] ADD CONSTRAINT [DF__DimSPHDep__SPHDe__5A195492] DEFAULT ('') FOR [SPHDepartmentRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHDepartmentType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHDepartmentType] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [SPHDepartmentTypeID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [SPHDepartmentTypeCode] nvarchar(100) NOT NULL, [IsStandard] bit NOT NULL, PRIMARY KEY ([SPHDepartmentTypeID]) ); GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDepa__Name__3408BA43] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDep__Trans__34FCDE7C] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDep__Membe__35F102B5] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDep__SPHDe__5B0D78CB] DEFAULT ('') FOR [SPHDepartmentTypeCode]; GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDep__Histo__322071D1] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSPHDepartmentType] ADD CONSTRAINT [DF__DimSPHDep__IsSta__5CF5C13D] DEFAULT ((0)) FOR [IsStandard]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHJobCodeRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHJobCodeRollup] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [SPHJobCodeRollupID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [SortOrder] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [IsStandard] bit NOT NULL, [SPHJobCodeRollupCode] nvarchar(100) NOT NULL, [SPHCostComponent] nvarchar(400) NOT NULL, PRIMARY KEY ([SPHJobCodeRollupID]) ); GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__SPHJo__2817E4AA] DEFAULT ('') FOR [SPHJobCodeRollupCode]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__SPHCo__47909003] DEFAULT ('') FOR [SPHCostComponent]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__Histo__59CE7078] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJobC__Name__5BB6B8EA] DEFAULT ('Not Specified') FOR [Name]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__Trans__5CAADD23] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__SortO__5D9F015C] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__Membe__5E932595] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHJobCodeRollup] ADD CONSTRAINT [DF__DimSPHJob__IsSta__5F8749CE] DEFAULT ((0)) FOR [IsStandard]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSPHPayCodeRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSPHPayCodeRollup] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [SPHPayCodeRollupID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [SPHProductiveClass] nvarchar(200) NOT NULL, [SortOrder] int NOT NULL, [IsStandard] bit NOT NULL, [SPHPayCodeRollupCode] nvarchar(100) NOT NULL, PRIMARY KEY ([SPHPayCodeRollupID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_SPHPayCodeRollupCode] ON [fw].[DimSPHPayCodeRollup] ([SPHPayCodeRollupCode]) INCLUDE ([SPHPayCodeRollupID]); GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__Histo__3142F2DF] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPayC__Name__332B3B51] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__Trans__341F5F8A] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__Membe__351383C3] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__SPHPr__3607A7FC] DEFAULT ('') FOR [SPHProductiveClass]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__SortO__36FBCC35] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__IsSta__37EFF06E] DEFAULT ((0)) FOR [IsStandard]; GO ALTER TABLE [fw].[DimSPHPayCodeRollup] ADD CONSTRAINT [DF__DimSPHPay__SPHPa__38E414A7] DEFAULT ('') FOR [SPHPayCodeRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSecureGroup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSecureGroup] ( [SecureGroupID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([SecureGroupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimSecureGroup] ([MemberGUID]); GO ALTER TABLE [fw].[DimSecureGroup] ADD CONSTRAINT [DF__FW_DimSecureGroup_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSecureGroup] ADD CONSTRAINT [DF__DimSecureG__Name__1BDFF60F] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimSecureGroup] ADD CONSTRAINT [DF__DimSecure__Membe__1CD41A48] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSecureGroup] ADD CONSTRAINT [DF__DimSecure__Histo__1DC83E81] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine] ( [ServiceLineID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(303) NOT NULL, [RollupID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [RollupSortOrder] int NOT NULL, [ProductLine] nvarchar(200) NOT NULL, [Code] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([ServiceLineID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_PreventDuplicates] ON [fw].[DimServiceLine] ([RollupID], [ProductLine]); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Membe__3C4FF2FD] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Rollu__1E11EF81] DEFAULT ((0)) FOR [RollupID]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Rollu__11669219] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Rollu__23CAC8D7] DEFAULT ((0)) FOR [RollupSortOrder]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Produ__1F0613BA] DEFAULT ('') FOR [ProductLine]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimService__Code__288F7DF4] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__SortO__1FFA37F3] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__FW_DimServiceLine_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine] ADD CONSTRAINT [DF__DimServic__Histo__3D441736] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine2 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine2] ( [ServiceLine2ID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [PatientTypeID] int NOT NULL, [TransactionID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [Rollup2] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ServiceLine2ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine2] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimService__Name__7B78B5DE] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__Membe__7C6CDA17] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__Patie__7E552289] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__Rollu__153722FD] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__Rollu__17A9DEE8] DEFAULT ('Not Specified') FOR [Rollup2]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__FW_DimServiceLine2_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__SortO__25F7FE3F] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLine2] ADD CONSTRAINT [DF__DimServic__Histo__7D60FE50] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine3 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine3] ( [ServiceLine3ID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [PatientTypeID] int NOT NULL, [TransactionID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ServiceLine3ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine3] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimServic__Histo__05F64451] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimService__Name__040DFBDF] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimServic__Membe__05022018] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimServic__Patie__06EA688A] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimServic__Rollu__1907B3E1] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__FW_DimServiceLine3_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine3] ADD CONSTRAINT [DF__DimServic__SortO__26EC2278] DEFAULT ((0)) FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine4 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine4] ( [ServiceLine4ID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [PatientTypeID] int NOT NULL, [TransactionID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, [Rollup2] nvarchar(100) NOT NULL, PRIMARY KEY ([ServiceLine4ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine4] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__FW_DimServiceLine4_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__Rollu__1CD844C5] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimService__Name__0CA341E0] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__Membe__0D976619] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__Patie__0F7FAE8B] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__SortO__27E046B1] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__Rollu__2BB0D795] DEFAULT ('Not Specified') FOR [Rollup2]; GO ALTER TABLE [fw].[DimServiceLine4] ADD CONSTRAINT [DF__DimServic__Histo__0E8B8A52] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine5 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine5] ( [ServiceLine5ID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [PatientTypeID] int NOT NULL, [TransactionID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ServiceLine5ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine5] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__FW_DimServiceLine5_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimServic__Rollu__20A8D5A9] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimServic__SortO__28D46AEA] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimService__Name__153887E1] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimServic__Membe__162CAC1A] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimServic__Patie__1814F48C] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimServiceLine5] ADD CONSTRAINT [DF__DimServic__Histo__1720D053] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLine6 ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLine6] ( [ServiceLine6ID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [PatientTypeID] int NOT NULL, [TransactionID] int NOT NULL, [Rollup] nvarchar(100) NOT NULL, [SortOrder] int NOT NULL, PRIMARY KEY ([ServiceLine6ID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLine6] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__FW_DimServiceLine6_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimServic__SortO__29C88F23] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimService__Name__1DCDCDE2] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimServic__Membe__1EC1F21B] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimServic__Patie__20AA3A8D] DEFAULT ((0)) FOR [PatientTypeID]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimServic__Rollu__2479668D] DEFAULT ('Not Specified') FOR [Rollup]; GO ALTER TABLE [fw].[DimServiceLine6] ADD CONSTRAINT [DF__DimServic__Histo__1FB61654] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLineRollup ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLineRollup] ( [ServiceLineRollupID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [SortOrder] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ServiceLineRollupID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLineRollup] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Name] ON [fw].[DimServiceLineRollup] ([Name]); GO ALTER TABLE [fw].[DimServiceLineRollup] ADD CONSTRAINT [DF__DimServic__Histo__3EF2F508] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimServiceLineRollup] ADD CONSTRAINT [DF__DimService__Name__3C16885D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLineRollup] ADD CONSTRAINT [DF__DimServic__SortO__3D0AAC96] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimServiceLineRollup] ADD CONSTRAINT [DF__DimServic__Membe__3DFED0CF] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLineRollup] ADD CONSTRAINT [DF__DimServic__Trans__3FE71941] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimServiceLineRollupPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimServiceLineRollupPH] ( [ServiceLineRollupPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([ServiceLineRollupPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimServiceLineRollupPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimServiceLineRollupPH] ADD CONSTRAINT [DF__DimService__Name__4F5F3252] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimServiceLineRollupPH] ADD CONSTRAINT [DF__DimServic__Membe__5053568B] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimServiceLineRollupPH] ADD CONSTRAINT [DF__DimServic__Trans__523B9EFD] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimServiceLineRollupPH] ADD CONSTRAINT [DF__DimServic__Histo__51477AC4] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSourceOfSavings ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSourceOfSavings] ( [SourceOfSavingsID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([SourceOfSavingsID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimSourceOfSavings] ([MemberGUID]); GO ALTER TABLE [fw].[DimSourceOfSavings] ADD CONSTRAINT [DF__DimSourceO__Name__38F52A8D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimSourceOfSavings] ADD CONSTRAINT [DF__DimSource__Membe__39E94EC6] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSourceOfSavings] ADD CONSTRAINT [DF__DimSource__Trans__3BD19738] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSourceOfSavings] ADD CONSTRAINT [DF__DimSource__Histo__3ADD72FF] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimStaffingCategory ------------------ --------------------------------------------- CREATE TABLE [fw].[DimStaffingCategory] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [StaffingCategoryID] int NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [StaffingCategoryCode] nvarchar(100) NOT NULL, [Description] nvarchar(100) NOT NULL, [Name] nvarchar(203) NOT NULL, PRIMARY KEY ([StaffingCategoryID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_StaffingCategoryCode] ON [fw].[DimStaffingCategory] ([StaffingCategoryCode]) INCLUDE ([StaffingCategoryID]); GO ALTER TABLE [fw].[DimStaffingCategory] ADD CONSTRAINT [DF__DimStaffi__Trans__018A8973] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimStaffingCategory] ADD CONSTRAINT [DF__DimStaffi__Membe__027EADAC] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimStaffingCategory] ADD CONSTRAINT [DF__DimStaffi__Staff__0372D1E5] DEFAULT ((0)) FOR [StaffingCategoryCode]; GO ALTER TABLE [fw].[DimStaffingCategory] ADD CONSTRAINT [DF__DimStaffi__Descr__0466F61E] DEFAULT ('Not Specified') FOR [Description]; GO ALTER TABLE [fw].[DimStaffingCategory] ADD CONSTRAINT [DF__DimStaffi__Histo__7FA24101] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimStrataDecisionServiceLine ------------------ --------------------------------------------- CREATE TABLE [fw].[DimStrataDecisionServiceLine] ( [StrataDecisionServiceLineID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [PatientTypeID] int NOT NULL, PRIMARY KEY ([StrataDecisionServiceLineID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimStrataDecisionServiceLine] ([MemberGUID]); GO ALTER TABLE [fw].[DimStrataDecisionServiceLine] ADD CONSTRAINT [DF__DimStrata__Histo__367EA7B9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimStrataDecisionServiceLine] ADD CONSTRAINT [DF__DimStrataD__Name__34965F47] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimStrataDecisionServiceLine] ADD CONSTRAINT [DF__DimStrata__Membe__358A8380] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimStrataDecisionServiceLine] ADD CONSTRAINT [DF__DimStrata__Trans__3772CBF2] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimStrataDecisionServiceLine] ADD CONSTRAINT [DF__DimStrata__Patie__3866F02B] DEFAULT ((0)) FOR [PatientTypeID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimSystem ------------------ --------------------------------------------- CREATE TABLE [fw].[DimSystem] ( [SystemID] smallint NOT NULL, [Name] nvarchar(100) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Code] nvarchar(200) NOT NULL, [Description] nvarchar(100) NOT NULL, [SecureGroupID] int NOT NULL, [SortOrder] int NOT NULL, [EliminationsDepartmentID] int NOT NULL, PRIMARY KEY ([SystemID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimSystem] ([MemberGUID]); GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Histo__2491A282] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Membe__239D7E49] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Trans__2585C6BB] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Code__2679EAF4] DEFAULT ('') FOR [Code]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Descr__276E0F2D] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__SortO__28623366] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimSystem] ADD CONSTRAINT [DF__DimSystem__Elimi__4FA5B5F6] DEFAULT ((0)) FOR [EliminationsDepartmentID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimTime ------------------ --------------------------------------------- CREATE TABLE [fw].[DimTime] ( [TimeID] int NOT NULL, [Name] varchar(5) NOT NULL, [Hour] varchar(2) NOT NULL, [Minute] varchar(2) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [StandardTime] nvarchar(100) NOT NULL, PRIMARY KEY ([TimeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimTime] ([MemberGUID]); GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__DimTime__MemberG__14E518D4] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [MemberGUID]; GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__DimTime__History__15D93D0D] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__DimTime__Standar__1AB09A8F] DEFAULT ('12:00 AM') FOR [StandardTime]; GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__FW_DimTime_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__fw_DimTime_Minute] DEFAULT ('') FOR [Minute]; GO ALTER TABLE [fw].[DimTime] ADD CONSTRAINT [DF__fw_DimTime_Hour] DEFAULT ('') FOR [Hour]; GO --------------------------------------------- --------------------------------------------- -- fw.DimTimeClass ------------------ --------------------------------------------- CREATE TABLE [fw].[DimTimeClass] ( [TimeClassID] tinyint NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [Name] nvarchar(100) NOT NULL, [TimeClassCode] nvarchar(3) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [GlobalID] varchar(64) NOT NULL, [IsSP] bit NOT NULL, [SortOrder] int NOT NULL, [TransactionID] int NOT NULL, [SPIsISForecast] bit NOT NULL, PRIMARY KEY ([TimeClassID]) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_MemberGUID] ON [fw].[DimTimeClass] ([MemberGUID]); CREATE UNIQUE NONCLUSTERED INDEX [IX_TimeClassCode] ON [fw].[DimTimeClass] ([TimeClassCode]); CREATE NONCLUSTERED INDEX [IX_Name] ON [fw].[DimTimeClass] ([Name]); GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF__DimTimeCla__IsSP__08A26ADC] DEFAULT ((0)) FOR [IsSP]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF__FW_DimTimeClass_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF_DimTimeClass_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF__DimTimeCl__Globa__4C832D6A] DEFAULT ('') FOR [GlobalID]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF_FWDIMTIMECLASSNAME] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF__DimTimeCl__SortO__6BD12204] DEFAULT ((0)) FOR [SortOrder]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF__DimTimeCl__SPIsI__70E4B3EE] DEFAULT ((0)) FOR [SPIsISForecast]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF_DimTimeClass_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimTimeClass] ADD CONSTRAINT [DF_DimTimeClass_Code] DEFAULT ('A') FOR [TimeClassCode]; GO --------------------------------------------- --------------------------------------------- -- fw.DimTimeClassPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimTimeClassPH] ( [TimeClassPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([TimeClassPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimTimeClassPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimTimeClassPH] ADD CONSTRAINT [DF__DimTimeCla__Name__148821B3] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimTimeClassPH] ADD CONSTRAINT [DF__FW_DimTimeClassPH_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimTimeClassPH] ADD CONSTRAINT [DF__DimTimeCl__Membe__157C45EC] DEFAULT (newid()) FOR [MemberGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimUnit ------------------ --------------------------------------------- CREATE TABLE [fw].[DimUnit] ( [MemberGUID] uniqueidentifier NOT NULL, [UnitID] smallint NOT NULL, [Name] nvarchar(100) NOT NULL, [Abbreviation] nvarchar(10) NOT NULL, [Version] timestamp NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [SortOrder] nvarchar(5) NOT NULL, [TransactionID] int NOT NULL, [IsActive] bit NOT NULL, PRIMARY KEY ([UnitID]) ); CREATE UNIQUE NONCLUSTERED INDEX [MGUID_Unit_data_DimUnit] ON [fw].[DimUnit] ([MemberGUID]); GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF_data.DimUnit_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF__FW_DimUnit_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF__DimUnit__IsActiv__298B2BD0] DEFAULT ((1)) FOR [IsActive]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF_FWDIMUNITSORTORDER] DEFAULT ('') FOR [SortOrder]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF_DimUnit_MemberGUID] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF_data.DimUnit_Name] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimUnit] ADD CONSTRAINT [DF_data.DimUnit_Abbreviation] DEFAULT ('') FOR [Abbreviation]; GO --------------------------------------------- --------------------------------------------- -- fw.DimUnitType ------------------ --------------------------------------------- CREATE TABLE [fw].[DimUnitType] ( [MemberGUID] uniqueidentifier NOT NULL, [UnitTypeID] tinyint NOT NULL, [Name] nvarchar(200) NOT NULL, [DisplayFormat] nvarchar(50) NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [GlobalID] varchar(32) NOT NULL, [SPDisplayFormat] nvarchar(100) NOT NULL, [CapitalDisplayFormat] nvarchar(100) NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([UnitTypeID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimUnitType] ([MemberGUID]); GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__FW_DimUnitType_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF_DimUnitType_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTy__SPDis__2CAAC128] DEFAULT ('') FOR [SPDisplayFormat]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTy__Capit__2D9EE561] DEFAULT ('') FOR [CapitalDisplayFormat]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTy__Membe__7BBC73E9] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTy__Globa__5AD14CC1] DEFAULT ('') FOR [GlobalID]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTyp__Name__7AC84FB0] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimUnitType] ADD CONSTRAINT [DF__DimUnitTy__Displ__79D42B77] DEFAULT ('') FOR [DisplayFormat]; GO --------------------------------------------- --------------------------------------------- -- fw.DimVariability ------------------ --------------------------------------------- CREATE TABLE [fw].[DimVariability] ( [HistoryItemGUID] uniqueidentifier NOT NULL, [VariabilityID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [TransactionID] int NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([VariabilityID]) ); GO ALTER TABLE [fw].[DimVariability] ADD CONSTRAINT [DF__DimVariab__Membe__00F16219] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimVariability] ADD CONSTRAINT [DF__DimVariab__Histo__7D20D135] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimVariability] ADD CONSTRAINT [DF__DimVariabi__Name__7F0919A7] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimVariability] ADD CONSTRAINT [DF__DimVariab__Trans__7FFD3DE0] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.DimWorkWeek ------------------ --------------------------------------------- CREATE TABLE [fw].[DimWorkWeek] ( [WorkWeekID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [WorkWeekCode] nvarchar(200) NOT NULL, [Type] nvarchar(100) NOT NULL, [SortOrder] nvarchar(100) NOT NULL, [Hours] numeric NOT NULL, PRIMARY KEY ([WorkWeekID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimWorkWeek] ([MemberGUID]); GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWee__Name__0CEF54E5] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWe__Membe__0DE3791E] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWe__Trans__0FCBC190] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWe__WorkW__10BFE5C9] DEFAULT ('') FOR [WorkWeekCode]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWe__Histo__0ED79D57] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWee__Type__6CA280E4] DEFAULT ('All') FOR [Type]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF_dimworkweek_hours] DEFAULT ((40)) FOR [Hours]; GO ALTER TABLE [fw].[DimWorkWeek] ADD CONSTRAINT [DF__DimWorkWe__SortO__7D049C8D] DEFAULT ('') FOR [SortOrder]; GO --------------------------------------------- --------------------------------------------- -- fw.DimWorkWeekPH ------------------ --------------------------------------------- CREATE TABLE [fw].[DimWorkWeekPH] ( [WorkWeekPHID] int NOT NULL, [Name] nvarchar(200) NOT NULL, [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([WorkWeekPHID]) ); CREATE NONCLUSTERED INDEX [NUNC_MemberGUID] ON [fw].[DimWorkWeekPH] ([MemberGUID]); GO ALTER TABLE [fw].[DimWorkWeekPH] ADD CONSTRAINT [DF__DimWorkWee__Name__149076AD] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[DimWorkWeekPH] ADD CONSTRAINT [DF__DimWorkWe__Membe__15849AE6] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[DimWorkWeekPH] ADD CONSTRAINT [DF__DimWorkWe__Trans__176CE358] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[DimWorkWeekPH] ADD CONSTRAINT [DF__DimWorkWe__Histo__1678BF1F] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactChargeBasedStatistics ------------------ --------------------------------------------- CREATE TABLE [fw].[FactChargeBasedStatistics] ( [RowID] int NOT NULL, [DateID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([RowID]) ); CREATE UNIQUE CLUSTERED INDEX [CU_Base] ON [fw].[FactChargeBasedStatistics] ([IsDeleted], [DateID], [DepartmentID], [AccountID], [RowID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Score] ON [fw].[FactChargeBasedStatistics] ([IsDeleted], [DateID], [DepartmentID], [AccountID], [RowID]); GO ALTER TABLE [fw].[FactChargeBasedStatistics] ADD CONSTRAINT [DF__FactCharg__Value__0786EF0A] DEFAULT ((0)) FOR [Value]; GO ALTER TABLE [fw].[FactChargeBasedStatistics] ADD CONSTRAINT [DF__FactCharg__IsDel__087B1343] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactChargeBasedStatistics] ADD CONSTRAINT [DF__FactCharg__Trans__0A635BB5] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactChargeBasedStatistics] ADD CONSTRAINT [DF__FactCharg__Histo__096F377C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactChargeBasedStatisticsDailyKeys ------------------ --------------------------------------------- CREATE TABLE [fw].[FactChargeBasedStatisticsDailyKeys] ( [DepartmentID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [DateID] int NOT NULL, [AccountID] int NOT NULL, PRIMARY KEY ([DateID], [DepartmentID], [AccountID]) ); GO --------------------------------------------- --------------------------------------------- -- fw.FactChargeBasedStatisticsMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactChargeBasedStatisticsMonthly] ( [RowID] int NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [TransactionID] int NOT NULL, [Version] timestamp NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_Value] DEFAULT ((0)) FOR [Value]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactChargeBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactChargeBasedStatisticsByPostDate_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactChargeBasedStatisticsPayPeriodKeys ------------------ --------------------------------------------- CREATE TABLE [fw].[FactChargeBasedStatisticsPayPeriodKeys] ( [DepartmentID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [AccountID] int NOT NULL, PRIMARY KEY ([PayPeriodID], [DepartmentID], [AccountID]) ); GO --------------------------------------------- --------------------------------------------- -- fw.FactClinicaltoGLDepartmentMapping ------------------ --------------------------------------------- CREATE TABLE [fw].[FactClinicaltoGLDepartmentMapping] ( [RowID] int NOT NULL, [ClinicalDepartmentID] int NOT NULL, [DepartmentID] int NOT NULL, [ClinicalDepartmentCode] nvarchar(100) NOT NULL, [GLDepartmentCode] nvarchar(100) NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactClinicaltoGLDepartmentMapping] ADD CONSTRAINT [DF__FactClini__Histo__1572B9A9] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactClinicaltoGLDepartmentMapping] ADD CONSTRAINT [DF__FactClini__Clini__12964CFE] DEFAULT ('') FOR [ClinicalDepartmentCode]; GO ALTER TABLE [fw].[FactClinicaltoGLDepartmentMapping] ADD CONSTRAINT [DF__FactClini__GLDep__138A7137] DEFAULT ('') FOR [GLDepartmentCode]; GO ALTER TABLE [fw].[FactClinicaltoGLDepartmentMapping] ADD CONSTRAINT [DF__FactClini__IsDel__147E9570] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactClinicaltoGLDepartmentMapping] ADD CONSTRAINT [DF__FactClini__Trans__1666DDE2] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactEliminationsAccountMapping ------------------ --------------------------------------------- CREATE TABLE [fw].[FactEliminationsAccountMapping] ( [RowID] int NOT NULL, [RevenueAccountCode] nvarchar(100) NOT NULL, [ExpenseAccountCode] nvarchar(100) NOT NULL, [PlugAccountID] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactEliminationsAccountMapping] ADD CONSTRAINT [DF__FactElimi__Reven__38233220] DEFAULT ('') FOR [RevenueAccountCode]; GO ALTER TABLE [fw].[FactEliminationsAccountMapping] ADD CONSTRAINT [DF__FactElimi__Expen__39175659] DEFAULT ('') FOR [ExpenseAccountCode]; GO ALTER TABLE [fw].[FactEliminationsAccountMapping] ADD CONSTRAINT [DF__FactElimi__PlugA__3A0B7A92] DEFAULT ((0)) FOR [PlugAccountID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactEncounterBasedStatistics ------------------ --------------------------------------------- CREATE TABLE [fw].[FactEncounterBasedStatistics] ( [RowID] bigint NOT NULL, [DateID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, [StatisticID] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactEncounterBasedStatistics] ADD CONSTRAINT [DF_FactEncounterBasedStatistics_DateID] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactEncounterBasedStatistics] ADD CONSTRAINT [DF_FactEncounterBasedStatistics_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactEncounterBasedStatistics] ADD CONSTRAINT [DF_FactEncounterBasedStatistics_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactEncounterBasedStatistics] ADD CONSTRAINT [DF_FactEncounterBasedStatistics_Value] DEFAULT ((0)) FOR [Value]; GO ALTER TABLE [fw].[FactEncounterBasedStatistics] ADD CONSTRAINT [DF_FactEncounterBasedStatistics_StatisticID] DEFAULT ((0)) FOR [StatisticID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactEncounterBasedStatisticsMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactEncounterBasedStatisticsMonthly] ( [RowID] bigint NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, [StatisticID] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_Value] DEFAULT ((0)) FOR [Value]; GO ALTER TABLE [fw].[FactEncounterBasedStatisticsMonthly] ADD CONSTRAINT [DF_FactEncounterBasedStatisticsMonthly_StatisticID] DEFAULT ((0)) FOR [StatisticID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactGLSampled ------------------ --------------------------------------------- CREATE TABLE [fw].[FactGLSampled] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [TimeClassID] tinyint NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Units] decimal NOT NULL, [UnitsYTD] decimal NOT NULL, [UnitsPriorYear] decimal NOT NULL, [UnitsPriorYTD] decimal NOT NULL, [Dollars] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [TransactionID] int NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactGLSampled] ON [fw].[FactGLSampled] ([AccountID], [DepartmentID], [FiscalYearID], [FiscalMonthID], [TimeClassID]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactGLSampled] ([IsDeleted]); GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [FK_FactGLSampled_DimAccount] FOREIGN KEY ([AccountID]) REFERENCES [fw].[DimAccount] ([AccountID]); GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [FK_FactGLSampled_DimFiscalMonth] FOREIGN KEY ([FiscalMonthID]) REFERENCES [fw].[DimFiscalMonth] ([FiscalMonthID]); GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [FK_FactGLSampled_DimFiscalYear] FOREIGN KEY ([FiscalYearID]) REFERENCES [fw].[DimFiscalYear] ([FiscalYearID]); GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [FK_FactGLSampled_DimTimeClass] FOREIGN KEY ([TimeClassID]) REFERENCES [fw].[DimTimeClass] ([TimeClassID]); GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_DollarsPriorYTD] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF__FW_FactGLSampled_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_Units] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_UnitsYTD] DEFAULT ((0)) FOR [UnitsYTD]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_UnitsPriorYear] DEFAULT ((0)) FOR [UnitsPriorYear]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_UnitsPriorYTD] DEFAULT ((0)) FOR [UnitsPriorYTD]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_Dollars] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_DollarsYTD] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactGLSampled] ADD CONSTRAINT [DF_FactGLSampled_DollarsPriorYear] DEFAULT ((0)) FOR [DollarsPriorYear]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPatientBillingLineItemGroupedCache ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPatientBillingLineItemGroupedCache] ( [RowID] bigint NOT NULL, [DepartmentID] int NOT NULL, [ChargeCodeID] int NOT NULL, [PatientTypeRollupID] tinyint NOT NULL, [ServiceDateID] int NOT NULL, [PostDateID] int NOT NULL, [UnitsOfService] float NULL, [FiscalYearID] smallint NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [CORE_PostDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc] ON [fw].[FactPatientBillingLineItemGroupedCache] ([PostDateID], [DepartmentID], [ChargeCodeID], [PatientTypeRollupID]) INCLUDE ([UnitsOfService]); CREATE NONCLUSTERED INDEX [CORE_ServiceDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc] ON [fw].[FactPatientBillingLineItemGroupedCache] ([ServiceDateID], [DepartmentID], [ChargeCodeID], [PatientTypeRollupID]) INCLUDE ([UnitsOfService]); GO ALTER TABLE [fw].[FactPatientBillingLineItemGroupedCache] ADD CONSTRAINT [DF__FactPatie__Fisca__6D4E869C] DEFAULT ((0)) FOR [FiscalYearID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledDaily ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledDaily] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [JobCodeID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [DateID] int NOT NULL, [Hours] decimal NOT NULL, [Dollars] decimal NOT NULL, [FTEs] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [IsFlexed] bit NOT NULL, [PayCodeGroupID] int NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledDaily] ON [fw].[FactPayrollSampledDaily] ([DepartmentID], [JobCodeID], [PayCodeGroupID], [PayPeriodID], [DateID], [TimeClassID]) INCLUDE ([Dollars], [FTEs], [Hours]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledDaily] ([IsDeleted]); GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_JobCodeID] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_DateID] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_Hours] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_Dollars] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_FTEs] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_IsFlexed] DEFAULT ((0)) FOR [IsFlexed]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_PayCodeGroupID] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledDaily] ADD CONSTRAINT [DF_FactPayrollSampledDaily_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledDailyDetailed ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledDailyDetailed] ( [RowID] bigint NOT NULL, [DepartmentID] int NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] smallint NOT NULL, [PayCodeGroupID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [DateID] int NOT NULL, [TimeClassID] tinyint NOT NULL, [Dollars] decimal NOT NULL, [FTEs] decimal NOT NULL, [Hours] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [EmployeeID] int NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledDailyDetailed] ([IsDeleted]); CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledDailyDetailed] ON [fw].[FactPayrollSampledDailyDetailed] ([DepartmentID], [JobCodeID], [PayCodeID], [PayCodeGroupID], [EmployeeID], [DateID], [TimeClassID]); GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Depar__052B3BFA] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__JobCo__061F6033] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__PayCo__0713846C] DEFAULT ((0)) FOR [PayCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__PayCo__0807A8A5] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__PayPe__08FBCCDE] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__DateI__09EFF117] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__TimeC__0AE41550] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__0BD83989] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayrol__FTEs__0CCC5DC2] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__0DC081FB] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__IsDel__0EB4A634] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Trans__109CEEA6] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Emplo__119112DF] DEFAULT ((0)) FOR [EmployeeID]; GO ALTER TABLE [fw].[FactPayrollSampledDailyDetailed] ADD CONSTRAINT [DF__FactPayro__Histo__0FA8CA6D] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledMonthly] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] smallint NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [TimeClassID] tinyint NOT NULL, [Hours] decimal NOT NULL, [HoursYTD] decimal NOT NULL, [HoursPriorYear] decimal NOT NULL, [HoursPriorYTD] decimal NOT NULL, [Dollars] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [FTEs] decimal NOT NULL, [FTEsYTD] decimal NOT NULL, [FTEsPriorYear] decimal NOT NULL, [FTEsPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [PayCodeGroupID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactPayrollSampledMonthly] ON [fw].[FactPayrollSampledMonthly] ([DepartmentID], [JobCodeID], [PayCodeID], [FiscalYearID], [FiscalMonthID], [TimeClassID]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledMonthly] ([IsDeleted]); GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF__FW_FactPayrollSampledMonthly_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FTEs] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FTEsYTD] DEFAULT ((0)) FOR [FTEsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FTEsPriorYear] DEFAULT ((0)) FOR [FTEsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FTEsPriorYTD] DEFAULT ((0)) FOR [FTEsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF__FactPayrollSampledMonthly__IsDel__772804EC] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_Hours] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_HoursYTD] DEFAULT ((0)) FOR [HoursYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_HoursPriorYear] DEFAULT ((0)) FOR [HoursPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_HoursPriorYTD] DEFAULT ((0)) FOR [HoursPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_Dollars] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_DollarsYTD] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_DollarsPriorYear] DEFAULT ((0)) FOR [DollarsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_DollarsPriorYTD] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF__FactPayro__PayCo__23AF9150] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF__FactPayrollSampledMonthly__Histo__781C2925] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_JobCodeID] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_PayCodeID] DEFAULT ((0)) FOR [PayCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthly] ADD CONSTRAINT [DF_FactPayrollSampledMonthly_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledMonthlyDetailed ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledMonthlyDetailed] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [FiscalMonthID] tinyint NOT NULL, [FiscalYearID] smallint NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] smallint NOT NULL, [PayCodeGroupID] int NOT NULL, [EmployeeID] int NOT NULL, [TimeClassID] tinyint NOT NULL, [Dollars] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [Hours] decimal NOT NULL, [HoursYTD] decimal NOT NULL, [HoursPriorYear] decimal NOT NULL, [HoursPriorYTD] decimal NOT NULL, [FTEs] decimal NOT NULL, [FTEsYTD] decimal NOT NULL, [FTEsPriorYear] decimal NOT NULL, [FTEsPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE UNIQUE CLUSTERED INDEX [CU_Base] ON [fw].[FactPayrollSampledMonthlyDetailed] ([IsDeleted], [DepartmentID], [TimeClassID], [FiscalYearID], [FiscalMonthID], [JobCodeID], [PayCodeGroupID], [PayCodeID], [EmployeeID], [RowID]); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Score] ON [fw].[FactPayrollSampledMonthlyDetailed] ([IsDeleted], [DepartmentID], [TimeClassID], [FiscalYearID], [FiscalMonthID], [JobCodeID], [PayCodeGroupID], [PayCodeID], [EmployeeID], [RowID]); GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsP__00072DB7] DEFAULT ((0)) FOR [FTEsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsP__00FB51F0] DEFAULT ((0)) FOR [FTEsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__IsDel__01EF7629] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Trans__03D7BE9B] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Histo__02E39A62] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Fisca__74957B0B] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Fisca__75899F44] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__767DC37D] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__7771E7B6] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__78660BEF] DEFAULT ((0)) FOR [DollarsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__795A3028] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__7A4E5461] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_JobCodeID] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__7B42789A] DEFAULT ((0)) FOR [HoursYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_PayCodeID] DEFAULT ((0)) FOR [PayCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__7C369CD3] DEFAULT ((0)) FOR [HoursPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_PayCodeGroupID] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__7D2AC10C] DEFAULT ((0)) FOR [HoursPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_EmployeeID] DEFAULT ((0)) FOR [EmployeeID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayrol__FTEs__7E1EE545] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF_FactPayrollSampledMonthlyDetailed_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactPayrollSampledMonthlyDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsY__7F13097E] DEFAULT ((0)) FOR [FTEsYTD]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledPayPeriod ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledPayPeriod] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [JobCodeID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [Hours] decimal NOT NULL, [HoursYTD] decimal NOT NULL, [HoursPriorYear] decimal NOT NULL, [HoursPriorYTD] decimal NOT NULL, [Dollars] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [FTEs] decimal NOT NULL, [FTEsYTD] decimal NOT NULL, [FTEsPriorYear] decimal NOT NULL, [FTEsPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [IsFlexed] bit NOT NULL, [PayCodeGroupID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledPayPeriod] ON [fw].[FactPayrollSampledPayPeriod] ([DepartmentID], [JobCodeID], [PayCodeGroupID], [PayPeriodID], [TimeClassID]) INCLUDE ([Dollars], [DollarsPriorYear], [DollarsPriorYTD], [DollarsYTD], [FTEs], [FTEsPriorYear], [FTEsPriorYTD], [FTEsYTD], [Hours], [HoursPriorYear], [HoursPriorYTD], [HoursYTD]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledPayPeriod] ([IsDeleted]); GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF__FW_FactPayrollSampledPayPeriod_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_JobCodeID] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF__FactPayro__IsFle__1508738B] DEFAULT ((0)) FOR [IsFlexed]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_FTEs] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_FTEsYTD] DEFAULT ((0)) FOR [FTEsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_FTEsPriorYear] DEFAULT ((0)) FOR [FTEsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_FTEsPriorYTD] DEFAULT ((0)) FOR [FTEsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF__FactPayroPP__IsDel__772804EC] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_Dollars] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_DollarsYTD] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_DollarsPriorYear] DEFAULT ((0)) FOR [DollarsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_DollarsPriorYTD] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_Hours] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_HoursYTD] DEFAULT ((0)) FOR [HoursYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_HoursPriorYear] DEFAULT ((0)) FOR [HoursPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_HoursPriorYTD] DEFAULT ((0)) FOR [HoursPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF__FactPayro__PayCo__3875A40C] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriod_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriod] ADD CONSTRAINT [DF__FactPayroPP__Histo__781C2925] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactPayrollSampledPayPeriodDetailed ------------------ --------------------------------------------- CREATE TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [JobCodeID] int NOT NULL, [PayCodeID] smallint NOT NULL, [PayCodeGroupID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [Dollars] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [FTEs] decimal NOT NULL, [FTEsPriorYear] decimal NOT NULL, [FTEsPriorYTD] decimal NOT NULL, [FTEsYTD] decimal NOT NULL, [Hours] decimal NOT NULL, [HoursPriorYear] decimal NOT NULL, [HoursPriorYTD] decimal NOT NULL, [HoursYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [EmployeeID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [NCNU_BASE] ON [fw].[FactPayrollSampledPayPeriodDetailed] ([PayPeriodID]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledPayPeriodDetailed] ([IsDeleted]); CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledPayPeriodDetailed] ON [fw].[FactPayrollSampledPayPeriodDetailed] ([DepartmentID], [JobCodeID], [PayCodeID], [PayCodeGroupID], [EmployeeID], [PayPeriodID], [TimeClassID]) INCLUDE ([Hours]); GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__3E2E7D62] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayrol__FTEs__3F22A19B] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsP__4016C5D4] DEFAULT ((0)) FOR [FTEsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsP__410AEA0D] DEFAULT ((0)) FOR [FTEsPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__FTEsY__41FF0E46] DEFAULT ((0)) FOR [FTEsYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__42F3327F] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__43E756B8] DEFAULT ((0)) FOR [HoursPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__44DB7AF1] DEFAULT ((0)) FOR [HoursPriorYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Hours__45CF9F2A] DEFAULT ((0)) FOR [HoursYTD]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__IsDel__46C3C363] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Trans__48AC0BD5] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Histo__47B7E79C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Emplo__5ACABC10] DEFAULT ((0)) FOR [EmployeeID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_JobCodeID] DEFAULT ((0)) FOR [JobCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_PayCodeID] DEFAULT ((0)) FOR [PayCodeID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_PayCodeGroupID] DEFAULT ((0)) FOR [PayCodeGroupID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF_FactPayrollSampledPayPeriodDetailed_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__3B5210B7] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__3C4634F0] DEFAULT ((0)) FOR [DollarsPriorYear]; GO ALTER TABLE [fw].[FactPayrollSampledPayPeriodDetailed] ADD CONSTRAINT [DF__FactPayro__Dolla__3D3A5929] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO --------------------------------------------- --------------------------------------------- -- fw.FactProviderSampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactProviderSampledMonthly] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [ProviderID] int NOT NULL, [FiscalMonthID] tinyint NOT NULL, [FiscalYearID] smallint NOT NULL, [OBForecastDetailID] int NOT NULL, [TimeClassID] tinyint NOT NULL, [Amount] decimal NOT NULL, [AmountYTD] decimal NOT NULL, [AmountPriorYear] decimal NOT NULL, [AmountPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactProviderSampledMonthly] ON [fw].[FactProviderSampledMonthly] ([DepartmentID], [ProviderID], [OBForecastDetailID], [FiscalMonthID], [FiscalYearID], [TimeClassID]); GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_ProviderID] DEFAULT ((0)) FOR [ProviderID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_OBForecastDetailID] DEFAULT ((0)) FOR [OBForecastDetailID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Amount] DEFAULT ((0)) FOR [Amount]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_AmountYTD] DEFAULT ((0)) FOR [AmountYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_AmountPriorYear] DEFAULT ((0)) FOR [AmountPriorYear]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_AmountPriorYTD] DEFAULT ((0)) FOR [AmountPriorYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactProviderSampledMonthly] ADD CONSTRAINT [DF_FactProviderSampledMonthly_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactProviderSampledMonthly_Pivoted ------------------ --------------------------------------------- CREATE TABLE [fw].[FactProviderSampledMonthly_Pivoted] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [ProviderID] int NOT NULL, [FiscalMonthID] tinyint NOT NULL, [FiscalYearID] smallint NOT NULL, [OBForecastDetailID] int NOT NULL, [TimeClassID] tinyint NOT NULL, [Volume] decimal NOT NULL, [VolumeYTD] decimal NOT NULL, [VolumePriorYear] decimal NOT NULL, [VolumePriorYTD] decimal NOT NULL, [Dollars] decimal NOT NULL, [DollarsYTD] decimal NOT NULL, [DollarsPriorYear] decimal NOT NULL, [DollarsPriorYTD] decimal NOT NULL, [Hours] decimal NOT NULL, [HoursYTD] decimal NOT NULL, [HoursPriorYear] decimal NOT NULL, [HoursPriorYTD] decimal NOT NULL, [FTEs] decimal NOT NULL, [FTEsYTD] decimal NOT NULL, [FTEsPriorYear] decimal NOT NULL, [FTEsPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactProviderSampledMonthly_Pivoted] ON [fw].[FactProviderSampledMonthly_Pivoted] ([DepartmentID], [ProviderID], [OBForecastDetailID], [FiscalMonthID], [FiscalYearID], [TimeClassID]); GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_ProviderID] DEFAULT ((0)) FOR [ProviderID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_OBForecastDetailID] DEFAULT ((0)) FOR [OBForecastDetailID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_Volume] DEFAULT ((0)) FOR [Volume]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_VolumeYTD] DEFAULT ((0)) FOR [VolumeYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_VolumePriorYear] DEFAULT ((0)) FOR [VolumePriorYear]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_VolumePriorYTD] DEFAULT ((0)) FOR [VolumePriorYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_Dollars] DEFAULT ((0)) FOR [Dollars]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_DollarsYTD] DEFAULT ((0)) FOR [DollarsYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_DollarsPriorYear] DEFAULT ((0)) FOR [DollarsPriorYear]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_DollarsPriorYTD] DEFAULT ((0)) FOR [DollarsPriorYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_Hours] DEFAULT ((0)) FOR [Hours]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_HoursYTD] DEFAULT ((0)) FOR [HoursYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_HoursPriorYear] DEFAULT ((0)) FOR [HoursPriorYear]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_HoursPriorYTD] DEFAULT ((0)) FOR [HoursPriorYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FTEs] DEFAULT ((0)) FOR [FTEs]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FTEsYTD] DEFAULT ((0)) FOR [FTEsYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FTEsPriorYear] DEFAULT ((0)) FOR [FTEsPriorYear]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_FTEsPriorYTD] DEFAULT ((0)) FOR [FTEsPriorYTD]; GO ALTER TABLE [fw].[FactProviderSampledMonthly_Pivoted] ADD CONSTRAINT [DF_FactProviderSampledMonthly_Pivoted_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO --------------------------------------------- --------------------------------------------- -- fw.FactReportException ------------------ --------------------------------------------- CREATE TABLE [fw].[FactReportException] ( [RowID] int NOT NULL, [ReportName] nvarchar(100) NOT NULL, [ExceptionCount] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactReportException] ADD CONSTRAINT [DF_FactReportException_ReportName] DEFAULT ('') FOR [ReportName]; GO ALTER TABLE [fw].[FactReportException] ADD CONSTRAINT [DF_FactReportException_ExceptionCount] DEFAULT ((0)) FOR [ExceptionCount]; GO --------------------------------------------- --------------------------------------------- -- fw.FactRoleAssignmentImport ------------------ --------------------------------------------- CREATE TABLE [fw].[FactRoleAssignmentImport] ( [RowID] int NOT NULL, [PlanName] nvarchar(100) NOT NULL, [RoleName] nvarchar(100) NOT NULL, [UserNameCSV] nvarchar(max) NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactRoleAssignmentImport] ADD CONSTRAINT [DF_RoleAssignmentImport_PlanName] DEFAULT ('') FOR [PlanName]; GO ALTER TABLE [fw].[FactRoleAssignmentImport] ADD CONSTRAINT [DF_RoleAssignmentImport_RoleName] DEFAULT ('') FOR [RoleName]; GO ALTER TABLE [fw].[FactRoleAssignmentImport] ADD CONSTRAINT [DF_RoleAssignmentImport_UserNameCSV] DEFAULT ('') FOR [UserNameCSV]; GO ALTER TABLE [fw].[FactRoleAssignmentImport] ADD CONSTRAINT [DF_RoleAssignmentImport_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactRoleAssignmentImport] ADD CONSTRAINT [DF_RoleAssignmentImport_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStagedDSModelingServiceLineRevenue ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ( [RowID] int NOT NULL, [EntityID] int NOT NULL, [FiscalYearID] int NOT NULL, [FiscalMonthID] int NOT NULL, [TimeClassID] int NOT NULL, [PayorID] int NOT NULL, [PayorGroupID] int NOT NULL, [SPAccountRollupID] int NOT NULL, [OBForecastDetailID] int NOT NULL, [UnitTypeID] int NOT NULL, [Amount] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [ServiceLineID] int NOT NULL, [AgeCohortID] int NOT NULL, [PatientClassID] int NOT NULL, [MedicalSurgicalID] int NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Servi__0B0ECC0F] DEFAULT ((0)) FOR [ServiceLineID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__AgeCo__0C02F048] DEFAULT ((0)) FOR [AgeCohortID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Patie__0CF71481] DEFAULT ((0)) FOR [PatientClassID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Medic__0DEB38BA] DEFAULT ((0)) FOR [MedicalSurgicalID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Entit__49AB1D06] DEFAULT ((0)) FOR [EntityID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Fisca__4B936578] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Fisca__4C8789B1] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__TimeC__4D7BADEA] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Payor__4E6FD223] DEFAULT ((0)) FOR [PayorID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Payor__4F63F65C] DEFAULT ((0)) FOR [PayorGroupID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__SPAcc__50581A95] DEFAULT ((0)) FOR [SPAccountRollupID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__OBFor__514C3ECE] DEFAULT ((0)) FOR [OBForecastDetailID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__UnitT__52406307] DEFAULT ((0)) FOR [UnitTypeID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__IsDel__53348740] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Histo__5428AB79] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStagedDSModelingServiceLineRevenue] ADD CONSTRAINT [DF__FactStage__Trans__551CCFB2] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticDriverDepartmentSampledDaily ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ( [RowID] bigint NOT NULL, [DepartmentID] int NOT NULL, [DriverDepartmentID] int NOT NULL, [AccountID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [DateID] int NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Units] decimal NOT NULL, [TransactionID] int NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [CORE_DepartmentID_AccountID_inc] ON [fw].[FactStatisticDriverDepartmentSampledDaily] ([DepartmentID], [AccountID]) INCLUDE ([IsDeleted]); CREATE NONCLUSTERED INDEX [CORE_DepartmentID_AccountID_IsDeleted_inc] ON [fw].[FactStatisticDriverDepartmentSampledDaily] ([DepartmentID], [AccountID], [IsDeleted]) INCLUDE ([PayPeriodID], [TimeClassID], [DateID], [Units]); GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_DateID] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_DriverDepartmentID] DEFAULT ((0)) FOR [DriverDepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_Units] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledDaily] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledDaily_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticDriverDepartmentSampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [DriverDepartmentID] int NOT NULL, [AccountID] int NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [TimeClassID] tinyint NOT NULL, [Amount] decimal NOT NULL, [AmountYTD] decimal NOT NULL, [AmountPriorYear] decimal NOT NULL, [AmountPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_DriverDepartmentID] DEFAULT ((0)) FOR [DriverDepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_StatisticID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledMonthly_Amount] DEFAULT ((0)) FOR [Amount]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledMonthly_AmountYTD] DEFAULT ((0)) FOR [AmountYTD]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledMonthly_AmountPriorYear] DEFAULT ((0)) FOR [AmountPriorYear]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledMonthly_AmountPriorYTD] DEFAULT ((0)) FOR [AmountPriorYTD]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampled_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledMonthly] ADD CONSTRAINT [DF__FW_FactStatisticDriverDepartmentSampledMonthly_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticDriverDepartmentSampledPayPeriod ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [DriverDepartmentID] int NOT NULL, [AccountID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Units] decimal NOT NULL, [UnitsYTD] decimal NOT NULL, [UnitsPriorYear] decimal NOT NULL, [UnitsPriorYTD] decimal NOT NULL, [TransactionID] int NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDeptSampledPP_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDeptSampledPP_DriverDepartmentID] DEFAULT ((0)) FOR [DriverDepartmentID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDeptSampledPP_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDeptSampledPP_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDeptSampledPP_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_Units] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_UnitsYTD] DEFAULT ((0)) FOR [UnitsYTD]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_UnitsPriorYear] DEFAULT ((0)) FOR [UnitsPriorYear]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticDriverDepartmentSampledPayPeriod_UnitsPriorYTD] DEFAULT ((0)) FOR [UnitsPriorYTD]; GO ALTER TABLE [fw].[FactStatisticDriverDepartmentSampledPayPeriod] ADD CONSTRAINT [DF__FW_FactStatisticDriverDepartmentSampledPayPeriod_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticPrimarySampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticPrimarySampledMonthly] ( [RowID] int NOT NULL, [AccountID] int NOT NULL, [DepartmentID] int NOT NULL, [FiscalMonthID] tinyint NOT NULL, [FiscalYearID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [Amount] decimal NOT NULL, [AmountPriorYear] decimal NOT NULL, [AmountPriorYTD] decimal NOT NULL, [AmountYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Score] ON [fw].[FactStatisticPrimarySampledMonthly] ([AccountID], [DepartmentID], [FiscalMonthID], [FiscalYearID], [TimeClassID], [IsDeleted]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactStatisticPrimarySampledMonthly] ([IsDeleted]); GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticPrimarySampledMonthly_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticPrimarySampledMonthly_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticPrimarySampledMonthly_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Histo__7B1462B5] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Fisca__74676526] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Fisca__755B895F] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__764FAD98] DEFAULT ((0)) FOR [Amount]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__7743D1D1] DEFAULT ((0)) FOR [AmountPriorYear]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__7837F60A] DEFAULT ((0)) FOR [AmountPriorYTD]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__792C1A43] DEFAULT ((0)) FOR [AmountYTD]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__IsDel__7A203E7C] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Trans__7C0886EE] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactStatisticPrimarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticPrimarySampledMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticSampledDaily ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticSampledDaily] ( [RowID] bigint NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [DateID] int NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Units] decimal NOT NULL, [TransactionID] int NULL, [BigRowID] bigint NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactStatisticSampledDaily] ON [fw].[FactStatisticSampledDaily] ([AccountID], [DepartmentID], [PayPeriodID], [DateID], [TimeClassID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [FK_FactStatisticSampledDaily_DimAccount] FOREIGN KEY ([AccountID]) REFERENCES [fw].[DimAccount] ([AccountID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [FK_FactStatisticSampledDaily_DimDate] FOREIGN KEY ([DateID]) REFERENCES [fw].[DimDate] ([DateID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [FK_FactStatisticSampledDaily_DimDepartment] FOREIGN KEY ([DepartmentID]) REFERENCES [fw].[DimDepartment] ([DepartmentID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [FK_FactStatisticSampledDaily_DimPayPeriod] FOREIGN KEY ([PayPeriodID]) REFERENCES [fw].[DimPayPeriod] ([PayPeriodID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [FK_FactStatisticSampledDaily_DimTimeClass] FOREIGN KEY ([TimeClassID]) REFERENCES [fw].[DimTimeClass] ([TimeClassID]); GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_DateID] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_Units] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactStatisticSampledDaily] ADD CONSTRAINT [DF_FactStatisticSampledDaily_TransactionID] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticSampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticSampledMonthly] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [TimeClassID] tinyint NOT NULL, [Amount] decimal NOT NULL, [AmountYTD] decimal NOT NULL, [AmountPriorYear] decimal NOT NULL, [AmountPriorYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactStatisticSampledMonthly] ON [fw].[FactStatisticSampledMonthly] ([AccountID], [DepartmentID], [FiscalYearID], [FiscalMonthID], [TimeClassID]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactStatisticSampledMonthly] ([IsDeleted]); GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF__FW_FactStatisticSampledMonthly_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampledMonthly_Amount] DEFAULT ((0)) FOR [Amount]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampledMonthly_AmountYTD] DEFAULT ((0)) FOR [AmountYTD]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampledMonthly_AmountPriorYear] DEFAULT ((0)) FOR [AmountPriorYear]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampledMonthly_AmountPriorYTD] DEFAULT ((0)) FOR [AmountPriorYTD]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampledMonthly_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_StatisticID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticSampledMonthly] ADD CONSTRAINT [DF_FactStatisticSampled_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticSampledPayPeriod ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticSampledPayPeriod] ( [RowID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [Units] decimal NOT NULL, [UnitsYTD] decimal NOT NULL, [UnitsPriorYear] decimal NOT NULL, [UnitsPriorYTD] decimal NOT NULL, [TransactionID] int NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE CLUSTERED INDEX [IX_FactStatisticSampledPayPeriod] ON [fw].[FactStatisticSampledPayPeriod] ([AccountID], [DepartmentID], [PayPeriodID], [TimeClassID]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactStatisticSampledPayPeriod] ([IsDeleted]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [FK_FactStatisticSampledPayPeriod_DimAccount] FOREIGN KEY ([AccountID]) REFERENCES [fw].[DimAccount] ([AccountID]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [FK_FactStatisticSampledPayPeriod_FactStatisticSampledPayPeriod] FOREIGN KEY ([RowID]) REFERENCES [fw].[FactStatisticSampledPayPeriod] ([RowID]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [FK_FactStatisticSampledPP_DimPayPeriod] FOREIGN KEY ([PayPeriodID]) REFERENCES [fw].[DimPayPeriod] ([PayPeriodID]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [FK_FactStatisticSampledPP_DimTimeClass] FOREIGN KEY ([TimeClassID]) REFERENCES [fw].[DimTimeClass] ([TimeClassID]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [FK_FactStatisticSampledPP_FactStatisticSampled] FOREIGN KEY ([DepartmentID]) REFERENCES [fw].[DimDepartment] ([DepartmentID]); GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF__FW_FactStatisticSampledPayPeriod_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_Units] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_UnitsYTD] DEFAULT ((0)) FOR [UnitsYTD]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPP_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_UnitsPriorYear] DEFAULT ((0)) FOR [UnitsPriorYear]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPP_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_UnitsPriorYTD] DEFAULT ((0)) FOR [UnitsPriorYTD]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPP_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPayPeriod_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPP_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticSampledPayPeriod] ADD CONSTRAINT [DF_FactStatisticSampledPP_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticSecondarySampledMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticSecondarySampledMonthly] ( [RowID] int NOT NULL, [AccountID] int NOT NULL, [DepartmentID] int NOT NULL, [FiscalMonthID] tinyint NOT NULL, [FiscalYearID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [Amount] decimal NOT NULL, [AmountPriorYear] decimal NOT NULL, [AmountPriorYTD] decimal NOT NULL, [AmountYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE UNIQUE NONCLUSTERED INDEX [NCU_Score] ON [fw].[FactStatisticSecondarySampledMonthly] ([AccountID], [DepartmentID], [FiscalMonthID], [FiscalYearID], [TimeClassID], [IsDeleted]); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactStatisticSecondarySampledMonthly] ([IsDeleted]); GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Fisca__02B5847D] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticSecondarySampledMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Fisca__03A9A8B6] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticSecondarySampledMonthly_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__049DCCEF] DEFAULT ((0)) FOR [Amount]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticSecondarySampledMonthly_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__0591F128] DEFAULT ((0)) FOR [AmountPriorYear]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__06861561] DEFAULT ((0)) FOR [AmountPriorYTD]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Amoun__077A399A] DEFAULT ((0)) FOR [AmountYTD]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__IsDel__086E5DD3] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Trans__0A56A645] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF_FactStatisticSecondarySampledMonthly_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledMonthly] ADD CONSTRAINT [DF__FactStati__Histo__0962820C] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactStatisticSecondarySampledbyPayPeriod ------------------ --------------------------------------------- CREATE TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ( [RowID] int NOT NULL, [AccountID] int NOT NULL, [DepartmentID] int NOT NULL, [PayPeriodID] smallint NOT NULL, [TimeClassID] tinyint NOT NULL, [Units] decimal NOT NULL, [UnitsPriorYear] decimal NOT NULL, [UnitsPriorYTD] decimal NOT NULL, [UnitsYTD] decimal NOT NULL, [IsDeleted] bit NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [TransactionID] int NOT NULL, [IsSystemGenerated] bit NOT NULL, PRIMARY KEY ([RowID]) ); CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactStatisticSecondarySampledbyPayPeriod] ([IsDeleted]); GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF_FactStatisticSecondarySampledbyPayPeriod_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF_FactStatisticSecondarySampledbyPayPeriod_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF_FactStatisticSecondarySampledbyPayPeriod_TimeClassID] DEFAULT ((0)) FOR [TimeClassID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF_FactStatisticSecondarySampledbyPayPeriod_PayPeriodID] DEFAULT ((0)) FOR [PayPeriodID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF_FactStatisticSecondarySampledbyPayPeriod_IsSystemGenerated] DEFAULT ((0)) FOR [IsSystemGenerated]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Units__541DBE81] DEFAULT ((0)) FOR [Units]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Units__5511E2BA] DEFAULT ((0)) FOR [UnitsPriorYear]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Units__560606F3] DEFAULT ((0)) FOR [UnitsPriorYTD]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Units__56FA2B2C] DEFAULT ((0)) FOR [UnitsYTD]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Histo__58E2739E] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__IsDel__57EE4F65] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactStatisticSecondarySampledbyPayPeriod] ADD CONSTRAINT [DF__FactStati__Trans__59D697D7] DEFAULT ((0)) FOR [TransactionID]; GO --------------------------------------------- --------------------------------------------- -- fw.FactSystemGeneratedStatistics ------------------ --------------------------------------------- CREATE TABLE [fw].[FactSystemGeneratedStatistics] ( [RowID] bigint NOT NULL, [DateID] int NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactSystemGeneratedStatistics] ADD CONSTRAINT [DF_FactSystemGeneratedStatistics_DateID] DEFAULT ((0)) FOR [DateID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatistics] ADD CONSTRAINT [DF_FactSystemGeneratedStatistics_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatistics] ADD CONSTRAINT [DF_FactSystemGeneratedStatistics_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatistics] ADD CONSTRAINT [DF_FactSystemGeneratedStatistics_Value] DEFAULT ((0)) FOR [Value]; GO --------------------------------------------- --------------------------------------------- -- fw.FactSystemGeneratedStatisticsMonthly ------------------ --------------------------------------------- CREATE TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ( [RowID] bigint NOT NULL, [FiscalYearID] smallint NOT NULL, [FiscalMonthID] tinyint NOT NULL, [DepartmentID] int NOT NULL, [AccountID] int NOT NULL, [Value] decimal NOT NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ADD CONSTRAINT [DF_FactSystemGeneratedStatisticsMonthly_FiscalYearID] DEFAULT ((0)) FOR [FiscalYearID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ADD CONSTRAINT [DF_FactSystemGeneratedStatisticsMonthly_FiscalMonthID] DEFAULT ((0)) FOR [FiscalMonthID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ADD CONSTRAINT [DF_FactSystemGeneratedStatisticsMonthly_DepartmentID] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ADD CONSTRAINT [DF_FactSystemGeneratedStatisticsMonthly_AccountID] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[FactSystemGeneratedStatisticsMonthly] ADD CONSTRAINT [DF_FactSystemGeneratedStatisticsMonthly_Value] DEFAULT ((0)) FOR [Value]; GO --------------------------------------------- --------------------------------------------- -- fw.FactUserDeptXWalk ------------------ --------------------------------------------- CREATE TABLE [fw].[FactUserDeptXWalk] ( [MemberGUID] uniqueidentifier NOT NULL, [DepartmentID] int NOT NULL, [Value] int NOT NULL, [RowID] int NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, [Version] timestamp NOT NULL, [IsDeleted] bit NOT NULL, [UserGUID] uniqueidentifier NOT NULL, [TransactionID] int NULL, PRIMARY KEY ([RowID]) ); GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF__FW_FactUserDeptXWalk_MemberGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [MemberGUID]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF__FW_FactUserDeptXWalk_Department] DEFAULT ((0)) FOR [DepartmentID]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF_FW_FactUserDeptXWalk_Value] DEFAULT ((1)) FOR [Value]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF_FW_FactUserDeptXWalk_HistoryItemGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF_FW_FactUserDeptXWalk_IsDeleted] DEFAULT ((0)) FOR [IsDeleted]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF__FW_FactUserDeptXWalk_TransactionID ] DEFAULT ((0)) FOR [TransactionID]; GO ALTER TABLE [fw].[FactUserDeptXWalk] ADD CONSTRAINT [DF_FW_FactUserDeptXWalk_UserGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [UserGUID]; GO --------------------------------------------- --------------------------------------------- -- fw.MRPRMetricMapping ------------------ --------------------------------------------- CREATE TABLE [fw].[MRPRMetricMapping] ( [MappingID] int NOT NULL, [PRMetricID] int NOT NULL, [MRMetricGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([MappingID]) ); CREATE UNIQUE NONCLUSTERED INDEX [UK_MRPRMetricMapping] ON [fw].[MRPRMetricMapping] ([PRMetricID], [MRMetricGUID]); GO ALTER TABLE [fw].[MRPRMetricMapping] ADD CONSTRAINT [FK_MRPRMetricMapping_MetricGUID] FOREIGN KEY ([MRMetricGUID]) REFERENCES [dbo].[CMMetric] ([MetricGUID]); GO ALTER TABLE [fw].[MRPRMetricMapping] ADD CONSTRAINT [FK_MRPRMetricMapping_PRMetricID] FOREIGN KEY ([PRMetricID]) REFERENCES [pi].[DimMetric] ([MetricID]); GO --------------------------------------------- --------------------------------------------- -- fw.MrPrFeaturedMetric ------------------ --------------------------------------------- CREATE TABLE [fw].[MrPrFeaturedMetric] ( [MrPrFeaturedMetricId] int NOT NULL, [IsPr] bit NOT NULL, [DisplayOrder] int NOT NULL, [MetricGUID] uniqueidentifier NOT NULL, [RollupLevelID] tinyint NOT NULL, PRIMARY KEY ([MrPrFeaturedMetricId]) ); GO ALTER TABLE [fw].[MrPrFeaturedMetric] ADD CONSTRAINT [DF__MrPrFeatu__Rollu__2001F360] DEFAULT ((1)) FOR [RollupLevelID]; GO --------------------------------------------- --------------------------------------------- -- fw.PrimaryStatisticsRollupsConfiguration ------------------ --------------------------------------------- CREATE TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ( [MemberGUID] uniqueidentifier NOT NULL, [RollupLevel] varchar(250) NOT NULL, [RollupMemberID] int NOT NULL, [AccountID] int NOT NULL, [Revenue] bit NOT NULL, [Staffing] bit NOT NULL, [NonStaffing] bit NOT NULL, PRIMARY KEY ([MemberGUID]) ); CREATE UNIQUE NONCLUSTERED INDEX [AK_PrimaryStatisticsRollupsConfiguration] ON [fw].[PrimaryStatisticsRollupsConfiguration] ([RollupLevel], [RollupMemberID], [AccountID]); GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [FK_PrimaryStatisticsRollupsConfiguration_Account] FOREIGN KEY ([AccountID]) REFERENCES [fw].[DimAccount] ([AccountID]); GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [CK_PrimaryStatisticsRollupsConfiguration_RollupLevel] CHECK ([RollupLevel]='DepartmentRollup6' OR [RollupLevel]='DepartmentRollup5' OR [RollupLevel]='DepartmentRollup4' OR [RollupLevel]='DepartmentRollup3' OR [RollupLevel]='DepartmentRollup2' OR [RollupLevel]='DepartmentRollup1' OR [RollupLevel]='Entity' OR [RollupLevel]='System'); GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Membe__3ACCF6A6] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Rollu__3BC11ADF] DEFAULT ('') FOR [RollupLevel]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Rollu__3CB53F18] DEFAULT ((0)) FOR [RollupMemberID]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Accou__3DA96351] DEFAULT ((0)) FOR [AccountID]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Reven__3E9D878A] DEFAULT ((0)) FOR [Revenue]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__Staff__3F91ABC3] DEFAULT ((0)) FOR [Staffing]; GO ALTER TABLE [fw].[PrimaryStatisticsRollupsConfiguration] ADD CONSTRAINT [DF__PrimarySt__NonSt__4085CFFC] DEFAULT ((0)) FOR [NonStaffing]; GO --------------------------------------------- --------------------------------------------- -- fw.SPHACTROLLUP_StandardCodesBackup ------------------ --------------------------------------------- CREATE TABLE [fw].[SPHACTROLLUP_StandardCodesBackup] ( [Name] nvarchar(max) NOT NULL, [SPHAccountRollupCode] nvarchar(max) NOT NULL ); GO ALTER TABLE [fw].[SPHACTROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHACTROLL__Name__2FD86876] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SPHACTROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHACTROL__SPHAc__30CC8CAF] DEFAULT ('') FOR [SPHAccountRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.SPHDEPARTMENTROLLUP_StandardCodesBackup ------------------ --------------------------------------------- CREATE TABLE [fw].[SPHDEPARTMENTROLLUP_StandardCodesBackup] ( [Name] nvarchar(max) NOT NULL, [SPHDepartmentRollupCode] nvarchar(max) NOT NULL ); GO ALTER TABLE [fw].[SPHDEPARTMENTROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHDEPARTM__Name__39384F0B] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SPHDEPARTMENTROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHDEPART__SPHDe__3A2C7344] DEFAULT ('') FOR [SPHDepartmentRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.SPHDEPARTMENTTYPE_StandardCodesBackup ------------------ --------------------------------------------- CREATE TABLE [fw].[SPHDEPARTMENTTYPE_StandardCodesBackup] ( [Name] nvarchar(max) NOT NULL, [SPHDepartmentTypeCode] nvarchar(max) NOT NULL ); GO ALTER TABLE [fw].[SPHDEPARTMENTTYPE_StandardCodesBackup] ADD CONSTRAINT [DF__SPHDEPARTM__Name__4A6CFCAE] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SPHDEPARTMENTTYPE_StandardCodesBackup] ADD CONSTRAINT [DF__SPHDEPART__SPHDe__4B6120E7] DEFAULT ('') FOR [SPHDepartmentTypeCode]; GO --------------------------------------------- --------------------------------------------- -- fw.SPHJOBCODEROLLUP_StandardCodesBackup ------------------ --------------------------------------------- CREATE TABLE [fw].[SPHJOBCODEROLLUP_StandardCodesBackup] ( [Name] nvarchar(max) NOT NULL, [SPHJobCodeRollupCode] nvarchar(max) NOT NULL ); GO ALTER TABLE [fw].[SPHJOBCODEROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHJOBCODE__Name__337F75B5] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SPHJOBCODEROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHJOBCOD__SPHJo__347399EE] DEFAULT ('') FOR [SPHJobCodeRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.SPHPAYCODEROLLUP_StandardCodesBackup ------------------ --------------------------------------------- CREATE TABLE [fw].[SPHPAYCODEROLLUP_StandardCodesBackup] ( [Name] nvarchar(max) NOT NULL, [SPHPayCodeRollupCode] nvarchar(max) NOT NULL ); GO ALTER TABLE [fw].[SPHPAYCODEROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHPAYCODE__Name__70F363A0] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SPHPAYCODEROLLUP_StandardCodesBackup] ADD CONSTRAINT [DF__SPHPAYCOD__SPHPa__71E787D9] DEFAULT ('') FOR [SPHPayCodeRollupCode]; GO --------------------------------------------- --------------------------------------------- -- fw.SectionSecurityImport ------------------ --------------------------------------------- CREATE TABLE [fw].[SectionSecurityImport] ( [ID] int NOT NULL, [GroupName] varchar(255) NULL, [BasicGUID] varchar(255) NULL, [AdvancedGUID] varchar(255) NULL ); GO --------------------------------------------- --------------------------------------------- -- fw.SystemSetting ------------------ --------------------------------------------- CREATE TABLE [fw].[SystemSetting] ( [SystemSettingID] int NOT NULL, [Name] nvarchar(100) NOT NULL, [Description] nvarchar(400) NOT NULL, [Value] nvarchar(max) NOT NULL, [IsEditable] bit NOT NULL, [ColumnType] int NOT NULL, [DefaultValue] nvarchar(100) NOT NULL, [IsEncrypted] bit NOT NULL, [SystemSettingCategoryID] int NOT NULL, PRIMARY KEY ([SystemSettingID]) ); CREATE UNIQUE NONCLUSTERED INDEX [AK_Name] ON [fw].[SystemSetting] ([Name]); GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF_SYSTEMSETTING_VALUE] DEFAULT ('') FOR [Value]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSett__Name__6D80CB2D] DEFAULT ('') FOR [Name]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__Descr__6E74EF66] DEFAULT ('') FOR [Description]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__IsEdi__705D37D8] DEFAULT ((0)) FOR [IsEditable]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__Colum__71515C11] DEFAULT ((0)) FOR [ColumnType]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__Defau__7245804A] DEFAULT ('') FOR [DefaultValue]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__IsEnc__7339A483] DEFAULT ('0') FOR [IsEncrypted]; GO ALTER TABLE [fw].[SystemSetting] ADD CONSTRAINT [DF__SystemSet__Syste__7EAB572F] DEFAULT ((0)) FOR [SystemSettingCategoryID]; GO --------------------------------------------- --------------------------------------------- -- fw.SystemSettingCategory ------------------ --------------------------------------------- CREATE TABLE [fw].[SystemSettingCategory] ( [SystemSettingCategoryID] int NOT NULL, [Name] nvarchar(100) NOT NULL, PRIMARY KEY ([SystemSettingCategoryID]) ); GO ALTER TABLE [fw].[SystemSettingCategory] ADD CONSTRAINT [DF__SystemSett__Name__7DB732F6] DEFAULT ('') FOR [Name]; GO --------------------------------------------- --------------------------------------------- -- fw.viewDimAccount_custom ------------------ --------------------------------------------- CREATE TABLE [fw].[viewDimAccount_custom] ( [MemberGUID] uniqueidentifier NOT NULL, [HistoryItemGUID] uniqueidentifier NOT NULL, PRIMARY KEY ([MemberGUID]) ); GO ALTER TABLE [fw].[viewDimAccount_custom] ADD CONSTRAINT [DF__viewDimAc__Membe__2A065A39] DEFAULT (newid()) FOR [MemberGUID]; GO ALTER TABLE [fw].[viewDimAccount_custom] ADD CONSTRAINT [DF__viewDimAc__Histo__2AFA7E72] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [HistoryItemGUID]; GO --------------------------------------------- --------------------------------------------- -- VIEWS --------------------------------------------- -- fw.BudgetReallocationWithDefinedType /************************************************************ ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-01-17 IP B-16703 Omit archived budget adjustments *************************************************************/ CREATE view [fw].[BudgetReallocationWithDefinedType] as SELECT distinct b.BudgetReallocationGUID, Date, SourceDepartmentID,SourceAccountID,TargetDepartmentID,TargetAccountID,UnitTypeID,FiscalMonthID,FiscalYearID,SourceJobCodeID,TargetJobCodeID,DataType, ShouldUpply = case when Change = 0 then 0 else 1 end, BudgetReallocationType = case WHEN b.SourceDepartmentID <> 0 and b.SourceAccountID <> 0 and b.TargetDepartmentID <> 0 and b.TargetAccountID <> 0 and b.GroupGUID = '00000000-0000-0000-0000-000000000000' THEN 'ReallocateSingle' WHEN b.SourceDepartmentID <> 0 and b.SourceAccountID <> 0 and b.TargetDepartmentID <> 0 and b.TargetAccountID <> 0 and b.GroupGUID <> '00000000-0000-0000-0000-000000000000' THEN 'ReallocateMulti' WHEN b.SourceDepartmentID <> 0 and b.SourceAccountID <> 0 and b.TargetDepartmentID = 0 and b.TargetAccountID = 0 and b.GroupGUID = '00000000-0000-0000-0000-000000000000' THEN 'AdjustMontly' WHEN b.SourceDepartmentID <> 0 and b.SourceAccountID <> 0 and b.TargetDepartmentID = 0 and b.TargetAccountID = 0 and b.GroupGUID <> '00000000-0000-0000-0000-000000000000' THEN 'ManualFile' END FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE Archived = 0 GO --------------------------------------------- -- fw.viewABBFlexingReconciliation CREATE VIEW [fw].[viewABBFlexingReconciliation] AS SELECT CostingConfigGUID, FiscalYearID, FiscalMonthID, EntityID, DepartmentID, ChargeCodeID, AccountID, JobCodeID, PayCodeID, CostComponentID, ActualChargeUnits, ActualChargeUnitsYTD, ActualVariableDirectCost, ActualVariableDirectCostYTD, ActualFixedDirectCost, ActualFixedDirectCostYTD, BudgetChargeUnits, BudgetChargeUnitsYTD, BudgetVariableDirectCost, BudgetVariableDirectCostYTD, BudgetFixedDirectCost, BudgetFixedDirectCostYTD, FlexedVariableDirectCost, FlexedVariableDirectCostYTD FROM [fw].[ABBFlexingReconciliation] GO --------------------------------------------- -- fw.viewDepartmentChargeCodeStatisticMapping CREATE VIEW [fw].[viewDepartmentChargeCodeStatisticMapping] AS /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-05-04 IP B-19364 MRPR - Set Global Weights for Charge Codes - System Center Page ** 2 2018-06-07 IP TK-58757 Refactored view ************************************************************ */ SELECT * FROM ( SELECT M.RowID, M.FiscalYearID, D.DepartmentID, M.ChargeCodeID, M.PatientTypeRollupID, M.AccountID, M.Weight, M.IsReviewed, ROW_NUMBER() OVER ( PARTITION BY M.FiscalYearID, D.DepartmentID, M.ChargeCodeID, M.PatientTypeRollupID, M.AccountID ORDER BY L.SortOrder DESC ) AS PriorityOrder FROM ( SELECT M.RowID, M.FiscalYearID, M.DepartmentRollupLevelMemberID, M.DepartmentRollupLevelMemberColumnName, M.ChargeCodeID, M.PatientTypeRollupID, M.AccountID, M.Weight, M.IsReviewed FROM fw.DepartmentChargeCodeStatisticMapping M WHERE M.DepartmentRollupLevelMemberID != 0 ) M INNER JOIN ( SELECT L.ColumnName, L.SortOrder FROM viewScoreHierarchyAttributeLinkCore30 L JOIN ScoreDimension S ON S.DefaultHierarchyGUID = L.HierarchyGUID WHERE S.GlobalID = 'Department' ) L ON L.ColumnName = M.DepartmentRollupLevelMemberColumnName JOIN ( SELECT DepartmentID, DepartmentID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup1ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup1ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup2ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup2ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup3ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup3ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup4ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup4ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup5ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup5ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, DepartmentRollup6ID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'DepartmentRollup6ID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, EntityID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'EntityID' FROM fw.ViewDimDepartment_Real UNION ALL SELECT DepartmentID, SystemID AS DepartmentRollupLevelMemberID, DepartmentRollupLevelMemberColumnName = 'SystemID' FROM fw.ViewDimDepartment_Real ) D ON D.DepartmentRollupLevelMemberID = M.DepartmentRollupLevelMemberID AND M.DepartmentRollupLevelMemberColumnName = D.DepartmentRollupLevelMemberColumnName ) SUBSELECT WHERE PriorityOrder = 1 GO --------------------------------------------- -- fw.viewDimAccount CREATE VIEW [fw].[viewDimAccount] AS SELECT [AccountID], COALESCE([Name],'') as [Name], [AccountCode], [Description], [GLRollup], [IsInverted], [PatientClassID], [CAPIsDefined], [DSSIsDefined], [DSSCostComponent], [DSSStatisticDriver], [DSSAccountRollup1ID], [DSSAccountRollup2ID], [DSSAccountRollup3ID], [MRIsDefined], [FlexStatistic], [FlexValue], [FlexBucketGUID], [OBIsDefined], [IsStat], [IsGlobal], [IsExpense], [Variability], [OBDollarsFinancialReportingID], COALESCE([OBDollarsFinancialReportingCategory],'') as [OBDollarsFinancialReportingCategory], [OBUnitsFinancialReportingID], COALESCE([OBUnitsFinancialReportingCategory],'') as [OBUnitsFinancialReportingCategory], [OBAccountPHID], [OBStatModelSectionID], [OBStatUnitTypeID], [OBStaffing], [OBPayorID], [OBPayorGroupID], [SPIsDefined], [PatientTypeRollupID], [SPAccountRollupID], COALESCE([SPAccountRollupCategory],'') as [SPAccountRollupCategory], [SPStatAccountRollup], [SPPayorGroupID], [SPPhysicianGroupID], [SPJobCodeGroupID], [SPCapitalRollupID], [SPDebtIssuanceID], [SPIsPhysicianOverride], [PatientTypeID], [Inversion], COALESCE([PatientClass],'') as [PatientClass], COALESCE([DSSAccountRollup1Name],'') as [DSSAccountRollup1Name], COALESCE([DSSAccountRollup1Category],'') as [DSSAccountRollup1Category], COALESCE([DSSAccountRollup2Name],'') as [DSSAccountRollup2Name], COALESCE([DSSAccountRollup3Name],'') as [DSSAccountRollup3Name], COALESCE([OBDollarsFinancialReporting],'') as [OBDollarsFinancialReporting], [OBDollarsFinancialReportingSortOrder], COALESCE([OBDollarsFinancialReportingLineName],'') as [OBDollarsFinancialReportingLineName], COALESCE([OBUnitsFinancialReporting],'') as [OBUnitsFinancialReporting], [OBUnitsFinancialReportingSortOrder], COALESCE([OBUnitsFinancialReportingLineName],'') as [OBUnitsFinancialReportingLineName], COALESCE([OBModelSectionName],'') as [OBModelSectionName], COALESCE([OBStatModelSectionName],'') as [OBStatModelSectionName], COALESCE([OBUnitType],'') as [OBUnitType], COALESCE([OBPayor],'') as [OBPayor], COALESCE([OBPayorGroup],'') as [OBPayorGroup], COALESCE([PatientTypeRollupName],'') as [PatientTypeRollupName], COALESCE([SPAccountRollupName],'') as [SPAccountRollupName], COALESCE([SPStatAccountRollupName],'') as [SPStatAccountRollupName], COALESCE([SPPayorGroupName],'') as [SPPayorGroupName], [SPHAccountRollupID], COALESCE([SPHAccountRollupName],'') as [SPHAccountRollupName], [SPHAccountRollupConfidenceScore], COALESCE([SPPhysicianGroupName],'') as [SPPhysicianGroupName], COALESCE([SPJobCodeGroupName],'') as [SPJobCodeGroupName], COALESCE([SPCapitalRollupName],'') as [SPCapitalRollupName], COALESCE([SPDebtIssuanceName],'') as [SPDebtIssuanceName], [MemberGUID], [HistoryItemGUID], [DSSAccountRollup4ID], [DSSAccountRollup5ID], [DSSAccountRollup6ID], [DSSAccountRollup7ID], COALESCE([DSSAccountRollup4],'') as [DSSAccountRollup4], COALESCE([DSSAccountRollup4Name],'') as [DSSAccountRollup4Name], COALESCE([DSSAccountRollup2Category],'') as [DSSAccountRollup2Category], COALESCE([DSSAccountRollup5Name],'') as [DSSAccountRollup5Name], COALESCE([DSSAccountRollup6Name],'') as [DSSAccountRollup6Name], COALESCE([DSSAccountRollup7Name],'') as [DSSAccountRollup7Name], COALESCE([DSSAccountRollup3Category],'') as [DSSAccountRollup3Category], COALESCE([DSSAccountRollup4Category],'') as [DSSAccountRollup4Category], [FWIsDefined], [AccountCodeRaw], [GMAccountRollup1], [GMAccountRollup2], [GMAccountRollup3], [GMAccountRollup4], [GMAccountRollup5], [GMAccountRollup6], [GMAccountRollup7], [SPHVariability], COALESCE([SPHCostComponent],'') as [SPHCostComponent], COALESCE([SPHCostComponentRollup],'') as [SPHCostComponentRollup], [IsSPHCostModel], COALESCE([SPHLineItem],'') as [SPHLineItem], COALESCE([SPHStatement],'') as [SPHStatement], COALESCE([SPHCategory],'') as [SPHCategory], [SPHAccountRollupIsValidated], COALESCE([SPHSection],'') as [SPHSection], [IsCBP] ,[Version] FROM [fw].[DimAccount] (readuncommitted) GO --------------------------------------------- -- fw.viewDimAccount_source CREATE VIEW [fw].[viewDimAccount_source] AS SELECT grp5D92C559C8004C18BF821C58E1977A6C.[AccountID] ,grp5D92C559C8004C18BF821C58E1977A6C.[Name] ,grp5D92C559C8004C18BF821C58E1977A6C.[PatientTypeID] ,grp5D92C559C8004C18BF821C58E1977A6C.[Inversion] ,grp5D92C559C8004C18BF821C58E1977A6C.[SPHAccountRollupID] ,grp5D92C559C8004C18BF821C58E1977A6C.[MemberGUID] ,grp5D92C559C8004C18BF821C58E1977A6C.[HistoryItemGUID] ,ISNULL([PATIENTCLASS].[Name], 'Not Specified') as [PatientClass] ,ISNULL([DSSACTROL1].[Name], 'Not Specified') as [DSSAccountRollup1Name] ,ISNULL([DSSACTROL1].[Category], 'Not Specified') as [DSSAccountRollup1Category] ,ISNULL([DSSACTROL2].[Name], 'Not Specified') as [DSSAccountRollup2Name] ,ISNULL([DSSACTROL2].[Category], 'Not Specified') as [DSSAccountRollup2Category] ,ISNULL([DSSACTROL3].[Name], 'Not Specified') as [DSSAccountRollup3Name] ,ISNULL([DSSACTROL3].[Category], 'Not Specified') as [DSSAccountRollup3Category] ,ISNULL([OBFINANCIALREP].[IsExpense], 0) as [IsExpense] ,ISNULL([OBFINANCIALREP].[Section], 'Not Specified') as [OBDollarsFinancialReportingCategory] ,ISNULL([OBFINANCIALREP].[Name], 'Not Specified') as [OBDollarsFinancialReporting] ,ISNULL([OBFINANCIALREP].[SortOrder], 0) as [OBDollarsFinancialReportingSortOrder] ,ISNULL([OBFINANCIALREP].[LineName], 'Not Specified') as [OBDollarsFinancialReportingLineName] ,ISNULL([OBFINANCIALREP_1].[Section], 'Not Specified') as [OBUnitsFinancialReportingCategory] ,ISNULL([OBFINANCIALREP_1].[Name], 'Not Specified') as [OBUnitsFinancialReporting] ,ISNULL([OBFINANCIALREP_1].[SortOrder], 0) as [OBUnitsFinancialReportingSortOrder] ,ISNULL([OBFINANCIALREP_1].[LineName], 'Not Specified') as [OBUnitsFinancialReportingLineName] ,ISNULL([ACCOUNTPH].[Name], 'Not Specified') as [OBModelSectionName] ,ISNULL([ACCOUNTPH_1].[Name], 'Not Specified') as [OBStatModelSectionName] ,ISNULL([UNITTYPE].[Name], 'Not Specified') as [OBUnitType] ,ISNULL([PAYOR].[Name], 'Not Specified') as [OBPayor] ,ISNULL([PayorGroup].[Name], 'Not Specified') as [OBPayorGroup] ,ISNULL([PayorGroup_1].[Name], 'Not Specified') as [SPPayorGroupName] ,ISNULL([PatientTyRo].[Name], 'Not Specified') as [PatientTypeRollupName] ,ISNULL([SPAccountRollup].[Category], 'Not Specified') as [SPAccountRollupCategory] ,ISNULL([SPAccountRollup].[Name], 'Not Specified') as [SPAccountRollupName] ,ISNULL([SPAccountRollup_1].[Name], 'Not Specified') as [SPStatAccountRollupName] ,ISNULL([PhyGrp].[Name], 'Not Specified') as [SPPhysicianGroupName] ,ISNULL([JobCodeGrp].[Name], 'Not Specified') as [SPJobCodeGroupName] ,ISNULL([SPCAPITALROLLUP].[Name], 'Not Specified') as [SPCapitalRollupName] ,ISNULL([SPDEBTISSUANCE].[Name], 'Not Specified') as [SPDebtIssuanceName] ,ISNULL([SPHACTROLLUP].[Name], 'Not Specified') as [SPHAccountRollupName] ,ISNULL([SPHACTROLLUP].[SPHCostComponent], 'Not Specified') as [SPHCostComponent] ,ISNULL([SPHACTROLLUP].[SPHCostComponentRollup], 'Not Specified') as [SPHCostComponentRollup] ,ISNULL([SPHACTROLLUP].[LineItem], 'Not Specified') as [SPHLineItem] ,ISNULL([SPHACTROLLUP].[Statement], 'Not Specified') as [SPHStatement] ,ISNULL([SPHACTROLLUP].[Category], 'Not Specified') as [SPHCategory] ,ISNULL([SPHACTROLLUP].[Section], 'Not Specified') as [SPHSection] ,ISNULL([DSSACCTROLL4].[Name], 'Not Specified') as [DSSAccountRollup4] ,ISNULL([DSSACCTROLL4].[Name], 'Not Specified') as [DSSAccountRollup4Name] ,ISNULL([DSSACCTROLL4].[Category], 'Not Specified') as [DSSAccountRollup4Category] ,ISNULL([DSSACCOUNTROLLUP5].[Name], 'Not Specified') as [DSSAccountRollup5Name] ,ISNULL([DSSACCOUNTROLLUP6].[Name], 'Not Specified') as [DSSAccountRollup6Name] ,ISNULL([DSSACCOUNTROLLUP7].[Name], 'Not Specified') as [DSSAccountRollup7Name] , [grp5D92C559C8004C18BF821C58E1977A6C].[Version]FROM [fw].[DimAccount] grp5D92C559C8004C18BF821C58E1977A6C (readuncommitted) LEFT JOIN [fw].[viewDimPatientClass] [PATIENTCLASS] on [PATIENTCLASS].[PatientClassID] = [grp5D92C559C8004C18BF821C58E1977A6C].[PatientClassID] LEFT JOIN [dss].[viewDimAccountRollup1] [DSSACTROL1] on [DSSACTROL1].[DSSAccountRollup1ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup1ID] LEFT JOIN [dss].[viewDimAccountRollup2] [DSSACTROL2] on [DSSACTROL2].[DSSAccountRollup2ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup2ID] LEFT JOIN [dss].[viewDimAccountRollup3] [DSSACTROL3] on [DSSACTROL3].[DSSAccountRollup3ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup3ID] LEFT JOIN [ob].[viewDimFinancialReporting] [OBFINANCIALREP] on [OBFINANCIALREP].[FinancialReportingID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBDollarsFinancialReportingID] LEFT JOIN [ob].[viewDimFinancialReporting] [OBFINANCIALREP_1] on [OBFINANCIALREP_1].[FinancialReportingID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBUnitsFinancialReportingID] LEFT JOIN [ob].[viewDimAccountPH] [ACCOUNTPH] on [ACCOUNTPH].[AccountPHID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBAccountPHID] INNER JOIN [ob].[viewDimAccountPH] [ACCOUNTPH_1] on [ACCOUNTPH_1].[AccountPHID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBStatModelSectionID] LEFT JOIN [fw].[viewDimUnitType] [UNITTYPE] on [UNITTYPE].[UnitTypeID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBStatUnitTypeID] LEFT JOIN [fw].[viewDimPayor] [PAYOR] on [PAYOR].[PayorID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBPayorID] LEFT JOIN [fw].[viewDimPayorGroup] [PayorGroup] on [PayorGroup].[PayorGroupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[OBPayorGroupID] LEFT JOIN [fw].[viewDimPayorGroup] [PayorGroup_1] on [PayorGroup_1].[PayorGroupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPPayorGroupID] LEFT JOIN [fw].[viewDimPatientTypeRollup] [PatientTyRo] on [PatientTyRo].[PatientTypeRollupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[PatientTypeRollupID] LEFT JOIN [sp].[viewDimAccountRollup] [SPAccountRollup] on [SPAccountRollup].[AccountRollupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPAccountRollupID] LEFT JOIN [sp].[viewDimAccountRollup] [SPAccountRollup_1] on [SPAccountRollup_1].[AccountRollupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPStatAccountRollup] LEFT JOIN [fw].[viewDimPhysicianGroup] [PhyGrp] on [PhyGrp].[PhysicianGroupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPPhysicianGroupID] LEFT JOIN [fw].[viewDimJobCodeGroup] [JobCodeGrp] on [JobCodeGrp].[JobCodeGroupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPJobCodeGroupID] LEFT JOIN [sp].[viewDimSPCapitalRollup] [SPCAPITALROLLUP] on [SPCAPITALROLLUP].[SPCapitalRollupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPCapitalRollupID] LEFT JOIN [sp].[viewDimSPDebtIssuance] [SPDEBTISSUANCE] on [SPDEBTISSUANCE].[SPDebtIssuanceID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPDebtIssuanceID] LEFT JOIN [fw].[viewDimSPHAccountRollup] [SPHACTROLLUP] on [SPHACTROLLUP].[SPHAccountRollupID] = [grp5D92C559C8004C18BF821C58E1977A6C].[SPHAccountRollupID] LEFT JOIN [dss].[viewDimAccountRollup4] [DSSACCTROLL4] on [DSSACCTROLL4].[DSSAccountRollup4ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup4ID] INNER JOIN [dss].[viewDimAccountRollup5] [DSSACCOUNTROLLUP5] on [DSSACCOUNTROLLUP5].[DSSAccountRollup5ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup5ID] LEFT JOIN [dss].[viewDimAccountRollup6] [DSSACCOUNTROLLUP6] on [DSSACCOUNTROLLUP6].[DSSAccountRollup6ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup6ID] LEFT JOIN [dss].[viewDimAccountRollup7] [DSSACCOUNTROLLUP7] on [DSSACCOUNTROLLUP7].[DSSAccountRollup7ID] = [grp5D92C559C8004C18BF821C58E1977A6C].[DSSAccountRollup7ID] GO --------------------------------------------- -- fw.viewDimAgeCohort --Last Modified 10/17/2016 11:21 PM CREATE VIEW [fw].[viewDimAgeCohort] AS SELECT grpD86C7982BF714099989A70284B99EB36.[AgeCohortID] ,grpD86C7982BF714099989A70284B99EB36.[Name] ,grpD86C7982BF714099989A70284B99EB36.[Code] ,grpD86C7982BF714099989A70284B99EB36.[SortOrder] ,grpD86C7982BF714099989A70284B99EB36.[TransactionID] ,grpD86C7982BF714099989A70284B99EB36.[MemberGUID] ,grpD86C7982BF714099989A70284B99EB36.[HistoryItemGUID] ,grpD86C7982BF714099989A70284B99EB36.[TimeMin] ,grpD86C7982BF714099989A70284B99EB36.[TimeMax] ,grpD86C7982BF714099989A70284B99EB36.[TimeMinUnit] ,grpD86C7982BF714099989A70284B99EB36.[TimeMaxUnit] FROM [fw].[DimAgeCohort] grpD86C7982BF714099989A70284B99EB36 (readuncommitted) GO --------------------------------------------- -- fw.viewDimAssumption_auto CREATE VIEW [fw].[viewDimAssumption_auto] AS SELECT grp2879736FA04A414EA76857E00A234FC5.[AssumptionID] ,grp2879736FA04A414EA76857E00A234FC5.[Name] ,grp2879736FA04A414EA76857E00A234FC5.[Category] ,grp2879736FA04A414EA76857E00A234FC5.[SubCategory] ,grp2879736FA04A414EA76857E00A234FC5.[DisplayFormat] ,grp2879736FA04A414EA76857E00A234FC5.[SPIsPastingValues] ,grp2879736FA04A414EA76857E00A234FC5.[SPIsProtectingRollingValues] ,grp2879736FA04A414EA76857E00A234FC5.[MemberGUID] ,grp2879736FA04A414EA76857E00A234FC5.[HistoryItemGUID] , [grp2879736FA04A414EA76857E00A234FC5].[Version]FROM [fw].[DimAssumption] grp2879736FA04A414EA76857E00A234FC5 (readuncommitted) GO --------------------------------------------- -- fw.viewDimCICostLeader CREATE VIEW [fw].[viewDimCICostLeader] AS SELECT MemberGUID ,UserName ,NameFirst ,NameLast ,EmailAddress ,PhoneNumber ,IsSysAdmin ,NameFull ,UserGUID AS [CICostLeaderID] FROM [fw].[viewDimUsers] UNION SELECT dbo.ZeroGUID() MemberGUID ,'' UserName ,'' NameFirst ,'' NameLast ,'' EmailAddress ,'' PhoneNumber ,'' IsSysAdmin ,'Not Specified' NameFull ,dbo.ZeroGUID() AS [CIOwnerID]; GO --------------------------------------------- -- fw.viewDimCICostLeader_auto --Last Modified 11/9/2018 5:03 PM CREATE VIEW [fw].[viewDimCICostLeader_auto] AS SELECT grp86039BDA00234558918C494FF9385A1C.[MemberGUID] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[UserName],'') as [UserName] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[NameFirst],'') as [NameFirst] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[NameLast],'') as [NameLast] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[EmailAddress],'') as [EmailAddress] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[PhoneNumber],'') as [PhoneNumber] ,grp86039BDA00234558918C494FF9385A1C.[IsSysAdmin] ,coalesce(grp86039BDA00234558918C494FF9385A1C.[NameFull],'') as [NameFull] ,grp86039BDA00234558918C494FF9385A1C.[CICostLeaderID] FROM [fw].[viewDimCICostLeader] grp86039BDA00234558918C494FF9385A1C GO --------------------------------------------- -- fw.viewDimCIExecutiveSponsor CREATE VIEW [fw].[viewDimCIExecutiveSponsor] AS SELECT MemberGUID ,UserName ,NameFirst ,NameLast ,EmailAddress ,PhoneNumber ,IsSysAdmin ,NameFull ,UserGUID AS [CIExecutiveSponsorID] FROM [fw].[viewDimUsers] UNION SELECT dbo.ZeroGUID() MemberGUID ,'' UserName ,'' NameFirst ,'' NameLast ,'' EmailAddress ,'' PhoneNumber ,'' IsSysAdmin ,'Not Specified' NameFull ,dbo.ZeroGUID() AS [CIOwnerID]; GO --------------------------------------------- -- fw.viewDimCIExecutiveSponsor_auto --Last Modified 11/9/2018 5:03 PM CREATE VIEW [fw].[viewDimCIExecutiveSponsor_auto] AS SELECT grpF3B42BDB744145EC920F5404120C877D.[MemberGUID] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[UserName],'') as [UserName] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[NameFirst],'') as [NameFirst] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[NameLast],'') as [NameLast] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[EmailAddress],'') as [EmailAddress] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[PhoneNumber],'') as [PhoneNumber] ,grpF3B42BDB744145EC920F5404120C877D.[IsSysAdmin] ,coalesce(grpF3B42BDB744145EC920F5404120C877D.[NameFull],'') as [NameFull] ,grpF3B42BDB744145EC920F5404120C877D.[CIExecutiveSponsorID] FROM [fw].[viewDimCIExecutiveSponsor] grpF3B42BDB744145EC920F5404120C877D GO --------------------------------------------- -- fw.viewDimCIOwner CREATE VIEW [fw].[viewDimCIOwner] AS SELECT MemberGUID ,UserName ,NameFirst ,NameLast ,EmailAddress ,PhoneNumber ,IsSysAdmin ,NameFull ,UserGUID AS [CIOwnerID] FROM [fw].[viewDimUsers] UNION SELECT dbo.ZeroGUID() MemberGUID ,'' UserName ,'' NameFirst ,'' NameLast ,'' EmailAddress ,'' PhoneNumber ,'' IsSysAdmin ,'Not Specified' NameFull ,dbo.ZeroGUID() AS [CIOwnerID]; GO --------------------------------------------- -- fw.viewDimCIOwner_auto --Last Modified 11/9/2018 5:03 PM CREATE VIEW [fw].[viewDimCIOwner_auto] AS SELECT grpD4F1A9BB138B4232A3D704B1F74D6CBE.[MemberGUID] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[UserName],'') as [UserName] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[NameFirst],'') as [NameFirst] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[NameLast],'') as [NameLast] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[EmailAddress],'') as [EmailAddress] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[PhoneNumber],'') as [PhoneNumber] ,grpD4F1A9BB138B4232A3D704B1F74D6CBE.[IsSysAdmin] ,coalesce(grpD4F1A9BB138B4232A3D704B1F74D6CBE.[NameFull],'') as [NameFull] ,grpD4F1A9BB138B4232A3D704B1F74D6CBE.[CIOwnerID] FROM [fw].[viewDimCIOwner] grpD4F1A9BB138B4232A3D704B1F74D6CBE GO --------------------------------------------- -- fw.viewDimCMBucket CREATE VIEW [fw].[viewDimCMBucket] AS SELECT grp14E4823F9B7A434C9E5390716DA1E83B.[MemberGUID] ,grp14E4823F9B7A434C9E5390716DA1E83B.[CategoryGUID] ,coalesce(grp14E4823F9B7A434C9E5390716DA1E83B.[Name],'') as [Name] ,coalesce(grp14E4823F9B7A434C9E5390716DA1E83B.[Category],'') as [Category] FROM [dbo].[viewCMBucket] grp14E4823F9B7A434C9E5390716DA1E83B GO --------------------------------------------- -- fw.viewDimCareSetting CREATE VIEW [fw].[viewDimCareSetting] AS SELECT grpCB4D1E3F1895456A8FAA1F3225FC314E.[CareSettingID] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[Name] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[Code] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[SortOrder] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[IsActive] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[TransactionID] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[MemberGUID] ,grpCB4D1E3F1895456A8FAA1F3225FC314E.[HistoryItemGUID] FROM [fw].[DimCareSetting] grpCB4D1E3F1895456A8FAA1F3225FC314E (readuncommitted) GO --------------------------------------------- -- fw.viewDimCareSettingPH CREATE VIEW [fw].[viewDimCareSettingPH] AS SELECT grpF1AA6AEECFAB4BC783DD4937D6D780BC.[CareSettingPHID] ,grpF1AA6AEECFAB4BC783DD4937D6D780BC.[Name] ,grpF1AA6AEECFAB4BC783DD4937D6D780BC.[MemberGUID] ,grpF1AA6AEECFAB4BC783DD4937D6D780BC.[HistoryItemGUID] ,grpF1AA6AEECFAB4BC783DD4937D6D780BC.[TransactionID] FROM [fw].[DimCareSettingPH] grpF1AA6AEECFAB4BC783DD4937D6D780BC (readuncommitted) GO --------------------------------------------- -- fw.viewDimChargeCode CREATE VIEW fw.viewDimChargeCode AS SELECT ChargeCodeID, ChargeCode, MemberGUID, Name, HistoryItemGUID, IsDefined FROM fw.DimChargeCode GO --------------------------------------------- -- fw.viewDimChargeCodePH CREATE VIEW [fw].[viewDimChargeCodePH] AS SELECT grp61106722392D44889DEE489AA9F62D29.[ChargeCodePHID] ,grp61106722392D44889DEE489AA9F62D29.[Name] ,grp61106722392D44889DEE489AA9F62D29.[MemberGUID] ,grp61106722392D44889DEE489AA9F62D29.[HistoryItemGUID] FROM [fw].[DimChargeCodePH] grp61106722392D44889DEE489AA9F62D29 (readuncommitted) GO --------------------------------------------- -- fw.viewDimChargeCode_auto --Last Modified 11/16/2020 3:28 PM CREATE VIEW [fw].[viewDimChargeCode_auto] AS SELECT grp9F8A3E7BEB06485C914C72C4F66C593E.[ChargeCodeID] ,coalesce(grp9F8A3E7BEB06485C914C72C4F66C593E.[Name],'') as [Name] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[ChargeCode] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[Description] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsDefined] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[OBIsDefined] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsRVU] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsStatDriver] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[ChargeIncrease] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[Category] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[RVUWeight] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[StatType] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[PatientTypeID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[DSSIsDefined] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[DayTypeID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[DayType2ID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[DayType3ID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[UBRevenueCodeID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[CPTID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsActivityCost] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[MemberGUID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[HistoryItemGUID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[CostDriver] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[Rollup] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsPatientSpecific] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[FWIsDefined] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[TimeStampWeight] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsTimeStamp] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[TimeStampPrecedent] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[TransactionID] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsSPHSupplyCosting] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[IsSPHTDCosting] ,grp9F8A3E7BEB06485C914C72C4F66C593E.[SPHChargeCodePrefix] ,ISNULL([PATIENTTYPE].[Name], 'Not Specified') as [PatientTypeName] ,ISNULL([DimDayType].[Name], 'Not Specified') as [DayType] ,ISNULL([DAYTYPE2].[Name], 'Not Specified') as [DayType2] ,ISNULL([DAYTYPE3].[Name], 'Not Specified') as [DayType3] ,ISNULL([DimUBRevenue].[UBRevenueCode], 'Not Specified') as [UBRevenueCode] ,ISNULL([DimUBRevenue].[UBRevenueName], 'Not Specified') as [UBRevenueCodeName] ,ISNULL([DimCPT].[CPTCode], 'Not Specified') as [CPTCode] ,ISNULL([DimCPT].[CPTName], 'Not Specified') as [CPTName] , [grp9F8A3E7BEB06485C914C72C4F66C593E].[Version]FROM [fw].[DimChargeCode] grp9F8A3E7BEB06485C914C72C4F66C593E (readuncommitted) LEFT JOIN [fw].[viewDimPatientType] [PATIENTTYPE] on [PATIENTTYPE].[PatientTypeID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[PatientTypeID] LEFT JOIN [fw].[viewDimDayType_auto] [DimDayType] on [DimDayType].[DayTypeID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[DayTypeID] LEFT JOIN [fw].[viewDimDayType2_auto] [DAYTYPE2] on [DAYTYPE2].[DayType2ID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[DayType2ID] LEFT JOIN [fw].[viewDimDayType3_auto] [DAYTYPE3] on [DAYTYPE3].[DayType3ID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[DayType3ID] LEFT JOIN [dss].[viewDimUBRevenueCode_auto] [DimUBRevenue] on [DimUBRevenue].[UBRevenueCodeID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[UBRevenueCodeID] LEFT JOIN [dss].[viewDimCPT_auto] [DimCPT] on [DimCPT].[CPTID] = [grp9F8A3E7BEB06485C914C72C4F66C593E].[CPTID] GO --------------------------------------------- -- fw.viewDimColumnHider_auto CREATE VIEW [fw].[viewDimColumnHider_auto] AS SELECT grpDB3AC50ADCA7400E918D0BF9DAA2A474.[Name] ,grpDB3AC50ADCA7400E918D0BF9DAA2A474.[ColumnHiderID] ,grpDB3AC50ADCA7400E918D0BF9DAA2A474.[MemberGUID] , [grpDB3AC50ADCA7400E918D0BF9DAA2A474].[Version], [grpDB3AC50ADCA7400E918D0BF9DAA2A474].[HistoryItemGUID]FROM [fw].[DimColumnHider] grpDB3AC50ADCA7400E918D0BF9DAA2A474 (readuncommitted) GO --------------------------------------------- -- fw.viewDimCompAnDepartment --Last Modified 11/15/2023 3:55 PM CREATE VIEW [fw].[viewDimCompAnDepartment] AS SELECT grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentID] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentCode] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[Description] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[DescriptionLong] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentRollup1] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentRollup2] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentRollup3] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnDepartmentRollup4] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[CompAnPrimaryStat] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[SPHDepartmentRollupID] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[MemberGUID] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[TransactionID] ,grp945F64DE366646BD8ACA55CDD45A8F1C.[HistoryItemGUID] ,ISNULL([SPHDEPARTMENTROLLUP].[Name], 'Not Specified') as [SPHDepartmentRollup] FROM [fw].[DimCompAnDepartment] grp945F64DE366646BD8ACA55CDD45A8F1C (readuncommitted) INNER JOIN [fw].[viewDimSPHDepartmentRollup] [SPHDEPARTMENTROLLUP] on [SPHDEPARTMENTROLLUP].[SPHDepartmentRollupID] = [grp945F64DE366646BD8ACA55CDD45A8F1C].[SPHDepartmentRollupID] GO --------------------------------------------- -- fw.viewDimCompAnPeerGroup_auto --Last Modified 3/20/2024 5:05 PM CREATE VIEW [fw].[viewDimCompAnPeerGroup_auto] AS SELECT grpE48D7237FE824CCE9822B88C3CAC7AB5.[CompAnPeerGroupID] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[Name] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[Description] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[CompAnPeerGroupCode] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[TransactionID] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[MemberGUID] ,grpE48D7237FE824CCE9822B88C3CAC7AB5.[HistoryItemGUID] FROM [fw].[DimCompAnPeerGroup] grpE48D7237FE824CCE9822B88C3CAC7AB5 (readuncommitted) GO --------------------------------------------- -- fw.viewDimConsolidatedFinancialReporting CREATE VIEW [fw].[viewDimConsolidatedFinancialReporting] AS SELECT [ConsolidatedFinancialReportingID], [Statement], [Section], [LineName], COALESCE([Name],'') as [Name], [SortOrder], [MemberGUID], [HistoryItemGUID] FROM [fw].[DimConsolidatedFinancialReporting] (readuncommitted) GO --------------------------------------------- -- fw.viewDimConsolidatedFinancialReporting_source CREATE VIEW [fw].[viewDimConsolidatedFinancialReporting_source] AS SELECT grpB839D1E3EA3544B1802E3D15F28F859E.[ConsolidatedFinancialReportingID] ,grpB839D1E3EA3544B1802E3D15F28F859E.[MemberGUID] ,grpB839D1E3EA3544B1802E3D15F28F859E.[HistoryItemGUID] ,[grpB839D1E3EA3544B1802E3D15F28F859E].[Statement] + ' - ' + [grpB839D1E3EA3544B1802E3D15F28F859E].[Section] + ' - ' + [grpB839D1E3EA3544B1802E3D15F28F859E].[LineName] AS [Name] FROM [fw].[DimConsolidatedFinancialReporting] grpB839D1E3EA3544B1802E3D15F28F859E (readuncommitted) GO --------------------------------------------- -- fw.viewDimDataType CREATE VIEW [fw].[viewDimDataType] AS SELECT grp7931E63E49A84444B96A3473EF2E8342.[DataTypeID] ,grp7931E63E49A84444B96A3473EF2E8342.[Name] ,grp7931E63E49A84444B96A3473EF2E8342.[GlobalID] ,grp7931E63E49A84444B96A3473EF2E8342.[MemberGUID] ,grp7931E63E49A84444B96A3473EF2E8342.[HistoryItemGUID] FROM [fw].[DimDataType] grp7931E63E49A84444B96A3473EF2E8342 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDate_auto --Last Modified 4/5/2019 11:00 PM CREATE VIEW [fw].[viewDimDate_auto] AS SELECT grpFE562A75A28047209619C1D86C699238.[DateID] ,grpFE562A75A28047209619C1D86C699238.[TransactionID] ,grpFE562A75A28047209619C1D86C699238.[DayNumberOfWeek] ,grpFE562A75A28047209619C1D86C699238.[DayNameOfWeek] ,grpFE562A75A28047209619C1D86C699238.[DayNumberOfMonth] ,grpFE562A75A28047209619C1D86C699238.[DayNumberOfYear] ,grpFE562A75A28047209619C1D86C699238.[WeekNumberOfYear] ,grpFE562A75A28047209619C1D86C699238.[IsWeekDay] ,grpFE562A75A28047209619C1D86C699238.[CalendarQuarter] ,grpFE562A75A28047209619C1D86C699238.[CalendarDateTime] ,grpFE562A75A28047209619C1D86C699238.[CalendarYear] ,grpFE562A75A28047209619C1D86C699238.[CalendarMonth] ,grpFE562A75A28047209619C1D86C699238.[CalendarMonthName] ,grpFE562A75A28047209619C1D86C699238.[FiscalYear] ,coalesce(grpFE562A75A28047209619C1D86C699238.[FiscalYearName],'') as [FiscalYearName] ,grpFE562A75A28047209619C1D86C699238.[HistoryItemGUID] ,grpFE562A75A28047209619C1D86C699238.[MemberGUID] ,grpFE562A75A28047209619C1D86C699238.[FiscalMonth] ,grpFE562A75A28047209619C1D86C699238.[FiscalQuarter] ,grpFE562A75A28047209619C1D86C699238.[YearMonth] ,grpFE562A75A28047209619C1D86C699238.[MonthYear] ,grpFE562A75A28047209619C1D86C699238.[DaysInMonth] ,coalesce(grpFE562A75A28047209619C1D86C699238.[PremierMapping],'') as [PremierMapping] , [grpFE562A75A28047209619C1D86C699238].[Version]FROM [fw].[DimDate] grpFE562A75A28047209619C1D86C699238 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDayType2 CREATE VIEW fw.viewDimDayType2 AS SELECT DayTypeID [DayType2ID] ,DayTypeCode ,Description ,Name ,PrecedentOrder ,GlobalID ,Rollup ,MemberGUID ,HistoryItemGUID FROM fw.DimDayType GO --------------------------------------------- -- fw.viewDimDayType2_auto CREATE VIEW [fw].[viewDimDayType2_auto] AS SELECT grp143B285CCD194B4EBEF270972EB02575.[DayType2ID] ,grp143B285CCD194B4EBEF270972EB02575.[DayTypeCode] ,grp143B285CCD194B4EBEF270972EB02575.[Description] ,grp143B285CCD194B4EBEF270972EB02575.[Name] ,grp143B285CCD194B4EBEF270972EB02575.[PrecedentOrder] ,grp143B285CCD194B4EBEF270972EB02575.[GlobalID] ,grp143B285CCD194B4EBEF270972EB02575.[Rollup] ,grp143B285CCD194B4EBEF270972EB02575.[MemberGUID] ,grp143B285CCD194B4EBEF270972EB02575.[HistoryItemGUID] FROM [fw].[viewDimDayType2] grp143B285CCD194B4EBEF270972EB02575 GO --------------------------------------------- -- fw.viewDimDayType3 CREATE VIEW fw.viewDimDayType3 AS SELECT DayTypeID [DayType3ID] ,DayTypeCode ,Description ,Name ,PrecedentOrder ,GlobalID ,Rollup ,MemberGUID ,HistoryItemGUID FROM fw.DimDayType GO --------------------------------------------- -- fw.viewDimDayType3_auto CREATE VIEW [fw].[viewDimDayType3_auto] AS SELECT grp5B075EFFA79145A69E8B48E63306F374.[DayType3ID] ,grp5B075EFFA79145A69E8B48E63306F374.[DayTypeCode] ,grp5B075EFFA79145A69E8B48E63306F374.[Description] ,grp5B075EFFA79145A69E8B48E63306F374.[Name] ,grp5B075EFFA79145A69E8B48E63306F374.[PrecedentOrder] ,grp5B075EFFA79145A69E8B48E63306F374.[GlobalID] ,grp5B075EFFA79145A69E8B48E63306F374.[Rollup] ,grp5B075EFFA79145A69E8B48E63306F374.[MemberGUID] ,grp5B075EFFA79145A69E8B48E63306F374.[HistoryItemGUID] FROM [fw].[viewDimDayType3] grp5B075EFFA79145A69E8B48E63306F374 GO --------------------------------------------- -- fw.viewDimDayType_auto --Last Modified 3/8/2016 3:28 PM CREATE VIEW [fw].[viewDimDayType_auto] AS SELECT grpCCD1FA368B434C7B949582F5A942303E.[DayTypeID] ,grpCCD1FA368B434C7B949582F5A942303E.[DayTypeCode] ,grpCCD1FA368B434C7B949582F5A942303E.[Description] ,coalesce(grpCCD1FA368B434C7B949582F5A942303E.[Name],'') as [Name] ,grpCCD1FA368B434C7B949582F5A942303E.[PrecedentOrder] ,grpCCD1FA368B434C7B949582F5A942303E.[GlobalID] ,grpCCD1FA368B434C7B949582F5A942303E.[MemberGUID] ,grpCCD1FA368B434C7B949582F5A942303E.[HistoryItemGUID] ,grpCCD1FA368B434C7B949582F5A942303E.[Rollup] FROM [fw].[DimDayType] grpCCD1FA368B434C7B949582F5A942303E (readuncommitted) GO --------------------------------------------- -- fw.viewDimDayType_auto_0 CREATE VIEW [fw].[viewDimDayType_auto_0] AS SELECT grp78A73D3E10C0427BB8F87BD131D0742E.[DayTypeID] ,grp78A73D3E10C0427BB8F87BD131D0742E.[DayTypeCode] ,grp78A73D3E10C0427BB8F87BD131D0742E.[Description] ,coalesce(grp78A73D3E10C0427BB8F87BD131D0742E.[Name],'') as [Name] ,grp78A73D3E10C0427BB8F87BD131D0742E.[PrecedentOrder] ,grp78A73D3E10C0427BB8F87BD131D0742E.[GlobalID] ,grp78A73D3E10C0427BB8F87BD131D0742E.[MemberGUID] ,grp78A73D3E10C0427BB8F87BD131D0742E.[HistoryItemGUID] ,grp78A73D3E10C0427BB8F87BD131D0742E.[Rollup] FROM [fw].[DimDayType] grp78A73D3E10C0427BB8F87BD131D0742E GO --------------------------------------------- -- fw.viewDimDayofStay CREATE VIEW [fw].[viewDimDayofStay] AS SELECT grp13B341BB37FF431BA7F941247BF19B9E.[DayofStayID] ,grp13B341BB37FF431BA7F941247BF19B9E.[Name] ,grp13B341BB37FF431BA7F941247BF19B9E.[MemberGUID] ,grp13B341BB37FF431BA7F941247BF19B9E.[HistoryItemGUID] FROM [fw].[DimDayofStay] grp13B341BB37FF431BA7F941247BF19B9E (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartment CREATE VIEW [fw].[viewDimDepartment] AS SELECT [DepartmentID], COALESCE([Name],'') as [Name], [DepartmentCode], [Description], [SystemID], [EntityID], [DepartmentRollup1ID], [DepartmentRollup2ID], [DepartmentRollup3ID], [DepartmentRollup4ID], [DepartmentRollup5ID], [DepartmentRollup6ID], [CareSettingID], [SortOrder], [FunctionalAreaID], [ResearchDepartmentCategoryID], [AttributionTypeID], [CAPIsDefined], [IsCAP], [DSSIsDefined], [IsDSS], [DepartmentTypeOLD], [DSSDeptGrouping], [DSSDepartmentRollup1ID], [DSSDepartmentRollup2ID], [DSSDepartmentRollup3ID], [DSSDepartmentRollup4ID], [DSSDepartmentRollup5ID], [DSSDepartmentRollup6ID], [DSSDepartmentRollup7ID], [IsOverhead], [OBIsDefined], [IsOB], [IsMRPlan], [IsMRMetricTracking], [IsPR], [IsActive], [IsVariable], [IsAccountFlexing], [FlexingBucketGUID], [OBGlobalStatisticsPlanID], [OBReimbursementPlanID], [OBServiceLinePlanID], [SPIsDefined], [IsLRFP], [RollingPlanID], [OpsPlanID], [BalPlanID], [PatientTypeRollup], [SPJobCodeGroup], [SPPhysicianGroup], [SPAccountRollup], COALESCE([System],'') as [System], [SystemSortOrder], COALESCE([Entity],'') as [Entity], [EntitySortOrder], [EntityTypeOverride], COALESCE([EntityCode],'') as [EntityCode], COALESCE([CareSetting],'') as [CareSetting], COALESCE([DepartmentRollup1],'') as [DepartmentRollup1], [DepartmentRollup1SortOrder], COALESCE([DepartmentRollup2],'') as [DepartmentRollup2], [DepartmentRollup2SortOrder], COALESCE([DepartmentRollup3],'') as [DepartmentRollup3], [DepartmentRollup3SortOrder], COALESCE([DepartmentRollup4],'') as [DepartmentRollup4], [DepartmentRollup4SortOrder], [SPHDepartmentRollupID], COALESCE([SPHDepartmentRollupName],'') as [SPHDepartmentRollupName], [SPHDepartmentRollupConfidenceScore], COALESCE([DepartmentRollup5],'') as [DepartmentRollup5], [SPHDepartmentConfidenceScore], [DepartmentRollup5SortOrder], COALESCE([DepartmentRollup6],'') as [DepartmentRollup6], [DepartmentRollup6SortOrder], COALESCE([DSSDepartmentRollup1Name],'') as [DSSDepartmentRollup1Name], COALESCE([DSSDepartmentRollup2Name],'') as [DSSDepartmentRollup2Name], COALESCE([DSSDepartmentRollup3Name],'') as [DSSDepartmentRollup3Name], COALESCE([DSSDepartmentRollup4Name],'') as [DSSDepartmentRollup4Name], COALESCE([DSSDepartmentRollup5Name],'') as [DSSDepartmentRollup5Name], COALESCE([DSSDepartmentRollup6Name],'') as [DSSDepartmentRollup6Name], COALESCE([DSSDepartmentRollup7Name],'') as [DSSDepartmentRollup7Name], COALESCE([FunctionalArea],'') as [FunctionalArea], COALESCE([ResearchDepartmentCategoryName],'') as [ResearchDepartmentCategoryName], [ResearchDepartmentCategorySortOrder], COALESCE([AttributionType],'') as [AttributionType], [IsConsolidated], [ConsolidatedCode], COALESCE([OBGlobalStatisticsPlan],'') as [OBGlobalStatisticsPlan], COALESCE([OBReimbursementPlan],'') as [OBReimbursementPlan], COALESCE([OBServiceLinePlan],'') as [OBServiceLinePlan], COALESCE([SPRollingForecastPlanName],'') as [SPRollingForecastPlanName], COALESCE([SPOperationsPlanName],'') as [SPOperationsPlanName], COALESCE([SPBalanceSheetPlanName],'') as [SPBalanceSheetPlanName], [IsDepartmentRollup], [SPServiceLineForecastType], COALESCE([PatientTypeRollupName],'') as [PatientTypeRollupName], [DepartmentTypeID], COALESCE([DepartmentType],'') as [DepartmentType], COALESCE([SPJobCodeGroupName],'') as [SPJobCodeGroupName], COALESCE([SPPhysicianGroupName],'') as [SPPhysicianGroupName], COALESCE([SPAccountRollupName],'') as [SPAccountRollupName], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [WorkWeekID], [CAPDefaultSalesTax], [FundID], COALESCE([Fund],'') as [Fund], [FundSortOrder], [ProjectID], COALESCE([Project],'') as [Project], [ProjectSortOrder], [HomeDepartmentID], COALESCE([HomeDepartment],'') as [HomeDepartment], [HomeDepartmentSortOrder], [ProgramID], COALESCE([Program],'') as [Program], [ProgramSortOrder], [PayCycleID], [FWIsDefined], [DepartmentCodeRaw], [MRVicePresident], [MRDirector], [MRManager], [IsMROrPR], [IsHealthPlanAdmin], COALESCE([DepartmentRollup1Code],'') as [DepartmentRollup1Code], COALESCE([DepartmentRollup2Code],'') as [DepartmentRollup2Code], COALESCE([DepartmentRollup3Code],'') as [DepartmentRollup3Code], COALESCE([DepartmentRollup4Code],'') as [DepartmentRollup4Code], COALESCE([DepartmentRollup5Code],'') as [DepartmentRollup5Code], COALESCE([DepartmentRollup6Code],'') as [DepartmentRollup6Code], [TransactionID], [SPHDepartmentTypeID], [SPHDepartmentRollupIsValidated], [SPHDepartmentIsValidated], [SPHDepartmentID], COALESCE([SPHDepartmentName],'') as [SPHDepartmentName], [SPHDepartmentType], [IsClaimsCosting], [ProductivityPercentileID], COALESCE([ProductivityPercentile],'') as [ProductivityPercentile], [CompAnDepartmentID], COALESCE([CompAnDepartment],'') as [CompAnDepartment] ,[Version] FROM [fw].[DimDepartment] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentPH_auto CREATE VIEW [fw].[viewDimDepartmentPH_auto] AS SELECT grpDC20824AF9C5477F9045CAAEF2A933B7.[Name] ,grpDC20824AF9C5477F9045CAAEF2A933B7.[MemberGUID] ,grpDC20824AF9C5477F9045CAAEF2A933B7.[DepartmentPHID] , [grpDC20824AF9C5477F9045CAAEF2A933B7].[Version], [grpDC20824AF9C5477F9045CAAEF2A933B7].[HistoryItemGUID]FROM [fw].[DimDepartmentPH] grpDC20824AF9C5477F9045CAAEF2A933B7 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup1 CREATE VIEW [fw].[viewDimDepartmentRollup1] AS SELECT [DepartmentRollup1ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup1] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup1_source CREATE VIEW [fw].[viewDimDepartmentRollup1_source] AS SELECT grpFA10FD701D9D4868B178EDDF1FC3BABD.[DepartmentRollup1ID] ,grpFA10FD701D9D4868B178EDDF1FC3BABD.[Name] ,grpFA10FD701D9D4868B178EDDF1FC3BABD.[SecureGroupID] ,grpFA10FD701D9D4868B178EDDF1FC3BABD.[MemberGUID] ,grpFA10FD701D9D4868B178EDDF1FC3BABD.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup1] grpFA10FD701D9D4868B178EDDF1FC3BABD (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup2 CREATE VIEW [fw].[viewDimDepartmentRollup2] AS SELECT [DepartmentRollup2ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup2] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup2_source CREATE VIEW [fw].[viewDimDepartmentRollup2_source] AS SELECT grpB2EDCD6A7E5448C8912DE6279CA5303C.[DepartmentRollup2ID] ,grpB2EDCD6A7E5448C8912DE6279CA5303C.[Name] ,grpB2EDCD6A7E5448C8912DE6279CA5303C.[SecureGroupID] ,grpB2EDCD6A7E5448C8912DE6279CA5303C.[MemberGUID] ,grpB2EDCD6A7E5448C8912DE6279CA5303C.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup2] grpB2EDCD6A7E5448C8912DE6279CA5303C (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup3 CREATE VIEW [fw].[viewDimDepartmentRollup3] AS SELECT [DepartmentRollup3ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup3] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup3_source CREATE VIEW [fw].[viewDimDepartmentRollup3_source] AS SELECT grp0D6EBF23F8D6489DA85B11B8FF0DF237.[DepartmentRollup3ID] ,grp0D6EBF23F8D6489DA85B11B8FF0DF237.[Name] ,grp0D6EBF23F8D6489DA85B11B8FF0DF237.[SecureGroupID] ,grp0D6EBF23F8D6489DA85B11B8FF0DF237.[MemberGUID] ,grp0D6EBF23F8D6489DA85B11B8FF0DF237.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup3] grp0D6EBF23F8D6489DA85B11B8FF0DF237 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup4 CREATE VIEW [fw].[viewDimDepartmentRollup4] AS SELECT [DepartmentRollup4ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup4] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup4_source CREATE VIEW [fw].[viewDimDepartmentRollup4_source] AS SELECT grp2823DE836C9241B29F219400CAE92824.[SecureGroupID] ,grp2823DE836C9241B29F219400CAE92824.[DepartmentRollup4ID] ,grp2823DE836C9241B29F219400CAE92824.[Name] ,grp2823DE836C9241B29F219400CAE92824.[MemberGUID] ,grp2823DE836C9241B29F219400CAE92824.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup4] grp2823DE836C9241B29F219400CAE92824 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup5 CREATE VIEW [fw].[viewDimDepartmentRollup5] AS SELECT [DepartmentRollup5ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup5] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup5_source CREATE VIEW [fw].[viewDimDepartmentRollup5_source] AS SELECT grpFEF2ED58077B4941805CE8B84D4E763A.[SecureGroupID] ,grpFEF2ED58077B4941805CE8B84D4E763A.[DepartmentRollup5ID] ,grpFEF2ED58077B4941805CE8B84D4E763A.[Name] ,grpFEF2ED58077B4941805CE8B84D4E763A.[MemberGUID] ,grpFEF2ED58077B4941805CE8B84D4E763A.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup5] grpFEF2ED58077B4941805CE8B84D4E763A (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup6 CREATE VIEW [fw].[viewDimDepartmentRollup6] AS SELECT [DepartmentRollup6ID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [MemberGUID], [HistoryItemGUID], [EliminationsDepartmentID] FROM [fw].[DimDepartmentRollup6] (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentRollup6_source CREATE VIEW [fw].[viewDimDepartmentRollup6_source] AS SELECT grp43C5EF4D49654C9B9526374DD9E2FC93.[DepartmentRollup6ID] ,grp43C5EF4D49654C9B9526374DD9E2FC93.[SecureGroupID] ,grp43C5EF4D49654C9B9526374DD9E2FC93.[Name] ,grp43C5EF4D49654C9B9526374DD9E2FC93.[MemberGUID] ,grp43C5EF4D49654C9B9526374DD9E2FC93.[HistoryItemGUID] FROM [fw].[DimDepartmentRollup6] grp43C5EF4D49654C9B9526374DD9E2FC93 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartmentType --Last Modified 1/20/2016 8:39 AM CREATE VIEW [fw].[viewDimDepartmentType] AS SELECT grpFC24FBAFBE8449659F87692015E8BC45.[DepartmentTypeID] ,grpFC24FBAFBE8449659F87692015E8BC45.[Name] ,grpFC24FBAFBE8449659F87692015E8BC45.[TransactionID] ,grpFC24FBAFBE8449659F87692015E8BC45.[MemberGUID] ,grpFC24FBAFBE8449659F87692015E8BC45.[HistoryItemGUID] ,grpFC24FBAFBE8449659F87692015E8BC45.[Rollup] FROM [fw].[DimDepartmentType] grpFC24FBAFBE8449659F87692015E8BC45 (readuncommitted) GO --------------------------------------------- -- fw.viewDimDepartment_Pseudo CREATE view fw.viewDimDepartment_Pseudo AS SELECT DepartmentID, Name, DepartmentCode, Description, SystemID, EntityID, DepartmentRollup1ID, DepartmentRollup2ID, DepartmentRollup3ID, DepartmentRollup4ID, DepartmentRollup5ID, DepartmentRollup6ID, CareSettingID, SortOrder, FunctionalAreaID, ResearchDepartmentCategoryID, AttributionTypeID, CAPIsDefined, IsCAP, DSSIsDefined, IsDSS, DepartmentTypeOLD, DSSDeptGrouping, DSSDepartmentRollup1ID, DSSDepartmentRollup2ID, DSSDepartmentRollup3ID, IsOverhead, OBIsDefined, IsOB, IsMRPlan, IsActive, IsVariable, IsAccountFlexing, FlexingBucketGUID, OBGlobalStatisticsPlanID, OBReimbursementPlanID, OBServiceLinePlanID, SPIsDefined, IsLRFP, RollingPlanID, OpsPlanID, BalPlanID, PatientTypeRollup, SPJobCodeGroup, SPPhysicianGroup, SPAccountRollup, System, SystemSortOrder, Entity, EntitySortOrder, EntityTypeOverride, EntityCode, CareSetting, DepartmentRollup1, DepartmentRollup1SortOrder, DepartmentRollup2, DepartmentRollup2SortOrder, DepartmentRollup3, DepartmentRollup3SortOrder, DepartmentRollup4, DepartmentRollup4SortOrder, DepartmentRollup5, DepartmentRollup5SortOrder, DepartmentRollup6, DepartmentRollup6SortOrder, DSSDepartmentRollup1Name, DSSDepartmentRollup2Name, DSSDepartmentRollup3Name, FunctionalArea, ResearchDepartmentCategoryName, ResearchDepartmentCategorySortOrder, AttributionType, IsConsolidated, ConsolidatedCode, OBGlobalStatisticsPlan, OBReimbursementPlan, OBServiceLinePlan, SPRollingForecastPlanName, SPOperationsPlanName, SPBalanceSheetPlanName, IsDepartmentRollup, SPServiceLineForecastType, PatientTypeRollupName, DepartmentTypeID, DepartmentType, SPJobCodeGroupName, SPPhysicianGroupName, SPAccountRollupName, SecureGroupID, MemberGUID, HistoryItemGUID, WorkWeekID, CAPDefaultSalesTax, FundID, Fund, FundSortOrder, ProjectID, Project, ProjectSortOrder, HomeDepartmentID, HomeDepartment, HomeDepartmentSortOrder, ProgramID, Program, ProgramSortOrder, PayCycleID, FWIsDefined, DepartmentCodeRaw, IsPR, SPHDepartmentTypeID, SPHDepartmentType, Version FROM fw.viewDimDepartment AS d WHERE (IsDepartmentRollup = 1) OR (DepartmentID = 0) GO --------------------------------------------- -- fw.viewDimDepartment_Real CREATE view [fw].[viewDimDepartment_Real] AS SELECT DepartmentID, Name, DepartmentCode, Description, SystemID, EntityID, DepartmentRollup1ID, DepartmentRollup2ID, DepartmentRollup3ID, DepartmentRollup4ID, DepartmentRollup5ID, DepartmentRollup6ID, CareSettingID, SortOrder, FunctionalAreaID, ResearchDepartmentCategoryID, AttributionTypeID, CAPIsDefined, IsCAP, DSSIsDefined, IsDSS, DSSDeptGrouping, DSSDepartmentRollup1ID, DSSDepartmentRollup2ID, DSSDepartmentRollup3ID,DSSDepartmentRollup4ID, DSSDepartmentRollup5ID, DSSDepartmentRollup6ID, DSSDepartmentRollup7ID, IsOverhead, OBIsDefined, IsOB, IsMRPlan, IsMRMetricTracking, IsActive, IsVariable, IsAccountFlexing, FlexingBucketGUID, OBGlobalStatisticsPlanID, OBReimbursementPlanID, OBServiceLinePlanID, SPIsDefined, IsLRFP, RollingPlanID, OpsPlanID, BalPlanID, PatientTypeRollup, SPJobCodeGroup, SPPhysicianGroup, SPAccountRollup, System, SystemSortOrder, Entity, EntitySortOrder, EntityTypeOverride, EntityCode, CareSetting, DepartmentRollup1, DepartmentRollup1SortOrder, DepartmentRollup2, DepartmentRollup2SortOrder, DepartmentRollup3, DepartmentRollup3SortOrder, DepartmentRollup4, DepartmentRollup4SortOrder, DepartmentRollup5, DepartmentRollup5SortOrder, DepartmentRollup6, DepartmentRollup6SortOrder, DSSDepartmentRollup1Name, DSSDepartmentRollup2Name, DSSDepartmentRollup3Name,DSSDepartmentRollup4Name,DSSDepartmentRollup5Name,DSSDepartmentRollup6Name,DSSDepartmentRollup7Name, FunctionalArea, ResearchDepartmentCategoryName, ResearchDepartmentCategorySortOrder, AttributionType, IsConsolidated, ConsolidatedCode, OBGlobalStatisticsPlan, OBReimbursementPlan, OBServiceLinePlan, SPRollingForecastPlanName, SPOperationsPlanName, SPBalanceSheetPlanName, IsDepartmentRollup, SPServiceLineForecastType, PatientTypeRollupName, DepartmentTypeID, DepartmentType, SPJobCodeGroupName, SPPhysicianGroupName, SPAccountRollupName, SecureGroupID, MemberGUID, HistoryItemGUID, WorkWeekID, CAPDefaultSalesTax, FundID, Fund, FundSortOrder, ProjectID, Project, ProjectSortOrder, HomeDepartmentID, HomeDepartment, HomeDepartmentSortOrder, ProgramID, Program, ProgramSortOrder, PayCycleID, FWIsDefined, DepartmentCodeRaw, IsPR, SPHDepartmentTypeID, SPHDepartmentType, Version, SPHDepartmentID, SPHDepartmentName, SPHDepartmentConfidenceScore, SPHDepartmentIsValidated, SPHDepartmentRollupID, SPHDepartmentRollupName, SPHDepartmentRollupConfidenceScore FROM fw.viewDimDepartment d WHERE (IsDepartmentRollup = 0 OR DepartmentID = 0) GO --------------------------------------------- -- fw.viewDimDepartment_source CREATE VIEW [fw].[viewDimDepartment_source] AS SELECT grp34146F449F3140ECB03A8BC6153DE46F.[DepartmentID] ,grp34146F449F3140ECB03A8BC6153DE46F.[Name] ,grp34146F449F3140ECB03A8BC6153DE46F.[EntityTypeOverride] ,grp34146F449F3140ECB03A8BC6153DE46F.[SPHDepartmentRollupID] ,grp34146F449F3140ECB03A8BC6153DE46F.[SPHDepartmentConfidenceScore] ,grp34146F449F3140ECB03A8BC6153DE46F.[SecureGroupID] ,grp34146F449F3140ECB03A8BC6153DE46F.[MemberGUID] ,grp34146F449F3140ECB03A8BC6153DE46F.[HistoryItemGUID] ,grp34146F449F3140ECB03A8BC6153DE46F.[IsMROrPR] ,grp34146F449F3140ECB03A8BC6153DE46F.[TransactionID] ,ISNULL([SYSTEM].[Name], 'Not Specified') as [System] ,ISNULL([SYSTEM].[SortOrder], 0) as [SystemSortOrder] ,ISNULL([ENT].[Name], 'Not Specified') as [Entity] ,ISNULL([ENT].[SortOrder], 0) as [EntitySortOrder] ,ISNULL([ENT].[Code], 'Not Specified') as [EntityCode] ,ISNULL([ENT].[SPServiceLineForecastType], 0) as [SPServiceLineForecastType] ,ISNULL([ENT].[WorkWeekID], 0) as [WorkWeekID] ,ISNULL([ENT].[CAPDefaultSalesTax], 0) as [CAPDefaultSalesTax] ,ISNULL([ENT].[PayCycleID], 0) as [PayCycleID] ,ISNULL([DeptRollup1].[Name], 'Not Specified') as [DepartmentRollup1] ,ISNULL([DeptRollup1].[SortOrder], 0) as [DepartmentRollup1SortOrder] ,ISNULL([DeptRollup1].[Code], 'Not Specified') as [DepartmentRollup1Code] ,ISNULL([DeptRollup2].[Name], 'Not Specified') as [DepartmentRollup2] ,ISNULL([DeptRollup2].[SortOrder], 0) as [DepartmentRollup2SortOrder] ,ISNULL([DeptRollup2].[Code], 'Not Specified') as [DepartmentRollup2Code] ,ISNULL([DeptRollup3].[Name], 'Not Specified') as [DepartmentRollup3] ,ISNULL([DeptRollup3].[SortOrder], 0) as [DepartmentRollup3SortOrder] ,ISNULL([DeptRollup3].[Code], 'Not Specified') as [DepartmentRollup3Code] ,ISNULL([DeptRollup4].[Name], 'Not Specified') as [DepartmentRollup4] ,ISNULL([DeptRollup4].[SortOrder], 0) as [DepartmentRollup4SortOrder] ,ISNULL([DeptRollup4].[Code], 'Not Specified') as [DepartmentRollup4Code] ,ISNULL([DeptRollup5].[Name], 'Not Specified') as [DepartmentRollup5] ,ISNULL([DeptRollup5].[SortOrder], 0) as [DepartmentRollup5SortOrder] ,ISNULL([DeptRollup5].[Code], 'Not Specified') as [DepartmentRollup5Code] ,ISNULL([DeptRollup6].[Name], 'Not Specified') as [DepartmentRollup6] ,ISNULL([DeptRollup6].[SortOrder], 0) as [DepartmentRollup6SortOrder] ,ISNULL([DeptRollup6].[Code], 'Not Specified') as [DepartmentRollup6Code] ,ISNULL([CARESETTING].[Name], 'Not Specified') as [CareSetting] ,ISNULL([FUNCTIONALAREA].[Name], 'Not Specified') as [FunctionalArea] ,ISNULL([RESEARCHDEPARTMENTCATEGORY].[Name], 'Not Specified') as [ResearchDepartmentCategoryName] ,ISNULL([RESEARCHDEPARTMENTCATEGORY].[SortOrder], 0) as [ResearchDepartmentCategorySortOrder] ,ISNULL([ATTRIBUTIONTYPE].[Name], 'Not Specified') as [AttributionType] ,ISNULL([DSSDEPTROLLUP1].[Name], 'Not Specified') as [DSSDepartmentRollup1Name] ,ISNULL([DSSDEPTROLLUP2].[Name], 'Not Specified') as [DSSDepartmentRollup2Name] ,ISNULL([DSSDEPTROLLUP3].[Name], 'Not Specified') as [DSSDepartmentRollup3Name] ,ISNULL([DSDEPTR4].[Name], 'Not Specified') as [DSSDepartmentRollup4Name] ,ISNULL([DSSDEPT5].[Name], 'Not Specified') as [DSSDepartmentRollup5Name] ,ISNULL([DSSDEPTROLL6].[Name], 'Not Specified') as [DSSDepartmentRollup6Name] ,ISNULL([DSSDEPARTMENTROLLUP7].[Name], 'Not Specified') as [DSSDepartmentRollup7Name] ,ISNULL([OBGLOBALSTATISTICSPLAN].[Name], 'Not Specified') as [OBGlobalStatisticsPlan] ,ISNULL([OBREIMBURSEMENTPLAN].[Name], 'Not Specified') as [OBReimbursementPlan] ,ISNULL([OBSERVICELINEPLAN].[Name], 'Not Specified') as [OBServiceLinePlan] ,ISNULL([SPRFPLAN].[Name], 'Not Specified') as [SPRollingForecastPlanName] ,ISNULL([SPLRPLAN].[Name], 'Not Specified') as [SPOperationsPlanName] ,ISNULL([SPLRPLAN_1].[Name], 'Not Specified') as [SPBalanceSheetPlanName] ,ISNULL([PatientTyRo].[Name], 'Not Specified') as [PatientTypeRollupName] ,ISNULL([JobCodeGrp].[Name], 'Not Specified') as [SPJobCodeGroupName] ,ISNULL([PhyGrp].[Name], 'Not Specified') as [SPPhysicianGroupName] ,ISNULL([SPAccountRollup].[Name], 'Not Specified') as [SPAccountRollupName] ,ISNULL([SPHDEPARTMENTROLLUP].[Name], 'Not Specified') as [SPHDepartmentRollupName] ,ISNULL([DEPTTYPE].[Name], 'Not Specified') as [DepartmentType] ,ISNULL([FUND].[Name], 'Not Specified') as [Fund] ,ISNULL([FUND].[SortOrder], 0) as [FundSortOrder] ,ISNULL([FWPROJECT].[Name], 'Not Specified') as [Project] ,ISNULL([FWPROJECT].[SortOrder], 0) as [ProjectSortOrder] ,ISNULL([FWPROJECT].[ProjectID], 0) as [HomeDepartmentID] ,ISNULL([HOMEDEPARTMENT].[Name], 'Not Specified') as [HomeDepartment] ,ISNULL([HOMEDEPARTMENT].[SortOrder], 0) as [HomeDepartmentSortOrder] ,ISNULL([PROGRAM].[Name], 'Not Specified') as [Program] ,ISNULL([PROGRAM].[SortOrder], 0) as [ProgramSortOrder] ,ISNULL([SPHDEPARTMENT].[Name], 'Not Specified') as [SPHDepartmentName] ,ISNULL([PRODUCTIVITYPERCENTILE].[Name], 'Not Specified') as [ProductivityPercentile] ,ISNULL([COMPANDEPARTMENT].[Description], 'Not Specified') as [CompAnDepartment] , [grp34146F449F3140ECB03A8BC6153DE46F].[Version]FROM [fw].[DimDepartment] grp34146F449F3140ECB03A8BC6153DE46F (readuncommitted) LEFT JOIN [fw].[viewDimSystem] [SYSTEM] on [SYSTEM].[SystemID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SystemID] LEFT JOIN [fw].[viewDimEntity] [ENT] on [ENT].[EntityID] = [grp34146F449F3140ECB03A8BC6153DE46F].[EntityID] LEFT JOIN [fw].[viewDimDepartmentRollup1] [DeptRollup1] on [DeptRollup1].[DepartmentRollup1ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup1ID] LEFT JOIN [fw].[viewDimDepartmentRollup2] [DeptRollup2] on [DeptRollup2].[DepartmentRollup2ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup2ID] LEFT JOIN [fw].[viewDimDepartmentRollup3] [DeptRollup3] on [DeptRollup3].[DepartmentRollup3ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup3ID] LEFT JOIN [fw].[viewDimDepartmentRollup4] [DeptRollup4] on [DeptRollup4].[DepartmentRollup4ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup4ID] LEFT JOIN [fw].[viewDimDepartmentRollup5] [DeptRollup5] on [DeptRollup5].[DepartmentRollup5ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup5ID] LEFT JOIN [fw].[viewDimDepartmentRollup6] [DeptRollup6] on [DeptRollup6].[DepartmentRollup6ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentRollup6ID] LEFT JOIN [fw].[viewDimCareSetting] [CARESETTING] on [CARESETTING].[CareSettingID] = [grp34146F449F3140ECB03A8BC6153DE46F].[CareSettingID] INNER JOIN [fw].[viewDimFunctionalArea] [FUNCTIONALAREA] on [FUNCTIONALAREA].[FunctionalAreaID] = [grp34146F449F3140ECB03A8BC6153DE46F].[FunctionalAreaID] LEFT JOIN [fw].[viewDimResearchDepartmentCategory] [RESEARCHDEPARTMENTCATEGORY] on [RESEARCHDEPARTMENTCATEGORY].[ResearchDepartmentCategoryID] = [grp34146F449F3140ECB03A8BC6153DE46F].[ResearchDepartmentCategoryID] INNER JOIN [dss].[viewDimAttributionType] [ATTRIBUTIONTYPE] on [ATTRIBUTIONTYPE].[AttributionTypeID] = [grp34146F449F3140ECB03A8BC6153DE46F].[AttributionTypeID] LEFT JOIN [dss].[viewDimDepartmentRollup1] [DSSDEPTROLLUP1] on [DSSDEPTROLLUP1].[DSSDepartmentRollup1ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup1ID] LEFT JOIN [dss].[viewDimDepartmentRollup2] [DSSDEPTROLLUP2] on [DSSDEPTROLLUP2].[DSSDepartmentRollup2ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup2ID] LEFT JOIN [dss].[viewDimDepartmentRollup3] [DSSDEPTROLLUP3] on [DSSDEPTROLLUP3].[DSSDepartmentRollup3ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup3ID] LEFT JOIN [dss].[viewDimDepartmentRollup4] [DSDEPTR4] on [DSDEPTR4].[DSSDepartmentRollup4ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup4ID] LEFT JOIN [dss].[viewDimDepartmentRollup5] [DSSDEPT5] on [DSSDEPT5].[DSSDepartmentRollup5ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup5ID] INNER JOIN [dss].[viewDimDepartmentRollup6] [DSSDEPTROLL6] on [DSSDEPTROLL6].[DSSDepartmentRollup6ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup6ID] LEFT JOIN [dss].[viewDimDepartmentRollup7] [DSSDEPARTMENTROLLUP7] on [DSSDEPARTMENTROLLUP7].[DSSDepartmentRollup7ID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DSSDepartmentRollup7ID] LEFT JOIN [ob].[viewDimOBGlobalStatisticsPlan] [OBGLOBALSTATISTICSPLAN] on [OBGLOBALSTATISTICSPLAN].[OBGlobalStatisticsPlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[OBGlobalStatisticsPlanID] LEFT JOIN [ob].[viewDimOBReimbursementPlan] [OBREIMBURSEMENTPLAN] on [OBREIMBURSEMENTPLAN].[OBReimbursementPlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[OBReimbursementPlanID] LEFT JOIN [ob].[viewDimOBServiceLinePlan] [OBSERVICELINEPLAN] on [OBSERVICELINEPLAN].[OBServiceLinePlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[OBServiceLinePlanID] LEFT JOIN [sp].[viewDimSPRollingForecastPlan] [SPRFPLAN] on [SPRFPLAN].[SPRollingForecastPlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[RollingPlanID] LEFT JOIN [sp].[viewDimSPLongRangePlan] [SPLRPLAN] on [SPLRPLAN].[SPLongRangePlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[OpsPlanID] LEFT JOIN [sp].[viewDimSPLongRangePlan] [SPLRPLAN_1] on [SPLRPLAN_1].[SPLongRangePlanID] = [grp34146F449F3140ECB03A8BC6153DE46F].[BalPlanID] LEFT JOIN [fw].[viewDimPatientTypeRollup] [PatientTyRo] on [PatientTyRo].[PatientTypeRollupID] = [grp34146F449F3140ECB03A8BC6153DE46F].[PatientTypeRollup] LEFT JOIN [fw].[viewDimJobCodeGroup] [JobCodeGrp] on [JobCodeGrp].[JobCodeGroupID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SPJobCodeGroup] LEFT JOIN [fw].[viewDimPhysicianGroup] [PhyGrp] on [PhyGrp].[PhysicianGroupID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SPPhysicianGroup] LEFT JOIN [sp].[viewDimAccountRollup] [SPAccountRollup] on [SPAccountRollup].[AccountRollupID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SPAccountRollup] LEFT JOIN [fw].[viewDimSPHDepartmentRollup] [SPHDEPARTMENTROLLUP] on [SPHDEPARTMENTROLLUP].[SPHDepartmentRollupID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SPHDepartmentRollupID] INNER JOIN [fw].[viewDimDepartmentType] [DEPTTYPE] on [DEPTTYPE].[DepartmentTypeID] = [grp34146F449F3140ECB03A8BC6153DE46F].[DepartmentTypeID] LEFT JOIN [fw].[viewDimFund] [FUND] on [FUND].[FundID] = [grp34146F449F3140ECB03A8BC6153DE46F].[FundID] LEFT JOIN [fw].[viewDimProject] [FWPROJECT] on [FWPROJECT].[ProjectID] = [grp34146F449F3140ECB03A8BC6153DE46F].[ProjectID] LEFT JOIN [fw].[viewDimHomeDepartment] [HOMEDEPARTMENT] on [HOMEDEPARTMENT].[HomeDepartmentID] = [grp34146F449F3140ECB03A8BC6153DE46F].[HomeDepartmentID] LEFT JOIN [fw].[viewDimProgram] [PROGRAM] on [PROGRAM].[ProgramID] = [grp34146F449F3140ECB03A8BC6153DE46F].[ProgramID] INNER JOIN [fw].[viewDimSPHDepartment_auto] [SPHDEPARTMENT] on [SPHDEPARTMENT].[SPHDepartmentID] = [grp34146F449F3140ECB03A8BC6153DE46F].[SPHDepartmentID] INNER JOIN [pi].[viewDimProductivityPercentile] [PRODUCTIVITYPERCENTILE] on [PRODUCTIVITYPERCENTILE].[ProductivityPercentileID] = [grp34146F449F3140ECB03A8BC6153DE46F].[ProductivityPercentileID] INNER JOIN [fw].[viewDimCompAnDepartment] [COMPANDEPARTMENT] on [COMPANDEPARTMENT].[CompAnDepartmentID] = [grp34146F449F3140ECB03A8BC6153DE46F].[CompAnDepartmentID] GO --------------------------------------------- -- fw.viewDimDepartment_triggers CREATE view fw.viewDimDepartment_triggers as select d.FriendlyName as RefreshDimension, 'exec procScoreSetDimensionSecurity30 ''' + cast(d.DimensionGUID as nvarchar(36)) + ''',0,0' as RefreshSQL, 'drop trigger fw.' + tg.Name as DropSQL from sys.triggers tg inner join [dbo].[ScoreDimension] d on tg.name like '%' + replace(cast(d.DimensionGUID as nvarchar(36)),'-', '') + '%' where tg.parent_id in(select t.object_id from sys.tables t inner join sys.schemas s on s.schema_id = t.schema_id where t.name = 'DimDepartment' and s.name = 'fw') and name like '%ScoreDimension%' GO --------------------------------------------- -- fw.viewDimEmployee CREATE VIEW [fw].[viewDimEmployee] AS SELECT [EmployeeID], COALESCE([Name],'') as [Name], [NameLast], [NameFirst], [Number], [JobCodeID], [Code], [OBIsDefined], [WageRate], [IsProvider], [ProviderID], COALESCE([JobCode],'') as [JobCode], COALESCE([JobCodeCode],'') as [JobCodeCode], [IsVariable], [HireDate], [IsActive], [Status], [NextReview], [MemberGUID], [HistoryItemGUID], [WorkWeekOverrideID], [HomeDepartmentID], COALESCE([HomeDepartment],'') as [HomeDepartment], COALESCE([HomeDepartmentCode],'') as [HomeDepartmentCode], COALESCE([NameFull],'') as [NameFull], [EmployeeCohortID], COALESCE([EmployeeCohortName],'') as [EmployeeCohortName], [EmployeeCohortContractDate], COALESCE([EmployeeCohortMeritType],'') as [EmployeeCohortMeritType], [StandardHours], [FWIsDefined], [TerminationDate], [AdjustedHireDate], [FTETotal], [HomeAccountID], COALESCE([HomeAccount],'') as [HomeAccount], COALESCE([HomeAccountCode],'') as [HomeAccountCode], [EmployeeClass], [NPI], [TransactionID], [PositionControlNumber] ,[Version] FROM [fw].[DimEmployee] (readuncommitted) GO --------------------------------------------- -- fw.viewDimEmployeeCohort --Last Modified 4/13/2015 3:16 PM CREATE VIEW [fw].[viewDimEmployeeCohort] AS SELECT grp62E0F8DE46CB42D18A44A996145E4741.[EmployeeCohortID] ,grp62E0F8DE46CB42D18A44A996145E4741.[Name] ,grp62E0F8DE46CB42D18A44A996145E4741.[Code] ,grp62E0F8DE46CB42D18A44A996145E4741.[Description] ,grp62E0F8DE46CB42D18A44A996145E4741.[MeritType] ,grp62E0F8DE46CB42D18A44A996145E4741.[ContractDate] ,grp62E0F8DE46CB42D18A44A996145E4741.[SortOrder] ,grp62E0F8DE46CB42D18A44A996145E4741.[TransactionID] ,grp62E0F8DE46CB42D18A44A996145E4741.[MemberGUID] ,grp62E0F8DE46CB42D18A44A996145E4741.[HistoryItemGUID] FROM [fw].[DimEmployeeCohort] grp62E0F8DE46CB42D18A44A996145E4741 (readuncommitted) GO --------------------------------------------- -- fw.viewDimEmployeePH CREATE VIEW [fw].[viewDimEmployeePH] AS SELECT grpAE7FA4E45FE14270A057580F39CDA6F1.[EmployeePHID] ,grpAE7FA4E45FE14270A057580F39CDA6F1.[Name] ,grpAE7FA4E45FE14270A057580F39CDA6F1.[MemberGUID] FROM [fw].[DimEmployeePH] grpAE7FA4E45FE14270A057580F39CDA6F1 (readuncommitted) GO --------------------------------------------- -- fw.viewDimEmployee_source CREATE VIEW [fw].[viewDimEmployee_source] AS SELECT grp304BAC4BC73943CCBFF4E85B307B146A.[EmployeeID] ,grp304BAC4BC73943CCBFF4E85B307B146A.[Name] ,grp304BAC4BC73943CCBFF4E85B307B146A.[MemberGUID] ,grp304BAC4BC73943CCBFF4E85B307B146A.[HistoryItemGUID] ,grp304BAC4BC73943CCBFF4E85B307B146A.[NameFull] ,grp304BAC4BC73943CCBFF4E85B307B146A.[TransactionID] ,ISNULL([JOBCODE].[Name], 'Not Specified') as [JobCode] ,ISNULL([JOBCODE].[JobCode], 'Not Specified') as [JobCodeCode] ,ISNULL([JOBCODE].[IsVariable], 0) as [IsVariable] ,ISNULL([JOBCODE].[WorkWeekOverrideID], 0) as [WorkWeekOverrideID] ,ISNULL([DEPT].[Name], 'Not Specified') as [HomeDepartment] ,ISNULL([DEPT].[DepartmentCode], 'Not Specified') as [HomeDepartmentCode] ,ISNULL([EMPLOYEECOHORT].[Name], 'Not Specified') as [EmployeeCohortName] ,ISNULL([EMPLOYEECOHORT].[ContractDate], getdate()) as [EmployeeCohortContractDate] ,ISNULL([EMPLOYEECOHORT].[MeritType], 'Not Specified') as [EmployeeCohortMeritType] ,ISNULL([ACCT].[Name], 'Not Specified') as [HomeAccount] ,ISNULL([ACCT].[AccountCode], 'Not Specified') as [HomeAccountCode] , [grp304BAC4BC73943CCBFF4E85B307B146A].[Version]FROM [fw].[DimEmployee] grp304BAC4BC73943CCBFF4E85B307B146A (readuncommitted) LEFT JOIN [fw].[viewDimJobCode] [JOBCODE] on [JOBCODE].[JobCodeID] = [grp304BAC4BC73943CCBFF4E85B307B146A].[JobCodeID] LEFT JOIN [fw].[viewDimDepartment] [DEPT] on [DEPT].[DepartmentID] = [grp304BAC4BC73943CCBFF4E85B307B146A].[HomeDepartmentID] INNER JOIN [fw].[viewDimEmployeeCohort] [EMPLOYEECOHORT] on [EMPLOYEECOHORT].[EmployeeCohortID] = [grp304BAC4BC73943CCBFF4E85B307B146A].[EmployeeCohortID] INNER JOIN [fw].[viewDimAccount] [ACCT] on [ACCT].[AccountID] = [grp304BAC4BC73943CCBFF4E85B307B146A].[HomeAccountID] GO --------------------------------------------- -- fw.viewDimEntity CREATE VIEW [fw].[viewDimEntity] AS SELECT [EntityID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [EntityType], [IsActive], [CAPIsDefined], [DSSIsDefined], [OBIsDefined], [OBBenefitsDepartmentID], COALESCE([OBBenefitsDepartment],'') as [OBBenefitsDepartment], [OBHasGlobalStatisticsPlan], [OBHasReimbursementPlan], [OBHasServiceLinePlan], [OBIsUsingProviderComp], [SPIsDefined], [SPGrossChargesPatientTypeRollup], [SPGrossChargesPayorGroup], [SPContractualsPatientTypeRollup], [SPContractualsPayorGroup], [SPIPVolumesPatientTypeRollup], [SPIPVolumesPayorGroup], [SPIPDaysPatientTypeRollup], [SPIPDaysPayorGroup], [SPOPVolumesPatientTypeRollup], [SPOPVolumesPayorGroup], [SPFTEsJobCodeGroup], [SPSalariesJobCodeGroup], [SPClinicGrossChargesPayorGroup], [SPClinicContractualsPayorGroup], [SPClinicPrimaryVolumePhysicianGroup], [SPClinicSecondaryVolumePhysicianGroup], [SPClinicFTEsPhysicianGroup], [SPClinicSalariesPhysicianGroup], [SPOperationsSLDrivenModelID], [SPRollingForecastSLDrivenModelID], [SPServiceLineForecastType], [SecureGroupID], [WorkWeekID], [TransactionID], [PayCycleID], [HistoryItemGUID], [MemberGUID], [CAPDefaultSalesTax], [FWIsDefined], [EliminationsDepartmentID], [CompAnPeerGroupID] FROM [fw].[DimEntity] (readuncommitted) GO --------------------------------------------- -- fw.viewDimEntityPH Create VIEW [fw].[viewDimEntityPH] AS SELECT [EntityPHID], [Name], [MemberGUID], [HistoryItemGUID], [TransactionID] FROM [fw].[DimEntityPH] (readuncommitted) GO --------------------------------------------- -- fw.viewDimEntity_source CREATE VIEW [fw].[viewDimEntity_source] AS SELECT grpDE819FBD8CE84979B478F0E94260A8F7.[EntityID] ,grpDE819FBD8CE84979B478F0E94260A8F7.[Name] ,grpDE819FBD8CE84979B478F0E94260A8F7.[SecureGroupID] ,grpDE819FBD8CE84979B478F0E94260A8F7.[TransactionID] ,grpDE819FBD8CE84979B478F0E94260A8F7.[HistoryItemGUID] ,grpDE819FBD8CE84979B478F0E94260A8F7.[MemberGUID] ,ISNULL([DEPT].[Name], 'Not Specified') as [OBBenefitsDepartment] FROM [fw].[DimEntity] grpDE819FBD8CE84979B478F0E94260A8F7 (readuncommitted) INNER JOIN [fw].[viewDimDepartment] [DEPT] on [DEPT].[DepartmentID] = [grpDE819FBD8CE84979B478F0E94260A8F7].[OBBenefitsDepartmentID] GO --------------------------------------------- -- fw.viewDimFiscalMonth --Last Modified 5/8/2015 5:50 PM CREATE VIEW [fw].[viewDimFiscalMonth] AS SELECT grpC5A4CCC2DC85403F8A1BD9849CF14E18.[FiscalMonthID] ,coalesce(grpC5A4CCC2DC85403F8A1BD9849CF14E18.[Name],'') as [Name] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[FiscalMonthCode] ,coalesce(grpC5A4CCC2DC85403F8A1BD9849CF14E18.[Abbreviation],'') as [Abbreviation] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[QuarterID] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[SortOrder] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[DaysInMonth] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[YTDDaysInMonth] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[MemberGUID] ,coalesce(grpC5A4CCC2DC85403F8A1BD9849CF14E18.[MonthColumnName],'') as [MonthColumnName] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[HistoryItemGUID] ,grpC5A4CCC2DC85403F8A1BD9849CF14E18.[IsReal] , [grpC5A4CCC2DC85403F8A1BD9849CF14E18].[Version]FROM [fw].[DimFiscalMonth] grpC5A4CCC2DC85403F8A1BD9849CF14E18 (readuncommitted) GO --------------------------------------------- -- fw.viewDimFiscalTime --Last Modified 3/15/2022 10:09 PM CREATE VIEW [fw].[viewDimFiscalTime] AS SELECT grp32094482DE9943D5832B9F8295DACBDF.[FiscalTimeID] ,grp32094482DE9943D5832B9F8295DACBDF.[FiscalTime] ,grp32094482DE9943D5832B9F8295DACBDF.[TransactionID] ,grp32094482DE9943D5832B9F8295DACBDF.[MemberGUID] ,grp32094482DE9943D5832B9F8295DACBDF.[HistoryItemGUID] ,grp32094482DE9943D5832B9F8295DACBDF.[FiscalYearID] ,grp32094482DE9943D5832B9F8295DACBDF.[FiscalMonthID] ,grp32094482DE9943D5832B9F8295DACBDF.[YearMonth] ,grp32094482DE9943D5832B9F8295DACBDF.[CountFromCurrentMonth] ,grp32094482DE9943D5832B9F8295DACBDF.[StartDate] ,grp32094482DE9943D5832B9F8295DACBDF.[EndDate] FROM [fw].[DimFiscalTime] grp32094482DE9943D5832B9F8295DACBDF (readuncommitted) GO --------------------------------------------- -- fw.viewDimFiscalYear --Last Modified 5/8/2015 5:50 PM CREATE VIEW [fw].[viewDimFiscalYear] AS SELECT grp07DC08C1A3354C289D66B7FAF5CEC935.[FiscalYearID] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[MemberGUID] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[Name] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[SortOrder] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[IsSP] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[HistoryItemGUID] ,grp07DC08C1A3354C289D66B7FAF5CEC935.[IsCAP] , [grp07DC08C1A3354C289D66B7FAF5CEC935].[Version]FROM [fw].[DimFiscalYear] grp07DC08C1A3354C289D66B7FAF5CEC935 (readuncommitted) GO --------------------------------------------- -- fw.viewDimFiscalYearPH_auto CREATE VIEW [fw].[viewDimFiscalYearPH_auto] AS SELECT grp74AEECE5F9BE4AAFA6BADD6EF917266F.[Name] ,grp74AEECE5F9BE4AAFA6BADD6EF917266F.[MemberGUID] ,grp74AEECE5F9BE4AAFA6BADD6EF917266F.[FiscalYearPHID] ,grp74AEECE5F9BE4AAFA6BADD6EF917266F.[HistoryItemGUID] , [grp74AEECE5F9BE4AAFA6BADD6EF917266F].[Version]FROM [fw].[DimFiscalYearPH] grp74AEECE5F9BE4AAFA6BADD6EF917266F (readuncommitted) GO --------------------------------------------- -- fw.viewDimFlag --Last Modified 4/12/2019 11:35 AM CREATE VIEW [fw].[viewDimFlag] AS SELECT grp7ECC55FC3D4F41479EA1C29BC253029B.[FlagID] ,grp7ECC55FC3D4F41479EA1C29BC253029B.[Code] ,grp7ECC55FC3D4F41479EA1C29BC253029B.[Description] ,coalesce(grp7ECC55FC3D4F41479EA1C29BC253029B.[Name],'') as [Name] ,grp7ECC55FC3D4F41479EA1C29BC253029B.[TransactionID] ,grp7ECC55FC3D4F41479EA1C29BC253029B.[MemberGUID] ,grp7ECC55FC3D4F41479EA1C29BC253029B.[HistoryItemGUID] FROM [fw].[DimFlag] grp7ECC55FC3D4F41479EA1C29BC253029B (readuncommitted) GO --------------------------------------------- -- fw.viewDimFlexJobCodeGroup --Last Modified 2/25/2015 11:46 AM CREATE VIEW [fw].[viewDimFlexJobCodeGroup] AS SELECT grp37D108FB34FF431799A3DD4B6EDB7CDC.[FlexJobCodeGroupID] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[Name] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[Code] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[SortOrder] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[TransactionID] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[MemberGUID] ,grp37D108FB34FF431799A3DD4B6EDB7CDC.[HistoryItemGUID] FROM [fw].[DimFlexJobCodeGroup] grp37D108FB34FF431799A3DD4B6EDB7CDC (readuncommitted) GO --------------------------------------------- -- fw.viewDimForecastDetail CREATE VIEW [fw].[viewDimForecastDetail] AS SELECT [ForecastDetailID], COALESCE([Name],'') as [Name], [ForecastDetailCode], [Description], [CAPForecastDetailID], [CPIsDefined], [OBForecastDetailID], [OBIsDefined], [SPAccountRollupID], [SPIsDefined], [TransactionID], [SPCostComponentID], [MemberGUID], [HistoryItemGUID] FROM [fw].[DimForecastDetail] (readuncommitted) GO --------------------------------------------- -- fw.viewDimForecastDetail_source CREATE VIEW [fw].[viewDimForecastDetail_source] AS SELECT grp19542254A1554DCB89A76BAACAB6E162.[ForecastDetailID] ,grp19542254A1554DCB89A76BAACAB6E162.[Name] ,grp19542254A1554DCB89A76BAACAB6E162.[TransactionID] ,grp19542254A1554DCB89A76BAACAB6E162.[MemberGUID] ,grp19542254A1554DCB89A76BAACAB6E162.[HistoryItemGUID] FROM [fw].[DimForecastDetail] grp19542254A1554DCB89A76BAACAB6E162 (readuncommitted) GO --------------------------------------------- -- fw.viewDimFramework CREATE view [fw].[viewDimFramework] as select fwk.FrameworkID, fwk.Name, fwk.Abbreviation, fwk.FrameworkSchemaName, fwk.ClientSchemaName, fwk.IsLatestDataModel, case when fwk.Name = 'General' then cast(1 as bit) else cast(max(cast(isnull(m.IsLicensed, 0) as int)) as bit) end as IsLicensed, cast(max(cast(isnull(m.IsSetupComplete, 0) as int)) as bit) as IsSetupComplete from [fw].[DimFramework] fwk left join [dbo].[SystemCenterSolution] s on s.Name = fwk.Name left join [dbo].[SystemCenterModule] m on m.SolutionGUID = s.SolutionGUID or m.Name = fwk.Name group by fwk.FrameworkID, fwk.Name, fwk.Abbreviation, fwk.FrameworkSchemaName, fwk.ClientSchemaName, fwk.IsLatestDataModel GO --------------------------------------------- -- fw.viewDimFramework_auto CREATE VIEW [fw].[viewDimFramework_auto] AS SELECT coalesce(grp67F5902643D4451785A9B828FC66FFFD.[Name],'') as [Name] ,grp67F5902643D4451785A9B828FC66FFFD.[MemberGUID] ,grp67F5902643D4451785A9B828FC66FFFD.[FrameworkID] , [grp67F5902643D4451785A9B828FC66FFFD].[Version], [grp67F5902643D4451785A9B828FC66FFFD].[HistoryItemGUID]FROM [fw].[DimFramework] grp67F5902643D4451785A9B828FC66FFFD (readuncommitted) GO --------------------------------------------- -- fw.viewDimFunctionalArea CREATE VIEW [fw].[viewDimFunctionalArea] AS SELECT grp6CD1220F54B84B4F9BA381B12A98DDB4.[FunctionalAreaID] ,grp6CD1220F54B84B4F9BA381B12A98DDB4.[Name] ,grp6CD1220F54B84B4F9BA381B12A98DDB4.[TransactionID] ,grp6CD1220F54B84B4F9BA381B12A98DDB4.[MemberGUID] ,grp6CD1220F54B84B4F9BA381B12A98DDB4.[HistoryItemGUID] FROM [fw].[DimFunctionalArea] grp6CD1220F54B84B4F9BA381B12A98DDB4 (readuncommitted) GO --------------------------------------------- -- fw.viewDimFund --Last Modified 5/27/2015 1:34 PM CREATE VIEW [fw].[viewDimFund] AS SELECT grp15688121574D4B38A25965FF7CA63FCE.[FundID] ,coalesce(grp15688121574D4B38A25965FF7CA63FCE.[Name],'') as [Name] ,grp15688121574D4B38A25965FF7CA63FCE.[Code] ,grp15688121574D4B38A25965FF7CA63FCE.[Description] ,grp15688121574D4B38A25965FF7CA63FCE.[SortOrder] ,grp15688121574D4B38A25965FF7CA63FCE.[TransactionID] ,grp15688121574D4B38A25965FF7CA63FCE.[MemberGUID] ,grp15688121574D4B38A25965FF7CA63FCE.[HistoryItemGUID] FROM [fw].[DimFund] grp15688121574D4B38A25965FF7CA63FCE (readuncommitted) GO --------------------------------------------- -- fw.viewDimGLAndPayrollInitiative --Last Modified 9/12/2022 9:10 PM CREATE VIEW [fw].[viewDimGLAndPayrollInitiative] AS SELECT grpBE8428F4CC9543D192CBE7EBD767DB6C.[GLAndPayrollInitiativeGUID] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[Name] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[Owner] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[Author] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[CostLeader] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[ExecutiveSponsor] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[EffectiveDate] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[AnnualGoal] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[DateCreated] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[GoalStartDate] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[GoalEndDate] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[SavingsEstimate] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[SourceOfSavings] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[Description] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[Workstream] ,grpBE8428F4CC9543D192CBE7EBD767DB6C.[InitiativeStatus] FROM [cci].[viewDimGLAndPayrollInitiative] grpBE8428F4CC9543D192CBE7EBD767DB6C GO --------------------------------------------- -- fw.viewDimGLAndPayrollOpportunity --Last Modified 9/12/2022 9:10 PM CREATE VIEW [fw].[viewDimGLAndPayrollOpportunity] AS SELECT grp45B56B6F4F434F229DB3FA943E5107AE.[GLAndPayrollOpportunityGUID] ,grp45B56B6F4F434F229DB3FA943E5107AE.[Name] ,grp45B56B6F4F434F229DB3FA943E5107AE.[Owner] ,grp45B56B6F4F434F229DB3FA943E5107AE.[AnnualGoal] ,grp45B56B6F4F434F229DB3FA943E5107AE.[SavingsEstimate] ,grp45B56B6F4F434F229DB3FA943E5107AE.[OpportunityKey] ,grp45B56B6F4F434F229DB3FA943E5107AE.[DateCreated] ,grp45B56B6F4F434F229DB3FA943E5107AE.[BaselineStartDate] ,grp45B56B6F4F434F229DB3FA943E5107AE.[BaselineEndDate] ,grp45B56B6F4F434F229DB3FA943E5107AE.[SavingsIdentified] ,grp45B56B6F4F434F229DB3FA943E5107AE.[SavingsGoal] ,grp45B56B6F4F434F229DB3FA943E5107AE.[HasInitiative] ,grp45B56B6F4F434F229DB3FA943E5107AE.[SourceOfSavings] ,grp45B56B6F4F434F229DB3FA943E5107AE.[IsHidden] FROM [cci].[viewDimGLAndPayrollOpportunity] grp45B56B6F4F434F229DB3FA943E5107AE GO --------------------------------------------- -- fw.viewDimGLPostDate CREATE VIEW [fw].[viewDimGLPostDate] AS SELECT DateID AS [GLPostDateID] ,TransactionID ,DayNumberOfWeek ,DayNameOfWeek ,DayNumberOfMonth ,DayNumberOfYear ,WeekNumberOfYear ,IsWeekDay ,CalendarQuarter ,CalendarDateTime ,CalendarYear ,CalendarMonth ,CalendarMonthName ,FiscalYear ,FiscalYearName ,HistoryItemGUID ,MemberGUID ,FiscalMonth ,FiscalQuarter ,YearMonth ,MonthYear ,DaysInMonth ,PremierMapping FROM [fw].[DimDate]; GO --------------------------------------------- -- fw.viewDimGLPostDate_auto --Last Modified 6/8/2020 3:11 PM CREATE VIEW [fw].[viewDimGLPostDate_auto] AS SELECT grp5D0EB954A8774F2B9816D9D0814D3F9F.[GLPostDateID] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[TransactionID] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[DayNumberOfWeek] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[DayNameOfWeek] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[DayNumberOfMonth] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[DayNumberOfYear] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[WeekNumberOfYear] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[IsWeekDay] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[CalendarQuarter] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[CalendarDateTime] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[CalendarYear] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[CalendarMonth] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[CalendarMonthName] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[FiscalYear] ,coalesce(grp5D0EB954A8774F2B9816D9D0814D3F9F.[FiscalYearName],'') as [FiscalYearName] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[HistoryItemGUID] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[MemberGUID] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[FiscalMonth] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[FiscalQuarter] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[YearMonth] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[MonthYear] ,grp5D0EB954A8774F2B9816D9D0814D3F9F.[DaysInMonth] ,coalesce(grp5D0EB954A8774F2B9816D9D0814D3F9F.[PremierMapping],'') as [PremierMapping] FROM [fw].[viewDimGLPostDate] grp5D0EB954A8774F2B9816D9D0814D3F9F GO --------------------------------------------- -- fw.viewDimGMTestFWProj CREATE VIEW [fw].[viewDimGMTestFWProj] AS SELECT grpDB12BF7D35E34296A3CBFCDACB880F51.[GMTestFWDateCreated] ,grpDB12BF7D35E34296A3CBFCDACB880F51.[GMTestFWName] ,grpDB12BF7D35E34296A3CBFCDACB880F51.[MemberGUID] ,grpDB12BF7D35E34296A3CBFCDACB880F51.[GMTestFWProjID] ,ISNULL([DimXP].[PlanID], 0) as [PlanID] ,ISNULL([DimXP].[Name], 'Not Specified') as [Name] FROM [cap].[DimGMTestFWProj] grpDB12BF7D35E34296A3CBFCDACB880F51 (readuncommitted) INNER JOIN [fw].[viewDimXPlan_auto] [DimXP] on [DimXP].[MemberGUID] = [grpDB12BF7D35E34296A3CBFCDACB880F51].[MemberGUID] GO --------------------------------------------- -- fw.viewDimHealthPlanRegion CREATE VIEW [fw].[viewDimHealthPlanRegion] AS SELECT DepartmentRollup1ID AS [HealthPlanRegionID] ,Name ,Code AS [Code] ,Description ,SortOrder ,SecureGroupID ,MemberGUID ,HistoryItemGUID ,EliminationsDepartmentID FROM [fw].[DimDepartmentRollup1]; GO --------------------------------------------- -- fw.viewDimHealthPlanRegion_auto --Last Modified 10/30/2018 9:41 AM CREATE VIEW [fw].[viewDimHealthPlanRegion_auto] AS SELECT grp59F984CE07874F708A1B24F9C8376E7D.[HealthPlanRegionID] ,coalesce(grp59F984CE07874F708A1B24F9C8376E7D.[Name],'') as [Name] ,grp59F984CE07874F708A1B24F9C8376E7D.[Code] ,grp59F984CE07874F708A1B24F9C8376E7D.[Description] ,grp59F984CE07874F708A1B24F9C8376E7D.[SortOrder] ,grp59F984CE07874F708A1B24F9C8376E7D.[SecureGroupID] ,grp59F984CE07874F708A1B24F9C8376E7D.[MemberGUID] ,grp59F984CE07874F708A1B24F9C8376E7D.[HistoryItemGUID] ,grp59F984CE07874F708A1B24F9C8376E7D.[EliminationsDepartmentID] FROM [fw].[viewDimHealthPlanRegion] grp59F984CE07874F708A1B24F9C8376E7D GO --------------------------------------------- -- fw.viewDimHomeDepartment --Last Modified 5/26/2015 10:11 AM CREATE VIEW [fw].[viewDimHomeDepartment] AS SELECT grp4A1ECAA1FE314B2F8C73E9A238625529.[HomeDepartmentID] ,coalesce(grp4A1ECAA1FE314B2F8C73E9A238625529.[Name],'') as [Name] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[Code] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[Description] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[SortOrder] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[TransactionID] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[MemberGUID] ,grp4A1ECAA1FE314B2F8C73E9A238625529.[HistoryItemGUID] FROM [fw].[DimHomeDepartment] grp4A1ECAA1FE314B2F8C73E9A238625529 (readuncommitted) GO --------------------------------------------- -- fw.viewDimInitiative CREATE VIEW [fw].[viewDimInitiative] AS SELECT grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Name] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Description] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[MemberGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[MemberGUID] AS [InitiativeGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[HistoryItemGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[TransactionID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeStatusID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeStatus] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[AuthorGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Author] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[CostLeaderGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[CostLeader] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[OwnerGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Owner] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[ExecutiveSponsorGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[ExecutiveSponsor] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SourceOfSavingsID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SourceOfSavings] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Workstream] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[DateCreated] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[EffectiveDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[GoalStartDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[GoalEndDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[AnnualGoal] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SavingsEstimate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup1ID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup1] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup2ID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup2] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup3ID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeRollup3] FROM [fw].[DimInitiative] grp63E2E9DC1F4747C7A31CA6E43ECE1FF4 GO --------------------------------------------- -- fw.viewDimInitiativeStatus --Last Modified 10/31/2018 10:40 AM CREATE VIEW [fw].[viewDimInitiativeStatus] AS SELECT grpC9DC306912F4434CA7D806FB28CC0AF9.[InitiativeStatusID] ,grpC9DC306912F4434CA7D806FB28CC0AF9.[Name] ,grpC9DC306912F4434CA7D806FB28CC0AF9.[MemberGUID] ,grpC9DC306912F4434CA7D806FB28CC0AF9.[HistoryItemGUID] ,grpC9DC306912F4434CA7D806FB28CC0AF9.[TransactionID] FROM [fw].[DimInitiativeStatus] grpC9DC306912F4434CA7D806FB28CC0AF9 (readuncommitted) GO --------------------------------------------- -- fw.viewDimInitiative_auto --Last Modified 7/10/2024 5:05 PM CREATE VIEW [fw].[viewDimInitiative_auto] AS SELECT grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Name] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[TransactionID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[MemberGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[HistoryItemGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Description] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Workstream] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[DateCreated] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[Author] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[EffectiveDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SourceOfSavingsId] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SourceOfSavings] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[InitiativeStatusID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[GoalStartDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[GoalEndDate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[CostLeaderGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[AnnualGoal] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[SavingsEstimate] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[OwnerGUID] ,grp63E2E9DC1F4747C7A31CA6E43ECE1FF4.[ExecutiveSponsorGUID] ,ISNULL([INITIATIVESTATUS].[Name], 'Not Specified') as [InitiativeStatus] ,ISNULL([CICOSTLEADER].[NameFull], 'Not Specified') as [CostLeader] ,ISNULL([CIOWNER].[NameFull], 'Not Specified') as [Owner] ,ISNULL([CIEXECUTIVESPONSOR].[NameFull], 'Not Specified') as [ExecutiveSponsor] FROM [fw].[viewDimInitiative] grp63E2E9DC1F4747C7A31CA6E43ECE1FF4 INNER JOIN [fw].[viewDimInitiativeStatus] [INITIATIVESTATUS] on [INITIATIVESTATUS].[InitiativeStatusID] = [grp63E2E9DC1F4747C7A31CA6E43ECE1FF4].[InitiativeStatusID] INNER JOIN [fw].[viewDimCICostLeader_auto] [CICOSTLEADER] on [CICOSTLEADER].[CICostLeaderID] = [grp63E2E9DC1F4747C7A31CA6E43ECE1FF4].[CostLeaderGUID] INNER JOIN [fw].[viewDimCIOwner_auto] [CIOWNER] on [CIOWNER].[CIOwnerID] = [grp63E2E9DC1F4747C7A31CA6E43ECE1FF4].[OwnerGUID] INNER JOIN [fw].[viewDimCIExecutiveSponsor_auto] [CIEXECUTIVESPONSOR] on [CIEXECUTIVESPONSOR].[CIExecutiveSponsorID] = [grp63E2E9DC1F4747C7A31CA6E43ECE1FF4].[ExecutiveSponsorGUID] GO --------------------------------------------- -- fw.viewDimJobCode --Last Modified 8/21/2024 10:16 AM CREATE VIEW [fw].[viewDimJobCode] AS SELECT grpAAD69FC0ED76427EA52ED356470BFE0A.[JobCodeID] ,coalesce(grpAAD69FC0ED76427EA52ED356470BFE0A.[Name],'') as [Name] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[JobCode] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[Description] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[JobCodeGroupID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsVariable] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsPR] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsDaily] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsActive] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsProvider] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsAgency] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSCostingRollup] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSRate] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[OBIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[FlexBucketGUID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SPIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[Rollup] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[Variability] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[MemberGUID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[FlexJobCodeGroupID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[HistoryItemGUID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[WorkWeekOverrideID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSCostingRollup2] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSCostingRollup3] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[FWIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[PRIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[CIIsDefined] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsPatientCare] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsBedside] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[IsLicensed] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[ManagementLevel] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSCostComponentID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SkillMix] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSJobCodeRollup1ID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSJobCodeRollup2ID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[DSSJobCodeRollup3ID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SPHJobCodeRollupID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SPHJobCodeRollupIsValidated] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[TransactionID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SPHVariability] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[StaffingCategoryID] ,grpAAD69FC0ED76427EA52ED356470BFE0A.[SPHJobCodeRollupConfidenceScore] ,ISNULL([JobCodeGrp].[Name], 'Not Specified') as [JobCodeGroup] ,ISNULL([FLEXJOBCODEGROUP].[Name], 'Not Specified') as [FlexJobCodeGroup] ,ISNULL([DSJCROL].[Name], 'Not Specified') as [DSSCostComponent] ,ISNULL([DSJCROL_1].[Name], 'Not Specified') as [DSSJobCodeRollup1] ,ISNULL([DSSJOBCODEROLLUP2].[Name], 'Not Specified') as [DSSJobCodeRollup2] ,ISNULL([DSSJOBCODEROLLUP3].[Name], 'Not Specified') as [DSSJobCodeRollup3] ,ISNULL([SPHJOBCODEROLLUP].[Name], 'Not Specified') as [SPHJobCodeRollupName] ,ISNULL([SPHJOBCODEROLLUP].[SPHCostComponent], 'Not Specified') as [SPHCostComponent] ,ISNULL([STAFFINGCATEGORY].[Name], 'Not Specified') as [StaffingCategory] , [grpAAD69FC0ED76427EA52ED356470BFE0A].[Version]FROM [fw].[DimJobCode] grpAAD69FC0ED76427EA52ED356470BFE0A (readuncommitted) LEFT JOIN [fw].[viewDimJobCodeGroup] [JobCodeGrp] on [JobCodeGrp].[JobCodeGroupID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[JobCodeGroupID] LEFT JOIN [fw].[viewDimFlexJobCodeGroup] [FLEXJOBCODEGROUP] on [FLEXJOBCODEGROUP].[FlexJobCodeGroupID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[FlexJobCodeGroupID] INNER JOIN [dss].[viewDimDSSJobCodeRollup1] [DSJCROL] on [DSJCROL].[DSSJobCodeRollup1ID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[DSSCostComponentID] INNER JOIN [dss].[viewDimDSSJobCodeRollup1] [DSJCROL_1] on [DSJCROL_1].[DSSJobCodeRollup1ID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[DSSJobCodeRollup1ID] LEFT JOIN [dss].[viewDimJobCodeRollup2] [DSSJOBCODEROLLUP2] on [DSSJOBCODEROLLUP2].[DSSJobCodeRollup2ID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[DSSJobCodeRollup2ID] INNER JOIN [dss].[viewDimJobCodeRollup3] [DSSJOBCODEROLLUP3] on [DSSJOBCODEROLLUP3].[DSSJobCodeRollup3ID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[DSSJobCodeRollup3ID] INNER JOIN [fw].[viewDimSPHJobCodeRollup] [SPHJOBCODEROLLUP] on [SPHJOBCODEROLLUP].[SPHJobCodeRollupID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[SPHJobCodeRollupID] INNER JOIN [fw].[viewDimStaffingCategory_auto] [STAFFINGCATEGORY] on [STAFFINGCATEGORY].[StaffingCategoryID] = [grpAAD69FC0ED76427EA52ED356470BFE0A].[StaffingCategoryID] GO --------------------------------------------- -- fw.viewDimJobCodeGroup CREATE VIEW [fw].[viewDimJobCodeGroup] AS SELECT [JobCodeGroupID], [Category], [Name], [SPStaffType], [SPSalariesFinancialReportingID], [SPFTEsFinancialReportingID], [SPDefaultVolumeDriver], [CAPFinancialReportingID], [IsSP], [IsCapital], [IsOB], [IsMR], [IsDSS], [SortOrder], COALESCE([SPSalariesFinancialReporting],'') as [SPSalariesFinancialReporting], COALESCE([SPFTEsFinancialReporting],'') as [SPFTEsFinancialReporting], COALESCE([CAPFinancialReporting],'') as [CAPFinancialReporting], [MemberGUID], [WorkWeekOverrideID] ,[HistoryItemGUID] FROM [fw].[DimJobCodeGroup] (readuncommitted) GO --------------------------------------------- -- fw.viewDimJobCodeGroupPH CREATE VIEW [fw].[viewDimJobCodeGroupPH] AS SELECT [JobCodeGroupPHID], [MemberGUID], [Name] ,[HistoryItemGUID] FROM [fw].[DimJobCodeGroupPH] (readuncommitted) GO --------------------------------------------- -- fw.viewDimJobCodeGroupPH_source CREATE VIEW [fw].[viewDimJobCodeGroupPH_source] AS SELECT grpDC670445EFFE4323B34B44C1C17F8B0C.[JobCodeGroupPHID] ,grpDC670445EFFE4323B34B44C1C17F8B0C.[MemberGUID] , [grpDC670445EFFE4323B34B44C1C17F8B0C].[HistoryItemGUID]FROM [fw].[DimJobCodeGroupPH] grpDC670445EFFE4323B34B44C1C17F8B0C (readuncommitted) GO --------------------------------------------- -- fw.viewDimJobCodeGroup_source CREATE VIEW [fw].[viewDimJobCodeGroup_source] AS SELECT grpCC17B05111184E228AA364D935410A33.[JobCodeGroupID] ,grpCC17B05111184E228AA364D935410A33.[MemberGUID] ,ISNULL([SPFINANCIALREP].[Name], 'Not Specified') as [SPSalariesFinancialReporting] ,ISNULL([SPFINANCIALREP_1].[Name], 'Not Specified') as [SPFTEsFinancialReporting] ,ISNULL([CAPFINANCIALREP].[Name], 'Not Specified') as [CAPFinancialReporting] , [grpCC17B05111184E228AA364D935410A33].[HistoryItemGUID]FROM [fw].[DimJobCodeGroup] grpCC17B05111184E228AA364D935410A33 (readuncommitted) LEFT JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP] on [SPFINANCIALREP].[FinancialReportingID] = [grpCC17B05111184E228AA364D935410A33].[SPSalariesFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_1] on [SPFINANCIALREP_1].[FinancialReportingID] = [grpCC17B05111184E228AA364D935410A33].[SPFTEsFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP] on [CAPFINANCIALREP].[FinancialReportingID] = [grpCC17B05111184E228AA364D935410A33].[CAPFinancialReportingID] GO --------------------------------------------- -- fw.viewDimJobCodePH CREATE VIEW [fw].[viewDimJobCodePH] AS SELECT grpB5738AC6D8C2411DAAA2747D17D10AC1.[JobCodePHID] ,grpB5738AC6D8C2411DAAA2747D17D10AC1.[Name] ,grpB5738AC6D8C2411DAAA2747D17D10AC1.[MemberGUID] FROM [fw].[DimJobCodePH] grpB5738AC6D8C2411DAAA2747D17D10AC1 (readuncommitted) GO --------------------------------------------- -- fw.viewDimLineNumber CREATE VIEW [fw].[viewDimLineNumber] AS SELECT grpFF26C92DA42548758DE9652EF433A8D7.[LineNumberID] ,grpFF26C92DA42548758DE9652EF433A8D7.[MemberGUID] ,grpFF26C92DA42548758DE9652EF433A8D7.[HistoryItemGUID] FROM [fw].[DimLineNumber] grpFF26C92DA42548758DE9652EF433A8D7 (readuncommitted) GO --------------------------------------------- -- fw.viewDimManufacturer --Last Modified 8/11/2015 12:21 PM CREATE VIEW [fw].[viewDimManufacturer] AS SELECT grp4B506B64C5C141E3A75D30F00344E01C.[ManufacturerID] ,coalesce(grp4B506B64C5C141E3A75D30F00344E01C.[Name],'') as [Name] ,grp4B506B64C5C141E3A75D30F00344E01C.[Code] ,grp4B506B64C5C141E3A75D30F00344E01C.[Description] ,grp4B506B64C5C141E3A75D30F00344E01C.[MemberGUID] ,grp4B506B64C5C141E3A75D30F00344E01C.[TransactionID] ,grp4B506B64C5C141E3A75D30F00344E01C.[HistoryItemGUID] FROM [fw].[DimManufacturer] grp4B506B64C5C141E3A75D30F00344E01C (readuncommitted) GO --------------------------------------------- -- fw.viewDimMedicalSurgical CREATE VIEW [fw].[viewDimMedicalSurgical] AS SELECT grp78A79D4B760C4847814C610A03087D52.[MedicalSurgicalID] ,grp78A79D4B760C4847814C610A03087D52.[Name] ,grp78A79D4B760C4847814C610A03087D52.[MemberGUID] ,grp78A79D4B760C4847814C610A03087D52.[HistoryItemGUID] ,grp78A79D4B760C4847814C610A03087D52.[TransactionID] ,grp78A79D4B760C4847814C610A03087D52.[Code] ,grp78A79D4B760C4847814C610A03087D52.[SortOrder] FROM [fw].[DimMedicalSurgical] grp78A79D4B760C4847814C610A03087D52 (readuncommitted) GO --------------------------------------------- -- fw.viewDimModelingServiceLine CREATE VIEW [fw].[viewDimModelingServiceLine] AS SELECT [ModelingServiceLineID], COALESCE([Name],'') as [Name], [PatientClassID], [ServiceLineID], [MedicalSurgicalID], [AgeCohortID], COALESCE([SortOrder],'') as [SortOrder], COALESCE([PatientClass],'') as [PatientClass], COALESCE([PatientClassCode],'') as [PatientClassCode], [PatientClassSortOrder], COALESCE([ServiceLine],'') as [ServiceLine], COALESCE([ServiceLineCode],'') as [ServiceLineCode], [ServiceLineSortOrder], COALESCE([ServiceLineRollup],'') as [ServiceLineRollup], [ServiceLineRollupSortOrder], COALESCE([MedicalSurgical],'') as [MedicalSurgical], COALESCE([MedicalSurgicalCode],'') as [MedicalSurgicalCode], [MedicalSurgicalSortOrder], COALESCE([AgeCohort],'') as [AgeCohort], COALESCE([AgeCohortCode],'') as [AgeCohortCode], [AgeCohortSortOrder], [TransactionID], [MemberGUID], [HistoryItemGUID] FROM [fw].[DimModelingServiceLine] (readuncommitted) GO --------------------------------------------- -- fw.viewDimModelingServiceLinePH CREATE VIEW [fw].[viewDimModelingServiceLinePH] AS SELECT grp0760A281D6F040D39AF8F219869FCF1B.[ModelingServiceLinePHID] ,grp0760A281D6F040D39AF8F219869FCF1B.[Name] ,grp0760A281D6F040D39AF8F219869FCF1B.[MemberGUID] ,grp0760A281D6F040D39AF8F219869FCF1B.[HistoryItemGUID] ,grp0760A281D6F040D39AF8F219869FCF1B.[TransactionID] FROM [fw].[DimModelingServiceLinePH] grp0760A281D6F040D39AF8F219869FCF1B (readuncommitted) GO --------------------------------------------- -- fw.viewDimModelingServiceLine_source CREATE VIEW [fw].[viewDimModelingServiceLine_source] AS SELECT grpB6F9DA58A60D41B485FFBF15F95D40EF.[ModelingServiceLineID] ,grpB6F9DA58A60D41B485FFBF15F95D40EF.[Name] ,grpB6F9DA58A60D41B485FFBF15F95D40EF.[SortOrder] ,grpB6F9DA58A60D41B485FFBF15F95D40EF.[TransactionID] ,grpB6F9DA58A60D41B485FFBF15F95D40EF.[MemberGUID] ,grpB6F9DA58A60D41B485FFBF15F95D40EF.[HistoryItemGUID] ,ISNULL([PATIENTCLASS].[Name], 'Not Specified') as [PatientClass] ,ISNULL([PATIENTCLASS].[Code], 'Not Specified') as [PatientClassCode] ,ISNULL([PATIENTCLASS].[SortOrder], 0) as [PatientClassSortOrder] ,ISNULL([SL].[Name], 'Not Specified') as [ServiceLine] ,ISNULL([SL].[Code], 'Not Specified') as [ServiceLineCode] ,ISNULL([SL].[SortOrder], 0) as [ServiceLineSortOrder] ,ISNULL([SL].[Rollup], 'Not Specified') as [ServiceLineRollup] ,ISNULL([SL].[RollupSortOrder], 0) as [ServiceLineRollupSortOrder] ,ISNULL([MEDICALSURGICAL].[Name], 'Not Specified') as [MedicalSurgical] ,ISNULL([MEDICALSURGICAL].[Code], 'Not Specified') as [MedicalSurgicalCode] ,ISNULL([MEDICALSURGICAL].[SortOrder], 0) as [MedicalSurgicalSortOrder] ,ISNULL([AGECOHORT].[Name], 'Not Specified') as [AgeCohort] ,ISNULL([AGECOHORT].[Code], 'Not Specified') as [AgeCohortCode] ,ISNULL([AGECOHORT].[SortOrder], 0) as [AgeCohortSortOrder] FROM [fw].[DimModelingServiceLine] grpB6F9DA58A60D41B485FFBF15F95D40EF (readuncommitted) INNER JOIN [fw].[viewDimPatientClass] [PATIENTCLASS] on [PATIENTCLASS].[PatientClassID] = [grpB6F9DA58A60D41B485FFBF15F95D40EF].[PatientClassID] INNER JOIN [fw].[viewDimServiceLine] [SL] on [SL].[ServiceLineID] = [grpB6F9DA58A60D41B485FFBF15F95D40EF].[ServiceLineID] INNER JOIN [fw].[viewDimMedicalSurgical] [MEDICALSURGICAL] on [MEDICALSURGICAL].[MedicalSurgicalID] = [grpB6F9DA58A60D41B485FFBF15F95D40EF].[MedicalSurgicalID] INNER JOIN [fw].[viewDimAgeCohort] [AGECOHORT] on [AGECOHORT].[AgeCohortID] = [grpB6F9DA58A60D41B485FFBF15F95D40EF].[AgeCohortID] GO --------------------------------------------- -- fw.viewDimOpportunity CREATE VIEW [fw].[viewDimOpportunity] AS SELECT grpB205B5DB5DD943E7B55EB4AC84FCFF14.[OpportunityKey] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Name] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[MemberGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[MemberGUID] [OpportunityGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[HistoryItemGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[TransactionID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[EntityID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SourceOfSavingsID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[IsHidden] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[HasInitiative] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeGUID] ,ISNULL([ENT].[Name], 'Not Specified') AS [Entity] ,ISNULL([ENT].[Code], 'Not Specified') AS [Code] ,ISNULL([ENT].[Description], 'Not Specified') AS [Description] ,ISNULL([ENT].[SortOrder], 0) AS [SortOrder] ,ISNULL([ENT].[EntityType], 0) AS [EntityType] ,ISNULL([ENT].[IsActive], 0) AS [IsActive] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SourceOfSavings] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Initiative] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeStatus] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.Owner ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.CostLeader ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.ExecutiveSponsor ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.Workstream ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.DateCreated ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.BaselineStartDate ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.BaselineEndDate ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.SavingsIdentified ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.SavingsGoal ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.AnnualGoal ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.SavingsEstimate ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeStatusID ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup1Id ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup1 ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup2Id ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup2 ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup3Id ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.InitiativeRollup3 FROM [fw].[DimOpportunity] grpB205B5DB5DD943E7B55EB4AC84FCFF14 LEFT OUTER JOIN [fw].[viewDimEntity] [ENT] ON [ENT].[EntityID] = [grpB205B5DB5DD943E7B55EB4AC84FCFF14].[EntityID] GO --------------------------------------------- -- fw.viewDimOpportunity_auto --Last Modified 6/12/2024 5:33 PM CREATE VIEW [fw].[viewDimOpportunity_auto] AS SELECT grpB205B5DB5DD943E7B55EB4AC84FCFF14.[OpportunityKey] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Name] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[TransactionID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[MemberGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[HistoryItemGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[DateCreated] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[BaselineStartDate] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[OpportunityGUID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[AnnualGoal] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SavingsEstimate] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup1] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup2] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[BaselineEndDate] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[EntityID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SavingsIdentified] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup3] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup1Id] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SavingsGoal] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Entity],'') as [Entity] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Code],'') as [Code] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup2Id] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeRollup3Id] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Description],'') as [Description] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SortOrder] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeStatusID] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[EntityType] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[IsActive] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SourceOfSavingsID] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[SourceOfSavings],'') as [SourceOfSavings] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[IsHidden] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[HasInitiative] ,grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeGUID] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Initiative],'') as [Initiative] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[InitiativeStatus],'') as [InitiativeStatus] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[CostLeader],'') as [CostLeader] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Owner],'') as [Owner] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[ExecutiveSponsor],'') as [ExecutiveSponsor] ,coalesce(grpB205B5DB5DD943E7B55EB4AC84FCFF14.[Workstream],'') as [Workstream] FROM [fw].[viewDimOpportunity] grpB205B5DB5DD943E7B55EB4AC84FCFF14 GO --------------------------------------------- -- fw.viewDimPatientClass CREATE VIEW [fw].[viewDimPatientClass] AS SELECT grp30F99B15877C4FA6B62ED8D6E563E438.[PatientClassID] ,grp30F99B15877C4FA6B62ED8D6E563E438.[Name] ,grp30F99B15877C4FA6B62ED8D6E563E438.[Code] ,grp30F99B15877C4FA6B62ED8D6E563E438.[SortOrder] ,grp30F99B15877C4FA6B62ED8D6E563E438.[IsActive] ,grp30F99B15877C4FA6B62ED8D6E563E438.[IncludeInAdjustedCalculations] ,grp30F99B15877C4FA6B62ED8D6E563E438.[TransactionID] ,grp30F99B15877C4FA6B62ED8D6E563E438.[MemberGUID] ,grp30F99B15877C4FA6B62ED8D6E563E438.[OBServiceLinePrimaryVolumeAccountID] ,grp30F99B15877C4FA6B62ED8D6E563E438.[HistoryItemGUID] FROM [fw].[DimPatientClass] grp30F99B15877C4FA6B62ED8D6E563E438 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPatientReimbursementGroup CREATE VIEW [fw].[viewDimPatientReimbursementGroup] AS SELECT [PatientReimbursementGroupID], COALESCE([Name],'') as [Name], [PatientClassID], [CareSettingID], COALESCE([Code],'') as [Code], COALESCE([SortOrder],'') as [SortOrder], COALESCE([PatientClass],'') as [PatientClass], COALESCE([PatientClassCode],'') as [PatientClassCode], [PatientClassSortOrder], COALESCE([CareSetting],'') as [CareSetting], COALESCE([CareSettingCode],'') as [CareSettingCode], [CareSettingSortOrder], [TransactionID], [MemberGUID], [HistoryItemGUID] FROM [fw].[DimPatientReimbursementGroup] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPatientReimbursementGroupPH CREATE VIEW [fw].[viewDimPatientReimbursementGroupPH] AS SELECT grp7A426BF8FC8F4EBF8A76AA76229A06F2.[PatientReimbursementGroupPHID] ,grp7A426BF8FC8F4EBF8A76AA76229A06F2.[Name] ,grp7A426BF8FC8F4EBF8A76AA76229A06F2.[MemberGUID] ,grp7A426BF8FC8F4EBF8A76AA76229A06F2.[HistoryItemGUID] ,grp7A426BF8FC8F4EBF8A76AA76229A06F2.[TransactionID] FROM [fw].[DimPatientReimbursementGroupPH] grp7A426BF8FC8F4EBF8A76AA76229A06F2 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPatientReimbursementGroup_source CREATE VIEW [fw].[viewDimPatientReimbursementGroup_source] AS SELECT grp795F9572D0D04ED390051C3D7CD34946.[PatientReimbursementGroupID] ,grp795F9572D0D04ED390051C3D7CD34946.[Name] ,grp795F9572D0D04ED390051C3D7CD34946.[Code] ,grp795F9572D0D04ED390051C3D7CD34946.[SortOrder] ,grp795F9572D0D04ED390051C3D7CD34946.[TransactionID] ,grp795F9572D0D04ED390051C3D7CD34946.[MemberGUID] ,grp795F9572D0D04ED390051C3D7CD34946.[HistoryItemGUID] ,ISNULL([PATIENTCLASS].[Name], 'Not Specified') as [PatientClass] ,ISNULL([PATIENTCLASS].[Code], 'Not Specified') as [PatientClassCode] ,ISNULL([PATIENTCLASS].[SortOrder], 0) as [PatientClassSortOrder] ,ISNULL([CARESETTING].[Name], 'Not Specified') as [CareSetting] ,ISNULL([CARESETTING].[Code], 'Not Specified') as [CareSettingCode] ,ISNULL([CARESETTING].[SortOrder], 0) as [CareSettingSortOrder] FROM [fw].[DimPatientReimbursementGroup] grp795F9572D0D04ED390051C3D7CD34946 (readuncommitted) LEFT JOIN [fw].[viewDimPatientClass] [PATIENTCLASS] on [PATIENTCLASS].[PatientClassID] = [grp795F9572D0D04ED390051C3D7CD34946].[PatientClassID] LEFT JOIN [fw].[viewDimCareSetting] [CARESETTING] on [CARESETTING].[CareSettingID] = [grp795F9572D0D04ED390051C3D7CD34946].[CareSettingID] GO --------------------------------------------- -- fw.viewDimPatientType --Last Modified 11/16/2020 3:28 PM CREATE VIEW [fw].[viewDimPatientType] AS SELECT grpF76658C4B97240B881CAF29A84373B98.[PatientTypeID] ,coalesce(grpF76658C4B97240B881CAF29A84373B98.[Name],'') as [Name] ,grpF76658C4B97240B881CAF29A84373B98.[Code] ,grpF76658C4B97240B881CAF29A84373B98.[Description] ,grpF76658C4B97240B881CAF29A84373B98.[PatientTypeRollupID] ,grpF76658C4B97240B881CAF29A84373B98.[MemberGUID] ,grpF76658C4B97240B881CAF29A84373B98.[HistoryItemGUID] ,grpF76658C4B97240B881CAF29A84373B98.[DSSRollup] ,grpF76658C4B97240B881CAF29A84373B98.[TransactionID] ,ISNULL([PatientTyRo].[Name], 'Not Specified') as [PatientTypeRollupName] ,ISNULL([PatientTyRo].[Sg2PatientTypeRollup], 'Not Specified') as [Sg2PatientTypeRollup] FROM [fw].[DimPatientType] grpF76658C4B97240B881CAF29A84373B98 (readuncommitted) LEFT JOIN [fw].[viewDimPatientTypeRollup] [PatientTyRo] on [PatientTyRo].[PatientTypeRollupID] = [grpF76658C4B97240B881CAF29A84373B98].[PatientTypeRollupID] GO --------------------------------------------- -- fw.viewDimPatientTypeRollup CREATE VIEW [fw].[viewDimPatientTypeRollup] AS SELECT [PatientTypeRollupID], [Type], [Name], [PatientClassID], [SortOrder], [IsSP], [CareSettingID], [IsCapital], [IsOB], [IsMR], [IsDSS], [SPChargesFinancialReportingID], [SPContractualsFinancialReportingID], [SPPrimaryStatisticFinancialReportingID], [SPSecondaryStatisticFinancialReportingID], [SPTertiaryStatisticFinancialReportingID], [CAPChargesFinancialReportingID], [CAPContractualsFinancialReportingID], [CAPPrimaryStatisticFinancialReportingID], [CAPSecondaryStatisticFinancialReportingID], COALESCE([SPChargesFinancialReporting],'') as [SPChargesFinancialReporting], COALESCE([SPContractualsFinancialReporting],'') as [SPContractualsFinancialReporting], COALESCE([SPPrimaryStatisticFinancialReporting],'') as [SPPrimaryStatisticFinancialReporting], COALESCE([PatientClassName],'') as [PatientClassName], COALESCE([CareSettingName],'') as [CareSettingName], COALESCE([SPSecondaryStatisticFinancialReporting],'') as [SPSecondaryStatisticFinancialReporting], COALESCE([SPTertiaryStatisticFinancialReporting],'') as [SPTertiaryStatisticFinancialReporting], COALESCE([SPPrimaryStatisticFinancialReportingLineName],'') as [SPPrimaryStatisticFinancialReportingLineName], COALESCE([SPSecondaryStatisticFinancialReportingLineName],'') as [SPSecondaryStatisticFinancialReportingLineName], COALESCE([SPTertiaryStatisticFinancialReportingLineName],'') as [SPTertiaryStatisticFinancialReportingLineName], COALESCE([CAPChargesFinancialReporting],'') as [CAPChargesFinancialReporting], COALESCE([CAPContractualsFinancialReporting],'') as [CAPContractualsFinancialReporting], COALESCE([CAPPrimaryStatisticFinancialReporting],'') as [CAPPrimaryStatisticFinancialReporting], COALESCE([CAPSecondaryStatisticFinancialReporting],'') as [CAPSecondaryStatisticFinancialReporting], [MemberGUID], [HistoryItemGUID], COALESCE([CAPPrimaryStatisticFinancialReportingLineName],'') as [CAPPrimaryStatisticFinancialReportingLineName], COALESCE([CAPSecondaryStatisticFinancialReportingLineName],'') as [CAPSecondaryStatisticFinancialReportingLineName], [Sg2PatientTypeRollup] ,[Version] FROM [fw].[DimPatientTypeRollup] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPatientTypeRollupPH CREATE VIEW [fw].[viewDimPatientTypeRollupPH] AS SELECT grpB3573F00604F4FA28AF6435494C52F6C.[PatientTypeRollupPHID] ,grpB3573F00604F4FA28AF6435494C52F6C.[Name] ,grpB3573F00604F4FA28AF6435494C52F6C.[MemberGUID] ,grpB3573F00604F4FA28AF6435494C52F6C.[HistoryItemGUID] FROM [fw].[DimPatientTypeRollupPH] grpB3573F00604F4FA28AF6435494C52F6C (readuncommitted) GO --------------------------------------------- -- fw.viewDimPatientTypeRollup_source CREATE VIEW [fw].[viewDimPatientTypeRollup_source] AS SELECT grpFE81F461D5C6457B8209E3E5F86A30DB.[PatientTypeRollupID] ,grpFE81F461D5C6457B8209E3E5F86A30DB.[MemberGUID] ,grpFE81F461D5C6457B8209E3E5F86A30DB.[HistoryItemGUID] ,ISNULL([PATIENTCLASS].[Name], 'Not Specified') as [PatientClassName] ,ISNULL([CARESETTING].[Name], 'Not Specified') as [CareSettingName] ,ISNULL([SPFINANCIALREP].[Name], 'Not Specified') as [SPChargesFinancialReporting] ,ISNULL([SPFINANCIALREP_1].[Name], 'Not Specified') as [SPContractualsFinancialReporting] ,ISNULL([SPFINANCIALREP_2].[Name], 'Not Specified') as [SPPrimaryStatisticFinancialReporting] ,ISNULL([SPFINANCIALREP_2].[LineName], 'Not Specified') as [SPPrimaryStatisticFinancialReportingLineName] ,ISNULL([SPFINANCIALREP_3].[Name], 'Not Specified') as [SPSecondaryStatisticFinancialReporting] ,ISNULL([SPFINANCIALREP_3].[LineName], 'Not Specified') as [SPSecondaryStatisticFinancialReportingLineName] ,ISNULL([SPFINANCIALREP_4].[Name], 'Not Specified') as [SPTertiaryStatisticFinancialReporting] ,ISNULL([SPFINANCIALREP_4].[LineName], 'Not Specified') as [SPTertiaryStatisticFinancialReportingLineName] ,ISNULL([CAPFINANCIALREP].[Name], 'Not Specified') as [CAPChargesFinancialReporting] ,ISNULL([CAPFINANCIALREP_1].[Name], 'Not Specified') as [CAPContractualsFinancialReporting] ,ISNULL([CAPFINANCIALREP_2].[Name], 'Not Specified') as [CAPPrimaryStatisticFinancialReporting] ,ISNULL([CAPFINANCIALREP_2].[LineName], 'Not Specified') as [CAPPrimaryStatisticFinancialReportingLineName] ,ISNULL([CAPFINANCIALREP_3].[Name], 'Not Specified') as [CAPSecondaryStatisticFinancialReporting] ,ISNULL([CAPFINANCIALREP_3].[LineName], 'Not Specified') as [CAPSecondaryStatisticFinancialReportingLineName] , [grpFE81F461D5C6457B8209E3E5F86A30DB].[Version]FROM [fw].[DimPatientTypeRollup] grpFE81F461D5C6457B8209E3E5F86A30DB (readuncommitted) INNER JOIN [fw].[viewDimPatientClass] [PATIENTCLASS] on [PATIENTCLASS].[PatientClassID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[PatientClassID] INNER JOIN [fw].[viewDimCareSetting] [CARESETTING] on [CARESETTING].[CareSettingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[CareSettingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP] on [SPFINANCIALREP].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[SPChargesFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_1] on [SPFINANCIALREP_1].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[SPContractualsFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_2] on [SPFINANCIALREP_2].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[SPPrimaryStatisticFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_3] on [SPFINANCIALREP_3].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[SPSecondaryStatisticFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_4] on [SPFINANCIALREP_4].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[SPTertiaryStatisticFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP] on [CAPFINANCIALREP].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[CAPChargesFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP_1] on [CAPFINANCIALREP_1].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[CAPContractualsFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP_2] on [CAPFINANCIALREP_2].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[CAPPrimaryStatisticFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP_3] on [CAPFINANCIALREP_3].[FinancialReportingID] = [grpFE81F461D5C6457B8209E3E5F86A30DB].[CAPSecondaryStatisticFinancialReportingID] GO --------------------------------------------- -- fw.viewDimPayCode CREATE VIEW [fw].[viewDimPayCode] AS SELECT [PayCodeID], COALESCE([Name],'') as [Name], [Description], [PayCode], [PayCodeGroupID], [IsAccrued], [IsHoursIgnored], [IsDollarsIgnored], [DSSIsDefined], [DSSPayCodeRollup1ID], [DSSCostingRollup], COALESCE([DSSPayCodeRollup1],'') as [DSSPayCodeRollup1], [OBIsDefined], [OBForecastDetailID], [SPIsDefined], [ImportIDAlt], [IsPayCodeGroup], [Rollup], [SubRollup], COALESCE([PayCodeGroup],'') as [PayCodeGroup], [PayCodeGroupSortOrder], COALESCE([PayClass],'') as [PayClass], COALESCE([ProductiveClass],'') as [ProductiveClass], [Variability], COALESCE([ReportingCategory],'') as [ReportingCategory], [MemberGUID], [HistoryItemGUID], [DSSCostingRollup2], [FWIsDefined], [DSSPayCodeRollup2ID], COALESCE([DSSPayCodeRollup2],'') as [DSSPayCodeRollup2], [TransactionID], [SPHPayCodeRollupIsValidated], [ProviderLineItemID], COALESCE([ProviderLineItem],'') as [ProviderLineItem], COALESCE([SPHProductiveClass],'') as [SPHProductiveClass], [SPHPayCodeRollupID], COALESCE([SPHPayCodeRollupName],'') as [SPHPayCodeRollupName], [SPHPayCodeRollupConfidenceScore] ,[Version] FROM [fw].[DimPayCode] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayCodeGroup --Last Modified 3/20/2024 5:05 PM CREATE VIEW [fw].[viewDimPayCodeGroup] AS SELECT grpB9F3A1C540C14A449028ADA57350A79D.[PayCodeGroupID] ,grpB9F3A1C540C14A449028ADA57350A79D.[Name] ,grpB9F3A1C540C14A449028ADA57350A79D.[SortOrder] ,grpB9F3A1C540C14A449028ADA57350A79D.[PayCodeGroupCode] ,grpB9F3A1C540C14A449028ADA57350A79D.[PayClass] ,grpB9F3A1C540C14A449028ADA57350A79D.[ProductiveClassID] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsVariable] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsOvertime] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsAgency] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsExcludedFromBenefits] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsDirect] ,grpB9F3A1C540C14A449028ADA57350A79D.[IsPremium] ,grpB9F3A1C540C14A449028ADA57350A79D.[WageRateMultiplier] ,grpB9F3A1C540C14A449028ADA57350A79D.[DefaultPayCodeID] ,grpB9F3A1C540C14A449028ADA57350A79D.[ReportingCategory] ,grpB9F3A1C540C14A449028ADA57350A79D.[MemberGUID] ,grpB9F3A1C540C14A449028ADA57350A79D.[TransactionID] ,grpB9F3A1C540C14A449028ADA57350A79D.[HistoryItemGUID] ,ISNULL([PRODUCTIVECL].[Name], 'Not Specified') as [ProductiveClass] ,ISNULL([PAYCODE].[Name], 'Not Specified') as [DefaultPayCode] , [grpB9F3A1C540C14A449028ADA57350A79D].[Version]FROM [fw].[DimPayCodeGroup] grpB9F3A1C540C14A449028ADA57350A79D (readuncommitted) LEFT JOIN [fw].[viewDimProductiveClass] [PRODUCTIVECL] on [PRODUCTIVECL].[ProductiveClassID] = [grpB9F3A1C540C14A449028ADA57350A79D].[ProductiveClassID] LEFT JOIN [fw].[viewDimPayCode] [PAYCODE] on [PAYCODE].[PayCodeID] = [grpB9F3A1C540C14A449028ADA57350A79D].[DefaultPayCodeID] GO --------------------------------------------- -- fw.viewDimPayCodeGroupPH CREATE VIEW [fw].[viewDimPayCodeGroupPH] AS SELECT grpCAA5DF4BE5434757B51AD811109F16DB.[PayCodeGroupPHID] ,grpCAA5DF4BE5434757B51AD811109F16DB.[Name] ,grpCAA5DF4BE5434757B51AD811109F16DB.[TransactionID] ,grpCAA5DF4BE5434757B51AD811109F16DB.[MemberGUID] ,grpCAA5DF4BE5434757B51AD811109F16DB.[HistoryItemGUID] FROM [fw].[DimPayCodeGroupPH] grpCAA5DF4BE5434757B51AD811109F16DB (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayCode_source CREATE VIEW [fw].[viewDimPayCode_source] AS SELECT grpB323F295F71F4248991D24C571ED8831.[PayCodeID] ,grpB323F295F71F4248991D24C571ED8831.[Name] ,grpB323F295F71F4248991D24C571ED8831.[MemberGUID] ,grpB323F295F71F4248991D24C571ED8831.[HistoryItemGUID] ,grpB323F295F71F4248991D24C571ED8831.[TransactionID] ,ISNULL([PCG].[Name], 'Not Specified') as [PayCodeGroup] ,ISNULL([PCG].[SortOrder], 0) as [PayCodeGroupSortOrder] ,ISNULL([PCG].[PayClass], 'Not Specified') as [PayClass] ,ISNULL([PCG].[ProductiveClass], 'Not Specified') as [ProductiveClass] ,ISNULL([PCG].[ReportingCategory], 'Not Specified') as [ReportingCategory] ,ISNULL([DSSPAYCODEROLLUP1].[Name], 'Not Specified') as [DSSPayCodeRollup1] ,ISNULL([DSSPAYCODEROLLUP2].[Name], 'Not Specified') as [DSSPayCodeRollup2] ,ISNULL([PROVIDERLI].[Description], 'Not Specified') as [ProviderLineItem] ,ISNULL([SPHPAYCODEROLLUP].[SPHProductiveClass], 'Not Specified') as [SPHProductiveClass] ,ISNULL([SPHPAYCODEROLLUP].[Name], 'Not Specified') as [SPHPayCodeRollupName] , [grpB323F295F71F4248991D24C571ED8831].[Version]FROM [fw].[DimPayCode] grpB323F295F71F4248991D24C571ED8831 (readuncommitted) LEFT JOIN [fw].[viewDimPayCodeGroup] [PCG] on [PCG].[PayCodeGroupID] = [grpB323F295F71F4248991D24C571ED8831].[PayCodeGroupID] INNER JOIN [dss].[viewDimPayCodeRollup1] [DSSPAYCODEROLLUP1] on [DSSPAYCODEROLLUP1].[DSSPayCodeRollup1ID] = [grpB323F295F71F4248991D24C571ED8831].[DSSPayCodeRollup1ID] INNER JOIN [dss].[viewDimPayCodeRollup2] [DSSPAYCODEROLLUP2] on [DSSPAYCODEROLLUP2].[DSSPayCodeRollup2ID] = [grpB323F295F71F4248991D24C571ED8831].[DSSPayCodeRollup2ID] LEFT JOIN [fp].[viewProviderLineItem_auto] [PROVIDERLI] on [PROVIDERLI].[ProviderLineItemID] = [grpB323F295F71F4248991D24C571ED8831].[ProviderLineItemID] INNER JOIN [fw].[viewDimSPHPayCodeRollup] [SPHPAYCODEROLLUP] on [SPHPAYCODEROLLUP].[SPHPayCodeRollupID] = [grpB323F295F71F4248991D24C571ED8831].[SPHPayCodeRollupID] GO --------------------------------------------- -- fw.viewDimPayCycle --Last Modified 11/30/2015 12:22 PM CREATE VIEW [fw].[viewDimPayCycle] AS SELECT grp97FA080700B74428A51EDA0423536FBB.[PayCycleID] ,grp97FA080700B74428A51EDA0423536FBB.[Name] ,grp97FA080700B74428A51EDA0423536FBB.[Code] ,grp97FA080700B74428A51EDA0423536FBB.[SortOrder] ,grp97FA080700B74428A51EDA0423536FBB.[PeriodDays] ,grp97FA080700B74428A51EDA0423536FBB.[FirstPayPeriodStartDate] ,grp97FA080700B74428A51EDA0423536FBB.[AccrualMethod] ,grp97FA080700B74428A51EDA0423536FBB.[TransactionID] ,grp97FA080700B74428A51EDA0423536FBB.[MemberGUID] ,grp97FA080700B74428A51EDA0423536FBB.[HistoryItemGUID] ,grp97FA080700B74428A51EDA0423536FBB.[CurrentPayPeriodID] FROM [fw].[DimPayCycle] grp97FA080700B74428A51EDA0423536FBB (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayPeriod CREATE VIEW [fw].[viewDimPayPeriod] AS SELECT [PayPeriodID], [Name], [PeriodNumber], [Code], [PayPeriodCode], [FiscalYearIDStart], [FiscalYearIDSecond], [PeriodStartCalendarDate], [PeriodEndCalendarDate], [PeriodDays], [WorkingDays], [FiscalMonthIDStart], [FiscalMonthIDSecond], [CalendarDaysStart], [CalendarDaysSecond], [PeriodDaysStart], [PeriodDaysSecond], [PeriodWeightStart], [PeriodWeightSecond], [DaysInPeriodWeightStart], [DaysInPeriodWeightSecond], [HistoryItemGUID], [PayCycleID], COALESCE([PayCycleName],'') as [PayCycleName], [MemberGUID], [TransactionID], COALESCE([PayCycleCode],'') as [PayCycleCode], [PayCycleSortOrder], COALESCE([AccrualMethod],'') as [AccrualMethod], [IsCurrentPayPeriod], [CountFromCurrentPayPeriod] ,[Version] FROM [fw].[DimPayPeriod] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayPeriod_source CREATE VIEW [fw].[viewDimPayPeriod_source] AS SELECT grp90F54C2D43B54BE39642E686F8DE7839.[PayPeriodID] ,grp90F54C2D43B54BE39642E686F8DE7839.[PeriodStartCalendarDate] ,grp90F54C2D43B54BE39642E686F8DE7839.[FiscalMonthIDStart] ,grp90F54C2D43B54BE39642E686F8DE7839.[FiscalMonthIDSecond] ,grp90F54C2D43B54BE39642E686F8DE7839.[CalendarDaysStart] ,grp90F54C2D43B54BE39642E686F8DE7839.[CalendarDaysSecond] ,grp90F54C2D43B54BE39642E686F8DE7839.[PeriodDaysStart] ,grp90F54C2D43B54BE39642E686F8DE7839.[PeriodDaysSecond] ,grp90F54C2D43B54BE39642E686F8DE7839.[PeriodWeightStart] ,grp90F54C2D43B54BE39642E686F8DE7839.[PeriodWeightSecond] ,grp90F54C2D43B54BE39642E686F8DE7839.[DaysInPeriodWeightStart] ,grp90F54C2D43B54BE39642E686F8DE7839.[DaysInPeriodWeightSecond] ,grp90F54C2D43B54BE39642E686F8DE7839.[HistoryItemGUID] ,grp90F54C2D43B54BE39642E686F8DE7839.[MemberGUID] ,grp90F54C2D43B54BE39642E686F8DE7839.[TransactionID] ,ISNULL([PAYCYCLE].[Name], 'Not Specified') as [PayCycleName] ,ISNULL([PAYCYCLE].[Code], 'Not Specified') as [PayCycleCode] ,ISNULL([PAYCYCLE].[SortOrder], 0) as [PayCycleSortOrder] ,ISNULL([PAYCYCLE].[AccrualMethod], 'Not Specified') as [AccrualMethod] , [grp90F54C2D43B54BE39642E686F8DE7839].[Version]FROM [fw].[DimPayPeriod] grp90F54C2D43B54BE39642E686F8DE7839 (readuncommitted) INNER JOIN [fw].[viewDimPayCycle] [PAYCYCLE] on [PAYCYCLE].[PayCycleID] = [grp90F54C2D43B54BE39642E686F8DE7839].[PayCycleID] GO --------------------------------------------- -- fw.viewDimPayor --Last Modified 6/8/2020 3:13 PM CREATE VIEW [fw].[viewDimPayor] AS SELECT grp0887B09C7E9342638431A42A05EA03B5.[PayorID] ,coalesce(grp0887B09C7E9342638431A42A05EA03B5.[Name],'') as [Name] ,grp0887B09C7E9342638431A42A05EA03B5.[Description] ,grp0887B09C7E9342638431A42A05EA03B5.[DescriptionLong] ,grp0887B09C7E9342638431A42A05EA03B5.[PayorCode] ,grp0887B09C7E9342638431A42A05EA03B5.[PayorGroupID] ,grp0887B09C7E9342638431A42A05EA03B5.[IsOB] ,grp0887B09C7E9342638431A42A05EA03B5.[IsDSS] ,grp0887B09C7E9342638431A42A05EA03B5.[FinancialClassID] ,grp0887B09C7E9342638431A42A05EA03B5.[OBDefaultInpatientReimbursementMethod] ,grp0887B09C7E9342638431A42A05EA03B5.[OBDefaultOutpatientReimbursementMethod] ,grp0887B09C7E9342638431A42A05EA03B5.[MemberGUID] ,grp0887B09C7E9342638431A42A05EA03B5.[HistoryItemGUID] ,grp0887B09C7E9342638431A42A05EA03B5.[TransactionID] ,ISNULL([PayorGroup].[Name], 'Not Specified') as [PayorGroup] ,ISNULL([FINANCIALCLASS].[Name], 'Not Specified') as [FinancialClass] FROM [fw].[DimPayor] grp0887B09C7E9342638431A42A05EA03B5 (readuncommitted) LEFT JOIN [fw].[viewDimPayorGroup] [PayorGroup] on [PayorGroup].[PayorGroupID] = [grp0887B09C7E9342638431A42A05EA03B5].[PayorGroupID] LEFT JOIN [clientdss].[viewDimFinancialClass] [FINANCIALCLASS] on [FINANCIALCLASS].[FinancialClassID] = [grp0887B09C7E9342638431A42A05EA03B5].[FinancialClassID] GO --------------------------------------------- -- fw.viewDimPayorGroup CREATE VIEW [fw].[viewDimPayorGroup] AS SELECT [PayorGroupID], [Name], [Category], [ReimbursementType], [PayorGroupCode], [SortOrder], [IsCapital], [CAPChargesFinancialReportingID], [CAPContractualsFinancialReportingID], [IsDSS], [IsOB], [IsMR], [IsSP], [SPHCRPayorID], [SPChargesFinancialReportingID], [SPContractualsFinancialReportingID], [SPDefaultInpatientReimbursementMethod], [SPDefaultOutpatientReimbursementMethod], [SPDefaultClinicReimbursementMethod], [OBDefaultInpatientReimbursementMethod], COALESCE([CAPChargesFinancialReporting],'') as [CAPChargesFinancialReporting], COALESCE([CAPContractualsFinancialReporting],'') as [CAPContractualsFinancialReporting], [OBDefaultOutpatientReimbursementMethod], COALESCE([SPHCRPayor],'') as [SPHCRPayor], COALESCE([SPChargesFinancialReporting],'') as [SPChargesFinancialReporting], COALESCE([SPContractualsFinancialReporting],'') as [SPContractualsFinancialReporting], [SPCMISamplingSourceType], [SPCMISamplingAccountID], [MemberGUID] ,[HistoryItemGUID] FROM [fw].[DimPayorGroup] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayorGroupPH CREATE VIEW [fw].[viewDimPayorGroupPH] AS SELECT [PayorGroupPHID], [MemberGUID], [Name] ,[HistoryItemGUID] FROM [fw].[DimPayorGroupPH] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayorGroupPH_source CREATE VIEW [fw].[viewDimPayorGroupPH_source] AS SELECT grp4D76CDC6FB8D4D8FB7B95C7CD71A1E5A.[PayorGroupPHID] ,grp4D76CDC6FB8D4D8FB7B95C7CD71A1E5A.[MemberGUID] , [grp4D76CDC6FB8D4D8FB7B95C7CD71A1E5A].[HistoryItemGUID]FROM [fw].[DimPayorGroupPH] grp4D76CDC6FB8D4D8FB7B95C7CD71A1E5A (readuncommitted) GO --------------------------------------------- -- fw.viewDimPayorGroup_source CREATE VIEW [fw].[viewDimPayorGroup_source] AS SELECT grpEF15CAACBD154F79B68A2D4655C8489C.[PayorGroupID] ,grpEF15CAACBD154F79B68A2D4655C8489C.[SPCMISamplingSourceType] ,grpEF15CAACBD154F79B68A2D4655C8489C.[SPCMISamplingAccountID] ,grpEF15CAACBD154F79B68A2D4655C8489C.[MemberGUID] ,ISNULL([CAPFINANCIALREP].[Name], 'Not Specified') as [CAPChargesFinancialReporting] ,ISNULL([CAPFINANCIALREP_1].[Name], 'Not Specified') as [CAPContractualsFinancialReporting] ,ISNULL([SPHCRPAYOR].[Name], 'Not Specified') as [SPHCRPayor] ,ISNULL([SPFINANCIALREP].[Name], 'Not Specified') as [SPChargesFinancialReporting] ,ISNULL([SPFINANCIALREP_1].[Name], 'Not Specified') as [SPContractualsFinancialReporting] , [grpEF15CAACBD154F79B68A2D4655C8489C].[HistoryItemGUID]FROM [fw].[DimPayorGroup] grpEF15CAACBD154F79B68A2D4655C8489C (readuncommitted) INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP] on [CAPFINANCIALREP].[FinancialReportingID] = [grpEF15CAACBD154F79B68A2D4655C8489C].[CAPChargesFinancialReportingID] INNER JOIN [cap].[viewDimFinancialReporting] [CAPFINANCIALREP_1] on [CAPFINANCIALREP_1].[FinancialReportingID] = [grpEF15CAACBD154F79B68A2D4655C8489C].[CAPContractualsFinancialReportingID] INNER JOIN [sp].[viewDimHCRPayor] [SPHCRPAYOR] on [SPHCRPAYOR].[SPHCRPayorID] = [grpEF15CAACBD154F79B68A2D4655C8489C].[SPHCRPayorID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP] on [SPFINANCIALREP].[FinancialReportingID] = [grpEF15CAACBD154F79B68A2D4655C8489C].[SPChargesFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_1] on [SPFINANCIALREP_1].[FinancialReportingID] = [grpEF15CAACBD154F79B68A2D4655C8489C].[SPContractualsFinancialReportingID] GO --------------------------------------------- -- fw.viewDimPayorPH CREATE VIEW [fw].[viewDimPayorPH] AS SELECT grpF3B83E94F08649FDBDD59852FB8C7C47.[PayorPHID] ,grpF3B83E94F08649FDBDD59852FB8C7C47.[Name] ,grpF3B83E94F08649FDBDD59852FB8C7C47.[MemberGUID] FROM [fw].[DimPayorPH] grpF3B83E94F08649FDBDD59852FB8C7C47 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPhysicianGroup CREATE VIEW [fw].[viewDimPhysicianGroup] AS SELECT [PhysicianGroupID], [Category], [Subcategory], [Name], [PhysicianType], [IsSP], [IsCapital], [IsOB], [IsMR], [IsDSS], [SortOrder], [SPSalariesFinancialReportingID], [SPFTEsFinancialReportingID], COALESCE([SPSalariesFinancialReporting],'') as [SPSalariesFinancialReporting], [SPSalariesVolumeDriverID], [SPPhysicianBenefitsTypeID], COALESCE([SPFTEsFinancialReporting],'') as [SPFTEsFinancialReporting], COALESCE([SPSalariesVolumeDriver],'') as [SPSalariesVolumeDriver], COALESCE([SPPhysicianBenefitsType],'') as [SPPhysicianBenefitsType], [MemberGUID], [HistoryItemGUID], [WorkWeekOverrideID] ,[Version] FROM [fw].[DimPhysicianGroup] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPhysicianGroupPH CREATE VIEW [fw].[viewDimPhysicianGroupPH] AS SELECT [PhysicianGroupPHID], [Name], [MemberGUID], [HistoryItemGUID] ,[Version] FROM [fw].[DimPhysicianGroupPH] (readuncommitted) GO --------------------------------------------- -- fw.viewDimPhysicianGroupPH_source CREATE VIEW [fw].[viewDimPhysicianGroupPH_source] AS SELECT grpFA7033208877495E84B853F8157A91A4.[PhysicianGroupPHID] ,grpFA7033208877495E84B853F8157A91A4.[MemberGUID] ,grpFA7033208877495E84B853F8157A91A4.[HistoryItemGUID] , [grpFA7033208877495E84B853F8157A91A4].[Version]FROM [fw].[DimPhysicianGroupPH] grpFA7033208877495E84B853F8157A91A4 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPhysicianGroup_source CREATE VIEW [fw].[viewDimPhysicianGroup_source] AS SELECT grpF4583D1A174C47B999BA61480A7A4378.[PhysicianGroupID] ,grpF4583D1A174C47B999BA61480A7A4378.[MemberGUID] ,grpF4583D1A174C47B999BA61480A7A4378.[HistoryItemGUID] ,ISNULL([SPFINANCIALREP].[Name], 'Not Specified') as [SPSalariesFinancialReporting] ,ISNULL([SPFINANCIALREP_1].[Name], 'Not Specified') as [SPFTEsFinancialReporting] ,ISNULL([SPAccountRollup].[Name], 'Not Specified') as [SPSalariesVolumeDriver] ,ISNULL([SPAccountRollup_1].[Name], 'Not Specified') as [SPPhysicianBenefitsType] , [grpF4583D1A174C47B999BA61480A7A4378].[Version]FROM [fw].[DimPhysicianGroup] grpF4583D1A174C47B999BA61480A7A4378 (readuncommitted) INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP] on [SPFINANCIALREP].[FinancialReportingID] = [grpF4583D1A174C47B999BA61480A7A4378].[SPSalariesFinancialReportingID] INNER JOIN [sp].[viewDimFinancialReporting] [SPFINANCIALREP_1] on [SPFINANCIALREP_1].[FinancialReportingID] = [grpF4583D1A174C47B999BA61480A7A4378].[SPFTEsFinancialReportingID] INNER JOIN [sp].[viewDimAccountRollup] [SPAccountRollup] on [SPAccountRollup].[AccountRollupID] = [grpF4583D1A174C47B999BA61480A7A4378].[SPSalariesVolumeDriverID] INNER JOIN [sp].[viewDimAccountRollup] [SPAccountRollup_1] on [SPAccountRollup_1].[AccountRollupID] = [grpF4583D1A174C47B999BA61480A7A4378].[SPPhysicianBenefitsTypeID] GO --------------------------------------------- -- fw.viewDimPhysicianPH CREATE VIEW [fw].[viewDimPhysicianPH] AS SELECT grp085BA6AC2CB14AD4A83D611E7B1646B1.[PhysicianPHID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[Name] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[MemberGUID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[HistoryItemGUID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[TransactionID] FROM [fw].[DimPhysicianPH] grp085BA6AC2CB14AD4A83D611E7B1646B1 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPhysicianSpecialty CREATE VIEW [fw].[viewDimPhysicianSpecialty] AS SELECT grp3091D7E63A5F4E09B9439680761F9990.[PhysicianSpecialtyID] ,coalesce(grp3091D7E63A5F4E09B9439680761F9990.[Name],'') as [Name] ,grp3091D7E63A5F4E09B9439680761F9990.[TransactionID] ,grp3091D7E63A5F4E09B9439680761F9990.[MemberGUID] ,grp3091D7E63A5F4E09B9439680761F9990.[HistoryItemGUID] ,grp3091D7E63A5F4E09B9439680761F9990.[PhysicianSpecialtyCode] ,grp3091D7E63A5F4E09B9439680761F9990.[SpecialtyGroup] ,grp3091D7E63A5F4E09B9439680761F9990.[Description] ,grp3091D7E63A5F4E09B9439680761F9990.[RVUTarget] FROM [fw].[DimPhysicianSpecialty] grp3091D7E63A5F4E09B9439680761F9990 (readuncommitted) GO --------------------------------------------- -- fw.viewDimPositionType --Last Modified 11/8/2024 12:46 AM CREATE VIEW [fw].[viewDimPositionType] AS SELECT grp69B5488AB512468F8B9002077835B307.[PositionTypeID] ,grp69B5488AB512468F8B9002077835B307.[Name] ,grp69B5488AB512468F8B9002077835B307.[TransactionID] ,grp69B5488AB512468F8B9002077835B307.[MemberGUID] ,grp69B5488AB512468F8B9002077835B307.[HistoryItemGUID] ,grp69B5488AB512468F8B9002077835B307.[PositionTypeAssignmentTypeID] ,ISNULL([POSITIONTYPEASSIGNMENTTYPE].[Name], 'Not Specified') as [PositionTypeAssignmentType] FROM [fw].[DimPositionType] grp69B5488AB512468F8B9002077835B307 (readuncommitted) INNER JOIN [fw].[viewDimPositionTypeAssignmentType] [POSITIONTYPEASSIGNMENTTYPE] on [POSITIONTYPEASSIGNMENTTYPE].[PositionTypeAssignmentTypeID] = [grp69B5488AB512468F8B9002077835B307].[PositionTypeAssignmentTypeID] GO --------------------------------------------- -- fw.viewDimPositionTypeAssignmentType --Last Modified 11/8/2024 12:46 AM CREATE VIEW [fw].[viewDimPositionTypeAssignmentType] AS SELECT grp34DC76DCBD1B4EB7BB814C769354A3F5.[PositionTypeAssignmentTypeID] ,grp34DC76DCBD1B4EB7BB814C769354A3F5.[Name] ,grp34DC76DCBD1B4EB7BB814C769354A3F5.[TransactionID] ,grp34DC76DCBD1B4EB7BB814C769354A3F5.[MemberGUID] ,grp34DC76DCBD1B4EB7BB814C769354A3F5.[HistoryItemGUID] FROM [fw].[DimPositionTypeAssignmentType] grp34DC76DCBD1B4EB7BB814C769354A3F5 (readuncommitted) GO --------------------------------------------- -- fw.viewDimProductiveClass CREATE VIEW [fw].[viewDimProductiveClass] AS SELECT grp6EF32EA816124EEF8860ED7A89141304.[ProductiveClassID] ,grp6EF32EA816124EEF8860ED7A89141304.[Name] ,grp6EF32EA816124EEF8860ED7A89141304.[MemberGUID] ,grp6EF32EA816124EEF8860ED7A89141304.[HistoryItemGUID] FROM [fw].[DimProductiveClass] grp6EF32EA816124EEF8860ED7A89141304 (readuncommitted) GO --------------------------------------------- -- fw.viewDimProgram --Last Modified 5/26/2015 10:11 AM CREATE VIEW [fw].[viewDimProgram] AS SELECT grp7D067B54714C46E1927FF61AE552BEA9.[ProgramID] ,coalesce(grp7D067B54714C46E1927FF61AE552BEA9.[Name],'') as [Name] ,grp7D067B54714C46E1927FF61AE552BEA9.[Code] ,grp7D067B54714C46E1927FF61AE552BEA9.[Description] ,grp7D067B54714C46E1927FF61AE552BEA9.[SortOrder] ,grp7D067B54714C46E1927FF61AE552BEA9.[TransactionID] ,grp7D067B54714C46E1927FF61AE552BEA9.[MemberGUID] ,grp7D067B54714C46E1927FF61AE552BEA9.[HistoryItemGUID] FROM [fw].[DimProgram] grp7D067B54714C46E1927FF61AE552BEA9 (readuncommitted) GO --------------------------------------------- -- fw.viewDimProject --Last Modified 5/26/2015 10:11 AM CREATE VIEW [fw].[viewDimProject] AS SELECT grp2CF09BEF8FF548EB995FA62246911542.[ProjectID] ,coalesce(grp2CF09BEF8FF548EB995FA62246911542.[Name],'') as [Name] ,grp2CF09BEF8FF548EB995FA62246911542.[Code] ,grp2CF09BEF8FF548EB995FA62246911542.[Description] ,grp2CF09BEF8FF548EB995FA62246911542.[SortOrder] ,grp2CF09BEF8FF548EB995FA62246911542.[TransactionID] ,grp2CF09BEF8FF548EB995FA62246911542.[MemberGUID] ,grp2CF09BEF8FF548EB995FA62246911542.[HistoryItemGUID] FROM [fw].[DimProject] grp2CF09BEF8FF548EB995FA62246911542 (readuncommitted) GO --------------------------------------------- -- fw.viewDimProvider --Last Modified 9/4/2018 7:30 PM CREATE VIEW [fw].[viewDimProvider] AS SELECT grp1D2F3A2E50034A10A3B63D4C0CC69235.[ProviderID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[Type] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[NameFirst] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[IsPhysician] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[NameLast] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[ProviderCode] ,coalesce(grp1D2F3A2E50034A10A3B63D4C0CC69235.[Name],'') as [Name] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[PhysicianSpecialtyID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[StateLicenseNumber] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[NPI] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[GroupAffiliaition] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[DSSIsDefined] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBIsDefined] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[IsEmployee] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBIsActive] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier1Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier2Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier3Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier4Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier5Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier6Rate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier1Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier2Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier3Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier4Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier5Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBTier6Threshold] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBVolumeTarget1] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBVolumeTarget2] ,coalesce(grp1D2F3A2E50034A10A3B63D4C0CC69235.[ProviderName],'') as [ProviderName] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[PayRate] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[OBVolumeTarget3] ,coalesce(grp1D2F3A2E50034A10A3B63D4C0CC69235.[CompensationMethod],'') as [CompensationMethod] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[BasePay] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[TransactionID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[MemberGUID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[HistoryItemGUID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[WorkWeekOverrideID] ,grp1D2F3A2E50034A10A3B63D4C0CC69235.[IsVariable] ,ISNULL([PHYSICIANSPECIALTY].[Name], 'Not Specified') as [Specialty] FROM [fw].[DimProvider] grp1D2F3A2E50034A10A3B63D4C0CC69235 (readuncommitted) LEFT JOIN [fw].[viewDimPhysicianSpecialty] [PHYSICIANSPECIALTY] on [PHYSICIANSPECIALTY].[PhysicianSpecialtyID] = [grp1D2F3A2E50034A10A3B63D4C0CC69235].[PhysicianSpecialtyID] GO --------------------------------------------- -- fw.viewDimProviderPH CREATE VIEW [fw].[viewDimProviderPH] AS SELECT grp085BA6AC2CB14AD4A83D611E7B1646B1.[ProviderPHID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[Name] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[TransactionID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[MemberGUID] ,grp085BA6AC2CB14AD4A83D611E7B1646B1.[HistoryItemGUID] FROM [fw].[DimProviderPH] grp085BA6AC2CB14AD4A83D611E7B1646B1 (readuncommitted) GO --------------------------------------------- -- fw.viewDimQuarter_auto CREATE VIEW [fw].[viewDimQuarter_auto] AS SELECT grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E.[Name] ,grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E.[MemberGUID] ,grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E.[QuarterID] , [grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E].[Version], [grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E].[HistoryItemGUID]FROM [fw].[DimQuarter] grp3CBAB808CE024FFBB6B5C2F2E6B7EC5E (readuncommitted) GO --------------------------------------------- -- fw.viewDimReportDetailType CREATE VIEW [fw].[viewDimReportDetailType] AS SELECT grp280082C30690409ABF34E0DC53FEDC09.[ReportDetailTypeID] ,grp280082C30690409ABF34E0DC53FEDC09.[Name] ,grp280082C30690409ABF34E0DC53FEDC09.[TransactionID] ,grp280082C30690409ABF34E0DC53FEDC09.[MemberGUID] ,grp280082C30690409ABF34E0DC53FEDC09.[HistoryItemGUID] ,grp280082C30690409ABF34E0DC53FEDC09.[TableName] FROM [fw].[DimReportDetailType] grp280082C30690409ABF34E0DC53FEDC09 (readuncommitted) GO --------------------------------------------- -- fw.viewDimResearchDepartmentCategory CREATE VIEW [fw].[viewDimResearchDepartmentCategory] AS SELECT grpE9D662D6B156456CBA91AE99CF2DF414.[ResearchDepartmentCategoryID] ,grpE9D662D6B156456CBA91AE99CF2DF414.[Name] ,grpE9D662D6B156456CBA91AE99CF2DF414.[SortOrder] ,grpE9D662D6B156456CBA91AE99CF2DF414.[TransactionID] ,grpE9D662D6B156456CBA91AE99CF2DF414.[MemberGUID] ,grpE9D662D6B156456CBA91AE99CF2DF414.[HistoryItemGUID] FROM [fw].[DimResearchDepartmentCategory] grpE9D662D6B156456CBA91AE99CF2DF414 (readuncommitted) GO --------------------------------------------- -- fw.viewDimRowNumber CREATE VIEW [fw].[viewDimRowNumber] AS SELECT grpCEA161A7FFE24D2B90F4491D4C324B8D.[RowNumberID] ,grpCEA161A7FFE24D2B90F4491D4C324B8D.[Name] ,grpCEA161A7FFE24D2B90F4491D4C324B8D.[MemberGUID] ,grpCEA161A7FFE24D2B90F4491D4C324B8D.[HistoryItemGUID] FROM [fw].[DimRowNumber] grpCEA161A7FFE24D2B90F4491D4C324B8D (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHAccountRollup --Last Modified 3/15/2022 10:09 PM CREATE VIEW [fw].[viewDimSPHAccountRollup] AS SELECT grp0FB965B53015438FA55B5196CD9FEEC1.[SPHAccountRollupID] ,coalesce(grp0FB965B53015438FA55B5196CD9FEEC1.[Name],'') as [Name] ,grp0FB965B53015438FA55B5196CD9FEEC1.[TransactionID] ,grp0FB965B53015438FA55B5196CD9FEEC1.[MemberGUID] ,grp0FB965B53015438FA55B5196CD9FEEC1.[HistoryItemGUID] ,grp0FB965B53015438FA55B5196CD9FEEC1.[Statement] ,grp0FB965B53015438FA55B5196CD9FEEC1.[Category] ,grp0FB965B53015438FA55B5196CD9FEEC1.[LineItem] ,grp0FB965B53015438FA55B5196CD9FEEC1.[Section] ,grp0FB965B53015438FA55B5196CD9FEEC1.[SortOrder] ,grp0FB965B53015438FA55B5196CD9FEEC1.[IsStandard] ,grp0FB965B53015438FA55B5196CD9FEEC1.[SPHCostComponent] ,grp0FB965B53015438FA55B5196CD9FEEC1.[SPHCostComponentRollup] ,grp0FB965B53015438FA55B5196CD9FEEC1.[SPHAccountRollupCode] FROM [fw].[DimSPHAccountRollup] grp0FB965B53015438FA55B5196CD9FEEC1 (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHDepartmentRollup --Last Modified 11/16/2020 3:28 PM CREATE VIEW [fw].[viewDimSPHDepartmentRollup] AS SELECT grp5181C574309B42B29625F6AA66F56763.[SPHDepartmentRollupID] ,grp5181C574309B42B29625F6AA66F56763.[TransactionID] ,coalesce(grp5181C574309B42B29625F6AA66F56763.[Name],'') as [Name] ,grp5181C574309B42B29625F6AA66F56763.[MemberGUID] ,grp5181C574309B42B29625F6AA66F56763.[HistoryItemGUID] ,grp5181C574309B42B29625F6AA66F56763.[SPHDepartmentRollupCode] ,grp5181C574309B42B29625F6AA66F56763.[SortOrder] ,grp5181C574309B42B29625F6AA66F56763.[IsStandard] FROM [fw].[DimSPHDepartmentRollup] grp5181C574309B42B29625F6AA66F56763 (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHDepartmentType_auto --Last Modified 11/16/2020 3:28 PM CREATE VIEW [fw].[viewDimSPHDepartmentType_auto] AS SELECT grp0A011FEFFE0943ACA25C28B87AF8BB5E.[SPHDepartmentTypeID] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[Name] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[TransactionID] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[MemberGUID] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[HistoryItemGUID] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[SPHDepartmentTypeCode] ,grp0A011FEFFE0943ACA25C28B87AF8BB5E.[IsStandard] FROM [fw].[DimSPHDepartmentType] grp0A011FEFFE0943ACA25C28B87AF8BB5E (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHDepartment_auto --Last Modified 4/5/2024 9:49 AM CREATE VIEW [fw].[viewDimSPHDepartment_auto] AS SELECT grpBA529E3553234961A9B03E2BB2DE62D6.[SPHDepartmentID] ,grpBA529E3553234961A9B03E2BB2DE62D6.[Name] ,grpBA529E3553234961A9B03E2BB2DE62D6.[SPHDepartmentRollup] ,grpBA529E3553234961A9B03E2BB2DE62D6.[TransactionID] ,grpBA529E3553234961A9B03E2BB2DE62D6.[MemberGUID] ,grpBA529E3553234961A9B03E2BB2DE62D6.[HistoryItemGUID] ,grpBA529E3553234961A9B03E2BB2DE62D6.[SPHDepartmentCode] FROM [fw].[DimSPHDepartment] grpBA529E3553234961A9B03E2BB2DE62D6 (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHJobCodeRollup --Last Modified 12/15/2020 2:06 PM CREATE VIEW [fw].[viewDimSPHJobCodeRollup] AS SELECT grpCC5829E5D6334D34958CCF8057B6E850.[SPHJobCodeRollupID] ,grpCC5829E5D6334D34958CCF8057B6E850.[Name] ,grpCC5829E5D6334D34958CCF8057B6E850.[TransactionID] ,grpCC5829E5D6334D34958CCF8057B6E850.[MemberGUID] ,grpCC5829E5D6334D34958CCF8057B6E850.[HistoryItemGUID] ,grpCC5829E5D6334D34958CCF8057B6E850.[SPHJobCodeRollupCode] ,grpCC5829E5D6334D34958CCF8057B6E850.[SPHCostComponent] ,grpCC5829E5D6334D34958CCF8057B6E850.[SortOrder] ,grpCC5829E5D6334D34958CCF8057B6E850.[IsStandard] FROM [fw].[DimSPHJobCodeRollup] grpCC5829E5D6334D34958CCF8057B6E850 (readuncommitted) GO --------------------------------------------- -- fw.viewDimSPHPayCodeRollup --Last Modified 02/17/2022 3:49 PM CREATE VIEW [fw].[viewDimSPHPayCodeRollup] AS SELECT grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[SPHPayCodeRollupID] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[Name] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[TransactionID] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[MemberGUID] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[HistoryItemGUID] ,coalesce(grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[SPHProductiveClass],'') as [SPHProductiveClass] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[SortOrder] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[IsStandard] ,grpCD15C19FF64B4AE6B4AEF15FE3E938C8.[SPHPayCodeRollupCode] FROM [fw].[DimSPHPayCodeRollup] grpCD15C19FF64B4AE6B4AEF15FE3E938C8 (readuncommitted) GO --------------------------------------------- -- fw.viewDimSecureGroup CREATE VIEW [fw].[viewDimSecureGroup] AS SELECT grpCD7483929A80421EB8FCB5F08DA13707.[SecureGroupID] ,grpCD7483929A80421EB8FCB5F08DA13707.[Name] ,grpCD7483929A80421EB8FCB5F08DA13707.[MemberGUID] ,grpCD7483929A80421EB8FCB5F08DA13707.[HistoryItemGUID] FROM [fw].[DimSecureGroup] grpCD7483929A80421EB8FCB5F08DA13707 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine CREATE VIEW [fw].[viewDimServiceLine] AS SELECT [ServiceLineID], COALESCE([Name],'') as [Name], [RollupID], [ProductLine], [Code], [SortOrder], COALESCE([Rollup],'') as [Rollup], [RollupSortOrder], [MemberGUID], [HistoryItemGUID] FROM [fw].[DimServiceLine] (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine2_auto --Last Modified 8/1/2016 9:45 AM CREATE VIEW [fw].[viewDimServiceLine2_auto] AS SELECT grp49B904B3B0B047D8BE592BFC9B8A8AB5.[ServiceLine2ID] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[Name] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[MemberGUID] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[HistoryItemGUID] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[PatientTypeID] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[Rollup] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[Rollup2] ,grp49B904B3B0B047D8BE592BFC9B8A8AB5.[SortOrder] FROM [fw].[DimServiceLine2] grp49B904B3B0B047D8BE592BFC9B8A8AB5 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine3_auto --Last Modified 8/1/2016 9:45 AM CREATE VIEW [fw].[viewDimServiceLine3_auto] AS SELECT grp5974196196F64FC9A4F8AA9FACBDCD45.[ServiceLine3ID] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[Name] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[MemberGUID] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[HistoryItemGUID] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[PatientTypeID] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[Rollup] ,grp5974196196F64FC9A4F8AA9FACBDCD45.[SortOrder] FROM [fw].[DimServiceLine3] grp5974196196F64FC9A4F8AA9FACBDCD45 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine4_auto --Last Modified 8/1/2016 9:45 AM CREATE VIEW [fw].[viewDimServiceLine4_auto] AS SELECT grp569AFAF6B05343CD97F0CAAF28DC8F00.[ServiceLine4ID] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[Name] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[MemberGUID] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[HistoryItemGUID] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[PatientTypeID] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[Rollup] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[SortOrder] ,grp569AFAF6B05343CD97F0CAAF28DC8F00.[Rollup2] FROM [fw].[DimServiceLine4] grp569AFAF6B05343CD97F0CAAF28DC8F00 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine5_auto --Last Modified 8/1/2016 9:45 AM CREATE VIEW [fw].[viewDimServiceLine5_auto] AS SELECT grpC0586B9CF59342389C2043964523F713.[ServiceLine5ID] ,grpC0586B9CF59342389C2043964523F713.[Name] ,grpC0586B9CF59342389C2043964523F713.[MemberGUID] ,grpC0586B9CF59342389C2043964523F713.[HistoryItemGUID] ,grpC0586B9CF59342389C2043964523F713.[PatientTypeID] ,grpC0586B9CF59342389C2043964523F713.[Rollup] ,grpC0586B9CF59342389C2043964523F713.[SortOrder] FROM [fw].[DimServiceLine5] grpC0586B9CF59342389C2043964523F713 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine6_auto --Last Modified 8/1/2016 9:45 AM CREATE VIEW [fw].[viewDimServiceLine6_auto] AS SELECT grpFAE2AC4E1DB34075B2113A9624D8EBDA.[ServiceLine6ID] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[Name] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[MemberGUID] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[HistoryItemGUID] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[PatientTypeID] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[Rollup] ,grpFAE2AC4E1DB34075B2113A9624D8EBDA.[SortOrder] FROM [fw].[DimServiceLine6] grpFAE2AC4E1DB34075B2113A9624D8EBDA (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLineRollup CREATE VIEW [fw].[viewDimServiceLineRollup] AS SELECT grp634CA27B835D4A18B1E58F8992F1B031.[ServiceLineRollupID] ,grp634CA27B835D4A18B1E58F8992F1B031.[Name] ,grp634CA27B835D4A18B1E58F8992F1B031.[MemberGUID] ,grp634CA27B835D4A18B1E58F8992F1B031.[HistoryItemGUID] ,grp634CA27B835D4A18B1E58F8992F1B031.[TransactionID] ,grp634CA27B835D4A18B1E58F8992F1B031.[SortOrder] FROM [fw].[DimServiceLineRollup] grp634CA27B835D4A18B1E58F8992F1B031 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLineRollupPH CREATE VIEW [fw].[viewDimServiceLineRollupPH] AS SELECT grp6617B9B078794F479D91C0708CEED4F0.[ServiceLineRollupPHID] ,grp6617B9B078794F479D91C0708CEED4F0.[Name] ,grp6617B9B078794F479D91C0708CEED4F0.[MemberGUID] ,grp6617B9B078794F479D91C0708CEED4F0.[HistoryItemGUID] ,grp6617B9B078794F479D91C0708CEED4F0.[TransactionID] FROM [fw].[DimServiceLineRollupPH] grp6617B9B078794F479D91C0708CEED4F0 (readuncommitted) GO --------------------------------------------- -- fw.viewDimServiceLine_source CREATE VIEW [fw].[viewDimServiceLine_source] AS SELECT grpB9907EAC036D4FC5BFF43432DC038E7A.[ServiceLineID] ,grpB9907EAC036D4FC5BFF43432DC038E7A.[Name] ,grpB9907EAC036D4FC5BFF43432DC038E7A.[MemberGUID] ,grpB9907EAC036D4FC5BFF43432DC038E7A.[HistoryItemGUID] ,ISNULL([SERVICELINEROLLUP].[Name], 'Not Specified') as [Rollup] ,ISNULL([SERVICELINEROLLUP].[SortOrder], 0) as [RollupSortOrder] FROM [fw].[DimServiceLine] grpB9907EAC036D4FC5BFF43432DC038E7A (readuncommitted) LEFT JOIN [fw].[viewDimServiceLineRollup] [SERVICELINEROLLUP] on [SERVICELINEROLLUP].[ServiceLineRollupID] = [grpB9907EAC036D4FC5BFF43432DC038E7A].[RollupID] GO --------------------------------------------- -- fw.viewDimSourceOfSavings --Last Modified 10/31/2018 9:48 AM CREATE VIEW [fw].[viewDimSourceOfSavings] AS SELECT grp91260CC7FCE64FEE96459705BF43D6CB.[SourceOfSavingsID] ,grp91260CC7FCE64FEE96459705BF43D6CB.[Name] ,grp91260CC7FCE64FEE96459705BF43D6CB.[MemberGUID] ,grp91260CC7FCE64FEE96459705BF43D6CB.[HistoryItemGUID] ,grp91260CC7FCE64FEE96459705BF43D6CB.[TransactionID] FROM [fw].[DimSourceOfSavings] grp91260CC7FCE64FEE96459705BF43D6CB (readuncommitted) GO --------------------------------------------- -- fw.viewDimStaffingCategory_auto --Last Modified 3/27/2023 4:41 PM CREATE VIEW [fw].[viewDimStaffingCategory_auto] AS SELECT grp14EBA885F7334C2AA07343FD9886CAF6.[StaffingCategoryID] ,coalesce(grp14EBA885F7334C2AA07343FD9886CAF6.[Name],'') as [Name] ,grp14EBA885F7334C2AA07343FD9886CAF6.[TransactionID] ,grp14EBA885F7334C2AA07343FD9886CAF6.[MemberGUID] ,grp14EBA885F7334C2AA07343FD9886CAF6.[HistoryItemGUID] ,grp14EBA885F7334C2AA07343FD9886CAF6.[StaffingCategoryCode] ,grp14EBA885F7334C2AA07343FD9886CAF6.[Description] FROM [fw].[DimStaffingCategory] grp14EBA885F7334C2AA07343FD9886CAF6 (readuncommitted) GO --------------------------------------------- -- fw.viewDimStrataDecisionServiceLine --Last Modified 6/3/2015 4:41 PM CREATE VIEW [fw].[viewDimStrataDecisionServiceLine] AS SELECT grp44649CCD9FB74ECF80BB88D6C5033A8C.[StrataDecisionServiceLineID] ,grp44649CCD9FB74ECF80BB88D6C5033A8C.[Name] ,grp44649CCD9FB74ECF80BB88D6C5033A8C.[TransactionID] ,grp44649CCD9FB74ECF80BB88D6C5033A8C.[MemberGUID] ,grp44649CCD9FB74ECF80BB88D6C5033A8C.[HistoryItemGUID] ,grp44649CCD9FB74ECF80BB88D6C5033A8C.[PatientTypeID] FROM [fw].[DimStrataDecisionServiceLine] grp44649CCD9FB74ECF80BB88D6C5033A8C (readuncommitted) GO --------------------------------------------- -- fw.viewDimSystem CREATE VIEW [fw].[viewDimSystem] AS SELECT [SystemID], COALESCE([Name],'') as [Name], [Code], [Description], [SortOrder], [SecureGroupID], [TransactionID], [HistoryItemGUID], [MemberGUID], [EliminationsDepartmentID] FROM [fw].[DimSystem] (readuncommitted) GO --------------------------------------------- -- fw.viewDimSystemSection create view [fw].[viewDimSystemSection] as select SS.SYSTEMSECTIONGUID as MemberGUID, SS.Name, SS.ImageName, coalesce(nullif(replace(replace(replace(substring(replace(SS.FullPath, 'SYSTEM\', ''), 1, patindex('%\%', replace(SS.FullPath, 'SYSTEM\', ''))), '\', ''), 'TOOLBAR_', ''), 'MENU_', ''), ''), 'System') as Area, coalesce(nullif(replace(substring(replace(SS.FullPath, 'SYSTEM\', ''), 1, patindex('%\%', replace(SS.FullPath, 'SYSTEM\', ''))), '\', ''), ''), 'System') as Section, coalesce(nullif(replace(replace(replace(substring(replace(SS.FullPath, 'SYSTEM\', ''), 1, patindex('%\%', replace(SS.FullPath, 'SYSTEM\', ''))), '\', ''), 'TOOLBAR_', ''), 'MENU_', ''), ''), 'System') + ' - ' + coalesce(nullif(replace(substring(replace(SS.FullPath, 'SYSTEM\', ''), 1, patindex('%\%', replace(SS.FullPath, 'SYSTEM\', ''))), '\', ''), ''), 'System') + ' - ' + SS.Name as [FullName], SS.ID, SS.LootID, coalesce(PSS.Name, 'System') as Parent, coalesce(PSS.LootID, '1F30ED4A-DFA5-4EA6-8457-20D23DB372C3') as ParentLootID, cast(0 as bit) as IsDeleted, dbo.ZeroGUID() as HistoryItemGUID from SystemSection SS left join SystemSection PSS on PSS.SystemSectionGUID = SS.ParentGUID --inner join S3Loot L on L.LootID = SS.LootID --inner join S3PermissionSet PS on PS.PermissionSetID = L.PermissionSetID --why do we do this? AJK --where PS.Name like '%System%' GO --------------------------------------------- -- fw.viewDimSystem_source CREATE VIEW [fw].[viewDimSystem_source] AS SELECT grpF27719422C1141E2BDF4C0F24660B263.[SystemID] ,grpF27719422C1141E2BDF4C0F24660B263.[Name] ,grpF27719422C1141E2BDF4C0F24660B263.[SecureGroupID] ,grpF27719422C1141E2BDF4C0F24660B263.[TransactionID] ,grpF27719422C1141E2BDF4C0F24660B263.[HistoryItemGUID] ,grpF27719422C1141E2BDF4C0F24660B263.[MemberGUID] FROM [fw].[DimSystem] grpF27719422C1141E2BDF4C0F24660B263 (readuncommitted) GO --------------------------------------------- -- fw.viewDimTimeClass CREATE VIEW [fw].[viewDimTimeClass] AS SELECT grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[MemberGUID] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[TimeClassID] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[Name] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[TimeClassCode] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[GlobalID] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[IsSP] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[SPIsISForecast] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[HistoryItemGUID] ,grp5A23BD5828DE40AC868EBCB6F1CE3FF8.[SortOrder] , [grp5A23BD5828DE40AC868EBCB6F1CE3FF8].[Version]FROM [fw].[DimTimeClass] grp5A23BD5828DE40AC868EBCB6F1CE3FF8 (readuncommitted) GO --------------------------------------------- -- fw.viewDimTimeClassPH CREATE VIEW [fw].[viewDimTimeClassPH] AS SELECT [TimeClassPHID], [Name], [MemberGUID] FROM [fw].[DimTimeClassPH] (readuncommitted) GO --------------------------------------------- -- fw.viewDimTimeClassPH_source CREATE VIEW [fw].[viewDimTimeClassPH_source] AS SELECT grp1132ACA8D57B494890AE52DD6857E83B.[TimeClassPHID] ,grp1132ACA8D57B494890AE52DD6857E83B.[MemberGUID] FROM [fw].[DimTimeClassPH] grp1132ACA8D57B494890AE52DD6857E83B (readuncommitted) GO --------------------------------------------- -- fw.viewDimTime_auto --Last Modified 1/8/2019 1:37 PM CREATE VIEW [fw].[viewDimTime_auto] AS SELECT grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[TimeID] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[TransactionID] ,coalesce(grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[Name],'') as [Name] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[Hour] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[Minute] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[MemberGUID] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[StandardTime] ,grp35B3D1A6EEAC4E0CA47893B67CD0FD99.[HistoryItemGUID] , [grp35B3D1A6EEAC4E0CA47893B67CD0FD99].[Version]FROM [fw].[DimTime] grp35B3D1A6EEAC4E0CA47893B67CD0FD99 (readuncommitted) GO --------------------------------------------- -- fw.viewDimUnitType CREATE VIEW [fw].[viewDimUnitType] AS SELECT grp7B1AFC84DBD346F9A5E90839ADF09065.[UnitTypeID] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[Name] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[GlobalID] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[DisplayFormat] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[SPDisplayFormat] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[CapitalDisplayFormat] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[MemberGUID] ,grp7B1AFC84DBD346F9A5E90839ADF09065.[HistoryItemGUID] , [grp7B1AFC84DBD346F9A5E90839ADF09065].[Version]FROM [fw].[DimUnitType] grp7B1AFC84DBD346F9A5E90839ADF09065 (readuncommitted) GO --------------------------------------------- -- fw.viewDimUnit_auto --Last Modified 10/22/2020 5:41 PM CREATE VIEW [fw].[viewDimUnit_auto] AS SELECT grpB9BA9ECBC1214A079F252B81ED4DFE6F.[Name] ,grpB9BA9ECBC1214A079F252B81ED4DFE6F.[Abbreviation] ,grpB9BA9ECBC1214A079F252B81ED4DFE6F.[MemberGUID] ,grpB9BA9ECBC1214A079F252B81ED4DFE6F.[UnitID] ,grpB9BA9ECBC1214A079F252B81ED4DFE6F.[SortOrder] ,grpB9BA9ECBC1214A079F252B81ED4DFE6F.[IsActive] , [grpB9BA9ECBC1214A079F252B81ED4DFE6F].[Version], [grpB9BA9ECBC1214A079F252B81ED4DFE6F].[HistoryItemGUID]FROM [fw].[DimUnit] grpB9BA9ECBC1214A079F252B81ED4DFE6F (readuncommitted) GO --------------------------------------------- -- fw.viewDimUserProfile CREATE view [fw].[viewDimUserProfile] as select up.UserGUID as MemberGUID, up.UserGUID, up.UserName, up.NameFull, ISNULL(CAST(CASE WHEN IL.GroupingGUID IS NULL THEN 0 ELSE 1 END AS bit),0) AS IsSysAdmin, CAST (0 as bit) as IsDeleted, dbo.ZeroGUID() as HistoryItemGUID, CAST(UserGUID as varchar(36)) as LootID from UserProfile up left join [dbo].[S3IdentityLink] IL on UP.UserGUID = IL.MemberGUID and IL.GroupingGUID = (select UserGroupGUID from [dbo].[UserGroup] where GlobalID = 'GEN - User Administrator') where up.IsDisabled = 0 GO --------------------------------------------- -- fw.viewDimUserRole CREATE VIEW [fw].[viewDimUserRole] AS SELECT grp35E4A606568B4382851EBD0183D9C8CF.[Description] ,grp35E4A606568B4382851EBD0183D9C8CF.[Type] ,grp35E4A606568B4382851EBD0183D9C8CF.[Category] ,grp35E4A606568B4382851EBD0183D9C8CF.[RoleID] ,grp35E4A606568B4382851EBD0183D9C8CF.[Name] ,grp35E4A606568B4382851EBD0183D9C8CF.[MemberGUID] ,grp35E4A606568B4382851EBD0183D9C8CF.[HistoryItemGUID] FROM [fw].[viewDimUserRoleInfo] grp35E4A606568B4382851EBD0183D9C8CF GO --------------------------------------------- -- fw.viewDimUserRoleInfo create view fw.viewDimUserRoleInfo as select UserRoleGUID as MemberGUID, RoleID, Name, Description, Type, Category, dbo.ZeroGUID() as HistoryItemGUID from [dbo].[UserRole] with (readuncommitted) GO --------------------------------------------- -- fw.viewDimUsers CREATE view fw.viewDimUsers AS select UP.UserGUID as [MemberGUID], UP.UserGUID as [UserGUID], UP.UserName, UP.NameFirst, UP.NameLast, UP.NameFull, UP.EmailAddress, UP.PhoneNumber, ISNULL(CAST(CASE WHEN IL.GroupingGUID IS NULL THEN 0 ELSE 1 END AS bit),0) AS IsSysAdmin from dbo.UserProfile UP left join [dbo].[S3IdentityLink] IL on UP.UserGUID = IL.MemberGUID and IL.GroupingGUID = (select UserGroupGUID from [dbo].[UserGroup] where GlobalID = 'GEN - User Administrator') GO --------------------------------------------- -- fw.viewDimUsers_auto CREATE VIEW [fw].[viewDimUsers_auto] AS SELECT grp1F25D2EFD624418E8482FEAB7BAE4841.[MemberGUID] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[UserName],'') as [UserName] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[NameFirst],'') as [NameFirst] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[NameLast],'') as [NameLast] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[EmailAddress],'') as [EmailAddress] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[PhoneNumber],'') as [PhoneNumber] ,grp1F25D2EFD624418E8482FEAB7BAE4841.[IsSysAdmin] ,coalesce(grp1F25D2EFD624418E8482FEAB7BAE4841.[NameFull],'') as [NameFull] ,grp1F25D2EFD624418E8482FEAB7BAE4841.[UserGUID] FROM [fw].[viewDimUsers] grp1F25D2EFD624418E8482FEAB7BAE4841 GO --------------------------------------------- -- fw.viewDimVariability --Last Modified 12/9/2016 2:10 PM CREATE VIEW [fw].[viewDimVariability] AS SELECT grp093B96C5E7324756BDD0329EB4A55B43.[VariabilityID] ,grp093B96C5E7324756BDD0329EB4A55B43.[Name] ,grp093B96C5E7324756BDD0329EB4A55B43.[TransactionID] ,grp093B96C5E7324756BDD0329EB4A55B43.[MemberGUID] ,grp093B96C5E7324756BDD0329EB4A55B43.[HistoryItemGUID] FROM [fw].[DimVariability] grp093B96C5E7324756BDD0329EB4A55B43 (readuncommitted) GO --------------------------------------------- -- fw.viewDimVendor CREATE VIEW [fw].[viewDimVendor] AS SELECT VendorCode AS [VendorCode] ,MemberGUID ,VendorID AS [VendorID] ,Name ,VendorRollup ,VendorDescription ,IsActive FROM [cap].[DimVendor]; GO --------------------------------------------- -- fw.viewDimVendor_auto --Last Modified 7/18/2017 3:21 PM CREATE VIEW [fw].[viewDimVendor_auto] AS SELECT grpA3C8AA18CD8446948E36DB868059BC19.[VendorCode] ,grpA3C8AA18CD8446948E36DB868059BC19.[MemberGUID] ,grpA3C8AA18CD8446948E36DB868059BC19.[VendorID] ,coalesce(grpA3C8AA18CD8446948E36DB868059BC19.[VendorRollup],'') as [VendorRollup] ,grpA3C8AA18CD8446948E36DB868059BC19.[VendorDescription] ,grpA3C8AA18CD8446948E36DB868059BC19.[IsActive] ,[grpA3C8AA18CD8446948E36DB868059BC19].[VendorCode] + ' - ' + [grpA3C8AA18CD8446948E36DB868059BC19].[VendorDescription] AS [Name] FROM [fw].[viewDimVendor] grpA3C8AA18CD8446948E36DB868059BC19 GO --------------------------------------------- -- fw.viewDimWorkWeek --Last Modified 3/3/2015 10:40 AM CREATE VIEW [fw].[viewDimWorkWeek] AS SELECT grpFDAFCE80DC5344DA9680D20E7596BC98.[MemberGUID] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[WorkWeekID] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[Name] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[WorkWeekCode] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[Type] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[TransactionID] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[HistoryItemGUID] ,grpFDAFCE80DC5344DA9680D20E7596BC98.[SortOrder] FROM [fw].[DimWorkWeek] grpFDAFCE80DC5344DA9680D20E7596BC98 (readuncommitted) GO --------------------------------------------- -- fw.viewDimWorkWeekPH CREATE VIEW [fw].[viewDimWorkWeekPH] AS SELECT grp5B25135186E54281B07A9C0128CEBF9E.[MemberGUID] ,grp5B25135186E54281B07A9C0128CEBF9E.[WorkWeekPHID] ,grp5B25135186E54281B07A9C0128CEBF9E.[Name] ,grp5B25135186E54281B07A9C0128CEBF9E.[TransactionID] ,grp5B25135186E54281B07A9C0128CEBF9E.[HistoryItemGUID] FROM [fw].[DimWorkWeekPH] grp5B25135186E54281B07A9C0128CEBF9E (readuncommitted) GO --------------------------------------------- -- fw.viewDimXPlan CREATE view [fw].[viewDimXPlan] as select P.PlanGUID as MemberGUID, ISNULL(case when P.IsDeletedPlan = 1 then 'DELETED ' + P.Name else P.Name end,'') as Name, P.PlanID, P.CachedLootID, P.IsDeletedPlan as IsDeleted, P.PlanTypeGUID, PT.Name as PlanTypeName from XPlan P (readuncommitted) inner join PlanType PT (readuncommitted) on PT.PlanTypeGUID = P.PlanTypeGUID GO --------------------------------------------- -- fw.viewDimXPlan_auto CREATE VIEW [fw].[viewDimXPlan_auto] AS SELECT grpF444702419784B9EB154D1C4369A77C8.[MemberGUID] ,coalesce(grpF444702419784B9EB154D1C4369A77C8.[Name],'') as [Name] ,grpF444702419784B9EB154D1C4369A77C8.[PlanID] ,coalesce(grpF444702419784B9EB154D1C4369A77C8.[CachedLootID],'') as [CachedLootID] ,grpF444702419784B9EB154D1C4369A77C8.[PlanTypeGUID] ,grpF444702419784B9EB154D1C4369A77C8.[PlanTypeName] ,grpF444702419784B9EB154D1C4369A77C8.[IsDeleted] FROM [fw].[viewDimXPlan] grpF444702419784B9EB154D1C4369A77C8 GO --------------------------------------------- -- fw.viewEliminationsDepartment create view fw.viewEliminationsDepartment as select d.DepartmentID, d.Name from fw.viewDimDepartment d where d.DepartmentID != 0 and ( exists(select 1 from fw.DimSystem s where s.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimEntity e where e.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup1 r1 where r1.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup2 r2 where r2.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup3 r3 where r3.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup4 r4 where r4.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup5 r5 where r5.EliminationsDepartmentID = d.DepartmentID) or exists(select 1 from fw.DimDepartmentRollup6 r6 where r6.EliminationsDepartmentID = d.DepartmentID) ) GO --------------------------------------------- -- fw.viewFactGLSampled CREATE view [fw].[viewFactGLSampled] as select fact.DepartmentID, dept.DepartmentCode, fact.AccountID, acc.AccountCode, accrollup.LineName as AccountRollup, accrollup.Section as AccountCategory, accrollup.Name as FinancialReporting, fact.TimeClassID, tc.TimeClassCode, fact.FiscalYearID, fy.Name, fact.FiscalMonthID, fm.FiscalMonthCode, fm.SortOrder as FiscalMonthSortOrder, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD from fw.FactGLSampled fact left join fw.DimDepartment dept on dept.DepartmentID=fact.DepartmentID left join fw.DimAccount acc on acc.AccountID=fact.AccountID left join fw.DimTimeClass tc on tc.TimeClassID=fact.TimeClassID left join fw.DimFiscalMonth fm on fm.FiscalMonthID=fact.FiscalMonthID left join fw.DimFiscalYear fy on fy.FiscalYearID=fact.FiscalYearID left join [ob].[DimFinancialReporting] accrollup on acc.OBDollarsFinancialReportingID = accrollup.FinancialReportingID where fact.IsDeleted = 0 GO --------------------------------------------- -- fw.viewFactPayrollSampledDailyDetailedHours --recreate referenced view CREATE VIEW fw.viewFactPayrollSampledDailyDetailedHours WITH SCHEMABINDING AS SELECT pr.RowID, pr.PayCodeGroupID, pr.DateID, pr.DepartmentID, pr.EmployeeID, pr.JobCodeID, pr.TimeClassID, pr.PayPeriodID, pr.Hours FROM fw.FactPayrollSampledDailyDetailed pr WHERE pr.TimeClassID IN (1, 4, 20) AND pr.EmployeeID <> 0 AND pr.Hours <> 0; GO --------------------------------------------- -- fw.viewFactPayrollSampledMonthly CREATE view [fw].[viewFactPayrollSampledMonthly] as select fact.DepartmentID, dept.DepartmentCode, fact.JobCodeID, jc.JobCode, fact.PayCodeID, pc.PayCode, fact.TimeClassID, tc.TimeClassCode, fact.FiscalYearID, fy.Name, fact.FiscalMonthID, fm.FiscalMonthCode, fm.SortOrder as FiscalMonthSortOrder, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, fact.FTEs, fact.FTEsYTD, fact.FTEsPriorYear, fact.FTEsPriorYTD from fw.FactPayrollSampledMonthly fact left join fw.DimDepartment dept on dept.DepartmentID=fact.DepartmentID left join fw.DimJobCode jc on jc.JobCodeID=fact.JobCodeID left join fw.DimPayCode pc on pc.PayCodeID=fact.PayCodeID left join fw.DimTimeClass tc on tc.TimeClassID=fact.TimeClassID left join fw.DimFiscalMonth fm on fm.FiscalMonthID=fact.FiscalMonthID left join fw.DimFiscalYear fy on fy.FiscalYearID=fact.FiscalYearID where fact.IsDeleted = 0 GO --------------------------------------------- -- fw.viewFactStatiscticDailyWithReallocaitonAdjustments /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: View to append to int.FactStatistic PR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for daily spread adjustments *************************************************************/ CREATE VIEW fw.[viewFactStatiscticDailyWithReallocaitonAdjustments] as SELECT SubSelect.DepartmentID, SubSelect.AccountID, SubSelect.FiscalMonthID, SubSelect.FiscalYearID, DT.DateID, SubSelect.TimeClassID, SUM(SubSelect.Units) AS Units FROM ( select STAT.DepartmentID, STAT.AccountID, STAT.FiscalYearID, STAT.FiscalMonthID, STAT.TimeClassID, SUM(STAT.Value) AS Units from [int].[FactStatistic] STAT inner join [fw].[DimDepartment] D on D.Departmentid = STAT.Departmentid where STAT.FiscalMonthID != 0 and STAT.FiscalYearID != 0 and STAT.IsDeleted = 0 and STAT.Value != 0 and (D.IsPR = 1 or exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc where dc.DriverDepartmentID = D.DepartmentID)) and stat.TimeClassID = 2 and stat.DepartmentID != 0 group by STAT.DepartmentID, STAT.AccountID, STAT.FiscalMonthID, STAT.FiscalYearID, STAT.TimeClassID UNION ALL SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change * -1 as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[DimDepartment] D on D.Departmentid = SourceDepartmentID and (D.IsPR = 1 or exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc where dc.DriverDepartmentID = D.DepartmentID)) WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ UNION All SELECT TargetDepartmentID as DepartmentID, TargetAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[DimDepartment] D on D.Departmentid = TargetDepartmentID and (D.IsPR = 1 or exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc where dc.DriverDepartmentID = D.DepartmentID)) WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ --Spread Adjustments within same Department/Account UNION All SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[DimDepartment] D on D.Departmentid = SourceDepartmentID and (D.IsPR = 1 or exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc where dc.DriverDepartmentID = D.DepartmentID)) WHERE b.TargetDepartmentID=0 AND b.TargetAccountID=0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ ) SubSelect inner join [fw].[DimDate] DT on DT.CalendarMonth = SubSelect.FiscalMonthID and DT.FiscalYear = SubSelect.FiscalYearID GROUP BY SubSelect.DepartmentID, SubSelect.AccountID, SubSelect.FiscalMonthID, SubSelect.FiscalYearID, DT.DateID, SubSelect.TimeClassID GO --------------------------------------------- -- fw.viewFactStatiscticMonthlyWithReallocaitonAdjustments CREATE View fw.[viewFactStatiscticMonthlyWithReallocaitonAdjustments] as /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: View to append to int.FactStatistic MR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for monthly spread adjustments *************************************************************/ SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, SUM(Amount) as Amount FROM ( select stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, STAT.Value as Amount from int.FactStatistic stat inner join fw.DimAccount A on A.Accountid = STAT.Accountid inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid where A.IsStat = 1 AND stat.IsDeleted = 0 and stat.Value != 0 UNION ALL SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change * -1 as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ UNION All SELECT TargetDepartmentID as DepartmentID, TargetAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ --Spread Adjustments within same Department/Account UNION All SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID WHERE b.TargetDepartmentID=0 AND b.TargetAccountID=0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ ) SubSelect GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID GO --------------------------------------------- -- fw.viewFactStatiscticPrimaryMonthlyWithReallocaitonAdjustments CREATE View fw.[viewFactStatiscticPrimaryMonthlyWithReallocaitonAdjustments] as /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: View to append to int.FactStatistic MR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for monthly spread adjustments *************************************************************/ SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, SUM(Amount) as Amount FROM ( select stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, STAT.Value as Amount from int.FactStatistic stat inner join fw.DimAccount A on A.Accountid = STAT.Accountid inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=stat.AccountID and V.DepartmentID=stat.DepartmentID where A.IsStat = 1 AND stat.IsDeleted = 0 and stat.Value != 0 UNION ALL SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change * -1 as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=SourceDepartmentID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ UNION All SELECT TargetDepartmentID as DepartmentID, TargetAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=TargetDepartmentID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ --Spread Adjustments within same Department/Account UNION All SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=SourceDepartmentID WHERE b.TargetDepartmentID=0 AND b.TargetAccountID=0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ ) SubSelect GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID GO --------------------------------------------- -- fw.viewFactStatisticByPayPeriodWithReallocaitonAdjustments CREATE VIEW fw.viewFactStatisticByPayPeriodWithReallocaitonAdjustments /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: View to append to int.FactStatistic MR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for monthly spread adjustments *************************************************************/ AS SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, sum(Value) AS Value FROM ( SELECT STAT.DepartmentID, STAT.AccountID, STAT.PayPeriodID, STAT.TimeClassID, STAT.Value FROM [int].[FactStatisticsbyPayPeriod] STAT INNER JOIN [fw].[DimDepartment] D ON D.Departmentid = STAT.Departmentid WHERE STAT.Value != 0 AND STAT.Isdeleted = 0 AND STAT.PayPeriodID != 0 AND ( D.IsPR = 1 OR EXISTS ( SELECT 1 FROM client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc WHERE dc.DriverDepartmentID = D.DepartmentID ) ) AND STAT.TimeClassID IN (1,2) AND stat.DepartmentID <> 0 --ADD ADJUSTMENTS UNION ALL SELECT ADJ.DepartmentID, ADJ.AccountID, PP.PayPeriodID, 2 AS TimeClassID, Adj.Amount * PP.PreriodWeight AS Units FROM ( SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, SUM(Value) AS Amount FROM ( SELECT SourceDepartmentID AS DepartmentID, SourceAccountID AS AccountID, FiscalYearID, FiscalMonthID, 2 AS TimeclassID, Change * - 1 AS Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A ON SourceAccountID = A.AccountID WHERE b.TargetDepartmentID <> 0 AND b.TargetAccountID <> 0 AND ba.UnitTypeID = 145 /*select * from fw.dimUnitType where Name = 'Units'*/ UNION ALL SELECT TargetDepartmentID AS DepartmentID, TargetAccountID AS AccountID, FiscalYearID, FiscalMonthID, 2 AS TimeclassID, Change AS Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A ON SourceAccountID = A.AccountID WHERE b.TargetDepartmentID <> 0 AND b.TargetAccountID <> 0 AND ba.UnitTypeID = 145 /*select * from fw.dimUnitType where Name = 'Units'*/ --Spread Adjustments within same Department/Account UNION ALL SELECT SourceDepartmentID AS DepartmentID, SourceAccountID AS AccountID, FiscalYearID, FiscalMonthID, 2 AS TimeclassID, Change AS Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A ON SourceAccountID = A.AccountID WHERE b.TargetDepartmentID = 0 AND b.TargetAccountID = 0 AND ba.UnitTypeID = 145 /*select * from fw.dimUnitType where Name = 'Units'*/ ) SubSelect GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID ) AS Adj INNER JOIN fw.DimDepartment dd ON adj.DepartmentID = dd.DepartmentID INNER JOIN ( SELECT [PayPeriodID], PayCycleID, [PeriodNumber], [FiscalMonthIDStart] AS FiscalMonthID, [FiscalYearIDStart] AS FiscalYearID, [PeriodWeightStart] AS PreriodWeight FROM [fw].[DimPayPeriod] UNION ALL SELECT [PayPeriodID], PayCycleID, [PeriodNumber], FiscalMonthIDSecond AS FiscalMonthID, FiscalYearIDSecond AS FiscalYearID, PeriodWeightSecond AS PreriodWeight FROM [fw].[DimPayPeriod] ) PP ON PP.FiscalYearID = Adj.FiscalYearID AND pp.FiscalMonthID = adj.FiscalMonthID AND pp.PayCycleID = dd.PayCycleID AND Adj.Amount * PP.PreriodWeight <> 0 ) SubSelect GROUP BY DepartmentID, AccountID, PayPeriodID, TimeClassID GO --------------------------------------------- -- fw.viewFactStatisticRollupPrimarySampledMonthly CREATE VIEW [fw].[viewFactStatisticRollupPrimarySampledMonthly] AS SELECT cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, sum(fs.Amount) as Amount, sum(fs.AmountYTD) as AmountYTD, sum(fs.AmountPriorYear) as AmountPriorYear, sum(fs.AmountPriorYTD) as AmountPriorYTD, min(cast(fs.IsSystemGenerated AS INT)) AS IsSystemGenerated FROM [fw].FactStatisticSampledMonthly fs INNER JOIN fw.DimDepartment dd ON fs.DepartmentID = dd.DepartmentID INNER JOIN fw.PrimaryStatisticsRollupsConfiguration cfg ON ( (cfg.RollupLevel = 'DepartmentRollup1' AND cfg.RollupMemberID = dd.DepartmentRollup1ID) OR (cfg.RollupLevel = 'DepartmentRollup2' AND cfg.RollupMemberID = dd.DepartmentRollup2ID) OR (cfg.RollupLevel = 'DepartmentRollup3' AND cfg.RollupMemberID = dd.DepartmentRollup3ID) OR (cfg.RollupLevel = 'DepartmentRollup4' AND cfg.RollupMemberID = dd.DepartmentRollup4ID) OR (cfg.RollupLevel = 'DepartmentRollup5' AND cfg.RollupMemberID = dd.DepartmentRollup5ID) OR (cfg.RollupLevel = 'DepartmentRollup6' AND cfg.RollupMemberID = dd.DepartmentRollup6ID) OR (cfg.RollupLevel = 'Entity' AND cfg.RollupMemberID = dd.EntityID) OR (cfg.RollupLevel = 'System' AND cfg.RollupMemberID = dd.SystemID) ) AND fs.AccountID = cfg.AccountID WHERE fs.IsDeleted = 0 AND IsMRMetricTracking = 1 GROUP BY cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID GO --------------------------------------------- -- fw.viewFactStatisticSampledMonthly CREATE view [fw].[viewFactStatisticSampledMonthly] as select fact.DepartmentID, dept.DepartmentCode, fact.AccountID, acc.AccountCode, accrollup.LineName as AccountRollup, accrollup.Section as AccountCategory, accrollup.Name as FinancialReporting, fact.TimeClassID, tc.TimeClassCode, fact.FiscalYearID, fy.Name, fact.FiscalMonthID, fm.FiscalMonthCode, fm.SortOrder as FiscalMonthSortOrder, fact.Amount, fact.AmountPriorYear, fact.AmountPriorYTD, fact.AmountYTD from fw.FactStatisticSampledMonthly fact left join fw.DimDepartment dept on dept.DepartmentID=fact.DepartmentID left join fw.DimAccount acc on acc.AccountID=fact.AccountID left join fw.DimTimeClass tc on tc.TimeClassID=fact.TimeClassID left join fw.DimFiscalMonth fm on fm.FiscalMonthID=fact.FiscalMonthID left join fw.DimFiscalYear fy on fy.FiscalYearID=fact.FiscalYearID left join [ob].[DimFinancialReporting] accrollup on acc.OBDollarsFinancialReportingID = accrollup.FinancialReportingID where fact.IsDeleted = 0 GO --------------------------------------------- -- fw.viewFactStatisticSecondaryMonthlyWithReallocaitonAdjustments CREATE View fw.[viewFactStatisticSecondaryMonthlyWithReallocaitonAdjustments] as /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: View to append to int.FactStatistic MR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for monthly spread adjustments *************************************************************/ SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, SUM(Amount) as Amount FROM ( select stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, STAT.Value as Amount from int.FactStatistic stat inner join fw.DimAccount A on A.Accountid = STAT.Accountid inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=stat.AccountID and V.DepartmentID=stat.DepartmentID where A.IsStat = 1 AND stat.IsDeleted = 0 and stat.Value != 0 UNION ALL SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change * -1 as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=SourceDepartmentID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ UNION All SELECT TargetDepartmentID as DepartmentID, TargetAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=TargetDepartmentID WHERE b.TargetDepartmentID<>0 AND b.TargetAccountID<>0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ --Spread Adjustments within same Department/Account UNION All SELECT SourceDepartmentID as DepartmentID, SourceAccountID as AccountID, FiscalYearID, FiscalMonthID, 2 as TimeclassID, Change as Value FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimAccount] A on SourceAccountID=A.AccountID inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=A.AccountID and V.DepartmentID=SourceDepartmentID WHERE b.TargetDepartmentID=0 AND b.TargetAccountID=0 and ba.UnitTypeID =145 /*select * from fw.dimUnitType where Name = 'Units'*/ ) SubSelect GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID GO --------------------------------------------- -- fw.viewFiscalYearMonth CREATE VIEW [fw].[viewFiscalYearMonth] AS SELECT ROW_NUMBER() over (order by y.fiscalyearid, m.sortorder) as FiscalTimeID, FiscalMonthID, m.Name as [FiscalMonth], y.FiscalYearID, y.Name as [FiscalYear] FROM fw.DimFiscalMonth m CROSS JOIN fw.DimFiscalYear y WHERE m.FiscalMonthID <> 0 AND y.FiscalYearID <> 0 GO --------------------------------------------- -- fw.viewLeapYearByFiscalYear CREATE VIEW fw.viewLeapYearByFiscalYear AS SELECT DISTINCT CalendarYear, FiscalYear, CASE WHEN (FiscalYear % 4 = 0 AND FiscalYear % 100 != 0) OR FiscalYear % 400 = 0 THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END AS IsLeapYear FROM [fw].[DimDate] WHERE CalendarMonth = 2 GO --------------------------------------------- -- fw.viewMRGLBudgetCostPerRVUbyMonth CREATE VIEW [fw].[viewMRGLBudgetCostPerRVUbyMonth] AS SELECT A.DepartmentID ,B.AccountID ,A.ChargeCodeID ,A.CostComponentID ,A.FiscalMonthID ,A.FiscalYearID ,A.ChargeVolume ,B.CostingResultID ,B.TimeClassID ,(A.ChargeVolume * A.RVU * B.VariableDirectUnitCostPerRVU) as ExtendedVariableDirectCost ,B.TotalCost ,B.TotalVariableDirectCost FROM (SELECT b.DepartmentID , b.ChargeCodeID , ca.CostComponentID , b.FiscalMonthID , b.FiscalYearID , MAX(ca.RVU) as RVU , SUM(Volume) as ChargeVolume FROM [dss].[FactDepartmentChargeSummary] b INNER JOIN [dss].[ChargeAllocation] ca ON ca.ChargeCodeID = b.ChargeCodeID and ca.DepartmentID = b.DepartmentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 GROUP BY b.DepartmentID, b.ChargeCodeID, ca.CostComponentID, b.FiscalMonthID, b.FiscalYearID) A INNER JOIN (SELECT OriginalAccountID as AccountID , gl.OriginalDepartmentID as DepartmentID , gl.FiscalYearID , gl.CostComponentID , gl.CostingResultID , gl.TimeClassID , SUM(gl.VariableDirectUnitCost)/SUM(ca.RVU) as VariableDirectUnitCostPerRVU , SUM(gl.VariableDirectUnitCost * gl.Volume) as TotalVariableDirectCost , SUM(gl.TotalCost) as TotalCost FROM [dss].[FactCostingOutDetailGL] gl INNER JOIN [dss].[CostingResult] cr on gl.CostingResultID = cr.CostingResultID INNER JOIN [dss].[CostingConfig] con on cr.CostingConfigGuid = con.CostingConfigGuid INNER JOIN [dss].[ChargeAllocation] ca on ca.CostingConfigGuid = con.CostingConfigGUID and ca.ChargeCodeID = gl.ChargeCodeID and ca.DepartmentID = gl.OriginalDepartmentID and ca.CostComponentID = gl.CostComponentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 WHERE gl.CostingResultID in (select CostingResultID from (select FiscalYearID, max(CostingResultID) as CostingResultID from [dss].[CostingResult] cr3 inner join [dss].[CostingConfig] cfg on cfg.CostingConfigGuid = cr3.CostingConfigGuid where cr3.IsActivityBasedDetail = 1 and cr3.IsMarkedForDeletion = 0 and cr3.IsFailure = 0 group by FiscalYearID) C) GROUP BY gl.OriginalAccountID , gl.OriginalDepartmentID , gl.FiscalYearID , gl.CostComponentID , gl.CostingResultID , gl.TimeClassID) B ON A.DepartmentID = B.DepartmentID and A.CostComponentID = B.CostComponentID and A.FiscalYearID = b.FiscalYearID GO --------------------------------------------- -- fw.viewMRPayrollBudgetCostPerRVUbyMonth CREATE VIEW [fw].[viewMRPayrollBudgetCostPerRVUbyMonth] AS SELECT A.DepartmentID ,B.JobCodeID ,B.PayCodeGroupID ,A.ChargeCodeID ,A.CostComponentID ,A.FiscalMonthID ,A.FiscalYearID ,A.ChargeVolume ,B.CostingResultID ,B.TimeClassID ,(A.ChargeVolume * A.RVU * B.VariableDirectUnitCostPerRVU) as ExtendedVariableDirectCost ,B.TotalCost ,B.TotalVariableDirectCost FROM (SELECT b.DepartmentID , b.ChargeCodeID , ca.CostComponentID , b.FiscalMonthID , b.FiscalYearID , MAX(ca.RVU) as RVU , SUM(Volume) as ChargeVolume FROM [dss].[FactDepartmentChargeSummary] b INNER JOIN [dss].[ChargeAllocation] ca ON ca.ChargeCodeID = b.ChargeCodeID and ca.DepartmentID = b.DepartmentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 GROUP BY b.DepartmentID, b.ChargeCodeID, ca.CostComponentID, b.FiscalMonthID, b.FiscalYearID) A INNER JOIN (SELECT OriginalJobCodeID as JobCodeID , pc.PayCodeGroupID , pay.OriginalDepartmentID as DepartmentID , pay.FiscalYearID , pay.CostComponentID , pay.CostingResultID , pay.TimeClassID , SUM(pay.VariableDirectUnitCost)/SUM(ca.RVU) as VariableDirectUnitCostPerRVU , SUM(pay.VariableDirectUnitCost * pay.Volume) as TotalVariableDirectCost , SUM(pay.TotalCost) as TotalCost FROM [dss].[FactCostingOutDetailPayroll] pay INNER JOIN [dss].[CostingResult] cr on pay.CostingResultID = cr.CostingResultID INNER JOIN [dss].[CostingConfig] con on cr.CostingConfigGuid = con.CostingConfigGuid INNER JOIN [dss].[ChargeAllocation] ca on ca.CostingConfigGuid = con.CostingConfigGUID and ca.ChargeCodeID = pay.ChargeCodeID and ca.DepartmentID = pay.OriginalDepartmentID and ca.CostComponentID = pay.CostComponentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 INNER JOIN [fw].[DimPayCode] pc on pc.PayCodeID = pay.OriginalPayCodeID WHERE pay.CostingResultID in (select CostingResultID from (select FiscalYearID, max(CostingResultID) as CostingResultID from [dss].[CostingResult] cr3 inner join [dss].[CostingConfig] cfg on cfg.CostingConfigGuid = cr3.CostingConfigGuid where cr3.IsActivityBasedDetail = 1 and cr3.IsMarkedForDeletion = 0 and cr3.IsFailure = 0 group by FiscalYearID) C) GROUP BY pay.OriginalJobCodeID , pc.PayCodeGroupID , pay.OriginalDepartmentID , pay.FiscalYearID , pay.CostComponentID , pay.CostingResultID , pay.TimeClassID) B ON A.DepartmentID = B.DepartmentID and A.CostComponentID = B.CostComponentID and A.FiscalYearID = B.FiscalYearID GO --------------------------------------------- -- fw.viewPrimaryStatisticsByPayPeriod -- primary statistics (by pay period) driver accounts CREATE view [fw].[viewPrimaryStatisticsByPayPeriod] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID], SUM([Units]) as Units, SUM([UnitsYTD]) as UnitsYTD, SUM([UnitsPriorYear]) as UnitsPriorYear, SUM([UnitsPriorYTD]) as UnitsPriorYTD, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.TimeClassID, fs.Units, fs.UnitsYTD, fs.UnitsPriorYear, fs.UnitsPriorYTD, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledPayPeriod] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.TimeClassID, pp.Units, pp.UnitsYTD, pp.UnitsPriorYear, pp.UnitsPriorYTD, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledPayPeriod] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsDaily /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-09-13 HV JAZZ-38145 PR Metrics Definition - Calculate Configured Daily Metrics *************************************************************/ CREATE view [fw].[viewPrimaryStatisticsDaily] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID], SUM([Units]) as Units FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.DateID, fs.TimeClassID, fs.Units FROM [fw].[FactStatisticSampledDaily] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.DateID, pp.TimeClassID, pp.Units FROM [fw].[FactStatisticDriverDepartmentSampledDaily] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsNonStaffingExpenseByPayPeriod -- primary statistics (by month) non-staffing driver accounts CREATE view [fw].[viewPrimaryStatisticsNonStaffingExpenseByPayPeriod] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID], SUM([Units]) as Units, SUM([UnitsYTD]) as UnitsYTD, SUM([UnitsPriorYear]) as UnitsPriorYear, SUM([UnitsPriorYTD]) as UnitsPriorYTD, MAX([RowID]) as RowID, cast(MAX(cast([IsDeleted] as int)) as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.TimeClassID, fs.Units, fs.UnitsYTD, fs.UnitsPriorYear, fs.UnitsPriorYTD, fs.RowID, fs.IsDeleted, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledPayPeriod] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.TimeClassID, pp.Units, pp.UnitsYTD, pp.UnitsPriorYear, pp.UnitsPriorYTD, pp.RowID, pp.IsDeleted, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledPayPeriod] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsNonStaffingExpenseDaily CREATE view [fw].[viewPrimaryStatisticsNonStaffingExpenseDaily] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID], SUM([Units]) as Units FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.DateID, fs.TimeClassID, fs.Units FROM [fw].[FactStatisticSampledDaily] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.DateID, pp.TimeClassID, pp.Units FROM [fw].[FactStatisticDriverDepartmentSampledDaily] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsNonStaffingExpenseMonthly -- primary statistics (by month) non-staffing driver accounts CREATE view [fw].[viewPrimaryStatisticsNonStaffingExpenseMonthly] as SELECT [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], SUM([Amount]) as Amount, SUM([AmountYTD]) as AmountYTD, SUM([AmountPriorYear]) as AmountPriorYear, SUM([AmountPriorYTD]) as AmountPriorYTD, cast(0 as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.RowID, fs.DepartmentID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, fs.Amount, fs.AmountYTD, fs.AmountPriorYear, fs.AmountPriorYTD, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT mo.RowID, mo.DepartmentID, mo.AccountID, mo.FiscalYearID, mo.FiscalMonthID, mo.TimeClassID, mo.Amount, mo.AmountYTD, mo.AmountPriorYear, mo.AmountPriorYTD, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledMonthly] mo INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON mo.DepartmentID = cfg.DepartmentID AND mo.AccountID = cfg.AccountID WHERE cfg.NonStaffingExpense = 1 AND mo.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsRevenueByPayPeriod -- primary statistics (by pay period) revenue driver accounts CREATE view [fw].[viewPrimaryStatisticsRevenueByPayPeriod] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID], SUM([Units]) as Units, SUM([UnitsYTD]) as UnitsYTD, SUM([UnitsPriorYear]) as UnitsPriorYear, SUM([UnitsPriorYTD]) as UnitsPriorYTD, MAX([RowID]) as RowID, cast(MAX(cast([IsDeleted] as int)) as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.TimeClassID, fs.Units, fs.UnitsYTD, fs.UnitsPriorYear, fs.UnitsPriorYTD, fs.RowID, fs.IsDeleted, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledPayPeriod] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.TimeClassID, pp.Units, pp.UnitsYTD, pp.UnitsPriorYear, pp.UnitsPriorYTD, pp.RowID, pp.IsDeleted, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledPayPeriod] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsRevenueDaily CREATE view [fw].[viewPrimaryStatisticsRevenueDaily] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID], SUM([Units]) as Units FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.DateID, fs.TimeClassID, fs.Units FROM [fw].[FactStatisticSampledDaily] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.DateID, pp.TimeClassID, pp.Units FROM [fw].[FactStatisticDriverDepartmentSampledDaily] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsRevenueMonthly -- primary statistics (by month) revenue driver accounts CREATE view [fw].[viewPrimaryStatisticsRevenueMonthly] as SELECT [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], SUM([Amount]) as Amount, SUM([AmountYTD]) as AmountYTD, SUM([AmountPriorYear]) as AmountPriorYear, SUM([AmountPriorYTD]) as AmountPriorYTD, cast(0 as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.RowID, fs.DepartmentID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, fs.Amount, fs.AmountYTD, fs.AmountPriorYear, fs.AmountPriorYTD, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT mo.RowID, mo.DepartmentID, mo.AccountID, mo.FiscalYearID, mo.FiscalMonthID, mo.TimeClassID, mo.Amount, mo.AmountYTD, mo.AmountPriorYear, mo.AmountPriorYTD, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledMonthly] mo INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON mo.DepartmentID = cfg.DepartmentID AND mo.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND mo.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsRollupNonStaffingExpenseMonthly CREATE VIEW [fw].[viewPrimaryStatisticsRollupNonStaffingExpenseMonthly] AS SELECT cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, sum(fs.Amount) as Amount, sum(fs.AmountYTD) as AmountYTD, sum(fs.AmountPriorYear) as AmountPriorYear, sum(fs.AmountPriorYTD) as AmountPriorYTD, min(cast(fs.IsSystemGenerated AS INT)) AS IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN fw.DimDepartment dd ON fs.DepartmentID = dd.DepartmentID INNER JOIN fw.PrimaryStatisticsRollupsConfiguration cfg ON ( (cfg.RollupLevel = 'DepartmentRollup1' AND cfg.RollupMemberID = dd.DepartmentRollup1ID) OR (cfg.RollupLevel = 'DepartmentRollup2' AND cfg.RollupMemberID = dd.DepartmentRollup2ID) OR (cfg.RollupLevel = 'DepartmentRollup3' AND cfg.RollupMemberID = dd.DepartmentRollup3ID) OR (cfg.RollupLevel = 'DepartmentRollup4' AND cfg.RollupMemberID = dd.DepartmentRollup4ID) OR (cfg.RollupLevel = 'DepartmentRollup5' AND cfg.RollupMemberID = dd.DepartmentRollup5ID) OR (cfg.RollupLevel = 'DepartmentRollup6' AND cfg.RollupMemberID = dd.DepartmentRollup6ID) OR (cfg.RollupLevel = 'Entity' AND cfg.RollupMemberID = dd.EntityID) OR (cfg.RollupLevel = 'System' AND cfg.RollupMemberID = dd.SystemID) ) AND fs.AccountID = cfg.AccountID WHERE cfg.NonStaffing = 1 AND fs.IsDeleted = 0 AND IsMRMetricTracking = 1 GROUP BY cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID GO --------------------------------------------- -- fw.viewPrimaryStatisticsRollupRevenueMonthly CREATE VIEW [fw].[viewPrimaryStatisticsRollupRevenueMonthly] AS SELECT cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, sum(fs.Amount) as Amount, sum(fs.AmountYTD) as AmountYTD, sum(fs.AmountPriorYear) as AmountPriorYear, sum(fs.AmountPriorYTD) as AmountPriorYTD, min(cast(fs.IsSystemGenerated AS INT)) AS IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN fw.DimDepartment dd ON fs.DepartmentID = dd.DepartmentID INNER JOIN fw.PrimaryStatisticsRollupsConfiguration cfg ON ( (cfg.RollupLevel = 'DepartmentRollup1' AND cfg.RollupMemberID = dd.DepartmentRollup1ID) OR (cfg.RollupLevel = 'DepartmentRollup2' AND cfg.RollupMemberID = dd.DepartmentRollup2ID) OR (cfg.RollupLevel = 'DepartmentRollup3' AND cfg.RollupMemberID = dd.DepartmentRollup3ID) OR (cfg.RollupLevel = 'DepartmentRollup4' AND cfg.RollupMemberID = dd.DepartmentRollup4ID) OR (cfg.RollupLevel = 'DepartmentRollup5' AND cfg.RollupMemberID = dd.DepartmentRollup5ID) OR (cfg.RollupLevel = 'DepartmentRollup6' AND cfg.RollupMemberID = dd.DepartmentRollup6ID) OR (cfg.RollupLevel = 'Entity' AND cfg.RollupMemberID = dd.EntityID) OR (cfg.RollupLevel = 'System' AND cfg.RollupMemberID = dd.SystemID) ) AND fs.AccountID = cfg.AccountID WHERE cfg.Revenue = 1 AND fs.IsDeleted = 0 AND IsMRMetricTracking = 1 GROUP BY cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID GO --------------------------------------------- -- fw.viewPrimaryStatisticsRollupStaffingMonthly CREATE VIEW [fw].[viewPrimaryStatisticsRollupStaffingMonthly] AS SELECT cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, sum(fs.Amount) as Amount, sum(fs.AmountYTD) as AmountYTD, sum(fs.AmountPriorYear) as AmountPriorYear, sum(fs.AmountPriorYTD) as AmountPriorYTD, min(cast(fs.IsSystemGenerated AS INT)) AS IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN fw.DimDepartment dd ON fs.DepartmentID = dd.DepartmentID INNER JOIN fw.PrimaryStatisticsRollupsConfiguration cfg ON ( (cfg.RollupLevel = 'DepartmentRollup1' AND cfg.RollupMemberID = dd.DepartmentRollup1ID) OR (cfg.RollupLevel = 'DepartmentRollup2' AND cfg.RollupMemberID = dd.DepartmentRollup2ID) OR (cfg.RollupLevel = 'DepartmentRollup3' AND cfg.RollupMemberID = dd.DepartmentRollup3ID) OR (cfg.RollupLevel = 'DepartmentRollup4' AND cfg.RollupMemberID = dd.DepartmentRollup4ID) OR (cfg.RollupLevel = 'DepartmentRollup5' AND cfg.RollupMemberID = dd.DepartmentRollup5ID) OR (cfg.RollupLevel = 'DepartmentRollup6' AND cfg.RollupMemberID = dd.DepartmentRollup6ID) OR (cfg.RollupLevel = 'Entity' AND cfg.RollupMemberID = dd.EntityID) OR (cfg.RollupLevel = 'System' AND cfg.RollupMemberID = dd.SystemID) ) AND fs.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND fs.IsDeleted = 0 AND IsMRMetricTracking = 1 GROUP BY cfg.RollupLevel, cfg.RollupMemberID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID GO --------------------------------------------- -- fw.viewPrimaryStatisticsStaffingByPayPeriod CREATE view [fw].[viewPrimaryStatisticsStaffingByPayPeriod] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID], SUM([Units]) as Units, SUM([UnitsYTD]) as UnitsYTD, SUM([UnitsPriorYear]) as UnitsPriorYear, SUM([UnitsPriorYTD]) as UnitsPriorYTD, MAX([RowID]) as RowID, cast(MAX(cast([IsDeleted] as int)) as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.TimeClassID, fs.Units, fs.UnitsYTD, fs.UnitsPriorYear, fs.UnitsPriorYTD, fs.RowID, fs.IsDeleted, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledPayPeriod] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.TimeClassID, pp.Units, pp.UnitsYTD, pp.UnitsPriorYear, pp.UnitsPriorYTD, pp.RowID, pp.IsDeleted, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledPayPeriod] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsStaffingDaily /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-04-22 gforeman initial implementation ** 2 2022-07-28 BS JAZZ-39738 Daily flexing - Payroll Hours and Dollars ** 3 2024-02-16 KF JAZZ-67769 Add BigRowID to fw.FactStatisticSampledDaily and fw.viewPrimaryStatisticsStaffingDaily *************************************************************/ CREATE view [fw].[viewPrimaryStatisticsStaffingDaily] as SELECT [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID], SUM([Units]) as Units, MAX([RowID]) as RowID, cast(MAX(cast([IsDeleted] as int)) as bit) as IsDeleted, CAST(MAX(RowID) AS BIGINT) as BigRowID FROM (SELECT fs.DepartmentID, fs.AccountID, fs.PayPeriodID, fs.DateID, fs.TimeClassID, fs.Units, fs.RowID, fs.IsDeleted FROM [fw].[FactStatisticSampledDaily] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT pp.DepartmentID, pp.AccountID, pp.PayPeriodID, pp.DateID, pp.TimeClassID, pp.Units, pp.RowID, pp.IsDeleted FROM [fw].[FactStatisticDriverDepartmentSampledDaily] pp INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON pp.DepartmentID = cfg.DepartmentID AND pp.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND pp.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [DepartmentID], [AccountID], [PayPeriodID], [DateID], [TimeClassID] GO --------------------------------------------- -- fw.viewPrimaryStatisticsStaffingMonthly -- primary statistics (by month) staffing driver accounts CREATE view [fw].[viewPrimaryStatisticsStaffingMonthly] as SELECT [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], SUM([Amount]) as Amount, SUM([AmountYTD]) as AmountYTD, SUM([AmountPriorYear]) as AmountPriorYear, SUM([AmountPriorYTD]) as AmountPriorYTD, cast(0 as bit) as IsDeleted, cast(MIN([IsSystemGenerated]) as bit) as IsSystemGenerated FROM (SELECT fs.RowID, fs.DepartmentID, fs.AccountID, fs.FiscalYearID, fs.FiscalMonthID, fs.TimeClassID, fs.Amount, fs.AmountYTD, fs.AmountPriorYear, fs.AmountPriorYTD, cast(fs.IsSystemGenerated as int) as IsSystemGenerated FROM [fw].[FactStatisticSampledMonthly] fs INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON fs.DepartmentID = cfg.DepartmentID AND fs.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND fs.IsDeleted = 0 AND cfg.IsDeleted = 0 AND not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.FactDepartmentPrimaryStatisticConfigurationID = cfg.RowID) UNION ALL SELECT mo.RowID, mo.DepartmentID, mo.AccountID, mo.FiscalYearID, mo.FiscalMonthID, mo.TimeClassID, mo.Amount, mo.AmountYTD, mo.AmountPriorYear, mo.AmountPriorYTD, cast(0 as int) as IsSystemGenerated FROM [fw].[FactStatisticDriverDepartmentSampledMonthly] mo INNER JOIN [client].[FactDepartmentPrimaryStatisticConfiguration] cfg ON mo.DepartmentID = cfg.DepartmentID AND mo.AccountID = cfg.AccountID WHERE cfg.Staffing = 1 AND mo.IsDeleted = 0 AND cfg.IsDeleted = 0) allData GROUP BY [RowID], [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID] GO --------------------------------------------- -- fw.viewReportCurrentUsers CREATE VIEW [fw].[viewReportCurrentUsers] AS SELECT DISTINCT up.NameFirst, up.NameLast, up.PhoneNumber, CASE WHEN MIN(DATEDIFF(MI, LastActionStampUtc, GETUTCDATE())) < 0 THEN 0 ELSE MIN(DATEDIFF(MI, LastActionStampUtc, GETUTCDATE())) END AS InactiveMinutes FROM CurrentUser cu INNER JOIN [dbo].[UserProfile] up ON cu.UserGUID = up.UserGUID WHERE tokentype = 0 GROUP BY up.NameFirst, up.NameLast, up.PhoneNumber HAVING up.NameFirst IS NOT NULL GO --------------------------------------------- -- fw.viewReportDimensionExceptions CREATE VIEW [fw].[viewReportDimensionExceptions] AS select AccountCode As DataMember, 'Account' As Identifier, 'fw.DimAccount' As Source, 'Blank Description or Blank GL Rollup' As Explanation, trans.Files As FilePath, trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimAccount acct inner join [dbo].[viewIntTransaction] trans on acct.TransactionID = trans.TransactionID where Description='' or GLRollup='' union select AccountCode As DataMember, 'Account' As Identifier, 'fw.DimAccount' As Source, 'Blank Account Code' As Explanation, trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimAccount acct inner join [dbo].[viewIntTransaction] trans on acct.TransactionID = trans.TransactionID where AccountCode='' union select Description As DataMember, 'Account' As Identifier, 'fw.DimAccount' As Source, 'Modified Zero member Description' As Explanation, trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimAccount acct inner join [dbo].[viewIntTransaction] trans on acct.TransactionID = trans.TransactionID where AccountID=0 and Description<>'Not Specified' union select Code As DataMember, 'Entity' As Identifier, 'fw.DimEntity' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEntity Ent inner join [dbo].[viewIntTransaction] trans on Ent.TransactionID = trans.TransactionID where Description='' union select Code As DataMember, 'Entity' As Identifier, 'fw.DimEntity' As Source, 'Blank Entity Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEntity Ent inner join [dbo].[viewIntTransaction] trans on Ent.TransactionID = trans.TransactionID where Code='' union select Description As DataMember, 'Entity' As Identifier, 'fw.DimEntity' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEntity Ent inner join [dbo].[viewIntTransaction] trans on Ent.TransactionID = trans.TransactionID where Ent.EntityID = 0 and ent.Description<>'Not Specified' union select DepartmentCode As DataMember, 'Department' As Identifier, 'fw.DimDepartment' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimDepartment dept inner join [dbo].[viewIntTransaction] trans on dept.TransactionID = trans.TransactionID where Dept.Description='' union select DepartmentCode As DataMember, 'Department' As Identifier, 'fw.DimDepartment' As Source, 'Blank Department Code' As Explanation , trans.Files As FilePath ,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimDepartment dept inner join [dbo].[viewIntTransaction] trans on dept.TransactionID = trans.TransactionID where Dept.Departmentcode='' union select DepartmentCode As DataMember, 'Department' As Identifier, 'fw.DimDepartment' As Source, 'Entity Not Assigned' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimDepartment dept inner join [dbo].[viewIntTransaction] trans on dept.TransactionID = trans.TransactionID where Dept.EntityID=0 and Dept.DepartmentID<>0 union select Description As DataMember, 'Department' As Identifier, 'fw.DimDepartment' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimDepartment dept inner join [dbo].[viewIntTransaction] trans on dept.TransactionID = trans.TransactionID where DepartmentID=0 and (Description<>'Not Specified' or EntityID<>0) union select JobCode As DataMember, 'Job Code' As Identifier, 'fw.DimJobCode' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimJobCode JC inner join [dbo].[viewIntTransaction] trans on JC.TransactionID = trans.TransactionID where Description='' union select JobCode As DataMember, 'Job Code' As Identifier, 'fw.DimJobCode' As Source, 'Blank Job Code' As Explanation , trans.Files As FilePath ,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimJobCode JC inner join [dbo].[viewIntTransaction] trans on JC.TransactionID = trans.TransactionID where JobCode='' union select Description As DataMember, 'Job Code' As Identifier, 'fw.DimJobCode' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimJobCode JC inner join [dbo].[viewIntTransaction] trans on JC.TransactionID = trans.TransactionID where JobCodeID=0 and Description<>'Not Specified' union select PayCode As DataMember, 'Pay Code' As Identifier, 'fw.DimPayCode' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimPayCode PC inner join [dbo].[viewIntTransaction] trans on PC.TransactionID = trans.TransactionID where Description='' union select PayCode As DataMember, 'Pay Code' As Identifier, 'fw.DimPayCode' As Source, 'Blank Pay Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimPayCode PC inner join [dbo].[viewIntTransaction] trans on PC.TransactionID = trans.TransactionID where PayCode='' union select Description As DataMember, 'Pay Code' As Identifier, 'fw.DimPayCode' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimPayCode PC inner join [dbo].[viewIntTransaction] trans on PC.TransactionID = trans.TransactionID where PayCodeID=0 and Description<>'Not Specified' union select Number As DataMember, 'Employee' As Identifier, 'fw.DimEmployee' As Source, 'Blank First Name or Blank Last Name' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEmployee emp inner join [dbo].[viewIntTransaction] trans on emp.TransactionID = trans.TransactionID where NameFirst='' or NameLast='' union select Number As DataMember, 'Employee' As Identifier, 'fw.DimEmployee' As Source, 'Blank Employee Number' As Explanation, trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEmployee emp inner join [dbo].[viewIntTransaction] trans on emp.TransactionID = trans.TransactionID where Number='' union select Number As DataMember, 'Employee' As Identifier, 'fw.DimEmployee' As Source, 'Job Code not set for Employee' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEmployee emp inner join [dbo].[viewIntTransaction] trans on emp.TransactionID = trans.TransactionID where JobCodeID=0 and EmployeeID<>0 union select Name As DataMember, 'Employee' As Identifier, 'fw.DimEmployee' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from fw.DimEmployee emp inner join [dbo].[viewIntTransaction] trans on emp.TransactionID = trans.TransactionID where EmployeeID=0 and Name<>'Not Specified [0] (UNKNWN)' union select Code As DataMember, 'Fund' As Identifier, 'fw.DimFund' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimFund] DF inner join [dbo].[viewIntTransaction] trans on DF.TransactionID = trans.TransactionID where Description='' union select Code As DataMember, 'Fund' As Identifier, 'fw.DimFund' As Source, 'Blank Fund Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimFund] DF inner join [dbo].[viewIntTransaction] trans on DF.TransactionID = trans.TransactionID where Code='' union select Description As DataMember, 'Fund' As Identifier, 'fw.DimFund' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimFund] DF inner join [dbo].[viewIntTransaction] trans on DF.TransactionID = trans.TransactionID where FundID=0 and (Description<>'Not Specified') union select Code As DataMember, 'Project' As Identifier, 'fw.DimProject' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimProject] DP inner join [dbo].[viewIntTransaction] trans on DP.TransactionID = trans.TransactionID where Description='' union select Code As DataMember, 'Project' As Identifier, 'fw.DimProject' As Source, 'Blank Project Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimProject] DP inner join [dbo].[viewIntTransaction] trans on DP.TransactionID = trans.TransactionID where Code='' union select Description As DataMember, 'Project' As Identifier, 'fw.DimProject' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimProject] DP inner join [dbo].[viewIntTransaction] trans on DP.TransactionID = trans.TransactionID where ProjectID=0 and (Description<>'Not Specified') union select Code As DataMember, 'Program' As Identifier, 'fw.DimProgram' As Source, 'Blank Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].DimProgram Prog inner join [dbo].[viewIntTransaction] trans on Prog.TransactionID = trans.TransactionID where Description='' union select Code As DataMember, 'Program' As Identifier, 'fw.DimProgram' As Source, 'Blank Program Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].DimProgram Prog inner join [dbo].[viewIntTransaction] trans on Prog.TransactionID = trans.TransactionID where Code='' union select Description As DataMember, 'Program' As Identifier, 'fw.DimProgram' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].DimProgram Prog inner join [dbo].[viewIntTransaction] trans on Prog.TransactionID = trans.TransactionID where ProgramID=0 and (Description<>'Not Specified') union select Code As DataMember, 'Home Department' As Identifier, 'fw.DimHomeDepartment' As Source, 'Blank Description' As Explanation , trans.Files As FilePath ,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimHomeDepartment] HD inner join [dbo].[viewIntTransaction] trans on HD.TransactionID = trans.TransactionID where Description='' union select Code As DataMember, 'Home Department' As Identifier, 'fw.DimHomeDepartment' As Source, 'Blank Program Code' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimHomeDepartment] HD inner join [dbo].[viewIntTransaction] trans on HD.TransactionID = trans.TransactionID where Code='' union select Description As DataMember, 'Home Department' As Identifier, 'fw.DimHomeDepartment' As Source, 'Modified Zero member Description' As Explanation , trans.Files As FilePath,trans.TransactionID As TransactionID, trans.StartTimeUtc as ImportDate, trans.username As UserName, trans.ConfigName as IntegrationConfig from [fw].[DimHomeDepartment] HD inner join [dbo].[viewIntTransaction] trans on HD.TransactionID = trans.TransactionID where HomeDepartmentID=0 and (Description<>'Not Specified') GO --------------------------------------------- -- fw.viewReportDirectoryActionHistory CREATE VIEW [fw].[viewReportDirectoryActionHistory] AS select case when SubAction like 'Initial Load -%' then 'Initial Load' else replace(SubAction, 'Grid Action - ', '') End as SubAction, Username, YEAR(datetimestamp) as [Year], MONTH(datetimestamp) as [Month], DateTimeStamp, Duration, 1 as [Count] from ActionLog where [Action] = 'Directory20' and SubAction not in ('RefreshTabNames', 'Grid Action - init') GO --------------------------------------------- -- fw.viewReportExceptionSummary create view [fw].[viewReportExceptionSummary] as select ReportName, ExceptionCount from fw.FactReportException GO --------------------------------------------- -- fw.viewReportFactGLConsolidated CREATE view [fw].[viewReportFactGLConsolidated] as select S.DepartmentID ,S.AccountID ,S.TimeClassID ,S.FiscalYearID ,S.FiscalMonthID ,(s.Units) as Units ,(s.UnitsYTD) as UnitsYTD ,(s.UnitsPriorYear) as UnitsPriorYear ,(S.UnitsPriorYTD) as UnitsPriorYTD ,(s.Dollars) as Dollars ,(S.DollarsYTD) as DollarsYTD ,(S.DollarsPriorYear) as DollarsPriorYear ,(S.DollarsPriorYTD) as DollarsPriorYTD from fw.FactGLSampled S where s.IsDeleted = 0 GO --------------------------------------------- -- fw.viewReportFactPayrollMonthlyConsolidated CREATE view [fw].[viewReportFactPayrollMonthlyConsolidated] as select DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, (Hours) as Hours, (HoursYTD) as HoursYTD, (HoursPriorYear) as HoursPriorYear, (HoursPriorYTD) as HoursPriorYTD, (Dollars) as Dollars, (DollarsYTD) as DollarsYTD, (DollarsPriorYear) as DollarsPriorYear, (DollarsPriorYTD) as DollarsPriorYTD from fw.FactPayrollSampledMonthly S where s.IsDeleted = 0 GO --------------------------------------------- -- fw.viewReportFactStatMonthlyConsolidated CREATE view [fw].[viewReportFactStatMonthlyConsolidated] as select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD from fw.FactStatisticSampledMonthly S where s.IsDeleted = 0 and (Amount <> 0 or AmountYTD <> 0 or AmountPriorYear <> 0 or AmountPriorYTD <> 0) GO --------------------------------------------- -- fw.viewReportFactStatPayPeriodConsolidated CREATE view [fw].[viewReportFactStatPayPeriodConsolidated] as select DepartmentID, AccountID, TimeClassID, PayPeriodID, Units from fw.FactStatisticSampledPayPeriod S where s.IsDeleted = 0 and Units <> 0 GO --------------------------------------------- -- fw.viewReportGeneralConsolidatedFinancialReporting create view [fw].[viewReportGeneralConsolidatedFinancialReporting] as /************************************************************ ** Author: FW Dev ** Create Date: akowalski ** Description: Generates the list of Consolidated financial reporting members for expanding reports ** Last Modified: 2013-03-26 ** GM Release: Lightningbug ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** ** *************************************************************/ select ConsolidatedFinancialReportingID from [fw].[DimConsolidatedFinancialReporting] GO --------------------------------------------- -- fw.viewReportGroupAssignment create view fw.viewReportGroupAssignment as select UP.NameLast as [LastName], UP.NameFirst as [FirstName], UP.UserName as [UserName], UP.EmailAddress as [EmailAddress], G.UserGroupName from UserProfile UP inner join viewS3GroupAssignment G on G.UserGUID = UP.UserGUID GO --------------------------------------------- -- fw.viewReportLockedPlans CREATE VIEW fw.viewReportLockedPlans AS SELECT dbo.GetPlanName(L.ItemGUID) AS PlanName, PT.Name As PlanType, TEM.Name AS ModelTemplate, CAST(L.DateLocked AS varchar(30)) AS LockDate, CAST(L.DateLastActive AS varchar(30)) AS LastActive, COALESCE (UP.NameFirst + ' ' + UP.NameLast, '') AS UserName FROM dbo.Lock AS L LEFT OUTER JOIN dbo.UserProfile AS UP ON L.UserGUID = UP.UserGUID LEFT OUTER JOIN dbo.XPlan AS X ON X.PlanGUID = L.ItemGUID LEFT OUTER JOIN [dbo].[PlanType] as PT on PT.PlanTypeGUID=X.PlanTypeGUID LEFT OUTER JOIN dbo.EMFModelTemplate AS TEM ON X.ModelTemplateGUID = TEM.ModelTemplateGUID WHERE (L.LockGroup = 'PlanLock') and X.IsDeletedPlan=0 GO --------------------------------------------- -- fw.viewReportPayPeriod CREATE VIEW [fw].[viewReportPayPeriod] AS SELECT m.CalendarDaysSecond, m.CalendarDaysStart, m.DaysInPeriodWeightSecond, m.DaysInPeriodWeightStart, m.FiscalMonthIDSecond, m.FiscalMonthIDStart, m.FiscalYearIDSecond, m.FiscalYearIDStart, m.PayPeriodCode, m.Name as PayPeriod, m.PayPeriodID, m.PayPeriodID as ReportingPayPeriodID, m.PeriodDays, m.PeriodDaysSecond, m.PeriodDaysStart, m.PeriodEndCalendarDate, m.PeriodEndCalendarDate as DateEnd, m.PeriodNumber, m.PeriodStartCalendarDate, m.PeriodWeightSecond, m.PeriodWeightStart FROM fw.DimPayPeriod m GO --------------------------------------------- -- fw.viewReportReportRunHistory CREATE VIEW [fw].[viewReportReportRunHistory] AS select L.Username as [User Name], case L.Action when 'ZEROVIEWER' then 'Excel' when 'Excel Reporter' then 'Excel' when 'SQL Report' then 'SQL' else 'Not Specified' end as [Report Type], replace(coalesce(R.Name, L.SubAction) , 'BATCH_', '')as [Report Name], L.DatetimeStamp as [Launch Time], L.Duration/1000 as [Duration in Seconds] from ActionLog L inner join REReport R on RIGHT(L.SubAction, 36) = cast(R.ReportGUID as nvarchar(36)) or replace(L.SubAction, 'BATCH_', '')=R.Name where L.Action in ('ZEROVIEWER', 'Excel Reporter', 'SQL Report') and L.SubAction not like 'DrillDown%' union all select UserName as [User Name], 'Excel' as [Report Type], ReportName as [Report Name], LaunchTime as [Launch Time], datediff(ss, LaunchTime, FinishTime) as [Duration in Seconds] from ( select modifierusername as UserName, replace(usercomments, 'BATCH_', '') as ReportName, max(case when [Description]='Report Created' then datetimestamp else null end) as LaunchTime, max(case when [Description]='Report Deleted' then datetimestamp else null end) as FinishTime from historyitem where category='Report Action' and UserComments like 'BATCH_%' group by modifierusername, usercomments ) P GO --------------------------------------------- -- fw.viewReportSecurityDetail --========================================================================================== CREATE view [fw].[viewReportSecurityDetail] as SELECT E.NAME AS ModelTemplate, P.NAME AS Plans, P.planguid, U.NameFull as UserName, ROLENAME AS UserRole, DET.RoleID as UserRoleID, CASE WHEN IdentityName = U.NAMELAST+', '+U.NAMEFIRST THEN 'Direct' ELSE IDENTITYNAME END AS GROUPNAME FROM VIEWS3ROLEASSIGNMENTDETAIL DET INNER JOIN VIEWPLANS P ON DET.LOOTID = P.CachedLootID INNER JOIN EMFMODELTEMPLATE E ON P.MODELTEMPLATEGUID = E.MODELTEMPLATEGUID INNER JOIN UserProfile U on U.UserGUID = DET.UserGUID GO --------------------------------------------- -- fw.viewReportSystemSectionSecurity CREATE view [fw].[viewReportSystemSectionSecurity] as SELECT SS.NAME AS SYSTEMSECTION, SS.FULLPATH, DET.USERNAME, ROLENAME AS USERROLE, CASE WHEN IdentityName = p.NAMELAST+', '+p.NAMEFIRST THEN '' ELSE IDENTITYNAME END AS GROUPNAME FROM VIEWS3ROLEASSIGNMENTDETAIL DET (readuncommitted) INNER JOIN SystemSection SS(readuncommitted) ON DET.LOOTID = SS.LOOTID inner join [dbo].[UserProfile] p on DET.UserGUID=p.UserGUID GO --------------------------------------------- -- fw.viewReportSystemSectionSecuritybySection create view [fw].[viewReportSystemSectionSecuritybySection] as select ss.Area, ss.Section, ss.Name as [System Section], ur.NAME as Role, case when G.NAME is null then u.NameFull else g.NAME end as [Group or User] from [fw].[viewDimSystemSection] ss inner join [dbo].[S3RoleAssignment] ra on ss.LootID=ra.LootGroupID inner join [dbo].[UserRole] ur on ur.RoleID=ra.RoleID left join [dbo].[UserGroup] G on G.USERGROUPGUID=ra.IdentityGUID left join [dbo].[UserProfile] u on u.USERGUID=ra.IdentityGUID GO --------------------------------------------- -- fw.viewReportSystemUsers CREATE VIEW [fw].[viewReportSystemUsers] AS SELECT UP.*, ISNULL(CAST(CASE WHEN IL.GroupingGUID IS NULL THEN 0 ELSE 1 END AS bit),0) AS IsSysAdmin from userprofile UP left join [dbo].[S3IdentityLink] IL on UP.UserGUID = IL.MemberGUID and IL.GroupingGUID = (select UserGroupGUID from [dbo].[UserGroup] where GlobalID = 'GEN - User Administrator') GO --------------------------------------------- -- fw.viewReportUserLastLogin create view [fw].[viewReportUserLastLogin] as select Name, LastLogin, NumLogins from viewuserloginhistory where lastlogin > '2010-01-01' GO --------------------------------------------- -- fw.viewReportUserLoginHistory create view [fw].[viewReportUserLoginHistory] as select Name, LastLogin, cast(DATEDIFF(day,LastLogin,CURRENT_TIMESTAMP) as float) as DaysSinceLogin from dbo.viewUserLoginHistory where Name NOT LIKE '%zStrata%' GO --------------------------------------------- -- fw.viewReportWorkflowSignoffs CREATE view [fw].[viewReportWorkflowSignoffs] as select RV.EntityGUID as PlanGUID, E.EntityName as Plans, WFM.Name as WorkflowMapName, WFS.Name as WorkflowStepName, UP.NameFull as ReviewerName, RVT.Name as ReviewValue, RV.Comments, cast(WFP.DisplayOrder as nvarchar(8)) + '\' + cast(WFS.DisplayOrder as nvarchar(8)) as DisplayOrder, E.CachedLootID as LootID from WFReviewValue RV inner join dbo.viewWFEntity E on E.EntityGUID = RV.EntityGUID inner join UserProfile UP on UP.UserGUID = RV.IdentityGUID inner join WFReviewValueType RVT on RVT.ReviewValueTypeGUID = RV.ReviewValueTypeGUID inner join WFWorkflowStep WFS on WFS.WorkflowStepGUID = RV.WorkflowStepGUID inner join WFProcessStepLink WFL on WFL.WorkflowStepGUID = WFS.WorkflowStepGUID inner join WFProcess WFP on WFP.ProcessGUID = WFL.ProcessGUID inner join WFWorkflowMap WFM on WFM.WorkflowMapGUID = WFS.WorkflowMapGUID GO --------------------------------------------- -- fw.viewSectionSecurityImport CREATE VIEW [fw].[viewSectionSecurityImport] as select case when SSI.GroupName = 'None' then 'Strata Administrator' else SSI.GroupName end as GroupName, 'Basic' as SectionType, 'Global' as Parent, SS.Name, SS.SystemSectionGUID from fw.SectionSecurityImport SSI inner join SystemSection SS on SS.SystemSectionGUID = SSI.BasicGUID union all select case when SSI.GroupName = 'None' then 'Strata Administrator' else SSI.GroupName end as GroupName, 'Advanced' as SectionType, SSP.Name as Parent, SS.Name, SS.SystemSectionGUID from fw.SectionSecurityImport SSI inner join SystemSection SS on SS.SystemSectionGUID = SSI.AdvancedGUID left join SystemSection SSP on SSP.SystemSectionGUID = SS.ParentGUID GO --------------------------------------------- -- fw.viewStatisticPrimaryConfiguration /************************************************************ ** Author: jgerber ** Create Date: 2013-11-06 ** Description: View for Primary Statistic Driver (Defaults using the Primary Statistic Config) ** Last Modified: 2013-11-06 ** GM Release: 2013-11-18 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 01.08.16 MJS D-03823 Added filter: IsDeleted=0 ** 2 2020-01-30 KF D-09156 Accounts being excluded from metrics when using non staffing expenses *************************************************************/ CREATE VIEW [fw].[viewStatisticPrimaryConfiguration] as select DepartmentID, AccountID from [client].[FactDepartmentPrimaryStatisticConfiguration] where (Revenue=1 OR Staffing=1 OR NonStaffingExpense=1) and IsDeleted=0 GO --------------------------------------------- -- fw.viewStatisticSecondaryConfiguration /************************************************************ ** Author: jgerber ** Create Date: 2013-11-06 ** Description: View for Secondary Statistic Driver (Defaults using the Secondary Statistic Config) ** Last Modified: 2013-11-06 ** GM Release: 2013-11-18 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 01.08.16 MJS D-03823 Added filter: IsDeleted=0 ** 2 2020-01-30 KF D-09156 Accounts being excluded from metrics when using non staffing expenses *************************************************************/ CREATE VIEW [fw].[viewStatisticSecondaryConfiguration] as --THIS IS EDITABLE select DepartmentID, AccountID from [client].[FactDepartmentPrimaryStatisticConfiguration] where (Revenue=1 OR Staffing=1 OR NonStaffingExpense=1) and IsDeleted=0 GO --------------------------------------------- --------------------------------------------- -- PROCEDURES --------------------------------------------- -- fw.PrepareStatistics /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-06-04 IP TK-58587 re-applying changes (2018-05-16 D-07187 Budget adjustment effecting historical budget fiscal years) ** 2 2024-12-23 HV JAZZ-81810 [Spike] - Analyze and cover with integration tests for JAZZ-81233: MR - Budget Adj is getting applied to all prior years Apply fix proposed by Scott Evens *************************************************************/ CREATE PROCEDURE [fw].[PrepareStatistics] (@FiscalYearID int =0, @StatisticType tinyint) as IF OBJECT_ID('tempdb..#StatisticTempTable') IS NOT NULL DROP TABLE #StatisticTempTable declare @iteration int = 1 create table #StatisticTempTable ( DepartmentID int, AccountID int, FiscalYearID smallint, FiscalMonthID tinyint, TimeClassID tinyint, Amount numeric(25,4), ApplyDate datetime, Src varchar(max), UNIQUE NONCLUSTERED (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID) ) INSERT INTO #StatisticTempTable (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, sum(STAT.Value) as Amount, cast('1900-01-01' as datetime) as ApplyDate, cast('int_1' as varchar(max))+'V' as src from int.FactStatistic stat inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid where stat.IsDeleted = 0 and stat.Value != 0 and (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) Group by stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID --select count(*) from #StatisticTempTable DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) PRINT '-------- Vendor Products Report --------'; DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN --select @iteration,@BudgetReallocationGUID,@date,@BudgetReallocationType,* from #StatisticTempTable where DepartmentID = 359 and AccountID = 791 and FiscalYearID = 2015 and FiscalMonthID = 9 and TimeClassID = 2 IF @BudgetReallocationType = 'ReallocateSingle' BEGIN -- Insert rows with "correcting" values UPDATE STT SET Amount = Amount + Change, stt.ApplyDate = b.Date, src = SRC + '[Added_'+cast(Change as varchar(50))+'_from_'+cast(SourceDepartmentID as varchar(10))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID WHERE Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and UnitTypeID = 145 and TimeClassID = 2 UPDATE STT SET Amount = Amount - Change, stt.ApplyDate = b.Date, src = SRC + '[Removed_'+cast(Change as varchar(50))+'_to_'+cast(TargetDepartmentID as varchar(10))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID WHERE Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and UnitTypeID = 145 and TimeClassID = 2 INSERT INTO #StatisticTempTable (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, SUM(Change * -1) as Value, max(b.Date) as ApplyDate, 'ra_1_m' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN (select DepartmentID,AccountID,FiscalYearID,FiscalMonthID,max(ApplyDate) as ApplyDate from #StatisticTempTable where TimeClassID = 2 group by DepartmentID,AccountID,FiscalYearID,FiscalMonthID) STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID where Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and UnitTypeID = 145 GROUP BY b.SourceDepartmentID, b.SourceAccountID, b.FiscalYearID, ba.FiscalMonthID UNION All SELECT b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, sum(Change) as Value, max(b.Date) as ApplyDate, 'ra_1_p' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN (select DepartmentID,AccountID,FiscalYearID,FiscalMonthID,max(ApplyDate) as ApplyDate from #StatisticTempTable where TimeClassID = 2 group by DepartmentID,AccountID,FiscalYearID,FiscalMonthID) STT ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID where Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and UnitTypeID = 145 group by b.TargetDepartmentID, b.TargetAccountID, b.FiscalYearID, ba.FiscalMonthID ------------------ END ELSE IF @BudgetReallocationType = 'ReallocateMulti' BEGIN Update stt set stt.Amount = stt.Amount + stt_src.Amount, stt.ApplyDate = b.Date, stt.Src = stt.Src + '[RealMulti_'+cast(stt_src.Amount as varchar(50))+'_from_'+cast(stt_src.DepartmentID as varchar(10))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b on b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID INNER JOIN #StatisticTempTable STT_SRC on STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.FiscalYearID = b.FiscalYearID and STT_SRC.FiscalMonthID = ba.FiscalMonthID and stt.TimeClassID = stt_src.TimeClassID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and Change <> 0 and stt.TimeClassID = 2 --select 'X',* from #StatisticTempTable where DepartmentId = 279 and AccountID = 791 and FiscalYearID = 2015 and FiscalMonthID = 5 and TimeClassID = 2 INSERT INTO #StatisticTempTable (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT --'Y', b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, sum(Change) as Value, max(b.Date) as ApplyDate, 'ReallocateMulti' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN #StatisticTempTable STT_SRC on STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.FiscalYearID = b.FiscalYearID and stt_src.FiscalMonthID = ba.FiscalMonthID and STT_SRC.TimeClassID = 2 LEFT JOIN #StatisticTempTable STT on STT.DepartmentID = b.TargetDepartmentID and STT.AccountID = b.TargetAccountID and STT.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID and STT.TimeClassID = 2 where stt.DepartmentID is null and Change <> 0 and ba.UnitTypeID =145 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID GROUP BY b.TargetDepartmentID, b.TargetAccountID, b.FiscalYearID, ba.FiscalMonthID UPDATE STT_SRC SET stt_src.Amount = 0, stt_src.ApplyDate = b.Date, stt_src.Src = stt_src.Src + '[RealMulti_'+cast(stt_src.Amount as varchar(50))+'_to_'+cast(stt.DepartmentID as varchar(10))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b on b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID INNER JOIN #StatisticTempTable STT_SRC on STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.FiscalYearID = b.FiscalYearID and stt_SRC.FiscalMonthID = ba.FiscalMonthID and STT_SRC.TimeClassID = 2 where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and Change <> 0 END ELSE IF @BudgetReallocationType = 'AdjustMontly' BEGIN UPDATE STT SET stt.Amount = stt.Amount+Change, stt.ApplyDate = b.Date, stt.Src = stt.Src + '[AdjustMontly_'+cast(Change as varchar(50))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and Change <> 0 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and TimeClassID = 2 INSERT INTO #StatisticTempTable (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, SUM(Change) as Value, MAX(b.date) as ApplyDate, 'ra_3' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN #StatisticTempTable STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID and TimeClassID = 2 where Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID =145 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID GROUP BY b.SourceDepartmentID, b.SourceAccountID, b.FiscalYearID, ba.FiscalMonthID END ELSE IF @BudgetReallocationType = 'ManualFile' BEGIN UPDATE STT SET stt.Amount = ba.NewSourceValue, stt.ApplyDate = b.Date, stt.Src = stt.Src + '[ManualFile_'+cast(NewSourceValue as varchar(50))+']' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and TimeClassID = 2 --and Change <> 0 INSERT INTO #StatisticTempTable (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, SUM(NewSourceValue) as Value, MAX(b.date) as ApplyDate, 'ManualFile' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN #StatisticTempTable STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID and TimeClassID = 2 where Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID =145 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID GROUP BY b.SourceDepartmentID, b.SourceAccountID, b.FiscalYearID, ba.FiscalMonthID END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; if @StatisticType = 1 begin SELECT DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,SUM(Amount) as Amount FROM ( SELECT stt.DepartmentID,stt.AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,src from #StatisticTempTable stt inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=stt.AccountID and V.DepartmentID=stt.DepartmentID UNION ALL SELECT stat.DepartmentID,stat.AccountID,FiscalYearID,FiscalMonthID,stat.TimeClassID,0 as Amount,cast('just0' as varchar(max)) as src from int.FactStatistic stat inner join [fw].[viewStatisticPrimaryConfiguration] V on V.AccountID=stat.AccountID and V.DepartmentID=stat.DepartmentID WHERE stat.IsDeleted = 0 and stat.Value != 0 and (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) SubSelect GROUP BY DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID end else if @StatisticType = 2 begin SELECT DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,SUM(Amount) as Amount FROM ( SELECT stt.DepartmentID,stt.AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,src from #StatisticTempTable stt inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=stt.AccountID and V.DepartmentID=stt.DepartmentID UNION ALL SELECT stat.DepartmentID,stat.AccountID,FiscalYearID,FiscalMonthID,stat.TimeClassID,0 as Amount,cast('just0' as varchar(max)) as src from int.FactStatistic stat inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=stat.AccountID and V.DepartmentID=stat.DepartmentID WHERE stat.IsDeleted = 0 and stat.Value != 0 and (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) SubSelect GROUP BY DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID end else begin SELECT DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,SUM(Amount) as Amount FROM ( SELECT stt.DepartmentID,stt.AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,src from #StatisticTempTable stt UNION ALL SELECT stat.DepartmentID,stat.AccountID,FiscalYearID,FiscalMonthID,stat.TimeClassID,0 as Amount,cast('just0' as varchar(max)) as src from int.FactStatistic stat WHERE stat.IsDeleted = 0 and stat.Value != 0 and (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) SubSelect GROUP BY DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID IF OBJECT_ID('tempdb..#StatisticTempTable') IS NOT NULL DROP TABLE #StatisticTempTable end GO --------------------------------------------- -- fw.PrepareStatisticsPayPeriod CREATE PROCEDURE [fw].[PrepareStatisticsPayPeriod] ( @FiscalYearID INT = 0, @departmentIDs NVARCHAR(max) = NULL, @StatisticType INT = 0, @isPrMetricConfigurationOn BIT = 0 ) /************************************************************ ** Author: ipetriv ** Create Date: 2017-7-26 ** Description: procedure to append to [int].[FactStatisticsbyPayPeriod] MR statistic reallocation adjustments ** Last Modified: 2017-7-26 ** GM Release: 2018.1 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-7-26 IP B-16752 Added section for monthly spread adjustments ** 2 2017-10-11 IP D-06489 Fixed difference between "by year" and "all years" end numbers ** 3 2018-01-17 IP B-16703 Omit archived budget adjustments ** 4 2018-03-15 IP D-06997 Replaced table variable by temp tables ** 5 2018-04-27 IP TK-56559 Adding grouping to fix integration test ** 6 2018-05-14 IP TK-57807 Reallocate between departments fix ** 7 2019-02-12 IP D-06606 PR Statistics sampling with adjustments is incorrectly calculating first Pay Period values ** 8 2020-03-20 vfay D-08997 [fw].[PrepareStatisticsPayPeriod] is reporting incorrect adjustment amounts ** 9 2023-04-11 HV JAZZ-52032 Create and fill caching table for charge-based statistics pay period data *************************************************************/ AS IF OBJECT_ID('tempdb..#StatisticSampledTempTable') IS NOT NULL DROP TABLE #StatisticSampledTempTable IF OBJECT_ID('tempdb..#departments') IS NOT NULL DROP TABLE #departments IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations IF OBJECT_ID('tempdb..#FDPSD') IS NOT NULL DROP TABLE #FDPSD IF OBJECT_ID('tempdb..#StatisticInsertTempTable') IS NOT NULL DROP TABLE #StatisticInsertTempTable IF OBJECT_ID('tempdb..#payperiods') IS NOT NULL DROP TABLE #payperiods IF OBJECT_ID('tempdb..#StatisticTempTableBackup') IS NOT NULL DROP TABLE #StatisticTempTableBackup DECLARE @iteration INT = 1 CREATE TABLE #FDPSD (DepartmentID INT PRIMARY KEY) INSERT INTO #FDPSD SELECT DISTINCT DriverDepartmentID AS DepartmentID FROM client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache CREATE TABLE #departments (val INT PRIMARY KEY) CREATE TABLE #departmentsBudgetAllocations (val INT PRIMARY KEY) INSERT INTO #departments SELECT val FROM ConvertCSValuesToTable(@departmentIDs, ',') INSERT INTO #departments SELECT SourceDepartmentID AS DepartmentID FROM mr.BudgetReallocationAdjustment a INNER JOIN mr.BudgetReallocation r ON r.BudgetReallocationGUID=a.BudgetReallocationGUID INNER JOIN #departments d ON d.val = r.TargetDepartmentID -- Filtering all departments that move data TO selected UNION -- unique SELECT TargetDepartmentID AS DepartmentID FROM mr.BudgetReallocationAdjustment a INNER JOIN mr.BudgetReallocation r ON r.BudgetReallocationGUID=a.BudgetReallocationGUID INNER JOIN #departments d ON d.val = r.SourceDepartmentID -- Filtering all departments that move data FROM selected INSERT INTO #departmentsBudgetAllocations (val) SELECT SourceDepartmentID AS DepartmentID FROM mr.BudgetReallocationAdjustment a INNER JOIN mr.BudgetReallocation r ON r.BudgetReallocationGUID = a.BudgetReallocationGUID INNER JOIN FW.DimDepartment d ON d.DepartmentID = r.TargetDepartmentID AND d.IsPR = 1 WHERE SourceDepartmentID <> 0 UNION -- unique SELECT TargetDepartmentID AS DepartmentID FROM mr.BudgetReallocationAdjustment a INNER JOIN mr.BudgetReallocation r ON r.BudgetReallocationGUID=a.BudgetReallocationGUID INNER JOIN FW.DimDepartment d ON d.DepartmentID = r.SourceDepartmentID and d.IsPR = 1 -- Filtering all departments that move data FROM selected where TargetDepartmentID <> 0 CREATE TABLE #payperiods(val SMALLINT PRIMARY KEY, PayCycleID int, PeriodStartCalendarDate date, PeriodEndCalendarDate date) INSERT INTO #payperiods (val, PayCycleID, PeriodStartCalendarDate, PeriodEndCalendarDate) SELECT PayPeriodID, PayCycleID, PeriodStartCalendarDate, PeriodEndCalendarDate FROM fw.DimPayPeriod WHERE FiscalYearIDSecond = @fiscalYearID or @fiscalYearID = 0 --run custom scripts EXEC [client].[procStatisticSampledInsertPayPeriodPreprocess] CREATE TABLE #StatisticSampledTempTable ( DepartmentID int, AccountID int, PayPeriodID int, TimeClassID int, Units decimal(18, 6) ) --pull new data - Pay Period Actuals from GL INSERT INTO #StatisticSampledTempTable (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT stat.[DepartmentID], stat.[AccountID], stat.[PayPeriodID], stat.[TimeClassID], SUM(stat.[Value]) AS Units FROM [int].[FactStatisticsbyPayPeriod] stat inner join [fw].[DimDepartment] D on D.DepartmentID = stat.DepartmentID left join #FDPSD FDPSD on FDPSD.DepartmentID = stat.DepartmentID WHERE stat.[Value] <> 0 AND stat.Isdeleted = 0 AND stat.PayPeriodID != 0 AND (D.IsPR = 1 or exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache dc where dc.DriverDepartmentID = D.DepartmentID)) AND stat.TimeClassID=1 AND stat.DepartmentID <> 0 AND (D.IsPR = 1 or FDPSD.DepartmentID is not null) AND (@departmentIDs is null or stat.DepartmentID in (select val from #departments)) AND (@fiscalYearID = 0 or stat.PayPeriodID in (select val from #payperiods)) GROUP BY stat.DepartmentID, stat.AccountID, stat.PayPeriodID, stat.TimeClassID --pull new data - Aggregation of daily GL Actuals where not already sampled INSERT INTO #StatisticSampledTempTable (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT stat.[DepartmentID], stat.[AccountID], PP.[PayPeriodID], stat.[TimeClassID], SUM(STAT.[Value]) as Units FROM [int].[FactSharedImportDailyStatistics] stat inner join [fw].[DimDate] DATE on stat.DateID=DATE.DateID inner join [fw].[DimDepartment] D on D.Departmentid = STAT.Departmentid inner join [fw].[DimPayPeriod] PP on D.PayCycleID=PP.PayCycleID and DATE.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID left join #StatisticSampledTempTable ex on ex.DepartmentID = stat.DepartmentID and ex.AccountID = stat.AccountID and ex.PayPeriodID = PP.PayPeriodID and ex.TimeClassID = 1 WHERE stat.[Value] <> 0 and STAT.Isdeleted = 0 and PP.PayPeriodID != 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null) and stat.TimeClassID = 1 and stat.DepartmentID <> 0 and ex.DepartmentID IS NULL and (@departmentIDs is null or stat.DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) GROUP BY stat.DepartmentID, stat.AccountID, stat.TimeClassID, PP.PayPeriodID --pull new data - Aggregation of daily charge-based Actuals where not already sampled INSERT INTO #StatisticSampledTempTable (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT STAT.DepartmentID, STAT.AccountID, PP.PayPeriodID, 1 as TimeClassID, SUM(STAT.Value) AS Units FROM [fw].[FactChargeBasedStatistics] STAT inner join [fw].[DimDate] DATE on STAT.DateID=DATE.DateID inner join [fw].[DimDepartment] D on STAT.DepartmentID=D.DepartmentID inner join [fw].[DimPayPeriod] PP on D.PayCycleID=PP.PayCycleID and DATE.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID left join #StatisticSampledTempTable ex on ex.DepartmentID = stat.DepartmentID and ex.AccountID = stat.AccountID and ex.PayPeriodID = PP.PayPeriodID and ex.TimeClassID = 1 WHERE STAT.Value != 0 and STAT.IsDeleted = 0 and PP.PayPeriodID != 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null) and ex.DepartmentID IS NULL and (@departmentIDs is null or STAT.DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) GROUP BY STAT.DepartmentID, STAT.AccountID, PP.PayPeriodID --pull new data - Pay Period Budget from GL for all Departments and Accounts INSERT INTO #StatisticSampledTempTable (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT stat.[DepartmentID], stat.[AccountID], STAT.[PayPeriodID], stat.[TimeClassID], SUM(STAT.[Value]) as Units FROM [int].[FactStatisticsbyPayPeriod] stat inner join [fw].[DimDepartment] D on D.Departmentid = STAT.[Departmentid] left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.[DepartmentID] left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID WHERE STAT.[Value] != 0 and STAT.Isdeleted = 0 and STAT.PayPeriodID != 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null or dba.val is not null) and stat.TimeClassID = 2 and stat.DepartmentID <> 0 and (@departmentIDs is null or stat.DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or stat.PayPeriodID in (select val from #payperiods)) GROUP BY stat.DepartmentID, stat.AccountID, STAT.PayPeriodID, stat.TimeClassID CREATE TABLE #StatisticInsertTempTable ( DepartmentID int, AccountID int, PayPeriodID int, TimeClassID int, Units decimal(18, 6) ) CREATE TABLE #StatisticTempTableBackup ( DepartmentID int, AccountID int, PayPeriodID int, TimeClassID int, Units decimal(18, 6) ) INSERT INTO #StatisticTempTableBackup(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, Units from #StatisticSampledTempTable DECLARE @BudgetReallocationGUID UNIQUEIDENTIFIER, @date DATETIME, @BudgetReallocationType VARCHAR(50) PRINT '-------- Vendor Products Report --------'; DECLARE BRA_cursor CURSOR FOR SELECT DISTINCT BudgetReallocationGUID, [DATE], BudgetReallocationType FROM fw.BudgetReallocationWithDefinedType br INNER JOIN [fw].DimPayPeriod pp ON ( (br.FiscalMonthID = pp.FiscalMonthIDStart AND br.FiscalYearID = pp.FiscalYearIDStart) OR (br.FiscalMonthID = pp.FiscalMonthIDSecond AND br.FiscalYearID = pp.FiscalYearIDSecond)) INNER JOIN #payperiods pay ON pay.val = pp.PayPeriodID WHERE br.BudgetReallocationType IS NOT NULL ORDER BY DATE; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID, @date, @BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN IF @BudgetReallocationType = 'ReallocateSingle' BEGIN --update target UPDATE stt SET Units = Units + ba.Change * pp.PeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = Units + ba.Change * pp.PeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 --update source UPDATE stt SET Units = Units - ba.Change * pp.PeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = Units - ba.Change * pp.PeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 --clear records in temp insert table TRUNCATE TABLE #StatisticInsertTempTable -- insert missing source records INSERT INTO #StatisticInsertTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM((ba.Change * pp.PeriodWeightStart)*-1) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDStart = ba.FiscalMonthID AND pp.FiscalYearIDStart = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodId = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND stt.DepartmentID IS NULL AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID UNION ALL SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM((ba.Change * pp.PeriodWeightSecond)*-1) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDSecond = ba.FiscalMonthID AND pp.FiscalYearIDSecond = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodId = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND stt.DepartmentID IS NULL AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID --insert missing target records INSERT INTO #StatisticInsertTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT b.TargetDepartmentID AS DepartmentID, b.TargetAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM((ba.Change * pp.PeriodWeightStart)) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.TargetDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDStart = ba.FiscalMonthID AND pp.FiscalYearIDStart = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND pp.PayPeriodId = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND stt.DepartmentID IS NULL AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID UNION ALL SELECT b.TargetDepartmentID AS DepartmentID, b.TargetAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM((ba.Change * pp.PeriodWeightSecond)) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.TargetDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDSecond = ba.FiscalMonthID AND pp.FiscalYearIDSecond = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND pp.PayPeriodId = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND stt.DepartmentID IS NULL AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID --insert to statistic temp table INSERT INTO #StatisticSampledTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, SUM(Units) FROM #StatisticInsertTempTable GROUP BY DepartmentID, AccountID, PayPeriodID, TimeClassID END IF @BudgetReallocationType = 'ReallocateMulti' BEGIN --update target UPDATE stt SET Units = stt.Units + stt_src_back.Units * pp.DaysInPeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src_back.DepartmentID = b.SourceDepartmentID AND stt_src_back.AccountID = b.SourceAccountID AND stt_src_back.PayPeriodID = stt.PayPeriodID AND stt_src_back.TimeClassID = stt.TimeClassID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = stt.Units + stt_src_back.Units * pp.DaysInPeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID AND b.TargetAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src_back.DepartmentID = b.SourceDepartmentID AND stt_src_back.AccountID = b.SourceAccountID AND stt_src_back.PayPeriodID = stt.PayPeriodID AND stt_src_back.TimeClassID = stt.TimeClassID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 --clear records in temp insert table TRUNCATE TABLE #StatisticInsertTempTable -- insert missing target records INSERT INTO #StatisticInsertTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT b.TargetDepartmentID AS DepartmentID, b.TargetAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(stt_src_back.Units * pp.DaysInPeriodWeightStart) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.TargetDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDStart = ba.FiscalMonthID AND pp.FiscalYearIDStart = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src_back.DepartmentID = b.SourceDepartmentID AND stt_src_back.AccountID = b.SourceAccountID AND stt_src_back.PayPeriodID = PP.PayPeriodID AND stt_src_back.TimeClassID = 2 LEFT JOIN #StatisticSampledTempTable stt ON stt.DepartmentID = b.TargetDepartmentID AND stt.AccountID = b.TargetAccountID AND stt.PayPeriodID = pp.PayPeriodID AND stt.TimeClassID = 2 WHERE stt.DepartmentID IS NULL AND ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID UNION ALL SELECT b.TargetDepartmentID AS DepartmentID, b.TargetAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(stt_src_back.Units * pp.DaysInPeriodWeightSecond) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.TargetDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDSecond = ba.FiscalMonthID AND pp.FiscalYearIDSecond = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src_back.DepartmentID = b.SourceDepartmentID AND stt_src_back.AccountID = b.SourceAccountID AND stt_src_back.PayPeriodID = PP.PayPeriodID AND stt_src_back.TimeClassID = 2 LEFT JOIN #StatisticSampledTempTable stt ON stt.DepartmentID = b.TargetDepartmentID AND stt.AccountID = b.TargetAccountID AND stt.PayPeriodID = pp.PayPeriodID AND stt.TimeClassID = 2 WHERE stt.DepartmentID IS NULL AND ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND b.Archived = 0 GROUP BY b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID --insert to statistic temp table INSERT INTO #StatisticSampledTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, SUM(Units) FROM #StatisticInsertTempTable GROUP BY DepartmentID, AccountID, PayPeriodID, TimeClassID --update source UPDATE stt_src SET Units = stt_src.Units - stt_src_back.Units * DaysInPeriodWeightStart FROM #StatisticSampledTempTable stt_src INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt_src.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt_src.DepartmentID AND b.SourceAccountID = stt_src.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src.AccountID = stt_src_back.AccountID AND stt_src.DepartmentID = stt_src_back.DepartmentID AND stt_src.PayPeriodID = stt_src_back.PayPeriodID AND stt_src.TimeClassID = stt_src_back.TimeClassID LEFT JOIN #StatisticSampledTempTable stt ON stt.DepartmentID = b.TargetDepartmentID and stt.AccountID = b.TargetAccountID and stt.TimeClassID = 2 and stt.PayPeriodID = stt_src.PayPeriodID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND b.Archived = 0 UPDATE stt_src SET Units = stt_src.Units - stt_src_back.Units * DaysInPeriodWeightSecond FROM #StatisticSampledTempTable stt_src INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt_src.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt_src.DepartmentID AND b.SourceAccountID = stt_src.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond INNER JOIN #StatisticTempTableBackup stt_src_back ON stt_src.AccountID = stt_src_back.AccountID AND stt_src.DepartmentID = stt_src_back.DepartmentID AND stt_src.PayPeriodID = stt_src_back.PayPeriodID AND stt_src.TimeClassID = stt_src_back.TimeClassID LEFT JOIN #StatisticSampledTempTable stt ON stt.DepartmentID = b.TargetDepartmentID and stt.AccountID = b.TargetAccountID and stt.TimeClassID = 2 and stt.PayPeriodID = stt_src.PayPeriodID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND b.Archived = 0 END IF @BudgetReallocationType = 'AdjustMontly' BEGIN --update source UPDATE stt SET Units = Units + ba.Change * pp.PeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = Units + ba.Change * pp.PeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 --clear records in temp insert table TRUNCATE TABLE #StatisticInsertTempTable -- insert missing source records INSERT INTO #StatisticInsertTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(ba.Change * pp.PeriodWeightStart) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDStart = ba.FiscalMonthID AND pp.FiscalYearIDStart = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodID = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID UNION ALL SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(ba.Change * pp.PeriodWeightSecond) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDSecond = ba.FiscalMonthID AND pp.FiscalYearIDSecond = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodID = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID --insert to statistic temp table INSERT INTO #StatisticSampledTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, SUM(Units) FROM #StatisticInsertTempTable GROUP BY DepartmentID, AccountID, PayPeriodID, TimeClassID END IF @BudgetReallocationType = 'ManualFile' BEGIN --update source UPDATE stt SET stt.Units = stt.Units - stt_src_back.Units * pp.DaysInPeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart INNER JOIN #StatisticTempTableBackup stt_src_back ON stt.AccountID = stt_src_back.AccountID AND stt.DepartmentID = stt_src_back.DepartmentID AND stt.PayPeriodID = stt_src_back.PayPeriodID AND stt.TimeClassID = stt_src_back.TimeClassID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET stt.Units = stt.Units - stt_src_back.Units * pp.DaysInPeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond INNER JOIN #StatisticTempTableBackup stt_src_back ON stt.AccountID = stt_src_back.AccountID AND stt.DepartmentID = stt_src_back.DepartmentID AND stt.PayPeriodID = stt_src_back.PayPeriodID AND stt.TimeClassID = stt_src_back.TimeClassID WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = Units + ba.NewSourceValue * pp.PeriodWeightStart FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDStart INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDStart WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 UPDATE stt SET Units = Units + ba.NewSourceValue * pp.PeriodWeightSecond FROM #StatisticSampledTempTable stt INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID=stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND b.FiscalYearID = pp.FiscalYearIDSecond INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID = ba.BudgetReallocationGUID AND ba.FiscalMonthID = pp.FiscalMonthIDSecond WHERE ba.Change <> 0 AND b.BudgetReallocationGUID = @BudgetReallocationGUID AND ba.UnitTypeID = 145 AND stt.TimeClassID = 2 AND b.Archived = 0 --clear records in temp insert table TRUNCATE TABLE #StatisticInsertTempTable -- insert missing source records INSERT INTO #StatisticInsertTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(ba.NewSourceValue * pp.PeriodWeightStart) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDStart = ba.FiscalMonthID AND pp.FiscalYearIDStart = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodID = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID UNION ALL SELECT b.SourceDepartmentID AS DepartmentID, b.SourceAccountID AS AccountID, pp.PayPeriodID, 2 AS TimeclassID, SUM(ba.NewSourceValue * pp.PeriodWeightSecond) AS Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba ON b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDepartment] dep ON dep.DepartmentID = b.SourceDepartmentID INNER JOIN [fw].[DimPayPeriod] pp ON pp.PayCycleID = dep.PayCycleID AND pp.FiscalMonthIDSecond = ba.FiscalMonthID AND pp.FiscalYearIDSecond = b.FiscalYearID INNER JOIN #payperiods pay on pp.PayPeriodID = pay.val LEFT JOIN #StatisticSampledTempTable stt ON b.SourceDepartmentID = stt.DepartmentID AND b.SourceAccountID = stt.AccountID AND pp.PayPeriodID = stt.PayPeriodID AND stt.TimeClassID = 2 WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID --insert to statistic temp table INSERT INTO #StatisticSampledTempTable(DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, SUM(Units) FROM #StatisticInsertTempTable GROUP BY DepartmentID, AccountID, PayPeriodID, TimeClassID END SET @iteration = @iteration + 1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID, @date, @BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; IF @StatisticType = 2 SELECT stat.* FROM #StatisticSampledTempTable stat INNER JOIN [fw].[viewStatisticSecondaryConfiguration] V ON V.AccountID = stat.AccountID AND V.DepartmentID = stat.DepartmentID ELSE IF @StatisticType = 1 SELECT stat.* FROM #StatisticSampledTempTable stat INNER JOIN [fw].[viewStatisticPrimaryConfiguration] V ON V.AccountID = stat.AccountID AND V.DepartmentID = stat.DepartmentID ELSE SELECT stat.* FROM #StatisticSampledTempTable stat -- Fill Charge Based Statistics Sampled Keys IF @isPrMetricConfigurationOn = 1 BEGIN IF @FiscalYearID = 0 BEGIN TRUNCATE TABLE fw.FactChargeBasedStatisticsPayPeriodKeys END ELSE BEGIN DELETE F FROM fw.FactChargeBasedStatisticsPayPeriodKeys F INNER JOIN #payperiods PP ON PP.val = F.PayPeriodID END INSERT INTO fw.FactChargeBasedStatisticsPayPeriodKeys (DepartmentID, AccountID, PayPeriodID) SELECT DISTINCT CB.DepartmentID, CB.AccountID, PP.val FROM fw.FactChargeBasedStatistics CB INNER JOIN fw.DimDate DT ON DT.DateID = CB.DateID INNER JOIN fw.DimDepartment DEPT ON DEPT.DepartmentID = CB.DepartmentID INNER JOIN #payperiods PP ON PP.PayCycleID = DEPT.PayCycleID AND DT.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate LEFT JOIN int.FactSharedImportDailyStatistics DS ON DS.DepartmentID = CB.DepartmentID AND DS.AccountID = CB.AccountID AND DS.DateID = CB.DateID AND DS.TimeClassID = 1 LEFT JOIN int.FactStatisticsbyPayPeriod FS ON FS.DepartmentID = CB.DepartmentID AND FS.AccountID = CB.AccountID AND FS.PayPeriodID = PP.val AND FS.TimeClassID = 1 LEFT JOIN #FDPSD FDPSD on FDPSD.DepartmentID = CB.DepartmentID WHERE CB.IsDeleted = 0 AND CB.DepartmentID != 0 AND PP.val != 0 AND CB.Value != 0 AND DS.RowID IS NULL AND FS.RowID IS NULL AND (DEPT.IsPR = 1 OR FDPSD.DepartmentID IS NOT NULL) END IF OBJECT_ID('tempdb..#StatisticSampledTempTable') IS NOT NULL DROP TABLE #StatisticSampledTempTable IF OBJECT_ID('tempdb..#departments') IS NOT NULL DROP TABLE #departments IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations IF OBJECT_ID('tempdb..#FDPSD') IS NOT NULL DROP TABLE #FDPSD IF OBJECT_ID('tempdb..#StatisticInsertTempTable') IS NOT NULL DROP TABLE #StatisticInsertTempTable IF OBJECT_ID('tempdb..#payperiods') IS NOT NULL DROP TABLE #payperiods IF OBJECT_ID('tempdb..#StatisticTempTableBackup') IS NOT NULL DROP TABLE #StatisticTempTableBackup GO --------------------------------------------- -- fw.procABBFlexingReconcilationSampling CREATE PROCEDURE [fw].[procABBFlexingReconcilationSampling] AS BEGIN BEGIN TRANSACTION TRUNCATE TABLE [fw].[ABBFlexingReconciliationCostingData] TRUNCATE TABLE [fw].[ABBBudgetedCostPerRVU] COMMIT BEGIN TRANSACTION INSERT INTO [fw].[ABBBudgetedCostPerRVU] ([DepartmentID], [AccountID], [JobCodeID], [PayCodeID], [CostComponentID], [CostingConfigGuid], [VariableDirectUnitCostPerRVU], [TotalVariableDirectCost], [TotalCost]) SELECT gl.DepartmentID , OriginalAccountID as AccountID , 0 as JobCodeID , 0 as PayCodeID , gl.CostComponentID , cr.CostingConfigGuid , SUM(gl.VariableDirectUnitCost)/SUM(ca.RVU) as VariableDirectUnitCostPerRVU , SUM(gl.VariableDirectUnitCost * gl.Volume) as TotalVariableDirectCost , SUM(gl.TotalCost) as TotalCost FROM [dss].[FactCostingOutDetailGL] gl INNER JOIN [dss].[CostingResult] cr on gl.CostingResultID = cr.CostingResultID INNER JOIN [fp].[EntityGroupConfig] ec on cr.CostingConfigGuid = ec.CostingConfigGUID INNER JOIN [dss].[ChargeAllocation] ca on ca.CostingConfigGuid = cr.CostingConfigGUID and ca.ChargeCodeID = gl.ChargeCodeID and ca.DepartmentID = gl.DepartmentID and ca.CostComponentID = gl.CostComponentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 WHERE --[BL] need to only run this for the costing config specified on the system center MR page gl.CostingResultID in (select max(cr2.CostingResultID) from [dss].[CostingResult] cr2 where cr2.CostingConfigGuid = '7f3c4d40-be55-4fde-88b5-93cdf8401090' and cr2.IsActivityBasedDetail = 1 and cr2.IsMarkedForDeletion = 0) and gl.TimeClassID = ec.CostingConfigTimeClassID and gl.VariableDirectUnitCost<>0 GROUP BY gl.OriginalAccountID , gl.DepartmentID , gl.CostComponentID , cr.CostingConfigGuid UNION ALL SELECT pr.DepartmentID , ISNULL(cw.AccountID,0) as AccountID , pr.OriginalJobCodeID as JobCodeID , pr.OriginalPayCodeID as PayCodeID , pr.CostComponentID , cr.CostingConfigGuid , SUM(pr.VariableDirectUnitCost)/SUM(ca.RVU) as VariableDirectUnitCostPerRVU , SUM(pr.VariableDirectUnitCost * pr.Volume) as TotalVariableDirectCost , SUM(pr.TotalCost) as TotalCost FROM [dss].[FactCostingOutDetailPayroll] pr INNER JOIN [dss].[CostingResult] cr on pr.CostingResultID = cr.CostingResultID INNER JOIN [fp].[EntityGroupConfig] ec on cr.CostingConfigGuid = ec.CostingConfigGUID INNER JOIN [fw].[DimPayCode] pc on pr.OriginalPayCodeID=pc.PayCodeID INNER JOIN [dss].[ChargeAllocation] ca on ca.CostingConfigGuid = cr.CostingConfigGUID and ca.ChargeCodeID = pr.ChargeCodeID and ca.DepartmentID = pr.DepartmentID and ca.CostComponentID = pr.CostComponentID and AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 LEFT JOIN [clientob].[FactPayrollToAccountCrosswalk] cw on pr.OriginalJobCodeID = cw.JobCodeID AND pc.PayCodeGroupID = cw.PayCodeGroupID AND cw.UnitTypeID = 34 WHERE --[BL] need to only run this for the costing config specified on the system center MR page pr.CostingResultID in (select max(cr2.CostingResultID) from [dss].[CostingResult] cr2 where cr2.CostingConfigGuid = '7f3c4d40-be55-4fde-88b5-93cdf8401090' and cr2.IsActivityBasedDetail = 1 and cr2.IsMarkedForDeletion = 0) and pr.TimeClassID = ec.CostingConfigTimeClassID and pr.VariableDirectUnitCost<>0 GROUP BY cw.AccountID , pr.OriginalJobCodeID , pr.OriginalPayCodeID , pr.DepartmentID , pr.CostComponentID , cr.CostingConfigGuid COMMIT DECLARE @DepartmentCursor CURSOR, @DepartmentID INT, @DepartmentName Nvarchar(200), @TotalNumberDepts nvarchar(10), @CurrentDepartment nvarchar(10), @Message NvarChar(400), @time char(8) SET @DepartmentCursor = CURSOR FOR (SELECT DISTINCT DepartmentID FROM (Select DepartmentID from [dss].[FactDepartmentChargeSummary] WHERE IsDeleted = 0 UNION ALL Select DepartmentID from [int].[FactCDM]) A ) SET @TotalNumberDepts = (SELECT COUNT(distinct DepartmentID) FROM (Select DepartmentID from [dss].[FactDepartmentChargeSummary] WHERE IsDeleted = 0 UNION ALL Select DepartmentID from [int].[FactCDM]) A ) SET @CurrentDepartment = 0 OPEN @DepartmentCursor FETCH NEXT FROM @DepartmentCursor INTO @DepartmentID WHILE @@FETCH_STATUS = 0 BEGIN SET @CurrentDepartment = @CurrentDepartment + 1 SET @DepartmentName = (SELECT NAME FROM FW.DimDepartment WHERE DepartmentID=@DepartmentID) Set @Message = 'Department: ' + @DepartmentName + ' ' + @CurrentDepartment + ' of ' + @TotalNumberDepts SET @time= convert (varchar(30), getdate(), 8) RAISERROR (@Message, 0, 1, @time) WITH NOWAIT BEGIN TRANSACTION INSERT INTO [fw].[ABBFlexingReconciliationCostingData] SELECT charge.CostingConfigGUID , dept.EntityID , Volume.DepartmentID AS OriginalDepartmentID , ISNULL(cost.OriginalJobCodeID,0) AS OriginalJobCodeID , ISNULL(cost.OriginalPayCodeID,0) AS OriginalPayCodeID , ISNULL(cost.OriginalAccountID,0) AS OriginalAccountID , Volume.ChargeCodeID , Volume.FiscalYearID , Volume.FiscalMonthID , COALESCE(cost.CostComponentID, Charge.CostComponentID) AS CostComponentID , CASE WHEN Volume.TimeClassID = 1 THEN ISNULL(cost.FixedDirectUnitCost,0) ELSE 0.0 END AS FixedDirectUnitCost , CASE WHEN Volume.TimeClassID = 1 THEN ISNULL(cost.VariableDirectUnitCost,0) ELSE 0.0 END AS VariableDirectUnitCost , CASE WHEN Volume.TimeClassID = 2 THEN ISNULL(cost.FixedDirectUnitCost,0) ELSE 0.0 END AS BudgetFixedDirectUnitCost , CASE WHEN Volume.TimeClassID = 2 THEN ISNULL(cost.VariableDirectUnitCost,0) ELSE 0.0 END AS BudgetVariableDirectUnitCost , CASE WHEN Volume.TimeClassID = 1 THEN volume.Volume ELSE 0.0 END AS ActualMonthlyVolume , CASE WHEN Volume.TimeClassID = 2 THEN volume.Volume ELSE 0.0 END AS BudgetedMonthlyVolume , ISNULL(charge.RVU, 0.0) as RVU FROM (SELECT fdcs.DepartmentID, fdcs.ChargeCodeID, fdcs.FiscalYearID, fdcs.TimeClassID, fdcs.FiscalMonthID, SUM(fdcs.Volume) AS Volume FROM [dss].[FactDepartmentChargeSummary] fdcs WHERE fdcs.IsDeleted = 0 and FiscalYearID=2017 --[BL] NEED TO UPDATE THIS JOIN TO ONLY INCL THE TARGET FISCAL YEAR GROUP BY fdcs.DepartmentID, fdcs.ChargeCodeID, fdcs.FiscalYearID, fdcs.TimeClassID, fdcs.FiscalMonthID UNION ALL SELECT cdm.DepartmentID, cdm.ChargeCodeID, cdm.FiscalYearID, cdm.TimeClassID, cdm.FiscalMonthID, SUM(cdm.Value) as Volume FROM [int].[FactCDM] cdm WHERE cdm.UnitTypeID = 145 and TimeClassID = 2 and FiscalYearID=2017 --[BL] NEED TO UPDATE THIS JOIN TO ONLY INCL THE TARGET FISCAL YEAR GROUP BY cdm.DepartmentID, cdm.ChargeCodeID, cdm.FiscalYearID, cdm.TimeClassID, cdm.FiscalMonthID ) Volume LEFT JOIN (SELECT OriginalDepartmentID, CostingResultID, ChargeCodeID, FiscalYearID, TimeClassID, CostComponentID, OriginalAccountID, 0 as OriginalPayCodeID, 0 as OriginalJobCodeID, Volume, FixedDirectUnitCost, VariableDirectUnitCost FROM [dss].[FactCostingOutDetailGL] UNION SELECT OriginalDepartmentID, CostingResultID, ChargeCodeID, FiscalYearID, TimeClassID, CostComponentID, ISNULL(cw.AccountID,0.0) as OriginalAccountID, OriginalPayCodeID, OriginalJobCodeID, Volume, FixedDirectUnitCost, VariableDirectUnitCost FROM [dss].[FactCostingOutDetailPayroll] p INNER JOIN [fw].[DimPayCode] pc on p.OriginalPayCodeID=pc.PayCodeID LEFT JOIN [clientob].[FactPayrollToAccountCrosswalk] cw on p.OriginalJobCodeID = cw.JobCodeID AND pc.PayCodeGroupID = cw.PayCodeGroupID AND cw.UnitTypeID = 34 ) as cost ON Volume.DepartmentID = cost.OriginalDepartmentID AND Volume.ChargeCodeID = cost.ChargeCodeID AND Volume.FiscalYearID = cost.FiscalYearID AND Volume.TimeClassID = cost.TimeClassID INNER JOIN [dss].[CostingResult] cr ON cost.CostingResultID = cr.CostingResultID INNER JOIN [fw].[DimDepartment] dept ON dept.DepartmentID = Volume.DepartmentID LEFT JOIN (SELECT ca.DepartmentID, ca.ChargeCodeID, ca.CostComponentID, ca.CostingConfigGuid, ca.RVU FROM [dss].[ChargeAllocation] ca WHERE ca.AllocationType = 1 and ca.IsFixed = 0 and ca.IsIndirect = 0 and ca.RVU <> 0 AND CostingConfigGuid='7f3c4d40-be55-4fde-88b5-93cdf8401090' ) charge ON Volume.DepartmentID = charge.DepartmentID AND Volume.ChargeCodeID = charge.ChargeCodeID AND cost.CostComponentID = charge.CostComponentID AND cr.CostingConfigGuid = charge.CostingConfigGuid WHERE cost.CostingResultID in (SELECT CostingResultID FROM (SELECT CostingConfigGuid, MAX(CostingResultID) as CostingResultID FROM [dss].[CostingResult] WHERE CostingConfigGuid='7f3c4d40-be55-4fde-88b5-93cdf8401090' and IsMarkedForDeletion = 0 AND IsActivityBasedDetail = 1 GROUP BY CostingConfigGuid) cr2) AND (Volume.DepartmentID=@DepartmentID) COMMIT FETCH NEXT FROM @DepartmentCursor INTO @DepartmentID END CLOSE @DepartmentCursor DEALLOCATE @DepartmentCursor END GO --------------------------------------------- -- fw.procABBMRTransferFlexedPayrollSampledMonthlyToFactGLSampled CREATE PROC [fw].[procABBMRTransferFlexedPayrollSampledMonthlyToFactGLSampled] @fiscalYearID int, @CostingResultID int AS /* ************************************************************************************************************************ ** Author: BL/NL ** Create Date: 2016-08-05 ** Description: Runs GL flexing for MR ** Last Modified: 2016-08-05 ************************************************************************************************************************** ** Change History ************************************************************************************************************************** ** CID Date Author WI Description ** 1 2017-10-09 PA D-06466 Filter for ABB depts and IsDeleted *************************************************************************************************************************/ DECLARE @higuid UNIQUEIDENTIFIER EXEC procLogScript 'Sampling Flexed Payroll Sample to GL Sample: See procABBMRTransferFlexedPayrollSampledMonthlytoFactGLSampled_NMC_CUSTOM_TEMP' , @higuid output SELECT DISTINCT DepartmentID INTO #ABBDepts FROM ( SELECT DepartmentID FROM [dss].[FactCostingOutDetailGL] WHERE CostingResultID = @CostingResultID UNION ALL SELECT DepartmentID FROM [dss].[FactCostingOutDetailPayroll] WHERE CostingResultID = @CostingResultID) depts; SELECT p.[DepartmentID] , cw.[AccountID] , p.[FiscalYearID] , p.[FiscalMonthID] , p.[TimeClassID] , p.[IsDeleted] , @higuid as [HistoryItemGUID] , SUM(p.Hours) as [Units] , SUM(p.HoursYTD) as [UnitsYTD] , SUM(p.HoursPriorYear) as [UnitsPriorYear] , SUM(p.HoursPriorYTD) as [UnitsPriorYTD] , SUM(p.[Dollars]) as Dollars , SUM(p.[DollarsYTD]) as DollarsYTD , SUM(p.[DollarsPriorYear]) as DollarsPriorYear , SUM(p.[DollarsPriorYTD]) as DollarsPriorYTD , p.[TransactionID] INTO #FlexPayroll FROM [fw].[FactPayrollSampledMonthly] p INNER JOIN [clientob].[FactPayrollToAccountCrosswalk] cw on p.JobCodeID = cw.JobCodeID AND p.PayCodeGroupID = cw.PayCodeGroupID AND cw.UnitTypeID = 34 INNER JOIN [fw].[DimDepartment] dept on p.DepartmentID = dept.DepartmentID INNER JOIN #ABBDepts abb ON p.DepartmentID = abb.DepartmentID WHERE TimeClassID = 4 AND FiscalYearID = @fiscalYearID AND cw.IsDeleted = 0 GROUP BY p.[DepartmentID] , cw.[AccountID] , p.[FiscalYearID] , p.[FiscalMonthID] , p.[TimeClassID] , p.[IsDeleted] , p.[TransactionID]; DELETE GL FROM [fw].[FactGLSampled] GL WHERE EXISTS (SELECT 1 FROM #FlexPayroll PR WHERE GL.DepartmentID=PR.DepartmentID AND GL.AccountID=PR.AccountID AND GL.FiscalYearID=PR.FiscalYearID AND GL.FiscalMonthID=PR.FiscalMonthID AND GL.TimeClassID=PR.TimeClassID); INSERT INTO [fw].[FactGLSampled] ([DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [IsDeleted], [HistoryItemGUID], [Units], [UnitsYTD], [UnitsPriorYear], [UnitsPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [TransactionID]) SELECT [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [IsDeleted], [HistoryItemGUID], [Units], [UnitsYTD], [UnitsPriorYear], [UnitsPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [TransactionID] FROM #FlexPayroll; DROP TABLE #FlexPayroll; GO --------------------------------------------- -- fw.procCopyFactGLBudgetToImport CREATE PROCEDURE fw.procCopyFactGLBudgetToImport (@HistoryItemGUID uniqueidentifier) as BEGIN /************************************************************ ** Author: ipetriv ** Create Date: 2018-01-15 ** Description: Add procedure to calc EfficiencyFactor ** Last Modified: 2017-01-15 ** GM Release: 2018.2 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-01-15 IP B-18301 Created *************************************************************/ DECLARE @FiscalYearId INT = ( SELECT setting FROM dbsetting WHERE NAME = 'Current_GL_YearID' ) IF OBJECT_ID('int.FactGLHistory', 'U') IS NOT NULL DROP TABLE INT.FactGLHistory; SELECT RowID, [DepartmentID], [DepartmentCode], [AccountID], [AccountCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [FiscalMonthID], [FiscalMonthCode], [Value], [IsDeleted], [HistoryItemGUID], [Version], [TransactionID], getdate() AS BCP_DTTime INTO INT.FactGLHistory FROM INT.FactGL WHERE FiscalYearID = @FiscalYearId AND TimeClassID = 2 CREATE UNIQUE CLUSTERED INDEX IX_FactGLHistory ON [int].[FactGLHistory] ( [FiscalMonthID] ASC, [IsDeleted] ASC, [FiscalYearID] ASC, [TimeClassID] ASC, [DepartmentID] ASC, [AccountID] ASC, [RowID] ASC ) ON [PRIMARY] WHILE 1 = 1 BEGIN DELETE TOP (10000) iGL FROM [int].FactGL iGL INNER JOIN INT.FactGLHistory iGLH ON iGL.[FiscalMonthID] = iGLH.[FiscalMonthID] AND iGL.[IsDeleted] = iGLH.[IsDeleted] AND iGL.[FiscalYearID] = iGLH.[FiscalYearID] AND iGL.[TimeClassID] = iGLH.[TimeClassID] AND iGL.[DepartmentID] = iGLH.[DepartmentID] AND iGL.[AccountID] = iGLH.[AccountID] AND iGL.[RowID] = iGLH.[RowID] IF @@ROWCOUNT < 10000 BREAK; END INSERT INTO [int].FactGL ( DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, TimeClassID, TimeClassCode, FiscalMonthID, FiscalMonthCode, Value, IsDeleted, HistoryItemGUID, TransactionID ) SELECT gl.DepartmentID, dd.DepartmentCode, gl.AccountID, da.AccountCode, gl.FiscalYearID, gl.FiscalYearID AS FiscalYearCode, gl.TimeClassID, dtm.TimeClassCode, gl.FiscalMonthID, dfm.FiscalMonthCode, sum(CASE WHEN A.Inversion = - 1 THEN GL.Dollars * - 1 ELSE GL.Dollars END) AS Value, 0 IsDeleted, @HistoryItemGUID AS HistoryItemGUID, 0 AS TransactionID FROM fw.FactGLSampled GL INNER JOIN fw.DimAccount A ON A.AccountID = GL.AccountID INNER JOIN fw.DimTimeClass dtm ON dtm.TimeClassID = gl.TimeClassID INNER JOIN fw.DimDepartment dd ON dd.DepartmentID = gl.DepartmentID INNER JOIN fw.DimAccount da ON da.AccountID = gl.AccountID INNER JOIN fw.DimFiscalMonth dfm ON dfm.FiscalMonthID = gl.FiscalMonthID WHERE gl.TimeClassID = 2 -- Data transferred will be the sampled budgeted data AND FiscalYearID = @FiscalYearId AND Dollars <> 0.0 GROUP BY gl.DepartmentID, dd.DepartmentCode, gl.AccountID, da.AccountCode, gl.FiscalYearID, gl.TimeClassID, dtm.TimeClassCode, gl.FiscalMonthID, dfm.FiscalMonthCode END GO --------------------------------------------- -- fw.procCopyFactPayrollDollarsToGLMonthly CREATE PROCEDURE [fw].[procCopyFactPayrollDollarsToGLMonthly] /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 ** 2 2019-02-15 OV D-07848 In Management Reporting, salaries and wages metrics for fixed departments are flexing ** 3 2019-02-19 KF D-08138 MR Flexing: Flex GL values should be 0 for mapped accounts if there is no Payroll data ** 4 2019-03-19 OV D-08253 Used temp table for @DepartmentAccountVariabilityOverrides ** 5 2019-03-26 OV D-08253 Optimize procedure *************************************************************/ ( @FiscalYearID int = 0, @PriorYearsCount int = 0, @DepartmentAccountVariabilityOverrides [ob].[DepartmentAccountVariabilityOverride] READONLY ) AS BEGIN DECLARE @TimeClassID TINYINT = 4 --Flex DECLARE @UnitTypeID TINYINT = 34 --Dollars DECLARE @StartFiscalYear INT = @FiscalYearID - @PriorYearsCount DECLARE @EndFiscalYear INT = @FiscalYearID IF @FiscalYearID = 0 BEGIN SELECT @StartFiscalYear = MIN(FiscalYearID) FROM ( SELECT MIN(FiscalYearID) AS FiscalYearID FROM fw.FactPayrollSampledMonthly UNION ALL SELECT MIN(FiscalYearID) AS FiscalYearID FROM fw.FactGLSampled) S SELECT @EndFiscalYear = MAX(FiscalYearID) FROM ( SELECT MAX(FiscalYearID) AS FiscalYearID FROM fw.FactPayrollSampledMonthly UNION ALL SELECT MAX(FiscalYearID) AS FiscalYearID FROM fw.FactGLSampled) S END DECLARE @MappingMode INT SELECT TOP 1 @MappingMode = CASE [PropertyXML].value('(/Properties//PayRollToGLLinkDollarsConfiguration/node())[1]', 'nvarchar(max)') WHEN 'EachJobCode' THEN 1 WHEN 'EachPayCodeGroup' THEN 2 ELSE 0 END -- BothUnique or BothOverride FROM SystemCenterStep WHERE GlobalID = 'PayrolltoGLLinkSelection' IF OBJECT_ID('tempdb..#department') IS NOT NULL DROP TABLE #department IF OBJECT_ID('tempdb..#tempCrosswalk') IS NOT NULL DROP TABLE #tempCrosswalk IF OBJECT_ID('tempdb..#DepAcc_P_GL') IS NOT NULL DROP TABLE #DepAcc_P_GL IF OBJECT_ID('tempdb..#Source') IS NOT NULL drop table #Source IF OBJECT_ID('tempdb..#FactGL_1') IS NOT NULL drop table #FactGL_1 IF OBJECT_ID('tempdb..#FactGL_2 ') IS NOT NULL drop table #FactGL_2 IF OBJECT_ID('tempdb..#Payroll_JC_PCG') IS NOT NULL drop table #Payroll_JC_PCG IF OBJECT_ID('tempdb..#payroll') IS NOT NULL drop table #payroll IF OBJECT_ID('tempdb..#DepartmentAccountVariabilityOverride') IS NOT NULL DROP TABLE #DepartmentAccountVariabilityOverride CREATE TABLE #DepartmentAccountVariabilityOverride (AccountID int, DepartmentID int, Variability decimal(19,8)) INSERT INTO #DepartmentAccountVariabilityOverride (AccountID, DepartmentID, Variability) select AccountID, DepartmentID, Variability FROM @DepartmentAccountVariabilityOverrides ---- SELECT departmentID,AccountID into #DepAcc_P_GL FROM ( select departmentID, AccountId from fw.FactGLSampled union select DepartmentID, accountID from fw.FactPayrollSampledMonthly cross join clientob.FactPayrollToAccountCrosswalk c ) t ----- select d.DepartmentID,AccountID, isvariable into #department FROM #DepAcc_P_GL DepAcc_P_GL inner join fw.DimDepartment d on DepAcc_P_GL.departmentID = d.departmentID where d.IsMRPlan = 1 ----- SELECT aa.AccountID, cc.UnitTypeID, aa.Variability, FY.FiscalYearID, FM.FiscalMonthID, CASE WHEN @MappingMode IN(0,1) then cc.JobCodeId else -10001 END AS JobCodeID, CASE WHEN @MappingMode IN(0,2) then CC.payCodeGroupID else -10001 END AS PayCodeGroupID into #tempCrosswalk from clientob.FactPayrollToAccountCrosswalk cc inner join fw.DimAccount aa on cc.AccountID = aa.AccountID CROSS JOIN fw.DimFiscalYear FY CROSS JOIN fw.DimFiscalMonth FM where CC.UnitTypeID = @UnitTypeID and FY.FiscalYearID BETWEEN @StartFiscalYear AND @EndFiscalYear and FM.FiscalMonthID != 0 ----- select SUM(p.Dollars) as Dollars ,p.FiscalYearID, p.FiscalMonthID, CASE WHEN @MappingMode IN(0,1) then JobCodeId else -10001 END AS JobCodeID, CASE WHEN @MappingMode IN(0,2) then payCodeGroupID else -10001 END AS PayCodeGroupID, DepartmentID INTO #Payroll_JC_PCG FROM fw.FactPayrollSampledMonthly P WHERE P.TimeClassID = @TimeClassID AND P.IsDeleted = 0 GROUP BY p.FiscalYearID, p.FiscalMonthID, p.JobCodeID, p.PayCodeGroupID, p.DepartmentID ----- SELECT FactGL.FiscalYearID, FactGL.FiscalMonthId, FactGL.AccountID, FactGL.DepartmentID, FactGL.Dollars as Dollars INTO #FactGL_1 FROM fw.FactGLSampled FactGL WHERE FactGL.TimeclassID = 20 AND FactGL.IsDeleted = 0 ----- select FactGl.DepartmentID, Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, FactGL.Dollars,CW.Variability * D.IsVariable as Koef_var INTO #FactGL_2 from (SELECT distinct AccountId,FiscalYearID,FiscalMonthID,Variability FROM #tempCrosswalk) cw INNER JOIN #FactGL_1 FactGL on FactGL.FiscalYearID = CW.FiscalYearID AND FactGL.FiscalMonthID = CW.FiscalMonthID AND FactGL.AccountID = CW.AccountID INNER JOIN fw.DimDepartment d on FactGL.departmentID = d.departmentID ----- SELECT DD.DepartmentID, X.AccountID, X.FiscalYearID, X.FiscalMonthID, X.Dollars, X.Variability * DD.IsVariable as Koef_var INTO #payroll FROM ( select Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, CW.Variability, SUM(ROUND(p.Dollars,6)) as Dollars, P.DepartmentID from (SELECT distinct AccountId,JobCodeID,PayCodeGroupID,FiscalYearID,FiscalMonthID,Variability FROM #tempCrosswalk) cw inner join #Payroll_JC_PCG P ON P.FiscalYearID = CW.FiscalYearID AND P.FiscalMonthID = CW.FiscalMonthID AND CW.JobCodeID = P.JobCodeID AND CW.PayCodeGroupID = P.PayCodeGroupID GROUP BY Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, cw.Variability, P.DepartmentID ) X INNER JOIN #department dd on DD.AccountID = X.AccountID and X.DepartmentID = Dd.DepartmentID ----- SELECT ISNULL(GL.DepartmentID,p.DepartmentID) as DepartmentID, ISNULL(GL.AccountId,p.AccountId) as AccountId, ISNULL(GL.FiscalYearId,p.FiscalYearId) as FiscalYearId, ISNULL(GL.FiscalMonthId,p.FiscalMonthId) as FiscalMonthId, ISNULL(ISNULL(DAV.Variability,P.Koef_var) * P.Dollars, 0) + isnull((1-ISNULL(DAV.Variability,Gl.Koef_var)) *GL.Dollars,0) as Dollars INTO #Source FROM #FactGL_2 GL FULL JOIN #payroll p on GL.AccountId = p.AccountId and GL.DepartmentID = p.DepartmentID and GL.FiscalYearId = p.FiscalYearId and GL.FiscalMonthId = p.FiscalMonthId LEFT JOIN #DepartmentAccountVariabilityOverride DAV ON ISNULL(GL.DepartmentID,p.DepartmentID) = DAV.DepartmentID AND ISNULL(GL.AccountID,p.AccountId) = DAV.AccountID ---- MERGE fw.FactGLSampled AS TARGET USING #Source AS SOURCE ON TARGET.DepartmentID = SOURCE.DepartmentID AND TARGET.AccountID = SOURCE.AccountID AND TARGET.FiscalYearID = SOURCE.FiscalYearID AND TARGET.FiscalMonthID = SOURCE.FiscalMonthID AND TARGET.TimeClassID = @TimeClassID AND TARGET.IsDeleted = 0 WHEN MATCHED AND TARGET.Dollars != SOURCE.Dollars THEN UPDATE SET TARGET.Dollars = SOURCE.Dollars WHEN NOT MATCHED BY TARGET THEN INSERT (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Dollars) VALUES (SOURCE.DepartmentID, SOURCE.AccountID, SOURCE.FiscalYearID, SOURCE.FiscalMonthID, @TimeClassID, SOURCE.Dollars); END GO --------------------------------------------- -- fw.procCopyFactPayrollHoursToStatisticsMonthly CREATE PROCEDURE [fw].[procCopyFactPayrollHoursToStatisticsMonthly] /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 ** 2 2019-02-15 OV D-07848 In Management Reporting, salaries and wages metrics for fixed departments are flexing ** 3 2019-02-19 KF D-08138 MR Flexing: Flex GL values should be 0 for mapped accounts if there is no Payroll data ** 4 2019-03-19 OV D-08253 - used temp table for @DepartmentAccountVariabilityOverrides ** 5 2019-03-26 OV D-08253 - optimize proc *************************************************************/ ( @FiscalYearID int = 0, @PriorYearsCount int = 0, @DepartmentAccountVariabilityOverrides [ob].[DepartmentAccountVariabilityOverride] READONLY ) AS BEGIN DECLARE @TimeClassID TINYINT = 4 --Flex DECLARE @UnitTypeID TINYINT = 51 --Hours DECLARE @StartFiscalYear INT = @FiscalYearID - @PriorYearsCount DECLARE @EndFiscalYear INT = @FiscalYearID IF @FiscalYearID = 0 BEGIN SELECT @StartFiscalYear = MIN(FiscalYearID) FROM ( SELECT MIN(FiscalYearID) AS FiscalYearID FROM fw.FactPayrollSampledMonthly UNION ALL SELECT MIN(FiscalYearID) AS FiscalYearID FROM fw.FactGLSampled) S SELECT @EndFiscalYear = MAX(FiscalYearID) FROM ( SELECT MAX(FiscalYearID) AS FiscalYearID FROM fw.FactPayrollSampledMonthly UNION ALL SELECT MAX(FiscalYearID) AS FiscalYearID FROM fw.FactGLSampled) S END DECLARE @MappingMode INT SELECT TOP 1 @MappingMode = CASE [PropertyXML].value('(/Properties//PayRollToGLLinkHoursConfiguration/node())[1]', 'nvarchar(max)') WHEN 'EachJobCode' THEN 1 WHEN 'EachPayCodeGroup' THEN 2 ELSE 0 END -- BothUnique or BothOverride FROM SystemCenterStep WHERE GlobalID = 'PayrolltoGLLinkSelection' IF OBJECT_ID('tempdb..#department') IS NOT NULL DROP TABLE #department IF OBJECT_ID('tempdb..#tempCrosswalk') IS NOT NULL DROP TABLE #tempCrosswalk IF OBJECT_ID('tempdb..#DepAcc_P_Stat') IS NOT NULL DROP TABLE #DepAcc_P_Stat IF OBJECT_ID('tempdb..#Source') IS NOT NULL drop table #Source IF OBJECT_ID('tempdb..#Stat_1') IS NOT NULL drop table #Stat_1 IF OBJECT_ID('tempdb..#Stat_2 ') IS NOT NULL drop table #Stat_2 IF OBJECT_ID('tempdb..#Payroll_JC_PCG') IS NOT NULL drop table #Payroll_JC_PCG IF OBJECT_ID('tempdb..#payroll') IS NOT NULL drop table #payroll IF OBJECT_ID('tempdb..#DepartmentAccountVariabilityOverride') IS NOT NULL DROP TABLE #DepartmentAccountVariabilityOverride CREATE TABLE #DepartmentAccountVariabilityOverride (AccountID int, DepartmentID int, Variability decimal(19,8)) INSERT INTO #DepartmentAccountVariabilityOverride (AccountID, DepartmentID, Variability) select AccountID, DepartmentID, Variability FROM @DepartmentAccountVariabilityOverrides ---- SELECT departmentID,AccountID into #DepAcc_P_Stat FROM ( select departmentID, AccountId from fw.FactStatisticSampledMonthly union select DepartmentID, accountID from fw.FactPayrollSampledMonthly cross join clientob.FactPayrollToAccountCrosswalk c ) t ----- select d.DepartmentID, DepAcc_P_Stat.AccountID, d.isvariable into #department FROM #DepAcc_P_Stat DepAcc_P_Stat inner join fw.DimDepartment d on DepAcc_P_Stat.departmentID = d.departmentID where d.IsMRPlan = 1 ----- SELECT aa.AccountID, UnitTypeID, aa.Variability, FY.FiscalYearID, FM.FiscalMonthID, CASE WHEN @MappingMode IN(0,1) then cc.JobCodeId else -10001 END AS JobCodeID, CASE WHEN @MappingMode IN(0,2) then CC.payCodeGroupID else -10001 END AS PayCodeGroupID into #tempCrosswalk from clientob.FactPayrollToAccountCrosswalk cc inner join fw.DimAccount aa on cc.AccountID = aa.AccountID CROSS JOIN fw.DimFiscalYear FY CROSS JOIN fw.DimFiscalMonth FM where CC.UnitTypeID = @UnitTypeID and FY.FiscalYearID BETWEEN @StartFiscalYear AND @EndFiscalYear and FM.FiscalMonthID != 0 ----- select SUM(p.Hours) as Hours, p.FiscalYearID, p.FiscalMonthID, CASE WHEN @MappingMode IN(0,1) then p.JobCodeId else -10001 END AS JobCodeID, CASE WHEN @MappingMode IN(0,2) then p.payCodeGroupID else -10001 END AS PayCodeGroupID, p.DepartmentID INTO #Payroll_JC_PCG FROM fw.FactPayrollSampledMonthly P WHERE P.TimeClassID = @TimeClassID AND P.IsDeleted = 0 GROUP BY FiscalYearID,FiscalMonthID,JobCodeID,PayCodeGroupID, DepartmentID ----- SELECT Stat.FiscalYearID, Stat.FiscalMonthId, Stat.AccountID, Stat.DepartmentID, Stat.Amount as Hours INTO #Stat_1 FROM fw.FactStatisticSampledMonthly Stat WHERE Stat.TimeclassID = 20 AND Stat.IsDeleted = 0 ----- select Stat.DepartmentID, Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, Hours, CW.Variability * D.IsVariable as Koef_var INTO #Stat_2 from (SELECT distinct AccountId,FiscalYearID,FiscalMonthID,Variability FROM #tempCrosswalk) cw INNER JOIN #Stat_1 Stat on Stat.FiscalYearID = CW.FiscalYearID AND Stat.FiscalMonthID = CW.FiscalMonthID AND Stat.AccountID = CW.AccountID INNER JOIN fw.DimDepartment d on Stat.departmentID = d.departmentID ----- SELECT DD.DepartmentID, X.AccountID, X.FiscalYearID, X.FiscalMonthID, X.Hours, X.Variability * DD.IsVariable as Koef_var INTO #payroll FROM ( select Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, CW.Variability, SUM(ROUND(P.Hours,6)) as Hours, P.DepartmentID from (SELECT distinct AccountId,JobCodeID,PayCodeGroupID,FiscalYearID,FiscalMonthID,Variability FROM #tempCrosswalk) cw inner join #Payroll_JC_PCG P ON P.FiscalYearID = CW.FiscalYearID AND P.FiscalMonthID = CW.FiscalMonthID AND CW.JobCodeID = P.JobCodeID AND CW.PayCodeGroupID = P.PayCodeGroupID GROUP BY Cw.AccountID, cw.FiscalYearID, cw.FiscalMonthID, CW.Variability, P.DepartmentID ) X INNER JOIN #department dd on DD.AccountID = X.AccountID and dd.DepartmentID = X.DepartmentID ----- SELECT ISNULL(Stat.DepartmentID,p.DepartmentID) as DepartmentID, ISNULL(Stat.AccountId,p.AccountId) as AccountId, ISNULL(Stat.FiscalYearId,p.FiscalYearId) as FiscalYearId, ISNULL(Stat.FiscalMonthId,p.FiscalMonthId) as FiscalMonthId, ISNULL(ISNULL(DAV.Variability,p.Koef_var) * P.Hours, 0) + isnull((1-ISNULL(DAV.Variability,Stat.Koef_var)) *Stat.Hours,0) as Hours INTO #Source FROM #Stat_2 Stat FULL JOIN #payroll p on Stat.AccountId = p.AccountId and Stat.DepartmentID = p.DepartmentID and Stat.FiscalYearId = p.FiscalYearId and Stat.FiscalMonthId = p.FiscalMonthId LEFT JOIN #DepartmentAccountVariabilityOverride DAV ON ISNULL(Stat.DepartmentID,p.DepartmentID) = DAV.DepartmentID AND ISNULL(Stat.AccountID,p.AccountId) = DAV.AccountID ---- MERGE fw.FactStatisticSampledMonthly AS TARGET USING #Source AS SOURCE ON TARGET.DepartmentID = SOURCE.DepartmentID AND TARGET.AccountID = SOURCE.AccountID AND TARGET.FiscalYearID = SOURCE.FiscalYearID AND TARGET.FiscalMonthID = SOURCE.FiscalMonthID AND TARGET.TimeClassID = @TimeClassID AND TARGET.IsDeleted = 0 WHEN MATCHED AND TARGET.Amount != SOURCE.Hours THEN UPDATE SET TARGET.Amount = SOURCE.Hours WHEN NOT MATCHED BY TARGET THEN INSERT (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) VALUES (SOURCE.DepartmentID, SOURCE.AccountID, SOURCE.FiscalYearID, SOURCE.FiscalMonthID, @TimeClassID, SOURCE.Hours); END GO --------------------------------------------- -- fw.procCopyFactStaffingBudgetToImport CREATE PROCEDURE fw.procCopyFactStaffingBudgetToImport (@HistoryItemGUID uniqueidentifier) AS BEGIN /************************************************************ ** Author: ipetriv ** Create Date: 2018-01-15 ** Description: Add procedure to calc EfficiencyFactor ** Last Modified: 2017-01-15 ** GM Release: 2018.2 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-01-15 IP B-18301 Created *************************************************************/ DECLARE @FiscalYearId INT = ( SELECT setting FROM dbsetting WHERE NAME = 'Current_GL_YearID' ) IF OBJECT_ID('int.FactStaffingHistory', 'U') IS NOT NULL DROP TABLE INT.FactStaffingHistory; SELECT RowID, DepartmentID, DepartmentCode, JobCodeID, JobCode, EmployeeID, Employeecode, PayCodeID, PayCode, FiscalYearID, FiscalYearCode, TimeClassID, TimeClassCode, UnitTypeID, UnitType, FiscalMonthID, FiscalMonthCode, Value, IsDeleted, HistoryItemGUID, Version, TransactionID, getdate() AS BCP_DTTime INTO INT.FactStaffingHistory FROM INT.FactStaffing WHERE FiscalYearID = @FiscalYearId AND TimeClassID = 2 CREATE UNIQUE CLUSTERED INDEX IX_FactStaffingHistory ON [int].[FactStaffingHistory] ( [FiscalMonthID] ASC, [IsDeleted] ASC, [FiscalYearID] ASC, [TimeClassID] ASC, [DepartmentID] ASC, [JobCodeID] ASC, [RowID] ASC ) ON [PRIMARY] WHILE 1 = 1 BEGIN DELETE TOP (10000) iST FROM [int].FactStaffing iST INNER JOIN INT.FactStaffingHistory iSTH ON iST.[FiscalMonthID] = iSTH.[FiscalMonthID] AND iST.[IsDeleted] = iSTH.[IsDeleted] AND iST.[FiscalYearID] = iSTH.[FiscalYearID] AND iST.[TimeClassID] = iSTH.[TimeClassID] AND iST.[DepartmentID] = iSTH.[DepartmentID] AND iST.[JobCodeID] = iSTH.[JobCodeID] AND iST.[RowID] = iSTH.[RowID] IF @@ROWCOUNT < 10000 BREAK; END INSERT INTO [int].FactStaffing ( DepartmentID, DepartmentCode, JobCodeID, JobCode, EmployeeID, Employeecode, PayCodeID, PayCode, FiscalYearID, FiscalYearCode, TimeClassID, TimeClassCode, UnitTypeID, UnitType, FiscalMonthID, FiscalMonthCode, Value, IsDeleted, HistoryItemGUID, TransactionID ) SELECT PR.DepartmentID, dd.DepartmentCode, pr.JobCodeID, djc.JobCode, pr.EmployeeID, de.Code AS Employeecode, pr.PayCodeID, dpc.PayCode, pr.FiscalYearID, FiscalYearID AS FiscalYearCode, pr.TimeClassID, dtm.TimeClassCode, UnitTypeID, UnitType, pr.FiscalMonthID, dfm.FiscalMonthCode, sum(Value), 0 AS IsDeleted, @HistoryItemGUID AS HistoryItemGUID, 0 AS TransactionID FROM ( SELECT DepartmentID, JobCodeID, EmployeeID, PayCodeID, FiscalYearID, TimeClassID, CASE WHEN UnitType = 'Dollars' THEN 34 WHEN UnitType = 'Hours' THEN 51 ELSE 0 END AS UnitTypeID, UnitType, FiscalMonthID, Value FROM [fw].[FactPayrollSampledMonthlyDetailed] UNPIVOT(Value FOR UnitType IN ( Dollars, Hours )) AS unpvt WHERE Value <> 0 AND TimeClassID = 2 -- Data transferred will be the sampled budgeted data AND FiscalYearID = @FiscalYearID ) PR INNER JOIN fw.DimTimeClass dtm ON dtm.TimeClassID = PR.TimeClassID INNER JOIN fw.DimDepartment dd ON dd.DepartmentID = PR.DepartmentID INNER JOIN fw.DimJobCode djc ON djc.JobCodeID = PR.JobCodeID INNER JOIN fw.DimPayCode dpc ON dpc.PayCodeID = PR.PayCodeID INNER JOIN fw.DimEmployee de ON de.EmployeeID = PR.EmployeeID INNER JOIN fw.DimFiscalMonth dfm ON dfm.FiscalMonthID = PR.FiscalMonthID GROUP BY PR.DepartmentID, dd.DepartmentCode, pr.JobCodeID, djc.JobCode, pr.EmployeeID, de.code, pr.PayCodeID, dpc.PayCode, pr.FiscalYearID, pr.TimeClassID, dtm.TimeClassCode, UnitTypeID, UnitType, pr.FiscalMonthID, dfm.FiscalMonthCode END GO --------------------------------------------- -- fw.procCopyFactStatisticBudgetToImport /************************************************************ ** Author: ipetriv ** Create Date: 2018-01-15 ** Description: Add procedure to calc EfficiencyFactor ** Last Modified: 2017-01-15 ** GM Release: 2018.2 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-01-15 IP B-18301 Created ** 2 2018-08-23 OV D-07498 Removed inversion logic *************************************************************/ CREATE PROCEDURE [fw].[procCopyFactStatisticBudgetToImport] (@HistoryItemGUID uniqueidentifier) as BEGIN DECLARE @FiscalYearId INT = ( SELECT setting FROM dbsetting WHERE NAME = 'Current_GL_YearID' ) IF OBJECT_ID('int.FactStatisticHistory', 'U') IS NOT NULL DROP TABLE INT.FactStatisticHistory; SELECT RowID, [DepartmentID], [DepartmentCode], [AccountID], [AccountCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [FiscalMonthID], [FiscalMonthCode], [Value], [IsDeleted], [HistoryItemGUID], [Version], [TransactionID], getdate() AS BCP_DTTime INTO INT.FactStatisticHistory FROM INT.FactStatistic WHERE FiscalYearID = @FiscalYearId AND TimeClassID = 2 CREATE UNIQUE CLUSTERED INDEX IX_FactStatisticHistory ON [int].[FactStatisticHistory] ( [FiscalMonthID] ASC, [IsDeleted] ASC, [FiscalYearID] ASC, [TimeClassID] ASC, [DepartmentID] ASC, [AccountID] ASC, [RowID] ASC ) ON [PRIMARY] WHILE 1 = 1 BEGIN DELETE TOP (10000) iST FROM [int].FactStatistic iST INNER JOIN INT.FactStatisticHistory iSTH ON iST.[FiscalMonthID] = iSTH.[FiscalMonthID] AND iST.[IsDeleted] = iSTH.[IsDeleted] AND iST.[FiscalYearID] = iSTH.[FiscalYearID] AND iST.[TimeClassID] = iSTH.[TimeClassID] AND iST.[DepartmentID] = iSTH.[DepartmentID] AND iST.[AccountID] = iSTH.[AccountID] AND iST.[RowID] = iSTH.[RowID] IF @@ROWCOUNT < 10000 BREAK; END INSERT INTO [int].FactStatistic ( DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, TimeClassID, TimeClassCode, FiscalMonthID, FiscalMonthCode, Value, IsDeleted, HistoryItemGUID, TransactionID ) SELECT ST.DepartmentID, dd.DepartmentCode, ST.AccountID, da.AccountCode, ST.FiscalYearID, ST.FiscalYearID AS FiscalYearCode, ST.TimeClassID, dtm.TimeClassCode, ST.FiscalMonthID, dfm.FiscalMonthCode, sum(ST.Amount) AS Value, 0 IsDeleted, @HistoryItemGUID AS HistoryItemGUID, 0 AS TransactionID FROM fw.FactStatisticSampledMonthly ST INNER JOIN fw.DimAccount A ON A.AccountID = ST.AccountID INNER JOIN fw.DimTimeClass dtm ON dtm.TimeClassID = ST.TimeClassID INNER JOIN fw.DimDepartment dd ON dd.DepartmentID = ST.DepartmentID INNER JOIN fw.DimAccount da ON da.AccountID = ST.AccountID INNER JOIN fw.DimFiscalMonth dfm ON dfm.FiscalMonthID = ST.FiscalMonthID WHERE ST.TimeClassID = 2 -- Data transferred will be the sampled budgeted data AND FiscalYearID = @FiscalYearId AND Amount <> 0.0 GROUP BY ST.DepartmentID, dd.DepartmentCode, ST.AccountID, da.AccountCode, ST.FiscalYearID, ST.TimeClassID, dtm.TimeClassCode, ST.FiscalMonthID, dfm.FiscalMonthCode END GO --------------------------------------------- -- fw.procCopySystemGeneratedStatistics CREATE PROC fw.procCopySystemGeneratedStatistics @departmentIds nvarchar(MAX) = NULL AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #departments SELECT val AS DepartmentId INTO #departments FROM ConvertCSValuesToTable(@departmentIds, ',') DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint IF (@departmentIds IS NULL) BEGIN TRUNCATE TABLE fw.FactSystemGeneratedStatistics SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM fw.FactChargeBasedStatistics WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM fw.FactChargeBasedStatistics WHERE RowId >= @startRowId ORDER BY RowID) as d INSERT INTO fw.FactSystemGeneratedStatistics (AccountID, DepartmentID, DateID, Value) SELECT s.AccountID, s.DepartmentID, s.DateID, s.Value FROM fw.FactChargeBasedStatistics s WHERE s.RowId >= @startRowId AND s.RowId <= @endRowId SELECT @startRowId = MIN(d.RowId) FROM fw.FactChargeBasedStatistics d WHERE RowId > @endRowId END END ELSE BEGIN DELETE FROM fw.FactSystemGeneratedStatistics WHERE DepartmentID IN (SELECT DepartmentId FROM #departments) INSERT INTO fw.FactSystemGeneratedStatistics (AccountID, DepartmentID, DateID, Value) SELECT s.AccountID, s.DepartmentID, s.DateID, s.Value FROM fw.FactChargeBasedStatistics s JOIN #departments d ON s.DepartmentID = d.DepartmentID END END GO --------------------------------------------- -- fw.procCopySystemGeneratedStatisticsMonthly CREATE PROC fw.procCopySystemGeneratedStatisticsMonthly @fiscalYearId smallint = 0 AS BEGIN SET NOCOUNT ON IF (@fiscalYearID = 0) BEGIN TRUNCATE TABLE fw.FactSystemGeneratedStatisticsMonthly INSERT INTO fw.FactSystemGeneratedStatisticsMonthly (AccountID, DepartmentID, FiscalYearID, FiscalMonthID, Value) SELECT s.AccountID, s.DepartmentID, s.FiscalYearID, s.FiscalMonthID, s.Value FROM fw.FactChargeBasedStatisticsMonthly s END ELSE BEGIN WHILE EXISTS(SELECT NULL FROM fw.FactSystemGeneratedStatisticsMonthly (nolock) WHERE FiscalYearID = @fiscalYearID) BEGIN DELETE TOP (1000000) fw.FactSystemGeneratedStatisticsMonthly WHERE FiscalYearID = @fiscalYearID END INSERT INTO fw.FactSystemGeneratedStatisticsMonthly (AccountID, DepartmentID, FiscalYearID, FiscalMonthID, Value) SELECT s.AccountID, s.DepartmentID, s.FiscalYearID, s.FiscalMonthID, s.Value FROM fw.FactChargeBasedStatisticsMonthly s WHERE s.FiscalYearID = @fiscalYearId END END GO --------------------------------------------- -- fw.procCreateCapandOBMissingRoles create proc fw.procCreateCapandOBMissingRoles as --Check for Capital Management Permission Set if (select COUNT(*) from S3PermissionSet where Name='Capital Management')=1 begin --Check for access - Read allow in Capital Management Permission Set if(select COUNT(*) from S3Permission where PermissionSetID=(select PermissionSetID from S3PermissionSet where Name='Capital Management') and RoleID = (Select RoleID from UserRole where Name='Access - Read Allow'))=0 begin insert into S3Permission (PermissionSetID,RoleID,Weight,ReadValue) select (select PermissionSetID from S3PermissionSet where Name='Capital Management'), RoleID, 0 as weight, 1 as ReadValue from UserRole where Name='Access - Read Allow' end --Check for access - Write allow in Capital Management Permission Set if(select COUNT(*) from S3Permission where PermissionSetID=(select PermissionSetID from S3PermissionSet where Name='Capital Management') and RoleID = (Select RoleID from UserRole where Name='Access - Write Allow'))=0 begin insert into S3Permission (PermissionSetID,RoleID,Weight,ReadValue,WriteValue) select (select PermissionSetID from S3PermissionSet where Name='Capital Management'), RoleID, 0 as weight, 1 as ReadValue, 1 as WriteValue from UserRole where Name='Access - Write Allow' end end --Check for Operating Budgeting Permission Set if (select COUNT(*) from S3PermissionSet where Name='Operating Budgeting')=1 begin --Check for access - Read allow in Capital Management Permission Set if(select COUNT(*) from S3Permission where PermissionSetID=(select PermissionSetID from S3PermissionSet where Name='Operating Budgeting') and RoleID = (Select RoleID from UserRole where Name='Access - Read Allow'))=0 begin insert into S3Permission (PermissionSetID,RoleID,Weight,ReadValue) select (select PermissionSetID from S3PermissionSet where Name='Operating Budgeting'), RoleID, 0 as weight, 1 as ReadValue from UserRole where Name='Access - Read Allow' end --Check for access - Write allow in Capital Management Permission Set if(select COUNT(*) from S3Permission where PermissionSetID=(select PermissionSetID from S3PermissionSet where Name='Operating Budgeting') and RoleID = (Select RoleID from UserRole where Name='Access - Write Allow'))=0 begin insert into S3Permission (PermissionSetID,RoleID,Weight,ReadValue,WriteValue) select (select PermissionSetID from S3PermissionSet where Name='Operating Budgeting'), RoleID, 0 as weight, 1 as ReadValue, 1 as WriteValue from UserRole where Name='Access - Write Allow' end end GO --------------------------------------------- -- fw.procCreateUserProfile Create proc fw.procCreateUserProfile @username nvarchar(64) ,@NameLast nvarchar(64) ,@NameFirst nvarchar(64) ,@EmailAddress nvarchar(450) as insert into UserProfile(UserName,NameFirst,NameLast,EmailAddress) values(@username,@NameFirst,@NameLast,@EmailAddress) GO --------------------------------------------- -- fw.procDeleteDimensionData /***************************************************************** ****** Author: unknown ****** Create Date: Unknown ****** Description: Deletes all FW dimensions that are specified by the client, used only for GM releases - NEVER RUN ON CLIENT DATABASES ****** Last Modified: 2022-03-22 ****** GM Release: 2022.22 ****** *********************************************************** ****** Change History ****** *********************************************************** ****** CID Date Author WI Description ****** 1 2013-10-02 akk 64597 Adding new dimensions ****** 2 2014-02-20 akk D-01398 Adding delete from scorefillin ****** 3 2014-06-13 akk D-01874 Adding payor dimension ****** 4 2016-03-22 akk Deleting additional service lines ****** 5 2017-09-07 gjf D-06351 Clean up security ****** 6 2018-06-19 jbm Changing DimAccount Delete ****** 7 2020-05-13 yxr B-26923 Adding DayType dimension ****** 8 2022-03-22 ljc JAZZ-37520 Adding post delete insert of Standard Codes into DayType dimension and definition reformat *****************************************************************/ CREATE PROCEDURE [fw].[procDeleteDimensionData] AS BEGIN --------- SET NOCOUNT ON added to prevent extra result sets from --------- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @nextid int; SELECT @nextid = 0; WHILE EXISTS ( SELECT TOP 1 1 FROM [fw].[DimAccount] WHERE [AccountID] != 0 ) BEGIN DELETE TOP (1000) FROM [fw].[DimAccount] WHERE [AccountID] != 0; END; DBCC CHECKIDENT ('[fw].[DimAccount]', RESEED, @nextid); DELETE FROM [fw].[DimDepartment] WHERE [DepartmentID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartment]', RESEED, @nextid); DELETE FROM [fw].[DimEmployee] WHERE [EmployeeID] != 0; DBCC CHECKIDENT ('[fw].[DimEmployee]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup6] WHERE [DepartmentRollup6ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup6]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup5] WHERE [DepartmentRollup5ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup5]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup4] WHERE [DepartmentRollup4ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup4]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup3] WHERE [DepartmentRollup3ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup3]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup2] WHERE [DepartmentRollup2ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup2]', RESEED, @nextid); DELETE FROM [fw].[DimDepartmentRollup1] WHERE [DepartmentRollup1ID] != 0; DBCC CHECKIDENT ('[fw].[DimDepartmentRollup1]', RESEED, @nextid); DELETE FROM [fw].[DimEntity] WHERE [EntityID] != 0; DBCC CHECKIDENT ('[fw].[DimEntity]', RESEED, @nextid); DELETE FROM [fw].[DimSystem] WHERE [SystemID] != 0; DBCC CHECKIDENT ('[fw].[DimSystem]', RESEED, @nextid); DELETE FROM [fw].[DimJobCode] WHERE [JobCodeID] != 0; DBCC CHECKIDENT ('[fw].[DimJobCode]', RESEED, @nextid); DELETE FROM [fw].[DimPayCode] WHERE [PayCodeID] != 0; DBCC CHECKIDENT ('[fw].[DimPayCode]', RESEED, @nextid); DELETE FROM [fw].[DimChargeCode] WHERE [ChargeCodeID] != 0; DBCC CHECKIDENT ('[fw].[DimChargeCode]', RESEED, @nextid); DELETE FROM [fw].[DimPatientType] WHERE [PatientTypeID] > 4; DBCC CHECKIDENT ('[fw].[DimPatientType]', RESEED, 4); --------- BEGIN CID 7 DELETE FROM [fw].[DimDayType] WHERE [DayTypeID] > 1; DBCC CHECKIDENT ('[fw].[DimDayType]', RESEED, 1); --------- END CID 7 --------- BEGIN CID 8 INSERT INTO [fw].[DimDayType] ([DayTypeCode], [PrecedentOrder]) SELECT --* DISTINCT [Rollup], CASE WHEN [Rollup] = 'Observation' THEN 50 ELSE DENSE_RANK() OVER (ORDER BY [Rollup] ASC) END AS [PrecedentOrder] FROM [dss].[DimUBRevenueCode] WHERE [CostDriver] = 'LOS'; --------- END CID 8 --------- BEGIN CID 1 DELETE FROM [fw].[DimModelingServiceLine] WHERE [ModelingServiceLineID] != 0; DBCC CHECKIDENT ('[fw].[DimModelingServiceLine]', RESEED, @nextid); DELETE FROM [fw].[DimPatientReimbursementGroup] WHERE [PatientReimbursementGroupID] != 0; DBCC CHECKIDENT ('[fw].[DimPatientReimbursementGroup]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLine] WHERE [ServiceLineID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLineRollup] WHERE [ServiceLineRollupID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLineRollup]', RESEED, @nextid); --------- BEGIN CID 4 DELETE FROM [dbo].[RuleSet] WHERE [Category] IN ( SELECT [RuleSetCategory] FROM [dss].[ServiceLineDefinition] WHERE [DimensionGUID] != '074b4b22-9824-40f5-aa2a-a7b32631e8a2' ); DELETE FROM [fw].[DimServiceLine2] WHERE [ServiceLine2ID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine2]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLine3] WHERE [ServiceLine3ID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine3]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLine4] WHERE [ServiceLine4ID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine4]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLine5] WHERE [ServiceLine5ID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine5]', RESEED, @nextid); DELETE FROM [fw].[DimServiceLine6] WHERE [ServiceLine6ID] != 0; DBCC CHECKIDENT ('[fw].[DimServiceLine6]', RESEED, @nextid); --------- END CID 4 DELETE FROM [fw].[DimProvider] WHERE [ProviderID] != 0; DBCC CHECKIDENT ('[fw].[DimProvider]', RESEED, @nextid); --------- END CID 1 --------- BEGIN CID 3 DELETE FROM [fw].[DimPayor] WHERE [PayorID] != 0; DBCC CHECKIDENT ('[fw].[DimPayor]', RESEED, @nextid); --------- END CID 3 --------- BEGIN CID 2 TRUNCATE TABLE [dbo].[ScoreFillin]; EXEC [dbo].[procScoreFillinTableRebuildAll]; EXEC [dbo].[procScoreFillinTableRefreshAll]; --------- END CID 2 EXEC [fw].[procInsertDimensionDefaults]; DELETE [l] FROM [dbo].[S3Loot] AS [l] WHERE [l].[LootID] LIKE 'DEPT|%' AND NOT EXISTS ( SELECT 1 FROM [fw].[DimDepartment] AS [d] WHERE [l].[LootID] = 'DEPT|' + CAST([d].[DepartmentID] AS nvarchar(16)) ); DELETE [lg] FROM [dbo].[S3Loot] AS [lg] WHERE [lg].[LootID] LIKE 'DEPT|%' AND NOT EXISTS ( SELECT 1 FROM [fw].[DimDepartment] AS [d] WHERE [lg].[LootID] = 'DEPT|' + CAST([d].[DepartmentID] AS nvarchar(16)) ); DELETE [l] FROM [dbo].[S3Loot] AS [l] WHERE [l].[LootID] LIKE 'MRDEPT|%' AND NOT EXISTS ( SELECT 1 FROM [fw].[DimDepartment] AS [d] WHERE [l].[LootID] = 'MRDEPT|' + CAST([d].[DepartmentID] AS nvarchar(16)) ); DELETE [lg] FROM [dbo].[S3Loot] AS [lg] WHERE [lg].[LootID] LIKE 'MRDEPT|%' AND NOT EXISTS ( SELECT 1 FROM [fw].[DimDepartment] AS [d] WHERE [lg].[LootID] = 'MRDEPT|' + CAST([d].[DepartmentID] AS nvarchar(16)) ); END; RETURN; GO --------------------------------------------- -- fw.procDeleteFactData CREATE PROCEDURE [fw].[procDeleteFactData] AS /************************************************************ ** Author: akowalski ** Create Date: 2013-11-07 ** Description: Deletes FW and CLIENT schema tables that are populated by the client, used only for GM releases - NEVER RUN ON CLIENT DATABASES ** Last Modified: 2013-11-07 ** GM Release: 2013-11-19 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2015-06-18 akk Converting proc to cursor ** *************************************************************/ BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE @SQL2 nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where (t.schema_id in(select schema_id from sys.schemas where name in('fw', 'client')) and t.name like 'fact%' and t.name not like '%map' and t.name<>'FactWorkingHoursPerMonth') order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'truncate table ' + @SCHEMA + '.' + @FactTableName set @SQL2='DBCC CHECKIDENT (''' + + @SCHEMA + '.' + @FactTableName + ''', RESEED, 1)' --print @SQL EXECUTE sp_executesql @SQL if exists ( select 1 from sys.columns c inner join sys.tables t on t.object_id=c.object_ID inner join sys.schemas s on t.schema_id=s.schema_id where t.name=@FactTableName and s.name=@SCHEMA and is_identity=1) begin EXECUTE sp_executesql @SQL2 end FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor END RETURN GO --------------------------------------------- -- fw.procDepartmentChargeCodePrimaryStatisticMappingCache /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2023-03-20 HV JAZZ-52052 Create and fill in cache table for Primary Statistics data source for Daily and Pay Period *************************************************************/ CREATE PROCEDURE fw.procDepartmentChargeCodePrimaryStatisticMappingCache AS IF OBJECT_ID('tempdb..#drivers') IS NOT NULL DROP TABLE #drivers CREATE TABLE #drivers (OriginalDepartmentID INT NOT NULL, DriverDepartmentID INT NOT NULL, AccountID INT NULL, IsStaffing BIT NOT NULL) INSERT INTO #drivers (OriginalDepartmentID, DriverDepartmentID, AccountID, IsStaffing) SELECT C.DepartmentID AS OriginalDepartmentID, COALESCE(DC.DriverDepartmentID, C.DepartmentID) AS DriverDepartmentID, C.AccountID, C.Staffing AS IsStaffing FROM client.FactDepartmentPrimaryStatisticConfiguration C LEFT JOIN client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache DC ON DC.FactDepartmentPrimaryStatisticConfigurationID = C.RowID WHERE C.IsDeleted = 0 TRUNCATE TABLE fw.DepartmentChargeCodePrimaryStatisticMappingCache INSERT INTO fw.DepartmentChargeCodePrimaryStatisticMappingCache (DepartmentID, OriginalDepartmentID, FiscalYearID, AccountID, ChargeCodeID, PatientTypeRollupID, Weight, IsStaffing) SELECT D.DriverDepartmentID AS DepartmentID, D.OriginalDepartmentID, map.FiscalYearID, map.AccountID, map.ChargeCodeID, map.PatientTypeRollupID, map.Weight, D.IsStaffing FROM #drivers D INNER JOIN fw.DepartmentChargeCodeStatisticMappingCache map ON map.DepartmentID = D.DriverDepartmentID AND map.AccountID = D.AccountID IF OBJECT_ID('tempdb..#drivers') IS NOT NULL DROP TABLE #drivers GO --------------------------------------------- -- fw.procDepartmentChargeCodeStatisticMappingCacheRefresh /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2020-12-08 KF JAZZ-10947 My Performance | Supplies UOS Detail *************************************************************/ CREATE PROCEDURE [fw].[procDepartmentChargeCodeStatisticMappingCacheRefresh] AS TRUNCATE TABLE fw.DepartmentChargeCodeStatisticMappingCache INSERT INTO fw.DepartmentChargeCodeStatisticMappingCache (FiscalYearID, DepartmentID, ChargeCodeID, PatientTypeRollupID, AccountID, Weight) SELECT FiscalYearID, DepartmentID, ChargeCodeID, PatientTypeRollupID, AccountID, Weight FROM fw.viewDepartmentChargeCodeStatisticMapping WHERE AccountID != 0 AND Weight != 0 GO --------------------------------------------- -- fw.procDepartmentChargeCodeStatisticMappingSetDefault /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-09-14 GF Initial implementation ** 2 2018-05-08 KF B-19364 MRPR - Set Global Weights for Charge Codes - System Center Page ** 3 2018-02-28 OV D-06846 modify proc to not insert data for RollupID = 0 ************************************************************ */ CREATE proc [fw].[procDepartmentChargeCodeStatisticMappingSetDefault] as set nocount on insert into fw.DepartmentChargeCodeStatisticMapping (FiscalYearID, DepartmentRollupLevelMemberID, ChargeCodeID, PatientTYpeRollupID, AccountID, Weight, IsReviewed, DepartmentRollupLevelMemberColumnName) select distinct pblid.FiscalYearID, pblid.DepartmentID, pblid.ChargeCodeID, pt.PatientTypeRollupID, 0 as AccountID, 0 as Weight, 0 as IsReviewed, 'DepartmentID' from dss.FactPatientBillingLineItemDetail pblid with (readuncommitted) inner join clientdss.FactPatientEncounterSummary es with (readuncommitted) on es.EncounterID = pblid.EncounterID inner join [fw].[DimPatientType] PT with (readuncommitted) on es.PatientTypeID=PT.PatientTypeID LEFT JOIN fw.DepartmentChargeCodeStatisticMapping ex on ex.FiscalYearID = pblid.FiscalYearID and ex.DepartmentRollupLevelMemberID = pblid.DepartmentID and ex.DepartmentRollupLevelMemberColumnName = 'DepartmentID' and ex.ChargeCodeID = pblid.ChargeCodeID and ex.PatientTypeRollupID = pt.PatientTypeRollupID WHERE ex.FiscalYearID is null and pt.PatientTypeRollupID != 0 GO --------------------------------------------- -- fw.procDepartmentChargeCodeStatisticMappingStaffingCache /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2023-02-02 KF JAZZ-48413 Charge Based Statistics Modals Performance Improvement- Bug Fixing *************************************************************/ CREATE PROCEDURE fw.procDepartmentChargeCodeStatisticMappingStaffingCache AS IF OBJECT_ID('tempdb..#drivers') IS NOT NULL DROP TABLE #drivers CREATE TABLE #drivers (OriginalDepartmentID INT NOT NULL, DriverDepartmentID INT NOT NULL, AccountID INT NULL) INSERT INTO #drivers (OriginalDepartmentID, DriverDepartmentID, AccountID) SELECT C.DepartmentID AS OriginalDepartmentID, COALESCE(DC.DriverDepartmentID, C.DepartmentID) AS DriverDepartmentID, C.AccountID FROM client.FactDepartmentPrimaryStatisticConfiguration C LEFT JOIN client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache DC ON DC.FactDepartmentPrimaryStatisticConfigurationID = C.RowID WHERE C.IsDeleted = 0 AND C.Staffing = 1 TRUNCATE TABLE fw.DepartmentChargeCodeStatisticMappingStaffingCache INSERT INTO fw.DepartmentChargeCodeStatisticMappingStaffingCache (DepartmentID, OriginalDepartmentID, FiscalYearID, AccountID, ChargeCodeID, PatientTypeRollupID, Weight) SELECT D.DriverDepartmentID AS DepartmentID, D.OriginalDepartmentID, map.FiscalYearID, map.AccountID, map.ChargeCodeID, map.PatientTypeRollupID, map.Weight FROM #drivers D INNER JOIN fw.DepartmentChargeCodeStatisticMappingCache map ON map.DepartmentID = D.DriverDepartmentID AND map.AccountID = D.AccountID IF OBJECT_ID('tempdb..#drivers') IS NOT NULL DROP TABLE #drivers GO --------------------------------------------- -- fw.procDepartmentPrimaryStatisticConfigurationDriverDepartmentCacheRefresh create proc fw.procDepartmentPrimaryStatisticConfigurationDriverDepartmentCacheRefresh as if (not exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment)) begin return end declare @sql nvarchar(max) set @sql = ' truncate table [client].[FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache]; insert into [client].[FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache] (DriverDepartmentGUID, FactDepartmentPrimaryStatisticConfigurationID, DriverDepartmentID) select dd.DriverDepartmentGUID, dd.FactDepartmentPrimaryStatisticConfigurationID, sd.DepartmentID from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd inner join fw.DimDepartment sd on dd.Value = ''DEPT|KEY|af5b308b-7574-4769-b4e9-dcdeb617b1fc|'' + cast(sd.DepartmentID as nvarchar(8)) + ''|DEPTDepartmentID|'' + cast(sd.DepartmentID as nvarchar(8));' if (exists(select 1 from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.Value not like 'DEPT|KEY|%')) begin declare @driverGUID uniqueidentifier declare @configID int declare @hpath nvarchar(max) declare @where nvarchar(max) declare crsHPaths cursor fast_forward for select dd.DriverDepartmentGUID, dd.FactDepartmentPrimaryStatisticConfigurationID, dd.Value from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartment dd where dd.Value not like 'DEPT|KEY|%' open crsHPaths fetch next from crsHPaths into @driverGUID, @configID, @hpath while (@@FETCH_STATUS = 0) begin exec dbo.procScoreHierarchyPathGetQuery @hpath, 1, @where OUTPUT set @sql = @sql + ' insert into [client].[FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache] (DriverDepartmentGUID, FactDepartmentPrimaryStatisticConfigurationID, DriverDepartmentID) select ''' + CAST(@driverGUID as nvarchar(36)) + ''', ' + cast(@configID as nvarchar(8)) + ', DepartmentID from fw.viewDimDepartment where ' + @where + ';' fetch next from crsHPaths into @driverGUID, @configID, @hpath end close crsHPaths deallocate crsHPaths end exec(@sql) GO --------------------------------------------- -- fw.procDimDateAssignFiscalYear CREATE proc [fw].[procDimDateAssignFiscalYear] as /************************************************************ ** Author: Unknown ** Create Date: Unknown ** Description: Assigns Fiscal Year to the Date Dimension ** Last Modified: 2015-11-25 ** GM Release: Unknown ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2015-11-25 JG Changing join to join on ID instead of Code ** 2 2016-10-17 MH D-04891 Updated FiscalQuarter *************************************************************/ --Disable triggers on fw.DimDate or else this will be very slow begin declare @yemonth int = (select dbo.GetDBSetting('GENERAL_FISCALYEARENDMONTH')) print @yemonth update fw.dimdate set FiscalYear = CASE WHEN calendarmonth <= @yemonth THEN calendaryear else cast(calendaryear as int) + 1 END from fw.DimDate end update d set d.FiscalMonth = fm.SortOrder, d.FiscalQuarter = concat('Quarter ', fm.QuarterID) from fw.DimDate d inner join fw.DimFiscalMonth fm on d.CalendarMonth = fm.FiscalMonthID where DateID <> 0 --exec [dbo].[procChangeDBSetting] @settingname = 'GENERAL_FISCALYEARENDMONTH', @value = 6 GO --------------------------------------------- -- fw.procDimDatePopulate --Author: ekretzer --Branch: DSS --Forward create procedure fw.procDimDatePopulate @StartDate datetime as begin set nocount on -- Determine if the year has 365 or 366 days declare @numDays smallint = 365; declare @p_leap_date SMALLDATETIME = CONVERT(VARCHAR(4), YEAR(@StartDate)) + '0228' declare @p_check_day TINYINT = DATEPART(d, DATEADD(d, 1, @p_leap_date)) if (@p_check_day = 29) set @numDays = 366; declare @i int = 0; declare @CurrentDate datetime; while (@i < @numDays) begin set @CurrentDate = DATEADD(DAY, @i, @StartDate); set @CurrentDate = DATEADD(DAY, DATEDIFF(Day, 0, @CurrentDate), 0); --round off to day insert into fw.DimDate ( CalendarDateTime, CalendarYear, CalendarMonth, CalendarMonthName, DayNumberOfWeek, DayNameOfWeek, DayNumberOfMonth, DayNumberOfYear, WeekNumberOfYear, IsWeekDay, CalendarQuarter) values (@CurrentDate, YEAR(@CurrentDate), MONTH(@CurrentDate), DATENAME(month, @CurrentDate ), DATEPART(weekday, @CurrentDate), DATENAME(weekday, @CurrentDate) ,DAY(@CurrentDate), DATEPART(dayofyear, @CurrentDate), DATEPART(week, @CurrentDate), case when DATEPART(weekday, @CurrentDate) in (1,7) then 0 else 1 end, DATENAME(quarter, @CurrentDate)) set @i = @i + 1; end print 'Added ' + cast(@numDays as varchar(3)) + ' days for ' + cast(year(@StartDate) as varchar(4)) end RETURN GO --------------------------------------------- -- fw.procDimFiscalMonthUpdateDaysInMonth CREATE PROCEDURE [fw].[procDimFiscalMonthUpdateDaysInMonth] AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; declare @currentYear int = year(getdate()) update fw.DimFiscalMonth set DaysInMonth = dbo.GetDaysInMonth(cast(cast(@currentYear as varchar) + '-' + cast(fiscalmonthid as varchar) + '-1' as DateTime)) where FiscalMonthID <> 0 update fw.dimfiscalmonth set ytddaysinmonth = coalesce(fw.[GetYTDDaysInMonth](fiscalmonthid), 0) where FiscalMonthID <> 0 END GO --------------------------------------------- -- fw.procDimPayPeriodUpdateFiscalYear CREATE PROCEDURE [fw].[procDimPayPeriodUpdateFiscalYear] AS update fw.dimpayperiod set fiscalyearidstart = [dbo].[GetFiscalYearForDate](dateadd(day,(1)-[perioddays],[periodendcalendardate])), fiscalyearidsecond = [dbo].[GetFiscalYearForDate]([periodendcalendardate]) GO --------------------------------------------- -- fw.procDimTimePopulate --Author: ekretzer --Branch: DSS --Forward create procedure fw.procDimTimePopulate as begin -- We assume that the 0 record is 0:00 & not 0 - Not Specified truncate table fw.DimTime DBCC CHECKIDENT ('fw.DimTime', reseed, 0) declare @Hour tinyint = 0 declare @Minute tinyint = 0 while @Hour < 24 begin set @Minute = 0 while @Minute < 60 begin insert into fw.DimTime([Hour], [Minute], MemberGUID) values (@Hour, @Minute, newid()) set @Minute = @Minute + 1 end set @Hour = @Hour + 1 end --@Hour end RETURN GO --------------------------------------------- -- fw.procEMFFillInCreateAutoProc CREATE proc [fw].[procEMFFillInCreateAutoProc] @procschema sysname, @procobject sysname, @phdimensionguid uniqueidentifier, @plantypeguid uniqueidentifier, @attributename nvarchar(100) = 'AutomaticPHSection' --@planguid uniqueidentifier = '00000000-0000-0000-0000-000000000000' as /* select AutomaticPHSection from zzviewlist_masteraccount */ declare @phdimname nvarchar(100) declare @fidimname nvarchar(100) declare @phl1name nvarchar(100) select @phdimname = replace(ph.Name, ' ', ''), @fidimname = replace(fi.Name, ' ', ''), @phl1name = replace(phl1.Name, ' ','') from SecureList ph inner join SecureList fi on ph.FillInDimensionGUID = fi.ListGUID inner join SecureListLevel phl1 on ph.ListGUID = phl1.ListGUID and phl1.LevelIndex = 0 where ph.ListGUID = @phdimensionguid declare @sql nvarchar(max) set @sql = ' if exists ( select 1 from viewSysProcedures where schemaname = ''' + @procschema + ''' and objectname = ''' + @procobject + ''' ) begin drop proc [' + @procschema + '].[' + @procobject + '] end ' exec (@sql) set @sql = ' create proc [' + @procschema + '].[' + @procobject + '] @planguid uniqueidentifier = ''00000000-0000-0000-0000-000000000000'' as declare @iguid uniqueidentifier set @iguid = NEWID() insert into EMFFillInSetManyStaging ( InstanceGUID, ModelGUID, PHDimensionGUID, ParentPHMemberGUID, FillInGUID, SortOrder) select @iguid, p.PlanGUID as ModelGUID, ''' + cast(@phdimensionguid as varchar(36)) + ''' as PHDimensionGUID, --' + @phdimname + ' ph.'+ @phdimname +'GUID as ParentPHMemberGUID, fi.'+ @fidimname +'GUID as FillInGuid, ROW_NUMBER() over (partition by p.planguid order by fi.'+ @fidimname +' asc) as SortOrder from [zzviewlist_'+ @fidimname +'] fi inner join zzviewlist_'+ @phdimname +' ph on fi.'+ @attributename +' = ph.'+ @phl1name +' and ph.'+ @phdimname +' is null cross join xplan p where p.plantypeguid = ''' + CAST(@plantypeguid as varchar(36)) + ''' and (p.planguid = @planguid or @planguid = dbo.ZeroGUID()) exec procEMFFillInSetManyNoClear @iguid --select * from EMFFillInSetManyStaging where InstanceGUID = @iguid delete from EMFFillInSetManyStaging where InstanceGUID = @iguid ' exec (@sql) GO --------------------------------------------- -- fw.procFactDailyMergeDuplicates /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-07-25 KF JAZZ-39738 Daily flexing - Payroll Hours and Dollars *************************************************************/ CREATE proc [fw].[procFactDailyMergeDuplicates] @factTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @priorYearsCount smallint = 0, @timeClassID tinyint = 0, @onePayPeriodOnlyDate datetime = null, @isDebugOnly bit = 0, @departmentIDs nvarchar(max) = null with recompile as set nocount on IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope CREATE TABLE #DailyCalcPeriodsScope (PayPeriodID int primary key) INSERT INTO #DailyCalcPeriodsScope (PayPeriodID) SELECT PayPeriodID FROM fw.DimPayPeriod WHERE (@onePayPeriodOnlyDate IS NOT NULL and @onePayPeriodOnlyDate BETWEEN PeriodStartCalendarDate and PeriodEndCalendarDate) or (@onePayPeriodOnlyDate IS NULL and ((FiscalYearIDSecond BETWEEN @fiscalYearID - @priorYearsCount AND @fiscalYearID) or @fiscalYearID = 0)) declare @sql nvarchar(max) declare @from nvarchar(max) = ' FROM ' + @factTableName + ' data INNER JOIN #DailyCalcPeriodsScope pp ON pp.PayPeriodID = data.PayPeriodID INNER JOIN ( SELECT fd.DepartmentID, fd.' + replace(@keyNameCSV, ',', ', fd.') + ', fd.PayPeriodID, fd.DateID, fd.TimeClassID FROM ' + @factTableName + ' fd GROUP BY fd.DepartmentID, fd.' + replace(@keyNameCSV, ',', ', fd.') + ', fd.PayPeriodID, fd.DateID, fd.TimeClassID HAVING COUNT(*) > 1 ) dr ON dr.DepartmentID = data.DepartmentID and ' + (select dbo.straggr('dr.' + csv.val + ' = data.' + csv.val, ' and ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and dr.PayPeriodID = data.PayPeriodID and dr.DateID = data.DateID and dr.TimeClassID = data.TimeClassID WHERE (1 = 1)' + (case when @timeClassID > 0 then ' and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) declare @fromForUpdate nvarchar(max) = REPLACE(@from, '#DailyCalcPeriodsScope', '#inputPayPeriods'); declare @delete nvarchar(max) = ' WHILE (EXISTS (SELECT TOP 1 1 FROM ' + @factTableName + ' WHERE IsDeleted = 1)) BEGIN DELETE TOP(10000000) data FROM ' + @factTableName + ' data WHERE data.IsDeleted = 1 END; ' --merge duplicate rows set @sql = @delete +' IF OBJECT_ID(''tempdb..#inputPayPeriods'') IS NOT NULL DROP TABLE #inputPayPeriods SELECT data.PayPeriodID, COUNT(1) AS RecordsCount, 0 AS BatchID INTO #inputPayPeriods ' + @from + ' GROUP BY data.PayPeriodID -- Split data into batches DECLARE @BatchSize INT = 20000000 WHILE EXISTS (SELECT TOP 1 1 FROM #inputPayPeriods WHERE BatchID = 0) BEGIN ;WITH PayPeriodInfo AS ( SELECT IPP.PayPeriodID, ROW_NUMBER() OVER (ORDER BY IPP.PayPeriodID) AS RowNumber, SUM(RecordsCount) OVER (ORDER BY IPP.PayPeriodID) AS Total, M.MaxBatchID+1 AS BatchID FROM #inputPayPeriods IPP CROSS JOIN (SELECT MAX(BatchID) AS MaxBatchID FROM #inputPayPeriods) M WHERE IPP.BatchID = 0 ) UPDATE IPP SET IPP.BatchID = MI.BatchID FROM #inputPayPeriods IPP INNER JOIN PayPeriodInfo MI ON MI.PayPeriodID = IPP.PayPeriodID WHERE MI.Total <= @BatchSize OR MI.RowNumber = 1 END DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN UPDATE data SET data.IsDeleted = 1 ' + @fromForUpdate + ' and pp.BatchID = @BatchID INSERT INTO ' + @factTableName + ' (data.DepartmentID, ' + @keyNameCSV + ', PayPeriodID, DateID, TimeClassID, ' + @measureNameCSV + ') SELECT data.DepartmentID, ' + replace(@keyNameCSV, ',', ', data.') + ', data.PayPeriodID, data.DateID, data.TimeClassID, sum(' + replace(@measureNameCSV, ',', '), sum(') + ') FROM ' + @factTableName + ' data INNER JOIN #inputPayPeriods pp ON pp.PayPeriodID = data.PayPeriodID WHERE data.IsDeleted = 1 and pp.BatchID = @BatchID GROUP BY data.DepartmentID, ' + replace(@keyNameCSV, ',', ', data.') + ', data.PayPeriodID, data.DateID, data.TimeClassID; SET @BatchID = @BatchID + 1 END ' + @delete; if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods GO --------------------------------------------- -- fw.procFactGLSampledBaselineTargetUpdate /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-07-05 IP D-06023 Changing columns size to support values over 1 trillion ** 2 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 3 2018-05-24 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 4 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 5 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 6 2024-06-05 ishah JAZZ-61244 [TrLog][High] Bug - Run Management Reporting Monthly Process (MR Sampling, all years run): Task failed on Inserting GL Sampled. *************************************************************/ ----- #FactGLStaging should be created with specified columns(RowID bigint identity(1,1), DepartmentID int, AccountID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Units decimal(21,6), Dollars decimal(21,6), FTEs decimal(21,6),isDeleted bit default 0, isSystemGenerated bit default 0) before calling the proc CREATE PROCEDURE [fw].[procFactGLSampledBaselineTargetUpdate] @targetType INT = NULL, @numberOfMonths INT = NULL, @fiscalYearID INT = 0 WITH RECOMPILE AS IF (@targetType IS NULL) SET @targetType = ( SELECT Value FROM mr.SystemSetting WHERE NAME = 'Target Basis' ) IF (@numberOfMonths IS NULL) SET @numberOfMonths = ( SELECT Value FROM mr.SystemSetting WHERE NAME = 'Number Of Rolling Average Months' ) CREATE TABLE #temp (DepartmentID INT, AccountID INT, FiscalYearID SMALLINT, FiscalMonthID TINYINT, Dollars DECIMAL(21, 6), Units DECIMAL(21, 6)) DECLARE @declareParameters nvarchar(max), @sql nvarchar(max), @sqlJoin nvarchar(max), @sqlWhere nvarchar(max), @sqlFromForBatches nvarchar(max), @batchSize INT, @BatchID INT, @MaxBatchID INT, @sqlParam nvarchar(max), @timeClassId int = 1 declare @maxCalculatingFiscalYear int = (select max(FiscalYearID) from #FactGLStaging) -- Split by batches EXEC mr.procGetIntBatchSize @DefaultBatchSize = 30000000, @ResultBatchSize = @batchSize OUTPUT IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) delete from #FactGLStaging where TimeClassID = 20 and (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) IF (@targetType = 1) BEGIN --Prior Year Actual IF @fiscalYearID <> 0 BEGIN set @declareParameters = '@fiscalYearID INT = ' + cast(@fiscalYearID - 1 as NVARCHAR(4)) + ', @timeClassId INT = ' + cast(@timeClassId as nvarchar(max)) set @sqlJoin = ' ( SELECT d.DepartmentID, d.AccountID, d.FiscalYearID + 1 as FiscalYearID, d.FiscalMonthID FROM fw.FactGLSampled d WHERE d.TimeClassID = @timeClassId AND d.FiscalYearID = @fiscalYearID ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlJoin, @whereClause = '', @declareParameters = @declareParameters, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #temp SELECT d.DepartmentID, d.AccountID, d.FiscalYearID + 1, d.FiscalMonthID, d.Dollars, d.Units FROM fw.FactGLSampled d INNER JOIN #inputDepartments ID on ID.DepartmentID = d.DepartmentID AND d.TimeClassID = @timeClassId AND d.FiscalYearID = @fiscalYearID - 1 AND ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END ELSE BEGIN set @declareParameters = '@timeClassId INT = ' + cast(@timeClassId as nvarchar(max)) set @sqlJoin = ' ( SELECT d.DepartmentID, d.AccountID, d.FiscalYearID + 1 as FiscalYearID, d.FiscalMonthID FROM #FactGLStaging d WHERE d.TimeClassID = @timeClassId ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlJoin, @whereClause = '', @declareParameters = @declareParameters, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #temp SELECT d.DepartmentID, d.AccountID, d.FiscalYearID + 1, d.FiscalMonthID, d.Dollars, d.Units FROM #FactGLStaging d INNER JOIN #inputDepartments ID on ID.DepartmentID = d.DepartmentID WHERE d.TimeClassID = @timeClassId AND ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END END ELSE IF (@targetType = 10) BEGIN --Rolling Average IF OBJECT_ID('tempdb..#AllCombinations') IS NOT NULL DROP TABLE #AllCombinations CREATE TABLE #AllCombinations ( DepartmentID INT, AccountID INT, FiscalYearID INT, SortOrder INT, Units DECIMAL(21, 6), Dollars DECIMAL(21, 6) ); IF OBJECT_ID('tempdb..#FinalDataset') IS NOT NULL DROP TABLE #FinalDataset CREATE TABLE #FinalDataset ( DepartmentID INT, AccountID INT, FiscalYearID INT, FiscalMonthID INT, Dollars DECIMAL(21, 6), Units DECIMAL(21, 6) ); IF @fiscalYearID = 0 BEGIN IF OBJECT_ID('tempdb..#FiscalYearMonth') IS NOT NULL DROP TABLE #FiscalYearMonth CREATE TABLE #FiscalYearMonth ( FiscalYearID INT, FiscalMonthID INT, SortOrder INT, ChronologicalOrder INT ); INSERT INTO #FiscalYearMonth (FiscalYearID, FiscalMonthID, SortOrder, ChronologicalOrder) SELECT fy.FiscalYearID, fm.FiscalMonthID, fm.SortOrder, fy.FiscalYearID * 12 + fm.SortOrder AS ChronologicalOrder FROM fw.DimFiscalYear fy CROSS JOIN fw.DimFiscalMonth fm WHERE fy.FiscalYearID <> 0 AND fm.FiscalMonthID <> 0 IF OBJECT_ID('tempdb..#PrecomputedValues') IS NOT NULL DROP TABLE #PrecomputedValues CREATE TABLE #PrecomputedValues ( DepartmentID INT, AccountID INT, FiscalYearID INT, FiscalMonthID INT, SortOrder INT, PrecomputedValue INT, Units DECIMAL(21, 6), Dollars DECIMAL(21, 6), TimeClassID INT, IsSystemGenerated BIT ); SET @sqlFromForBatches = ' ( SELECT p.DepartmentID as DepartmentID, p.AccountID, p.FiscalYearID, p.FiscalMonthID, m.SortOrder, (p.FiscalYearID * 12 + m.SortOrder) AS PrecomputedValue, p.Units, p.Dollars, p.TimeClassID, ISNULL(p.IsSystemGenerated, 0) AS IsSystemGenerated FROM #FactGLStaging p INNER JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE p.TimeClassID = 1 AND ISNULL(p.IsSystemGenerated, 0) = 0 ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #PrecomputedValues SELECT p.DepartmentID, p.AccountID, p.FiscalYearID, p.FiscalMonthID, m.SortOrder, (p.FiscalYearID * 12 + m.SortOrder) AS PrecomputedValue, p.Units, p.Dollars, p.TimeClassID, ISNULL(p.IsSystemGenerated, 0) AS IsSystemGenerated FROM #FactGLStaging p INNER JOIN #inputDepartments ID ON ID.DepartmentID = p.DepartmentID INNER JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE p.TimeClassID = 1 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END IF OBJECT_ID('tempdb..#ChronologicalDifferences') IS NOT NULL DROP TABLE #ChronologicalDifferences CREATE TABLE #ChronologicalDifferences ( DepartmentID INT, AccountID INT, FiscalYearID INT, SortOrder INT, ChronologicalDifference INT ); DECLARE @MinYear INT = (SELECT MIN(FiscalYearID) FROM #PrecomputedValues) DECLARE @MaxYear INT = (SELECT MAX(FiscalYearID) FROM #PrecomputedValues) WHILE @MinYear <= @MaxYear BEGIN SET @sqlFromForBatches = ' ( SELECT pv.DepartmentID as DepartmentID, pv.AccountID, fy.FiscalYearID, fy.SortOrder, (fy.ChronologicalOrder - pv.PrecomputedValue) AS ChronologicalDifference FROM #PrecomputedValues pv INNER JOIN #FiscalYearMonth fy ON (fy.ChronologicalOrder - pv.PrecomputedValue) BETWEEN 1 AND ' + CAST(@numberOfMonths AS NVARCHAR(4)) + ' WHERE pv.FiscalYearID = ' + cast(@MinYear as nvarchar(100)) + ' ) X ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #ChronologicalDifferences SELECT pv.DepartmentID, pv.AccountID, fy.FiscalYearID, fy.SortOrder, (fy.ChronologicalOrder - pv.PrecomputedValue) AS ChronologicalDifference FROM #PrecomputedValues pv INNER JOIN #inputDepartments ID ON ID.DepartmentID = pv.DepartmentID INNER JOIN #FiscalYearMonth fy ON (fy.ChronologicalOrder - pv.PrecomputedValue) BETWEEN 1 AND @numberOfMonths WHERE ID.BatchID = @BatchID AND pv.FiscalYearID = @MinYear SET @BatchID = @BatchID + 1 END SET @MinYear = @MinYear + 1 END SET @sqlFromForBatches = ' ( SELECT CombinedResults.DepartmentID as DepartmentID, AccountID, FiscalYearID, SortOrder FROM ( SELECT PV.DepartmentID as DepartmentID, AccountID, FiscalYearID, SortOrder, Units, Dollars, NULL AS ChronologicalDifference FROM #PrecomputedValues PV WHERE PV.FiscalMonthID <> 0 UNION ALL SELECT CD.DepartmentID as DepartmentID, AccountID, FiscalYearID, SortOrder, 0 AS Units, 0 AS Dollars, ChronologicalDifference FROM #ChronologicalDifferences CD ) AS CombinedResults GROUP BY CombinedResults.DepartmentID, AccountID, FiscalYearID, SortOrder ) X ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #AllCombinations SELECT CombinedResults.DepartmentID, AccountID, FiscalYearID, SortOrder, SUM(CASE WHEN ChronologicalDifference IS NULL THEN Units ELSE 0 END) AS Units, SUM(CASE WHEN ChronologicalDifference IS NULL THEN Dollars ELSE 0 END) AS Dollars FROM ( SELECT PV.DepartmentID, AccountID, FiscalYearID, SortOrder, Units, Dollars, NULL AS ChronologicalDifference FROM #PrecomputedValues PV WHERE PV.FiscalMonthID <> 0 UNION ALL SELECT CD.DepartmentID, AccountID, FiscalYearID, SortOrder, 0 AS Units, 0 AS Dollars, ChronologicalDifference FROM #ChronologicalDifferences CD ) AS CombinedResults INNER JOIN #inputDepartments ID ON ID.DepartmentID = CombinedResults.DepartmentID WHERE ID.BatchID = @BatchID GROUP BY CombinedResults.DepartmentID, AccountID, FiscalYearID, SortOrder SET @BatchID = @BatchID + 1 END SET @sql = ' SELECT DepartmentID, AccountID, FiscalYearID, SortOrder, Dollars, Units FROM #AllCombinations ' SET @sqlWhere = 'WHERE (Dollars is not null or Units is not null)' END ELSE -- FiscalYearID != 0 BEGIN SET @sqlFromForBatches = ' ( SELECT p.DepartmentID as DepartmentID, AccountID, FiscalYearID, m.SortOrder as SortOrder, Units, Dollars FROM #FactGLStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE m.FiscalMonthID <> 0 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND TimeClassID = 1 AND FiscalYearID = ' + cast(@fiscalYearID AS NVARCHAR(4)) + ' UNION ALL SELECT p.DepartmentID as DepartmentID, AccountID, FiscalYearID, m.SortOrder as SortOrder, Units, Dollars FROM fw.FactGLSampled p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE m.FiscalMonthID <> 0 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND TimeClassID = 1 AND FiscalYearID = ' + cast(@fiscalYearID - 1 AS NVARCHAR(4)) + ' UNION ALL SELECT p.DepartmentID as DepartmentID, AccountID, FiscalYearID, m.SortOrder as SortOrder, 0 AS Units, 0 AS Dollars FROM #FactGLStaging p CROSS APPLY fw.DimFiscalMonth m WHERE m.FiscalMonthID <> 0 AND p.TimeClassID = 1 UNION ALL SELECT p.DepartmentID as DepartmentID, p.AccountID as AccountID, fy.FiscalYearID as FiscalYearID, m.SortOrder as SortOrder, 0 AS Units, 0 AS Dollars FROM fw.FactGLSampled p CROSS APPLY fw.DimFiscalMonth m CROSS JOIN ( SELECT FiscalYearID FROM fw.DimFiscalYear dm WHERE dm.FiscalYearID IN ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+') ) fy WHERE m.FiscalMonthID <> 0 AND p.TimeClassID = 1 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND p.FiscalYearID = ' + cast(@fiscalYearID - 1 AS NVARCHAR(4)) + ' ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #AllCombinations SELECT p.DepartmentID, AccountID, FiscalYearID, m.SortOrder, Units, Dollars FROM #FactGLStaging p INNER JOIN #inputDepartments ID on ID.DepartmentID = p.DepartmentID JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE m.FiscalMonthID <> 0 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND TimeClassID = 1 AND FiscalYearID = @fiscalYearID AND ID.BatchID = @BatchID UNION ALL SELECT p.DepartmentID, AccountID, FiscalYearID, m.SortOrder, Units, Dollars FROM fw.FactGLSampled p INNER JOIN #inputDepartments ID on ID.DepartmentID = p.DepartmentID JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID WHERE m.FiscalMonthID <> 0 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND TimeClassID = 1 AND FiscalYearID = @fiscalYearID - 1 AND ID.BatchID = @BatchID UNION ALL SELECT p.DepartmentID, AccountID, FiscalYearID, m.SortOrder, 0 AS Units, 0 AS Dollars FROM #FactGLStaging p INNER JOIN #inputDepartments ID on ID.DepartmentID = p.DepartmentID CROSS APPLY fw.DimFiscalMonth m WHERE m.FiscalMonthID <> 0 AND p.TimeClassID = 1 AND ID.BatchID = @BatchID UNION ALL SELECT p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Units, 0 AS Dollars FROM fw.FactGLSampled p INNER JOIN #inputDepartments ID on ID.DepartmentID = p.DepartmentID CROSS APPLY fw.DimFiscalMonth m CROSS JOIN ( SELECT FiscalYearID FROM fw.DimFiscalYear dm WHERE dm.FiscalYearID IN (@fiscalYearID - 1, @fiscalYearID) ) fy WHERE m.FiscalMonthID <> 0 AND p.TimeClassID = 1 AND ISNULL(p.IsSystemGenerated, 0) = 0 AND p.FiscalYearID = @fiscalYearID - 1 AND ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END SET @sql = ' SELECT DepartmentID, AccountID, FiscalYearID, SortOrder, SUM(Dollars) AS Dollars, SUM(Units) AS Units FROM #AllCombinations GROUP BY DepartmentID, AccountID, FiscalYearID, SortOrder ' SET @sqlWhere = 'WHERE (Dollars is not null or Units is not null) and FiscalYearID = ' + cast(@fiscalYearID AS NVARCHAR(4)) + ' ' END SET @sqlJoin = ' SELECT FullScope.DepartmentID as DepartmentID, FullScope.AccountID as AccountID, FullScope.FiscalYearID as FiscalYearID, m.FiscalMonthID as FiscalMonthID, ISNULL( (SUM(Dollars) OVER (PARTITION BY FullScope.DepartmentID, AccountID ORDER BY FiscalYearID * 12 + m.SortOrder ROWS BETWEEN ' + CAST(@numberOfMonths AS NVARCHAR(4)) + ' PRECEDING AND 1 PRECEDING)) / ' + CAST(@numberOfMonths AS NVARCHAR(4)) + ', 0 ) AS Dollars, ISNULL( (SUM(Units) OVER (PARTITION BY FullScope.DepartmentID, AccountID ORDER BY FiscalYearID * 12 + m.SortOrder ROWS BETWEEN ' + CAST(@numberOfMonths AS NVARCHAR(4)) + ' PRECEDING AND 1 PRECEDING)) / ' + CAST(@numberOfMonths AS NVARCHAR(4)) + ', 0 ) AS Units FROM ( ' + @sql + ' ) AS FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ' SET @sqlFromForBatches = ' ( ' + @sqlJoin + ' ) X ' SET @sql = ' INSERT INTO #FinalDataset ' + @sqlJoin + ' ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = FullScope.DepartmentID' + ' WHERE IP.BatchID = @BatchID ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END SET @sqlFromForBatches = ' ( SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, ISNULL(Dollars, 0.0) AS Dollars, ISNULL(Units, 0.0) AS Units FROM #FinalDataset ' + @sqlWhere + ' ) X ' SET @sql = ' INSERT INTO #temp (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Dollars, Units) SELECT FDS.DepartmentID, AccountID, FiscalYearID, FiscalMonthID, ISNULL(Dollars, 0.0) AS Dollars, ISNULL(Units, 0.0) AS Units FROM #FinalDataset FDS ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = FDS.DepartmentID' + ' ' + @sqlWhere + ' and IP.BatchID = @BatchID ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlFromForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END END ELSE BEGIN --Budget SET @sqlWhere = 'TimeClassID = 2 and (FiscalYearID = ' + cast(@fiscalYearID AS NVARCHAR(4)) + ' or ' + cast(@fiscalYearID AS NVARCHAR(4)) + ' = 0) ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = '#FactGLStaging X', @whereClause = @sqlWhere, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #temp SELECT GL.DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Dollars, Units FROM #FactGLStaging GL INNER JOIN #inputDepartments IP ON IP.DepartmentID = GL.DepartmentID WHERE TimeClassID = 2 and (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) and IP.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END SET @sqlWhere = '(FiscalYearID =' + cast(@fiscalYearID AS NVARCHAR(4)) + ' or ' + cast(@fiscalYearID AS NVARCHAR(4)) + ' = 0) and not (Dollars = 0 and Units = 0)' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = '#temp X', @whereClause = @sqlWhere, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #FactGLStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Dollars, Units) SELECT source.DepartmentID, source.AccountID, source.FiscalYearID, source.FiscalMonthID, 20 as TimeClassID, source.Dollars, source.Units FROM #temp source INNER JOIN #inputDepartments ID on ID.DepartmentID = source.DepartmentID WHERE (FiscalYearID = @fiscalYearID or @fiscalYearID = 0) and not (Dollars = 0 and Units = 0) AND ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END IF OBJECT_ID('tempdb..#FiscalYearMonth') IS NOT NULL DROP TABLE #FiscalYearMonth IF OBJECT_ID('tempdb..#AllCombinations') IS NOT NULL DROP TABLE #AllCombinations IF OBJECT_ID('tempdb..#FinalDataset') IS NOT NULL DROP TABLE #FinalDataset DROP TABLE #temp GO --------------------------------------------- -- fw.procFactMonthlyMergeDuplicates /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-02-20 gforeman D-05545 Created *************************************************************/ CREATE PROC [fw].[procFactMonthlyMergeDuplicates] @factTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0 with recompile as set nocount on declare @sql nvarchar(max) --merge duplicate rows set @sql = ' while (exists (select top 1 1 from ' + @factTableName + ' where IsDeleted = 1)) begin delete top(10000) data from ' + @factTableName + ' data where data.IsDeleted = 1 end; update data set data.IsDeleted = 1 from ' + @factTableName + ' data where ' + (case when @fiscalYearID > 0 then 'data.FiscalYearID between ' + cast((@fiscalYearID-1) as nvarchar(4)) + ' and ' + cast(@fiscalYearID as nvarchar(4)) + ' and ' else '' end) + (case when @timeClassID > 0 then 'data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) + ' and ' else '' end) + ' exists(select 1 from (select DepartmentID, ' + @keyNameCSV + ', FiscalYearID, FiscalMonthID, TimeClassID from ' + @factTableName + ' where (1 = 1)' + (case when @fiscalYearID > 0 then ' and FiscalYearID between ' + cast((@fiscalYearID-1) as nvarchar(4)) + ' and ' + cast(@fiscalYearID as nvarchar(4)) else '' end) + (case when @timeClassID > 0 then ' and TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' group by DepartmentID, ' + @keyNameCSV + ', FiscalYearID, FiscalMonthID, TimeClassID having count(*) > 1) dr where dr.DepartmentID = data.DepartmentID and ' + (select dbo.straggr('dr.' + csv.val + ' = data.' + csv.val, ' and ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and dr.FiscalYearID = data.FiscalYearID and dr.FiscalMonthID = data.FiscalMonthID and dr.TimeClassID = data.TimeClassID); insert into ' + @factTableName + ' (DepartmentID, ' + @keyNameCSV + ', FiscalYearID, FiscalMonthID, TimeClassID, ' + @measureNameCSV + ') select DepartmentID, ' + @keyNameCSV + ', FiscalYearID, FiscalMonthID, TimeClassID, sum(' + replace(@measureNameCSV, ',', '), sum(') + ') from ' + @factTableName + ' where IsDeleted = 1 group by DepartmentID, ' + @keyNameCSV + ', FiscalYearID, FiscalMonthID, TimeClassID; while (exists (select top 1 1 from ' + @factTableName + ' where IsDeleted = 1)) begin delete top(10000) data from ' + @factTableName + ' data where data.IsDeleted = 1 end; ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end GO --------------------------------------------- -- fw.procFactMonthlyYTDPriorYearUpdate /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 ** 2 2018-07-17 KF B-20261 MR - Provider flexing - flexing *************************************************************/ CREATE PROC [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0 with recompile as set nocount on declare @sql nvarchar(max) --insert missing records set @sql = ' declare @minYear int = ' + cast(@fiscalYearID as nvarchar(4)) + ' declare @maxYear int = ' + cast(@fiscalYearID as nvarchar(4)) + ' if (@minYear = 0 or @maxYear = 0) begin select @minYear = min(data.FiscalYearID) from ' + @factTableName + ' data ' + (case when @timeClassID > 0 then 'where data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' select @maxYear = max(data.FiscalYearID) from ' + @factTableName + ' data ' + (case when @timeClassID > 0 then 'where data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' end --records for ytd insert into ' + @factTableName + ' ( ' + @keyNameCSV + ', DepartmentID, FiscalYearID, FiscalMonthID, TimeClassID, IsSystemGenerated ) SELECT DISTINCT data.' + replace(@keyNameCSV, ',', ',data.') + ',data.DepartmentID,data.FiscalYearID,m.FiscalMonthID,data.TimeClassID,1 FROM ' + @factTableName + ' data inner join fw.DimFiscalMonth mm on mm.FiscalMonthID = data.FiscalMonthID inner join fw.DimFiscalMonth m on m.SortOrder > mm.SortOrder where data.FiscalYearID between @minYear and @maxYear ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' and not exists ( --no existing reporting record for this tuple-month select 1 from ' + @factTableName + ' datax where (1 = 1) ' + (select dbo.straggr('AND datax.' + csv.val + ' = data.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND datax.DepartmentID = data.DepartmentID AND datax.FiscalYearID = data.FiscalYearID AND datax.FiscalMonthID = m.FiscalMonthID AND datax.TimeClassID = data.TimeClassID ) option (recompile) --records for prior year, prior ytd DECLARE @currentYear INT, @maxYearForPriorYear INT SELECT @currentYear = Setting FROM dbo.DBSetting WHERE Name = ''Current_GL_YearID'' SELECT @maxYearForPriorYear = CASE WHEN @maxYear > @currentYear THEN @currentYear ELSE @maxYear END insert into ' + @factTableName + ' ( ' + @keyNameCSV + ', DepartmentID, FiscalYearID, FiscalMonthID, TimeClassID, IsSystemGenerated ) SELECT DISTINCT data.' + replace(@keyNameCSV, ',', ',data.') + ',data.DepartmentID,data.FiscalYearID+1,m.FiscalMonthID,data.TimeClassID,1 FROM ' + @factTableName + ' data inner join fw.DimFiscalMonth mm on mm.FiscalMonthID = data.FiscalMonthID inner join fw.DimFiscalMonth m on m.SortOrder >= mm.SortOrder where data.FiscalYearID between @minYear-1 and @maxYearForPriorYear ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' and not exists ( --no existing reporting record for this tuple-month select 1 from ' + @factTableName + ' datax where (1 = 1) ' + (select dbo.straggr('AND datax.' + csv.val + ' = data.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND datax.DepartmentID = data.DepartmentID AND datax.FiscalYearID-1 = data.FiscalYearID AND datax.FiscalMonthID = m.FiscalMonthID AND datax.TimeClassID = data.TimeClassID ) option (recompile) ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end --populate YTD and prior year measures set @sql = ' select data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.FiscalMonthID, data.TimeClassID, ' + (select dbo.straggr('SUM(data.' + csv.val + ') OVER (PARTITION BY data.DepartmentID,' + @keyNameCSV + ',TimeClassID,FiscalYearID ORDER BY fm.SortOrder) AS ' + csv.val + 'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + @measureNameCSV + ' into #calculatedMeasures from ' + @factTableName + ' data inner join fw.DimFiscalMonth fm on fm.FiscalMonthID=data.FiscalMonthID where (1 = 1) ' + (case when @fiscalYearID > 0 then 'and data.FiscalYearID between ' + cast(@fiscalYearID as nvarchar(4)) + '-1 and ' + cast(@fiscalYearID as nvarchar(4)) else '' end) + ' ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' option (recompile) CREATE UNIQUE CLUSTERED INDEX IX_calculatedMeasures ON #calculatedMeasures ( ' + @keyNameCSV + ', DepartmentID, FiscalYearID, FiscalMonthID, TimeClassID ) WITH ( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] update M set ' + (select dbo.straggr('m.' + csv.val + 'YTD = cm.' + csv.val + 'YTD', ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' from ' + @factTableName + ' m INNER JOIN #calculatedMeasures cm ON M.DepartmentID = cm.DepartmentID ' + (select dbo.straggr('AND M.' + csv.val + ' = cm.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND M.FiscalMonthID = cm.FiscalMonthID AND M.TimeClassID = cm.TimeClassID and m.FiscalYearID = cm.FiscalYearID where ' + (select dbo.straggr('m.' + csv.val + 'YTD <> cm.' + csv.val + 'YTD', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' option (recompile) update M set ' + (select dbo.straggr('m.' + csv.val + 'PriorYear = cm_py.' + csv.val, ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ', ' + (select dbo.straggr('m.' + csv.val + 'PriorYTD = cm_py.' + csv.val + 'YTD', ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' from ' + @factTableName + ' m INNER JOIN #calculatedMeasures cm_py ON M.DepartmentID = cm_py.DepartmentID ' + (select dbo.straggr('AND M.' + csv.val + ' = cm_py.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND M.FiscalMonthID = cm_py.FiscalMonthID AND M.TimeClassID = cm_py.TimeClassID and m.FiscalYearID = cm_py.FiscalYearID+1 where ' + (select dbo.straggr('m.' + csv.val + 'PriorYear <> cm_py.' + csv.val, ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' or ' + (select dbo.straggr('m.' + csv.val + 'PriorYTD <> cm_py.' + csv.val + 'YTD', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' option (recompile) drop table #calculatedMeasures ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end --delete zero records, possible only if YTD aggregates to zero due to negative values set @sql = ' delete data from ' + @factTableName + ' data where ' + (select dbo.straggr('data.' + csv.val + ' = 0 and data.' + csv.val + 'YTD = 0 and data.' + csv.val + 'PriorYear = 0 and data.' + csv.val + 'PriorYTD = 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end GO --------------------------------------------- -- fw.procFactMonthlyYTDPriorYearUpdateStaging /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 2 2017-07-13 IP TK-45395 fixed isSystemGenerated for generated records ** 3 2018-07-25 KF B-20342 MR - Update provider sampling to be in the appropriate format ** 4 2018-08-22 KF D-07561 MR Sampling: Provider FTEsYTD values are calculated incorrectly ** 5 2024-06-04 ishah JAZZ-61244 MR - Add batches to procFactMonthlyYTDPriorYearUpdateStaging *************************************************************/ CREATE PROCEDURE [fw].[procFactMonthlyYTDPriorYearUpdateStaging] @factTableName nvarchar(100), @stagingTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0 AS declare @sql nvarchar(max), @sqlJoin nvarchar(max), @sqlClauseForBatches nvarchar(max), @sqlWhere nvarchar(max), @sqlGroupBy nvarchar(max), @sqlParam nvarchar(max), @batchSize INT, @BatchID INT, @MaxBatchID INT declare @MaxYearForCalculation int= (select max(FiscalYearID) from int.FactStaffing), @maxFiscalYear int set @sql = N'SELECT @Output = max(FiscalYearID) FROM '+@stagingTableName+'' exec sp_executesql @sql, N'@Output INT OUTPUT', @Output=@maxFiscalYear OUTPUT; --insert missing records set @sql = ' alter table '+@stagingTableName+' add SortOrder tinyint ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end declare @isFTEsColumnPresent BIT IF EXISTS (SELECT val from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') WHERE val = 'FTEs') SET @isFTEsColumnPresent = 1 ELSE SET @isFTEsColumnPresent = 0 EXEC mr.procGetIntBatchSize @DefaultBatchSize = 30000000, @ResultBatchSize = @batchSize OUTPUT SET @sqlClauseForBatches = @stagingTableName + ' X' set @sql = ' UPDATE tp SET tp.SortOrder = fm.SortOrder FROM '+@stagingTableName+' tp INNER JOIN fw.DimFiscalMonth fm ON tp.FiscalMonthID = fm.FiscalMonthID INNER JOIN #inputDepartments IP ON IP.DepartmentID = tp.DepartmentID WHERE IP.BatchID = @BatchID ' IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END IF OBJECT_ID('tempdb..#dimMonth') IS NOT NULL DROP TABLE #dimMonth CREATE TABLE #dimMonth (FiscalMonthID tinyInt INDEX IX1 CLUSTERED, SortOrder tinyint) insert into #dimMonth (FiscalMonthID, SortOrder) select FiscalMonthID, SortOrder from fw.DimFiscalMonth where FiscalMonthID <> 0 --- forming #MinSoTemp table and split by batches IF OBJECT_ID('tempdb..#MinSoTemp') IS NOT NULL DROP TABLE #MinSoTemp CREATE TABLE #MinSoTemp (DepartmentID int, FiscalYearID int, TimeClassID int, MinSortOrder int) set @sql = ' alter table #MinSoTemp add '+ replace(@keyNameCSV, ',', ' INT, ') +' int ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end set @sqlClauseForBatches = ' ( '+(select case when @fiscalYearID > 0 THEN ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(mm.SortOrder) as MinSortOrder FROM ' + @factTableName + ' X INNER JOIN #dimMonth mm ON mm.FiscalMonthID = x.FiscalMonthID WHERE FiscalYearID ='+cast(@fiscalYearID-1 as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID UNION SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.SortOrder) as MinSortOrder FROM '+@stagingTableName+' X WHERE FiscalYearID ='+cast(@fiscalYearID as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' else ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.SortOrder) as MinSortOrder FROM '+@stagingTableName+' X group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' end )+' ) X ' SET @sql = ' INSERT INTO #MinSoTemp ('+ replace(@keyNameCSV, ',', ',') +', DepartmentID, FiscalYearID, TimeClassID, MinSortOrder) '+(select case when @fiscalYearID > 0 THEN ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(mm.SortOrder) as MinSortOrder FROM ' + @factTableName + ' X INNER JOIN #dimMonth mm ON mm.FiscalMonthID = x.FiscalMonthID ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = X.DepartmentID' + ' WHERE IP.BatchID = @BatchID AND FiscalYearID ='+cast(@fiscalYearID-1 as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID UNION SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.SortOrder) as MinSortOrder FROM '+@stagingTableName+' X ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = X.DepartmentID' + ' WHERE IP.BatchID = @BatchID AND FiscalYearID ='+cast(@fiscalYearID as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' else ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.SortOrder) as MinSortOrder FROM '+@stagingTableName+' X ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = X.DepartmentID' + ' WHERE IP.BatchID = @BatchID group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' end )+' ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END --- forming #MinPresentTemp table and split by batches IF OBJECT_ID('tempdb..#MinPresentTemp') IS NOT NULL DROP TABLE #MinPresentTemp CREATE TABLE #MinPresentTemp (DepartmentID int, FiscalYearID int, TimeClassID int, MinSortOrder int) set @sql = ' alter table #MinPresentTemp add '+ replace(@keyNameCSV, ',', ' INT, ') +' int ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end set @sqlJoin = ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.MinSortOrder) as MinSortOrder FROM (SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, MinSortOrder FROM #MinSoTemp UNION ALL SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID+1 as FiscalYearID, TimeClassID, MinSortOrder FROM #MinSoTemp ) X ' set @sqlWhere = 'where FiscalYearID <= ' + cast(@maxFiscalYear as nvarchar(max)) set @sqlGroupBy = ' GROUP BY '+replace(@keyNameCSV, ',', ',')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' SET @sqlClauseForBatches = ' ( ' + @sqlJoin + ' ' + @sqlWhere + ' ' + @sqlGroupBy + ' ) X ' SET @sql = ' INSERT INTO #MinPresentTemp ('+ replace(@keyNameCSV, ',', ',') +', DepartmentID, FiscalYearID, TimeClassID, MinSortOrder) ' + @sqlJoin + ' ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = X.DepartmentID' + ' ' + @sqlWhere + ' and IP.BatchID = @BatchID ' + @sqlGroupBy + ' ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END --- forming #MissingListTemp table and split by batches IF OBJECT_ID('tempdb..#MissingListTemp') IS NOT NULL DROP TABLE #MissingListTemp CREATE TABLE #MissingListTemp (DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, SortOrder int) set @sql = ' alter table #MissingListTemp add '+ replace(@keyNameCSV, ',', ' INT, ') +' int ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end set @sqlJoin = ' SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, mm.FiscalMonthID, TimeClassID, unpvt.SortOrder FROM ( SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], MinSortOrder FROM ( SELECT isnull(TP.DepartmentID,MP.DepartmentID) as DepartmentID, ' + (select dbo.straggr('isnull (TP.' + csv.val + ',MP.' + csv.val +') as ' + csv.val+',', ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' isnull(TP.FiscalYearID,MP.FiscalYearID) as FiscalYearID, TP.FiscalMonthID as FiscalMonthID, isnull(TP.TimeClassID,MP.TimeClassID) as TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 0 as isDeleted, 1 as isSystemGenerated, MP.MinSortOrder, TP.SortOrder FROM '+@stagingTableName+' TP FULL join #MinPresentTemp MP ON TP.DepartmentID = mp.DepartmentID ' + (select dbo.straggr('AND TP.' + csv.val + ' = MP.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and TP.TimeClassID = mp.TimeClassID and TP.FiscalYearID = mp.FiscalYearID where (TP.SortOrder >= mp.MinSortOrder) or TP.SortOrder is null) ss /* there can be a subquery here*/ PIVOT /* formation of the pivot table*/ (count(FiscalMonthID) /*is an aggregate function that forms the contents of a pivot table*/ FOR sortorder IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) Pvt /*alias for the pivot table*/ ) X UNPIVOT (isPresent /*the header of the column that will contain the values from the columns of the source table listed below*/ FOR SortOrder IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) Unpvt INNER JOIN #dimMonth mm ON mm.SortOrder = Unpvt.SortOrder ' set @sqlWhere = 'WHERE isPresent = 0 and Unpvt.SortOrder >= MinSortOrder' SET @sqlClauseForBatches = ' ( ' + @sqlJoin + ' ' + @sqlWhere + ' ) X ' SET @sql = ' INSERT INTO #MissingListTemp ('+ replace(@keyNameCSV, ',', ',') +', DepartmentID, FiscalYearID, FiscalMonthID, TimeClassID, SortOrder) SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, mm.FiscalMonthID, TimeClassID, unpvt.SortOrder FROM ( SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], MinSortOrder FROM ( SELECT isnull(TP.DepartmentID,MP.DepartmentID) as DepartmentID, ' + (select dbo.straggr('isnull (TP.' + csv.val + ',MP.' + csv.val +') as ' + csv.val+',', ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' isnull(TP.FiscalYearID,MP.FiscalYearID) as FiscalYearID, TP.FiscalMonthID as FiscalMonthID, isnull(TP.TimeClassID,MP.TimeClassID) as TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 0 as isDeleted, 1 as isSystemGenerated, MP.MinSortOrder, TP.SortOrder FROM '+@stagingTableName+' TP FULL join #MinPresentTemp MP ON TP.DepartmentID = mp.DepartmentID ' + (select dbo.straggr('AND TP.' + csv.val + ' = MP.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and TP.TimeClassID = mp.TimeClassID and TP.FiscalYearID = mp.FiscalYearID INNER JOIN #inputDepartments IP ON IP.DepartmentID = MP.DepartmentID where IP.BatchID = @BatchID and (TP.SortOrder >= mp.MinSortOrder) or TP.SortOrder is null) ss /* there can be a subquery here*/ PIVOT /* formation of the pivot table*/ (count(FiscalMonthID) /*is an aggregate function that forms the contents of a pivot table*/ FOR sortorder IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) Pvt /*alias for the pivot table*/ ) X UNPIVOT (isPresent /*the header of the column that will contain the values from the columns of the source table listed below*/ FOR SortOrder IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) Unpvt INNER JOIN #dimMonth mm ON mm.SortOrder = Unpvt.SortOrder ' + @sqlWhere + ' ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END --- forming #calculatedMeasuresTemp table and split by batches IF OBJECT_ID('tempdb..#calculatedMeasuresTemp') IS NOT NULL DROP TABLE #calculatedMeasuresTemp CREATE TABLE #calculatedMeasuresTemp (DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, isSystemGenerated int) set @sql = ' alter table #calculatedMeasuresTemp add '+ replace(@keyNameCSV, ',', ' INT, ') +' int ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end set @sql = ' alter table #calculatedMeasuresTemp add ' + replace(@measureNameCSV, ',', 'YTD decimal (25, 6),') + 'YTD decimal (25, 6)' + ' ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end set @sql = ' alter table #calculatedMeasuresTemp add ' + replace(@measureNameCSV, ',', ' decimal (25, 6),') + ' decimal (25, 6)' + ' ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end set @sqlJoin = ' select uoag.DepartmentID, uoag.' + replace(@keyNameCSV, ',', ', uoag.') + ', uoag.FiscalYearID, uoag.FiscalMonthID, uoag.TimeClassID, ' + (select dbo.straggr('SUM(uoag.' + csv.val + ') OVER (PARTITION BY uoag.DepartmentID,' + @keyNameCSV + ',TimeClassID,FiscalYearID ORDER BY fm.SortOrder) AS ' + csv.val + 'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + @measureNameCSV + ', uoag.isSystemGenerated from ( SELECT ML.DepartmentID, ML.' + replace(@keyNameCSV, ',', ', ML.') + ', ML.FiscalYearID, ML.FiscalMonthID, ML.TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 1 as isSystemGenerated FROM #MissingListTemp ML ' + case when @fiscalYearID > 0 then ' where ML.FiscalYearID = ' + cast(@fiscalYearID as nvarchar(4)) else '' end +' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.FiscalMonthID, data.TimeClassID, ' + @measureNameCSV + ', data.isSystemGenerated from '+@stagingTableName+' data where (1 = 1) ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' ' + case when @fiscalYearID > 0 then ' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.FiscalMonthID, data.TimeClassID, ' + @measureNameCSV + ', 1 as isSystemGenerated from ' + @factTableName + ' data where data.FiscalYearID = ' + cast(@fiscalYearID-1 as nvarchar(4)) + case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end else '' end + ' ) uoag -- union ald and generated inner join #dimMonth fm on fm.FiscalMonthID=uoag.FiscalMonthID ' SET @sqlClauseForBatches = ' ( ' + @sqlJoin + ' ) X ' SET @sql = ' INSERT INTO #calculatedMeasuresTemp (DepartmentID, '+ replace(@keyNameCSV, ',', ',') +', FiscalYearID, FiscalMonthID, TimeClassID, ' + replace(@measureNameCSV, ',', 'YTD,') + 'YTD' + ', ' + replace(@measureNameCSV, ',', ',') + ', isSystemGenerated) ' + @sqlJoin + ' ' + 'INNER JOIN #inputDepartments IP ON IP.DepartmentID = uoag.DepartmentID' + ' WHERE IP.BatchID = @BatchID ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END -- insert into stagingTableName and spolit by bathes set @sqlJoin = ' SELECT cm.DepartmentID, cm.' + replace(@keyNameCSV, ',', ',cm.') + ', cm.FiscalYearID, cm.FiscalMonthID, cm.TimeClassID, ' + (select dbo.straggr('isnull(cm.' + csv.val+',0) as '+ csv.val+',', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' ' + (select dbo.straggr(case when csv.val = 'FTEs' then 'cast(0 as decimal(19, 4))' else 'isnull(cm.' + csv.val+'YTD,0) ' end + 'as '+csv.val+'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr('isnull(cm_py.' + csv.val + ',0) as '+ csv.val+'PriorYear,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr(case when csv.val = 'FTEs' then 'cast(0 as decimal(19, 4))' else 'isnull(cm_py.' + csv.val + 'YTD,0) ' end + 'as ' + csv.val + 'PriorYTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' isnull(cm.isSystemGenerated,0) as isSystemGenerated from #calculatedMeasuresTemp cm LEFT JOIN #calculatedMeasuresTemp cm_py ON cm.DepartmentID = cm_py.DepartmentID ' + (select dbo.straggr('AND cm.' + csv.val + ' = cm_py.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND cm.FiscalMonthID = cm_py.FiscalMonthID AND cm.TimeClassID = cm_py.TimeClassID and cm.FiscalYearID = cm_py.FiscalYearID+1 ' + case when @fiscalYearID > 0 then ' WHERE cm.FiscalYearId = '+cast(@fiscalYearID as varchar(4)) else '' end+' ' set @sqlWhere = ' WHERE ( ' + (select dbo.straggr(csv.val+'<>0 ', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' or ' + (select dbo.straggr(csv.val+'YTD<>0', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' or ' + (select dbo.straggr(csv.val+'PriorYear<>0', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' or ' + (select dbo.straggr(csv.val+'PriorYTD<>0', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ) ' SET @sqlClauseForBatches = ' ( SELECT PreSelect.*' + case when @isFTEsColumnPresent = 1 then '' else ', FTEs=cast(0 as decimal(19, 4)), FTEsYTD=cast(0 as decimal(19, 4)), FTEsPriorYear=cast(0 as decimal(19, 4)), FTEsPriorYTD=cast(0 as decimal(19, 4))'end + ' FROM ( ' + @sqlJoin + ' ) PreSelect ' + @sqlWhere + ' ) X ' set @sql = ' CREATE TABLE fw.'+replace(@stagingTableName,'#','')+'WithCalcs ( DepartmentID int, '+ replace(@keyNameCSV, ',', ' INT, ') +' int, FiscalYearID int, FiscalMonthID int, TimeClassID int, '+ replace(@measureNameCSV, ',', ' decimal(25,6), ') +' decimal(25,6), ' + (select dbo.straggr(case when csv.val = 'FTEs' then csv.val + 'YTD decimal(19,4),' else csv.val + 'YTD decimal(25,6),' end, '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' '+ replace(@measureNameCSV, ',', 'PriorYear decimal(25,6), ') +'PriorYear decimal(25,6), ' + (select dbo.straggr(case when csv.val = 'FTEs' then csv.val + 'PriorYTD decimal(19,4),' else csv.val + 'PriorYTD decimal(25,6),' end, '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' isSystemGenerated int' + case when @isFTEsColumnPresent = 1 then '' else ', FTEs decimal(19,4), FTEsYTD decimal(19,4), FTEsPriorYear decimal(19,4), FTEsPriorYTD decimal(19,4)'end + ' ) ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end SET @sql = ' INSERT INTO fw.'+replace(@stagingTableName,'#','')+'WithCalcs SELECT PreSelect.*' + case when @isFTEsColumnPresent = 1 then '' else ', FTEs=cast(0 as decimal(19, 4)), FTEsYTD=cast(0 as decimal(19, 4)), FTEsPriorYear=cast(0 as decimal(19, 4)), FTEsPriorYTD=cast(0 as decimal(19, 4))'end+ ' FROM ( ' + @sqlJoin + ' ) PreSelect INNER JOIN #inputDepartments IP ON IP.DepartmentID = PreSelect.DepartmentID ' + @sqlWhere + ' and IP.BatchID = @BatchID ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias ='X', @fromClause = @sqlClauseForBatches, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @SqlParam = '@BatchID INT' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN EXEC sp_executesql @sql, @SqlParam, @BatchID = @BatchID; SET @BatchID = @BatchID + 1 END set @sql = 'drop table '+@stagingTableName+' ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end IF OBJECT_ID('tempdb..#dimMonth') IS NOT NULL DROP TABLE #dimMonth IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments IF OBJECT_ID('tempdb..#MinSoTemp') IS NOT NULL DROP TABLE #MinSoTemp IF OBJECT_ID('tempdb..#MinPresentTemp') IS NOT NULL DROP TABLE #MinPresentTemp IF OBJECT_ID('tempdb..#MissingListTemp') IS NOT NULL DROP TABLE #MissingListTemp IF OBJECT_ID('tempdb..#calculatedMeasuresTemp') IS NOT NULL DROP TABLE #calculatedMeasuresTemp GO --------------------------------------------- -- fw.procFactPayPeriodMergeDuplicates /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-10-56 gforeman D-05545 Created *************************************************************/ create proc [fw].[procFactPayPeriodMergeDuplicates] @factTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0, @departmentIDs nvarchar(max) = null with recompile as set nocount on declare @sql nvarchar(max) --merge duplicate rows set @sql = ' while (exists (select top 1 1 from ' + @factTableName + ' where IsDeleted = 1)) begin delete top(10000) data from ' + @factTableName + ' data where data.IsDeleted = 1 end; update data set data.IsDeleted = 1 from ' + @factTableName + ' data inner join fw.DimPayPeriod pp on pp.PayPeriodID = data.PayPeriodID where ' + (case when @fiscalYearID > 0 then 'pp.FiscalYearIDSecond between ' + cast((@fiscalYearID-1) as nvarchar(4)) + ' and ' + cast(@fiscalYearID as nvarchar(4)) + ' and ' else '' end) + (case when @timeClassID > 0 then 'data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) + ' and ' else '' end) + ' exists(select 1 from (select fd.DepartmentID, fd.' + replace(@keyNameCSV, ',', ', fd.') + ', fd.PayPeriodID, fd.TimeClassID from ' + @factTableName + ' fd inner join fw.DimPayPeriod p on p.PayPeriodID = fd.PayPeriodID where (1 = 1)' + (case when @fiscalYearID > 0 then ' and p.FiscalYearIDSecond between ' + cast((@fiscalYearID-1) as nvarchar(4)) + ' and ' + cast(@fiscalYearID as nvarchar(4)) else '' end) + (case when @timeClassID > 0 then ' and fd.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' group by fd.DepartmentID, fd.' + replace(@keyNameCSV, ',', ', fd.') + ', fd.PayPeriodID, fd.TimeClassID having count(*) > 1) dr where dr.DepartmentID = data.DepartmentID and ' + (select dbo.straggr('dr.' + csv.val + ' = data.' + csv.val, ' and ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and dr.PayPeriodID = data.PayPeriodID and dr.TimeClassID = data.TimeClassID); insert into ' + @factTableName + ' (DepartmentID, ' + @keyNameCSV + ', PayPeriodID, TimeClassID, ' + @measureNameCSV + ') select DepartmentID, ' + @keyNameCSV + ', PayPeriodID, TimeClassID, sum(' + replace(@measureNameCSV, ',', '), sum(') + ') from ' + @factTableName + ' where IsDeleted = 1 group by DepartmentID, ' + @keyNameCSV + ', PayPeriodID, TimeClassID; while (exists (select top 1 1 from ' + @factTableName + ' where IsDeleted = 1)) begin delete top(10000) data from ' + @factTableName + ' data where data.IsDeleted = 1 end; ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end GO --------------------------------------------- -- fw.procFactPayPeriodYTDPriorYearUpdate /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-09-09 gforeman B-02162 Added merge rows step ** 2 2014-09-09 gforeman B-02162 Run prior year when year specified ** 3 2014-09-18 gforeman B-02682 Additional speedups to insert missing step ** 4 2015-09-14 mschmitz B-08303 Added PayCycleID to partition and indexing ** 5 2015-10-13 nleroy D-03496 FTEsYTD fix ** 6 2015-10-20 mschmitz B-08303 Fixed bug found related to B-08303 change ** 7 2016-03-23 mholov D-04105 Added rolling delete on fact Table ** 8 2016-07-28 akozlov D-04262 Added IsSystemGenerated flag setting for inserted records ** 9 2016-09-48 gforeman D-04759 Optimize YTD calc ** 10 2016-09-26 akozlov D-04899 Reverted optimization ** 11 2016-09-26 akozlov D-04899 Fixed performance bug ** 12 2016-10-10 gforeman D-05000 Add IsSystemGenerated reset ** 13 2016-12-27 akozlov D-05183 Removed IsSystemGenerated reset ** 14 2017-01-23 gforeman D-05419 Misc perf improvements, add department parameter ** 15 2017-02-17 gforeman B-14308 Temp table tuning ** 16 2017-02-20 gforeman D-05545 Move duplicate record handling from YTD into sampling ** 17 2018-11-07 KF D-06432 PR - YTD Labor Expense PR Metrics Do Not Match Payroll ** 18 2022-03-01 KF JAZZ-13874 Stored procedure fw.procFactPayPeriodYTDPriorYearUpdate is timing out ** 19 2024-01-29 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values *************************************************************/ CREATE proc [fw].[procFactPayPeriodYTDPriorYearUpdate] @factTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0, @departmentIDs nvarchar(max) = null with recompile as set nocount on declare @sql nvarchar(max) --insert missing records set @sql = ' declare @minYear int = ' + cast(@fiscalYearID as nvarchar(4)) + ' declare @maxYear int = ' + cast(@fiscalYearID as nvarchar(4)) + ' if (@minYear <= 0 or @maxYear <= 0) begin select @minYear = min(pp.FiscalYearIDSecond) from ' + @factTableName + ' data INNER JOIN fw.DimPayPeriod pp ON data.PayPeriodID = pp.PayPeriodID ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + (case when @departmentIDs is not null then ' and data.DepartmentID in(select val from ConvertCSValuesToTable(''' + @departmentIDs + ''', '',''))' else '' end) + ' select @maxYear = max(pp.FiscalYearIDSecond) from ' + @factTableName + ' data INNER JOIN fw.DimPayPeriod pp ON data.PayPeriodID = pp.PayPeriodID ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + (case when @departmentIDs is not null then ' and data.DepartmentID in(select val from ConvertCSValuesToTable(''' + @departmentIDs + ''', '',''))' else '' end) + ' end --records for ytd insert into ' + @factTableName + ' ( DepartmentID, ' + @keyNameCSV + ', PayPeriodID, TimeClassID, IsSystemGenerated ) SELECT DISTINCT data.DepartmentID,data.' + replace(@keyNameCSV, ',', ',data.') + ',p.PayPeriodID,data.TimeClassID,1 FROM ' + @factTableName + ' data ' + (case when @departmentIDs is not null then 'inner join (select val as DepartmentID from ConvertCSValuesToTable(''' + @departmentIDs + ''', '','')) dept on dept.DepartmentID = data.DepartmentID' else '' end) + ' inner join fw.DimPayPeriod pp ON data.PayPeriodID = pp.PayPeriodID inner join fw.DimPayCycle pc on pc.PayCycleID = pp.PayCycleID inner join pi.viewNextAfterCurrentPayPeriod npp on npp.PayCycleID = pc.PayCycleID inner join fw.DimPayPeriod p on p.FiscalYearIDSecond = pp.FiscalYearIDSecond and p.PayCycleID = pp.PayCycleID and p.PeriodNumber > pp.PeriodNumber and p.FiscalYearIDSecond <= npp.FiscalYearIDSecond left join dbo.ColumnStoreIndex csi ON 1=0 -- tricky fix for JAZZ-13874 where pp.FiscalYearIDSecond between @minYear and @maxYear ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' and not exists ( --existing record for this tuple-payperiod select 1 from ' + @factTableName + ' datax where datax.DepartmentID = data.DepartmentID ' + (select dbo.straggr('AND datax.' + csv.val + ' = data.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND datax.PayPeriodID = p.PayPeriodID AND datax.TimeClassID = data.TimeClassID ) option (recompile) --records for prior year, prior ytd insert into ' + @factTableName + ' ( DepartmentID, ' + @keyNameCSV + ', PayPeriodID, TimeClassID, IsSystemGenerated ) SELECT DISTINCT data.DepartmentID,data.' + replace(@keyNameCSV, ',', ',data.') + ',p.PayPeriodID,data.TimeClassID,1 FROM ' + @factTableName + ' data ' + (case when @departmentIDs is not null then 'inner join (select val as DepartmentID from ConvertCSValuesToTable(''' + @departmentIDs + ''', '','')) dept on dept.DepartmentID = data.DepartmentID' else '' end) + ' inner join fw.DimPayPeriod pp ON data.PayPeriodID = pp.PayPeriodID inner join fw.DimPayCycle pc on pc.PayCycleID = pp.PayCycleID inner join pi.viewNextAfterCurrentPayPeriod npp on npp.PayCycleID = pc.PayCycleID inner join fw.DimPayPeriod p on p.FiscalYearIDSecond = pp.FiscalYearIDSecond+1 and p.PayCycleID = pp.PayCycleID and p.PeriodNumber >= pp.PeriodNumber and p.FiscalYearIDSecond <= npp.FiscalYearIDSecond left join dbo.ColumnStoreIndex csi ON 1=0 -- tricky fix for JAZZ-13874 where pp.FiscalYearIDSecond between @minYear-1 and @maxYear-1 ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' and not exists ( --existing record for this tuple-payperiod select 1 from ' + @factTableName + ' datax where datax.DepartmentID = data.DepartmentID ' + (select dbo.straggr('AND datax.' + csv.val + ' = data.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND datax.PayPeriodID = p.PayPeriodID AND datax.TimeClassID = data.TimeClassID ) option (recompile) ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end --populate YTD and prior year measures set @sql = ' select data.DepartmentID, data.' + replace(@keyNameCSV, ',', ',data.') + ', pp.PayCycleID, pp.FiscalYearIDSecond, pp.PeriodNumber, data.TimeClassID, ' + (select dbo.straggr('SUM(data.' + csv.val + ') OVER (PARTITION BY data.DepartmentID,' + @keyNameCSV + ',TimeClassID,pp.PayCycleID,FiscalYearIDSecond ORDER BY pp.PayCycleID, pp.FiscalYearIDSecond, pp.PeriodNumber) AS ' + csv.val + 'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + @measureNameCSV + ' into #calculatedMeasures from ' + @factTableName + ' data ' + (case when @departmentIDs is not null then 'inner join (select val as DepartmentID from ConvertCSValuesToTable(''' + @departmentIDs + ''', '','')) dept on dept.DepartmentID = data.DepartmentID' else '' end) + ' inner join fw.DimPayPeriod pp on pp.PayPeriodID=data.PayPeriodID where (1 = 1) ' + (case when @fiscalYearID > 0 then 'and pp.FiscalYearIDSecond between ' + cast(@fiscalYearID as nvarchar(4)) + '-1 and ' + cast(@fiscalYearID as nvarchar(4)) else '' end) + ' ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + ' option (recompile) CREATE UNIQUE CLUSTERED INDEX IX_calculatedMeasures ON #calculatedMeasures ( DepartmentID, ' + @keyNameCSV + ', PayCycleID, FiscalYearIDSecond, PeriodNumber, TimeClassID ) WITH ( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] update M set ' + (select dbo.straggr('m.' + csv.val + 'YTD = cm.' + csv.val + 'YTD', ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' from ' + @factTableName + ' m inner join fw.DimPayPeriod pp on pp.PayPeriodID=m.PayPeriodID INNER JOIN #calculatedMeasures cm ON M.DepartmentID = cm.DepartmentID ' + (select dbo.straggr('AND M.' + csv.val + ' = cm.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND pp.PayCycleID = cm.PayCycleID AND pp.FiscalYearIDSecond = cm.FiscalYearIDSecond AND pp.PeriodNumber = cm.PeriodNumber AND M.TimeClassID = cm.TimeClassID where ' + (select dbo.straggr('m.' + csv.val + 'YTD <> cm.' + csv.val + 'YTD', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' option (recompile) update M set ' + (select dbo.straggr('m.' + csv.val + 'PriorYear = cm_py.' + csv.val, ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ', ' + (select dbo.straggr('m.' + csv.val + 'PriorYTD = cm_py.' + csv.val + 'YTD', ',', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' from ' + @factTableName + ' m inner join fw.DimPayPeriod pp on pp.PayPeriodID=m.PayPeriodID INNER JOIN #calculatedMeasures cm_py ON M.DepartmentID = cm_py.DepartmentID ' + (select dbo.straggr('AND M.' + csv.val + ' = cm_py.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND pp.PayCycleID = cm_py.PayCycleID AND pp.FiscalYearIDSecond = cm_py.FiscalYearIDSecond+1 AND pp.PeriodNumber = cm_py.PeriodNumber AND M.TimeClassID = cm_py.TimeClassID where ' + (select dbo.straggr('m.' + csv.val + 'PriorYear <> cm_py.' + csv.val, ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' or ' + (select dbo.straggr('m.' + csv.val + 'PriorYTD <> cm_py.' + csv.val + 'YTD', ' or ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' option (recompile) drop table #calculatedMeasures ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end --delete zero records, possible only if YTD aggregates to zero due to negative values set @sql = ' delete data from ' + @factTableName + ' data where ' + (select dbo.straggr('data.' + csv.val + ' = 0 and data.' + csv.val + 'YTD = 0 and data.' + csv.val + 'PriorYear = 0 and data.' + csv.val + 'PriorYTD = 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end GO --------------------------------------------- -- fw.procFactPayPeriodYTDPriorYearUpdate_AG /*************************************************************** ** CID Date Author WI Description ** 1 2017-06-09 ipetriv TK-44047 fixing one-year integraion test for fw_procPayrollSampledDailyDetailedInsert ** 2 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 3 2019-08-21 vfay D-08311 PR Sampling Proc : removed filtering out 0 Value Rows ** 4 2023-10-18 KF JAZZ-62485 Technical - Update procs to support 7 days pay periods for Pay Period and Daily ** 5 2024-01-29 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values ** 6 2024-02-08 KF JAZZ-67258 Current year runs of the Run PR Process Task have been failing. ** 7 2024-02-12 HV JAZZ-15888 [fw].[procPayrollSampledPayPeriodInsert]: YTD records are not sampled properly for TimeClassID=20 when run proc for all years and Target Basis=Rolling Average **************************************************************/ CREATE PROC [fw].[procFactPayPeriodYTDPriorYearUpdate_AG] @factTableName nvarchar(100), @stagingTableName varchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0 as set nocount on declare @sql nvarchar(max) declare @MaxYearForCalculation int= (select max(FiscalYearID) from int.FactStaffing) declare @PeriodsList nvarchar(max) = '' select @PeriodsList = @PeriodsList+',['+cast(PeriodNumber as varchar(3))+']' FROM (select distinct PeriodNumber from fw.DimPayPeriod where PeriodNumber <> 0) PN set @PeriodsList = SUBSTRING(@PeriodsList,2,LEN(@PeriodsList)-1) /*insert missing records*/ set @sql = ' alter table '+@stagingTableName+' add PeriodNumber int alter table '+@stagingTableName+' add FiscalYearID int ALTER TABLE '+@stagingTableName+' ADD PayCycleID int ' if (@isDebugOnly = 1) begin print @sql end else begin exec(@sql) end set @sql = ' UPDATE tp SET tp.PeriodNumber = fm.PeriodNumber, tp.FiscalYearID = fm.FiscalYearIDSecond, tp.PayCycleID = d.PayCycleID FROM '+@stagingTableName+' tp INNER JOIN fw.DimPayPeriod fm ON tp.PayPeriodID = fm.PayPeriodID INNER JOIN fw.DimDepartment d ON tp.DepartmentID = d.DepartmentID CREATE TABLE #dimPayPeriod (PayPeriodID INT,FiscalYearID int, PeriodNumber TINYINT, PayCycleID int, UNIQUE CLUSTERED (PeriodNumber,FiscalYearID,PayCycleID)) INSERT INTO #dimPayPeriod SELECT dpp.PayPeriodID, dpp.FiscalYearIDSecond, dpp.PeriodNumber, dpp.PayCycleID FROM fw.DimPayPeriod dpp inner join pi.viewNextAfterCurrentPayPeriod npp on dpp.PayCycleID = npp.PayCycleID and dpp.FiscalYearIDSecond <= npp.FiscalYearIDSecond WHERE PayPeriodID <> 0; ;WITH MinSO as ('+(select case when @fiscalYearID > 0 THEN ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, mm.FiscalYearID, X.TimeClassID, min(mm.PeriodNumber) as MinPeriodNumber FROM ' + @factTableName + ' X INNER JOIN #dimPayPeriod mm ON mm.PayPeriodID = x.PayPeriodID WHERE FiscalYearID ='+cast(@fiscalYearID-1 as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, mm.FiscalYearID, X.TimeClassID UNION SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.PeriodNumber) as MinPeriodNumber FROM '+@stagingTableName+' X WHERE FiscalYearID ='+cast(@fiscalYearID as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' else ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.PeriodNumber) as MinPeriodNumber FROM '+@stagingTableName+' X group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' end )+') ,MinPresent as ( SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, dd.PayCycleID, min(X.MinPeriodNumber) as MinPeriodNumber FROM (SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, MinPeriodNumber FROM MinSO UNION ALL SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID+1 as FiscalYearID, TimeClassID, MinPeriodNumber FROM MinSO ) X inner join fw.DimDepartment dd on dd.DepartmentID = x.DepartmentID where FiscalYearID <= (SELECT max(FiscalYearID) FROM '+@stagingTableName+') GROUP BY '+replace(@keyNameCSV, ',', ',')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, dd.PayCycleID ) ,MissingList AS ( SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, Unpvt.FiscalYearID, mm.PayPeriodID, TimeClassID, unpvt.PeriodNumber FROM ( SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, PayCycleID, '+@PeriodsList+', MinPeriodNumber FROM ( SELECT isnull(TP.DepartmentID,MP.DepartmentID) as DepartmentID, ' + (select dbo.straggr('isnull (TP.' + csv.val + ',MP.' + csv.val +') as ' + csv.val+',', ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' isnull(TP.FiscalYearID,MP.FiscalYearID) as FiscalYearID, TP.PayPeriodID as PayPeriodID, isnull(TP.PayCycleID,MP.PayCycleID) as PayCycleID, isnull(TP.TimeClassID,MP.TimeClassID) as TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 0 as isDeleted, 1 as isSystemGenerated, MP.MinPeriodNumber, isnull(TP.PeriodNumber,mp.MinPeriodNumber) as PeriodNumber FROM '+@stagingTableName+' TP FULL join MinPresent MP ON TP.DepartmentID = mp.DepartmentID ' + (select dbo.straggr('AND TP.' + csv.val + ' = MP.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and TP.TimeClassID = mp.TimeClassID and TP.FiscalYearID = mp.FiscalYearID where (TP.PeriodNumber >= mp.MinPeriodNumber) or TP.PeriodNumber is null) ss /* there can be a subquery here*/ PIVOT /*formation of the pivot table*/ (count(PayPeriodID) /*is an aggregate function that forms the contents of a pivot table*/ FOR PeriodNumber IN ('+@PeriodsList+')) Pvt /* alias for the pivot table*/ ) X UNPIVOT (isPresent /* the header of the column that will contain the values from the columns of the source table listed below*/ FOR PeriodNumber IN ('+@PeriodsList+')) Unpvt INNER JOIN #dimPayPeriod mm ON mm.PeriodNumber = Unpvt.PeriodNumber and mm.FiscalYearID = Unpvt.FiscalYearID and mm.PayCycleID = unpvt.PayCycleID WHERE isPresent = 0 and Unpvt.PeriodNumber >= MinPeriodNumber) , calculatedMeasures as ( select uoag.DepartmentID, uoag.' + replace(@keyNameCSV, ',', ', uoag.') + ', uoag.FiscalYearID, uoag.PayPeriodID, pp.PayCycleID, uoag.TimeClassID, pp.PeriodNumber, ' + (select dbo.straggr('SUM(uoag.' + csv.val + ') OVER (PARTITION BY uoag.DepartmentID,' + @keyNameCSV + ',TimeClassID,FiscalYearID,pp.PayCycleID ORDER BY pp.PeriodNumber) AS ' + csv.val + 'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + @measureNameCSV + ', uoag.isSystemGenerated from ( SELECT ML.DepartmentID, ML.' + replace(@keyNameCSV, ',', ', ML.') + ', ML.FiscalYearID, ML.PayPeriodID, ML.TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 1 as isSystemGenerated FROM MissingList ML ' + case when @fiscalYearID > 0 then ' where ML.FiscalYearID = ' + cast(@fiscalYearID as nvarchar(4)) else '' end +' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.PayPeriodID, data.TimeClassID, ' + @measureNameCSV + ', data.isSystemGenerated from '+@stagingTableName+' data where (1 = 1) ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + '' + case when @fiscalYearID > 0 then ' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', mm.FiscalYearID, data.PayPeriodID, data.TimeClassID, ' + @measureNameCSV + ', data.isSystemGenerated from ' + @factTableName + ' data INNER JOIN #dimPayPeriod mm ON mm.PayPeriodID = data.PayPeriodID where mm.FiscalYearID = ' + cast(@fiscalYearID-1 as nvarchar(4)) + case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end else '' end + ' ) uoag /* union ald and generated*/ inner join fw.dimPayPeriod pp on uoag.PayPeriodID = pp.PayPeriodID ) SELECT PreSelect.* INTO fw.'+replace(@stagingTableName,'#','')+'WithCalcs FROM ( SELECT cm.DepartmentID, cm.' + replace(@keyNameCSV, ',', ',cm.') + ', cm.FiscalYearID, cm.PayPeriodID, cm.TimeClassID, ' + (select dbo.straggr('isnull(cm.' + csv.val+',0) as '+ csv.val+',', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' ' + (select dbo.straggr('isnull(cm.' + csv.val+'YTD,0) as '+csv.val+'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr('isnull(cm_py.' + csv.val + ',0) as '+ csv.val+'PriorYear,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr('isnull(cm_py.' + csv.val + 'YTD,0) as ' + csv.val + 'PriorYTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' isnull(cm.isSystemGenerated,0) as isSystemGenerated from calculatedMeasures cm LEFT JOIN calculatedMeasures cm_py ON cm.DepartmentID = cm_py.DepartmentID ' + (select dbo.straggr('AND cm.' + csv.val + ' = cm_py.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND cm.PeriodNumber = cm_py.PeriodNumber AND cm.PayCycleID = cm_py.PayCycleID AND cm.TimeClassID = cm_py.TimeClassID and cm.FiscalYearID = cm_py.FiscalYearID+1 ' + case when @fiscalYearID > 0 then ' WHERE cm.FiscalYearId = '+cast(@fiscalYearID as varchar(4)) else '' end+' ) PreSelect WHERE NOT(' + (select dbo.straggr(csv.val+'=0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' and ' + (select dbo.straggr(csv.val + 'YTD=0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and ' + (select dbo.straggr(csv.val + 'PriorYear=0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and ' + (select dbo.straggr(csv.val + 'PriorYTD=0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and isSystemGenerated = 1) UNION ALL SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.PayPeriodID, data.TimeClassID, ' + (select dbo.straggr(csv.val+',', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' ' + (select dbo.straggr(csv.val+'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr(csv.val+'PriorYear,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr(csv.val+'PriorYTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' data.isSystemGenerated from '+@stagingTableName+' data WHERE TimeClassID <> 20 drop table '+@stagingTableName+' ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end GO --------------------------------------------- -- fw.procFactPayPeriodYTDPriorYearUpdate_Staging /************************************************************** ** Change History ************************************************************** ** 1 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 2 2017-07-13 IP TK-45395 fixed isSystemGenerated for generated records ** 3 2017-09-20 IP TK-48127 fixed taking only Timeclasses 1,2,20 (excepted 4) ** 4 2018-08-10 OV B-19715 added condition IsPR = 1 for jobcode ** 5 2018-09-20 OV B-20797 fixed @isJobCodeIDColumnPresent value ** 6 2018-11-05 KF D-06432 PR - YTD Labor Expense PR Metrics Do Not Match Payroll ** 7 2019-08-21 vfay D-08586 PR Sampling Proc : removed filtering out 0 Value Rows ** 8 2020-12-09 HV JAZZ-11135 Remove table variable in procPayrollSampledPayPeriodDetailedInsert ** 9 2020-12-21 HV JAZZ-10222 Proc procPayrollSampledPayPeriodDetailedInsert is timing out ** 10 2022-04-12 HV JAZZ-35448 Remove PR Feature Flag ** 11 2023-10-18 KF JAZZ-62485 Technical - Update procs to support 7 days pay periods for Pay Period and Daily ** 12 2024-01-29 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values ** 13 2024-02-08 KF JAZZ-67258 Current year runs of the Run PR Process Task have been failing. *************************************************************/ CREATE PROC [fw].[procFactPayPeriodYTDPriorYearUpdate_Staging] @factTableName nvarchar(100), @stagingTableName nvarchar(100), @keyNameCSV nvarchar(450), @measureNameCSV nvarchar(450), @fiscalYearID smallint = 0, @timeClassID tinyint = 0, @isDebugOnly bit = 0 as set nocount on declare @sql nvarchar(max) declare @MaxYearForCalculation int= (select max(FiscalYearID) from int.FactStaffing) declare @PeriodsList nvarchar(max) = '' select @PeriodsList = @PeriodsList+',['+cast(PeriodNumber as varchar(3))+']' FROM (select distinct PeriodNumber from fw.DimPayPeriod where PeriodNumber <> 0 ) PN set @PeriodsList = SUBSTRING(@PeriodsList,2,LEN(@PeriodsList)-1) declare @isJobCodeIDColumnPresent BIT IF EXISTS (SELECT val from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') WHERE val = 'JobCodeID') SET @isJobCodeIDColumnPresent = 1 ELSE SET @isJobCodeIDColumnPresent = 0 set @sql = ' IF OBJECT_ID(''tempdb..' + @stagingTableName + 'Updated'') IS NOT NULL DROP TABLE ' + @stagingTableName + 'Updated create table ' + @stagingTableName + 'Updated ( DepartmentID int, '+replace(@keyNameCSV, ',', ' int,')+' int, PayPeriodID int, TimeClassID int, '+replace(@measureNameCSV, ',', ' decimal(18, 6),')+' decimal(18, 6), isDeleted bit default (0), isSystemGenerated bit default(0), PeriodNumber int, FiscalYearID int, PayCycleID int) insert INTO ' + @stagingTableName + 'Updated SELECT tp.DepartmentID, tp.' + replace(@keyNameCSV, ',', ', tp.') + ', tp.PayPeriodID, tp.TimeClassID, tp.' + replace(@measureNameCSV, ',', ', tp.') + ', tp.isDeleted, tp.isSystemGenerated, fm.PeriodNumber, fm.FiscalYearIDSecond, d.PayCycleID FROM ' + @stagingTableName + ' tp INNER JOIN fw.DimPayPeriod fm ON tp.PayPeriodID = fm.PayPeriodID INNER JOIN fw.DimDepartment d ON tp.DepartmentID = d.DepartmentID IF OBJECT_ID(''tempdb..' + @stagingTableName + ''') IS NOT NULL DROP TABLE ' + @stagingTableName + ' IF OBJECT_ID(''tempdb..#dimPayPeriod'') IS NOT NULL DROP TABLE #dimPayPeriod CREATE TABLE #dimPayPeriod (PayPeriodID INT,FiscalYearID int, PeriodNumber TINYINT, PayCycleID int, UNIQUE CLUSTERED (PeriodNumber,FiscalYearID,PayCycleID)) INSERT INTO #dimPayPeriod SELECT dpp.PayPeriodID, dpp.FiscalYearIDSecond, dpp.PeriodNumber, dpp.PayCycleID FROM fw.DimPayPeriod dpp INNER JOIN pi.viewNextAfterCurrentPayPeriod npp on npp.PayCycleID = dpp.PayCycleID WHERE dpp.PayPeriodID <> 0 AND dpp.FiscalYearIDSecond <= npp.FiscalYearIDSecond ORDER BY dpp.PayCycleID, dpp.FiscalYearIDSecond, dpp.PeriodNumber IF OBJECT_ID(''tempdb..#MinSO'') IS NOT NULL DROP TABLE #MinSO CREATE TABLE #MinSO ( '+replace(@keyNameCSV, ',', ' int,')+' int, DepartmentID int, FiscalYearID int, TimeClassID int, MinPeriodNumber int) INSERT INTO #MinSO('+@keyNameCSV+', DepartmentID, FiscalYearID, TimeClassID, MinPeriodNumber)'+(select case when @fiscalYearID > 0 THEN ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, mm.FiscalYearID, X.TimeClassID, min(mm.PeriodNumber) as MinPeriodNumber FROM ' + @factTableName + ' X INNER JOIN #dimPayPeriod mm ON mm.PayPeriodID = x.PayPeriodID WHERE FiscalYearID ='+cast(@fiscalYearID-1 as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, mm.FiscalYearID, X.TimeClassID UNION SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.PeriodNumber) as MinPeriodNumber FROM ' + @stagingTableName + 'Updated X WHERE FiscalYearID ='+cast(@fiscalYearID as varchar(4))+' group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' else ' SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, min(X.PeriodNumber) as MinPeriodNumber FROM ' + @stagingTableName + 'Updated X group by '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID ' end )+' IF OBJECT_ID(''tempdb..#MinPresent'') IS NOT NULL DROP TABLE #MinPresent' set @sql = @sql + ' create table #MinPresent ( '+replace(@keyNameCSV, ',', ' int,')+' int, DepartmentID int, FiscalYearID int, TimeClassID int, PayCycleID int, MinPeriodNumber int) INSERT INTO #MinPresent('+@keyNameCSV+', DepartmentID, FiscalYearID, TimeClassID, PayCycleID, MinPeriodNumber) SELECT '+replace(@keyNameCSV, ',', ',X.')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, dd.PayCycleID, min(X.MinPeriodNumber) as MinPeriodNumber FROM (SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, MinPeriodNumber FROM #MinSO UNION ALL SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID+1 as FiscalYearID, TimeClassID, MinPeriodNumber FROM #MinSO ) X inner join fw.DimDepartment dd on dd.DepartmentID = x.DepartmentID where FiscalYearID <= (SELECT max(FiscalYearID) FROM ' + @stagingTableName + 'Updated) and TimeClassID in (1,2,20) GROUP BY '+replace(@keyNameCSV, ',', ',')+', X.DepartmentID, X.FiscalYearID, X.TimeClassID, dd.PayCycleID IF OBJECT_ID(''tempdb..#MinSO'') IS NOT NULL DROP TABLE #MinSO IF OBJECT_ID(''tempdb..#MissingList'') IS NOT NULL DROP TABLE #MissingList CREATE TABLE #MissingList ( '+replace(@keyNameCSV, ',', ' int,')+' int, DepartmentID int, FiscalYearID int, PayPeriodID int, TimeClassID int, PeriodNumber int) INSERT INTO #MissingList ('+@keyNameCSV+', DepartmentID, FiscalYearID, PayPeriodID, TimeClassID, PeriodNumber) SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, Unpvt.FiscalYearID, mm.PayPeriodID, TimeClassID, unpvt.PeriodNumber FROM ( SELECT '+replace(@keyNameCSV, ',', ',')+', DepartmentID, FiscalYearID, TimeClassID, PayCycleID, '+@PeriodsList+', MinPeriodNumber FROM ( SELECT isnull(TP.DepartmentID,MP.DepartmentID) as DepartmentID, ' + (select dbo.straggr('isnull (TP.' + csv.val + ',MP.' + csv.val +') as ' + csv.val+',', ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' isnull(TP.FiscalYearID,MP.FiscalYearID) as FiscalYearID, TP.PayPeriodID as PayPeriodID, isnull(TP.PayCycleID,MP.PayCycleID) as PayCycleID, isnull(TP.TimeClassID,MP.TimeClassID) as TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 0 as isDeleted, 1 as isSystemGenerated, MP.MinPeriodNumber, isnull(TP.PeriodNumber,mp.MinPeriodNumber) as PeriodNumber FROM ' + @stagingTableName + 'Updated TP FULL join #MinPresent MP ON TP.DepartmentID = mp.DepartmentID ' + (select dbo.straggr('AND TP.' + csv.val + ' = MP.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' and TP.TimeClassID = mp.TimeClassID and TP.FiscalYearID = mp.FiscalYearID where (TP.PeriodNumber >= mp.MinPeriodNumber) or TP.PeriodNumber is null) ss /* there can be a subquery here*/ PIVOT /*formation of the pivot table*/ (count(PayPeriodID) /*is an aggregate function that forms the contents of a pivot table*/ FOR PeriodNumber IN ('+@PeriodsList+')) Pvt /* alias for the pivot table*/ ) X UNPIVOT (isPresent /* the header of the column that will contain the values from the columns of the source table listed below*/ FOR PeriodNumber IN ('+@PeriodsList+')) Unpvt INNER JOIN #dimPayPeriod mm ON mm.PeriodNumber = Unpvt.PeriodNumber and mm.FiscalYearID = Unpvt.FiscalYearID and mm.PayCycleID = unpvt.PayCycleID WHERE isPresent = 0 and Unpvt.PeriodNumber >= MinPeriodNumber IF OBJECT_ID(''tempdb..#MinPresent'') IS NOT NULL DROP TABLE #MinPresent IF OBJECT_ID(''tempdb..#calculatedMeasures'') IS NOT NULL DROP TABLE #calculatedMeasures CREATE TABLE #calculatedMeasures ( DepartmentID int, '+replace(@keyNameCSV, ',', ' int,')+' int, FiscalYearID int, PayPeriodID int, PayCycleID int, TimeClassID int, PeriodNumber int, '+replace(@measureNameCSV, ',', 'YTD decimal(18, 6),')+'YTD decimal(18, 6), '+replace(@measureNameCSV, ',', ' decimal(18, 6),')+' decimal(18, 6), isSystemGenerated int) insert into #calculatedMeasures(DepartmentID, '+@keyNameCSV+', FiscalYearID, PayPeriodID, PayCycleID, TimeClassID, PeriodNumber, ' + replace(@measureNameCSV, ',', 'YTD,') + 'YTD, ' + @measureNameCSV + ', isSystemGenerated) select uoag.DepartmentID, uoag.' + replace(@keyNameCSV, ',', ', uoag.') + ', uoag.FiscalYearID, uoag.PayPeriodID, pp.PayCycleID, uoag.TimeClassID, pp.PeriodNumber, ' + (select dbo.straggr('SUM(uoag.' + csv.val + ') OVER (PARTITION BY uoag.DepartmentID,' + @keyNameCSV + ',TimeClassID,FiscalYearID,pp.PayCycleID ORDER BY pp.PeriodNumber) AS ' + csv.val + 'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + @measureNameCSV + ', uoag.isSystemGenerated from ( SELECT ML.DepartmentID, ML.' + replace(@keyNameCSV, ',', ', ML.') + ', ML.FiscalYearID, ML.PayPeriodID, ML.TimeClassID, 0 as '+replace(@measureNameCSV, ',', ', 0 as ')+', 1 as isSystemGenerated FROM #MissingList ML ' + case when @fiscalYearID > 0 then ' where ML.FiscalYearID = ' + cast(@fiscalYearID as nvarchar(4)) else '' end +' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', data.FiscalYearID, data.PayPeriodID, data.TimeClassID, ' + @measureNameCSV + ', data.isSystemGenerated from ' + @stagingTableName + 'Updated data where (1 = 1) ' + (case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else '' end) + '' + case when @fiscalYearID > 0 then ' UNION SELECT data.DepartmentID, data.' + replace(@keyNameCSV, ',', ', data.') + ', mm.FiscalYearID, data.PayPeriodID, data.TimeClassID, ' + @measureNameCSV + ', 1 as isSystemGenerated from ' + @factTableName + ' data INNER JOIN #dimPayPeriod mm ON mm.PayPeriodID = data.PayPeriodID where mm.FiscalYearID = ' + cast(@fiscalYearID-1 as nvarchar(4)) + case when @timeClassID > 0 then 'and data.TimeClassID = ' + cast(@timeClassID as nvarchar(2)) else ' and TimeClassID in (1,2,20) ' end else '' end + ' ) uoag /* union ald and generated*/ inner join fw.dimPayPeriod pp on uoag.PayPeriodID = pp.PayPeriodID' set @sql = @sql + ' IF OBJECT_ID(''tempdb..#MissingList'') IS NOT NULL DROP TABLE #MissingList SELECT PreSelect.*, FTEs=cast(0 as decimal(19, 4)), FTEsYTD=cast(0 as decimal(19, 4)), FTEsPriorYear=cast(0 as decimal(19, 4)), FTEsPriorYTD=cast(0 as decimal(19, 4)) INTO fw.' + replace(@stagingTableName,'#','') + 'WithCalcs FROM ( SELECT cm.DepartmentID, cm.' + replace(@keyNameCSV, ',', ',cm.') + ', cm.FiscalYearID, cm.PayPeriodID, cm.TimeClassID, ' + (select dbo.straggr('isnull(cm.' + csv.val+',0) as '+ csv.val+',', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' ' + (select dbo.straggr('isnull(cm.' + csv.val+'YTD,0) as '+csv.val+'YTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr('isnull(cm_py.' + csv.val + ',0) as '+ csv.val+'PriorYear,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' ' + (select dbo.straggr('isnull(cm_py.' + csv.val + 'YTD,0) as ' + csv.val + 'PriorYTD,', '', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' isnull(cm.isSystemGenerated,0) as isSystemGenerated from #calculatedMeasures cm LEFT JOIN #calculatedMeasures cm_py ON cm.DepartmentID = cm_py.DepartmentID ' + (select dbo.straggr('AND cm.' + csv.val + ' = cm_py.' + csv.val, ' ', '') from dbo.ConvertCSValuesToTable(@keyNameCSV, ',') csv) + ' AND cm.PeriodNumber = cm_py.PeriodNumber AND cm.PayCycleID = cm_py.PayCycleID AND cm.TimeClassID = cm_py.TimeClassID and cm.FiscalYearID = cm_py.FiscalYearID+1 ' + case when @fiscalYearID > 0 then ' WHERE cm.FiscalYearId = '+cast(@fiscalYearID as varchar(4)) else '' end+' ) PreSelect '+ case when @isJobCodeIDColumnPresent =1 then 'inner join fw.DimJobCode jc on jc.JobCodeID = PreSelect.JobCodeID and jc.IsPR = 1 ' else '' end + ' WHERE NOT(' + (select dbo.straggr(csv.val+'= 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) +' and ' + (select dbo.straggr(csv.val + 'YTD = 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and ' + (select dbo.straggr(csv.val + 'PriorYear = 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and ' + (select dbo.straggr(csv.val + 'PriorYTD = 0', ' and ', '') from dbo.ConvertCSValuesToTable(@measureNameCSV, ',') csv) + ' and isSystemGenerated = 1) IF OBJECT_ID(''tempdb..' + @stagingTableName + 'Updated'') IS NOT NULL DROP TABLE ' + @stagingTableName + 'Updated IF OBJECT_ID(''tempdb..#dimPayPeriod'') IS NOT NULL DROP TABLE #dimPayPeriod IF OBJECT_ID(''tempdb..#calculatedMeasures'') IS NOT NULL DROP TABLE #calculatedMeasures ' if (@isDebugOnly = 1) begin select @sql end else begin exec(@sql) end --delete zero records, possible only if YTD aggregates to zero due to negative values GO --------------------------------------------- -- fw.procFactPayrollSampledBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-03-06 gforeman B-14693 Added year filter ** 2 2017-03-28 ipetriv D-05641 Logic for Prior and Actual was changed to simply copy actuals from previous year ** 3 2017-04-05 ipetriv D-05789 Changed algorithm for rolling average calculation ** 4 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 5 2018-05-24 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 6 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 7 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int *************************************************************/ CREATE proc [fw].[procFactPayrollSampledBaselineTargetUpdate] @targetType int = null, @numberOfMonths int = null, @fiscalYearID int = 0 with recompile as if (@targetType is null) set @targetType = (select Value from mr.SystemSetting where Name = 'Target Basis') if (@numberOfMonths is null) set @numberOfMonths = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') declare @sql varchar(max) create table #temp ( DepartmentID int, JobCodeID int, PayCodeID smallint, PayCodeGroupID int, FiscalYearID smallint, FiscalMonthID tinyint, Hours decimal (18, 6), Dollars decimal (18, 6), FTEs decimal (18, 6) ) create table #YearsScope (FiscalYearID int) IF @fiscalYearID <> 0 INSERT INTO #YearsScope (FiscalYearID) select distinct FiscalYearID from fw.dimFiscalYear dm where dm.FiscalYearID in (@fiscalYearID-1,@fiscalYearID,@fiscalYearID+1) UNION SELECT @fiscalYearID+1 as FiscalYearID ELSE INSERT INTO #YearsScope (FiscalYearID) select distinct FiscalYearID from fw.dimFiscalYear dm where FiscalYearID between (select min(FiscalYearID) FROM fw.FactPayrollSampledMonthly) and (select max(FiscalYearID)+1 FROM fw.FactPayrollSampledMonthly) if (@targetType = 1) begin --Prior Year Actual insert into #temp select d.DepartmentID, d.JobCodeID, d.PayCodeID, d.PayCodeGroupID, d.FiscalYearID+1, d.FiscalMonthID, d.Hours, d.Dollars, d.FTEs FROM fw.FactPayrollSampledMonthly d WHERE d.TimeClassID = 1 and (@fiscalYearID = 0 or d.FiscalYearID = @fiscalYearID-1) end else if (@targetType = 10) begin --Rolling Average set @sql = ' insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID,Dollars,Hours,FTEs) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, isnull(Dollars,0.0), isnull(Hours,0.0),0 FROM ( select FullScope.DepartmentID, FullScope.JobCodeID, FullScope.PayCodeID, FullScope.PayCodeGroupID, FullScope.FiscalYearID, m.FiscalMonthID, Dollars = ISNULL((Sum(Dollars) over(PARTITION BY DepartmentID,JobCodeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfMonths as nvarchar(2))+', 0), Hours = ISNULL((Sum(Hours) over(PARTITION BY DepartmentID,JobCodeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfMonths as nvarchar(2))+', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, SortOrder, SUM(Hours) as Hours, SUM(Dollars) as Dollars FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, m.SortOrder, Hours, Dollars FROM fw.FactPayrollSampledMonthly p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and p.isSystemGenerated = 0 ' + case when @fiscalYearID <> 0 then ' and FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')' else '' end +' UNION ALL SELECT /*combination of all for key columns months for (year-1). If some combination was in previous year - same should be in current, to receive baseline value*/ p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, fy.FiscalYearID, m.SortOrder, 0 as Hours, 0 as Dollars FROM fw.FactPayrollSampledMonthly p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN #YearsScope fy WHERE m.FiscalMonthID <> 0 and p.TimeClassID = 1 and p.IsSystemGenerated = 0 ' + case when @fiscalYearID <> 0 then ' and p.FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')' else '' end +' ) AllCombinations GROUP BY DepartmentID,JobCodeID,PayCodeID,PayCodeGroupID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE (Dollars is not null or Hours is not null) ' + case when @fiscalYearID <> 0 then ' and FiscalYearID = '+cast(@fiscalYearID as nvarchar(4)) else '' end print @sql exec (@sql) end else begin --Budget insert into #temp select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, Hours, Dollars, FTEs from fw.FactPayrollSampledMonthly where TimeClassID = 2 and (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) end merge fw.FactPayrollSampledMonthly as fact using (select * from #temp where (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) and not (Hours = 0 and Dollars = 0)) as source on fact.DepartmentID = source.DepartmentID and fact.JobCodeID = source.JobCodeID and fact.PayCodeID = source.PayCodeID and fact.PayCodeGroupID = source.PayCodeGroupID and fact.FiscalYearID = source.FiscalYearID and fact.FiscalMonthID = source.FiscalMonthID and fact.TimeClassID = 20 and (@fiscalYearID = 0 or fact.FiscalYearID = @fiscalYearID) when not matched by target then insert (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) values (source.DepartmentID, source.JobCodeID, source.PayCodeID, source.PayCodeGroupID, source.FiscalYearID, source.FiscalMonthID, 20, source.Hours, source.Dollars, source.FTEs) when not matched by source and fact.TimeClassID = 20 and (@fiscalYearID = 0 or fact.FiscalYearID = @fiscalYearID) then update set fact.IsDeleted = 1 when matched then update set fact.Hours = source.Hours, fact.Dollars = source.Dollars, fact.FTEs = source.FTEs, fact.IsSystemGenerated = 0; exec [dbo].[procRollingDeleteOnTable] 'fw', 'FactPayrollSampledMonthly', 'RowID', 'fw.FactPayrollSampledMonthly', 'TimeClassID = 20 and IsDeleted = 1', 10000, 0.5, 0 drop table #temp drop table #YearsScope; GO --------------------------------------------- -- fw.procFactPayrollSampledDailyFTEsInsert CREATE PROCEDURE [fw].[procFactPayrollSampledDailyFTEsInsert] @departmentIDs NVARCHAR(max) = NULL, @fiscalYearID INT = 0, @onePayPeriodOnlyDate datetime = null, @timeClassID INT = 4 AS /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-08-16 ishah JAZZ-41955 Daily Flexing - Calculating Payroll FTEs ************************************************************ */ IF OBJECT_ID('tempdb..#departments') IS NOT NULL DROP TABLE #departments SELECT val INTO #departments FROM ConvertCSValuesToTable(@departmentIDs, ',') IF OBJECT_ID('tempdb..#WorkWeekHours') IS NOT NULL DROP TABLE #WorkWeekHours SELECT DeptJobCode.DepartmentID, DeptJobCode.JobCodeID, WorkingHoursCoef = cast(dww.Hours AS NUMERIC(20, 6)) / 7 INTO #WorkWeekHours FROM ( SELECT DepartmentID, JobCodeID, WorkWeekID = COALESCE(jc.WorkWeekID, de.WorkWeekID, - 1) FROM ( SELECT dp.DepartmentID, WorkWeekID = CASE WHEN e.WorkWeekID > - 1 THEN e.WorkWeekID ELSE NULL END FROM fw.DimEntity e INNER JOIN fw.DimDepartment dp on e.EntityID = dp.EntityID ) DE CROSS JOIN ( SELECT djc.JobCodeID, djcg.JobCodeGroupID, WorkWeekID = CASE WHEN djc.WorkWeekOverrideID > - 1 THEN djc.WorkWeekOverrideID WHEN djc.WorkWeekOverrideID = - 1 AND djcg.WorkWeekOverrideID > - 1 THEN djcg.WorkWeekOverrideID ELSE NULL END FROM fw.DimJobCode djc INNER JOIN fw.DimJobCodeGroup djcg ON djc.JobCodeGroupID = djcg.JobCodeGroupID WHERE djc.IsDaily = 1 and djc.IsPR = 1 ) JC ) DeptJobCode LEFT JOIN fw.DimWorkWeek dww ON DeptJobCode.WorkWeekID = dww.WorkWeekID DECLARE @BatchSize INT = 100000000 IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods -- Added support for one pay period only SELECT fp.PayPeriodID, pp.WorkingDays as WorkingDays, pp.PeriodDays as PeriodDays, COUNT(*) AS RecordsCount, 0 AS BatchID INTO #inputPayPeriods FROM fw.FactPayrollSampledDaily fp INNER JOIN fw.DimPayPeriod pp ON fp.PayPeriodID = pp.PayPeriodID WHERE fp.TimeClassID = @timeClassID AND pp.PeriodNumber != 0 AND ((@onePayPeriodOnlyDate IS NOT NULL AND @onePayPeriodOnlyDate BETWEEN pp.PeriodStartCalendarDate AND pp.PeriodEndCalendarDate) OR (@onePayPeriodOnlyDate IS NULL AND (pp.FiscalYearIDSecond = @fiscalYearID OR @fiscalYearID = 0))) GROUP BY fp.PayPeriodID, pp.WorkingDays, pp.PeriodDays -- Split data into batches WHILE EXISTS (SELECT TOP 1 1 FROM #inputPayPeriods WHERE BatchID = 0) BEGIN ;WITH PayPeriodInfo AS ( SELECT IPP.PayPeriodID, ROW_NUMBER() OVER (ORDER BY IPP.PayPeriodID) AS RowNumber, SUM(RecordsCount) OVER (ORDER BY IPP.PayPeriodID) AS Total, MaxBatchID+1 AS BatchID FROM #inputPayPeriods IPP CROSS JOIN (SELECT MAX(BatchID) AS MaxBatchID FROM #inputPayPeriods) M WHERE IPP.BatchID = 0 ) UPDATE IPP SET IPP.BatchID = MI.BatchID FROM #inputPayPeriods IPP INNER JOIN PayPeriodInfo MI ON MI.PayPeriodID = IPP.PayPeriodID WHERE Total <= @BatchSize OR RowNumber = 1 END DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN UPDATE fact SET fact.FTEs = CASE WHEN WorkingHoursCoef IS NOT NULL THEN (fact.Hours) / WorkingHoursCoef ELSE fact.Hours / (IPP.WorkingDays * 8.0 / IPP.PeriodDays) END FROM fw.FactPayrollSampledDaily fact INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = fact.PayPeriodID and IPP.BatchID = @BatchID INNER JOIN fw.viewDimPayCodeGroup pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID AND fact.JobCodeID = ww.JobCodeID WHERE pcg.ProductiveClass IN ( 'Productive', 'Non-Productive' ) AND fact.TimeClassID = @timeClassID AND ( @departmentIDs IS NULL OR fact.DepartmentID IN ( SELECT val FROM #departments ) ) SET @BatchID = @BatchID + 1 END GO --------------------------------------------- -- fw.procFactPayrollSampledDetailedBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-03-06 gforeman B-14693 Added year filter ** 2 2017-03-28 IPetriv D-05641 Logic for Prior and Actual was changed to simply copy actuals from previous year ** 3 2017-04-11 IPetriv B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactPayrollSampledMonthlyDetailed. Update fw.FactPayrollSampledMonthlyDetailed only once by the final dataset. ** 4 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 5 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 6 2018-05-24 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 7 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 8 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 9 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int *************************************************************/ CREATE proc [fw].[procFactPayrollSampledDetailedBaselineTargetUpdate] @targetType int = null, @numberOfMonths int = null, @fiscalYearID int = 0 as if (@targetType is null) set @targetType = (select Value from mr.SystemSetting where Name = 'Target Basis') if (@numberOfMonths is null) set @numberOfMonths = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') declare @maxCalculatingFiscalYear int = (select max(FiscalYearID) from #PayrollSampledMonthlyDetailedStaging) create table #temp ( DepartmentID int, JobCodeID int, PayCodeID smallint, PayCodeGroupID int, EmployeeID int, FiscalYearID smallint, FiscalMonthID tinyint, Hours decimal (19, 4), Dollars decimal (19, 4), FTEs decimal (19, 4) ) if (@targetType = 1) begin --Prior Year Actual if (@fiscalYearID = 0) insert into #temp select d.DepartmentID, d.JobCodeID, d.PayCodeID, d.PayCodeGroupID, d.EmployeeID, d.FiscalYearID+1, d.FiscalMonthID, d.Hours, d.Dollars, d.FTEs from #PayrollSampledMonthlyDetailedStaging d where d.TimeClassID = 1 else insert into #temp select d.DepartmentID, d.JobCodeID, d.PayCodeID, d.PayCodeGroupID, d.EmployeeID, d.FiscalYearID+1, d.FiscalMonthID, d.Hours, d.Dollars, d.FTEs from fw.FactPayrollSampledMonthlyDetailed d where (d.FiscalYearID = @fiscalYearID-1) and d.TimeClassID = 1 end else if (@targetType = 10) begin --Rolling Average declare @sql nvarchar(max) if @fiscalYearID = 0 set @sql = ' insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID,Hours,Dollars) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID,isnull(Hours,0.0),isnull(Dollars,0.0) FROM ( select FullScope.DepartmentID, FullScope.JobCodeID, FullScope.PayCodeID, FullScope.PayCodeGroupID, FullScope.EmployeeID, FullScope.FiscalYearID, m.FiscalMonthID, Dollars = ISNULL((Sum(Dollars) over(PARTITION BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0), Hours = ISNULL((Sum(Hours) over(PARTITION BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, SortOrder, SUM(Hours) as Hours, SUM(Dollars) as Dollars FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, m.SortOrder, Hours, Dollars FROM #PayrollSampledMonthlyDetailedStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and isnull(p.IsSystemGenerated,0) = 0 and p.TimeClassID = 1 UNION ALL SELECT /*combination of all for key columns months for (year-1). If some combination was in previous year - same should be in current, to receive baseline value*/ p.DepartmentID, p.JobCodeID, p.EmployeeID, p.PayCodeID, p.PayCodeGroupID, fy.FiscalYearID, fy.SortOrder, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledMonthlyDetailedStaging p INNER JOIN fw.DimFiscalMonth m on m.FiscalMonthID = p.FiscalMonthID INNER JOIN (select FiscalYearID,FiscalMonthID,fm.sortOrder,fy.FiscalYearID*12+fm.SortOrder as ChronologicalOrder from fw.DimFiscalYear fy full join fw.DimFiscalMonth fm on 1= 1 where FiscalMonthID <> 0 and FiscalYearID <> 0) fy ON ChronologicalOrder - (p.FiscalYearID*12+m.SortOrder) between 1 and '+cast(@numberOfMonths as nvarchar(2))+' WHERE p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 ) AllCombinations GROUP BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Dollars is not null or Hours is not null' else set @sql = ' insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID,Hours,Dollars) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID,isnull(Hours,0.0),isnull(Dollars,0.0) FROM ( select FullScope.DepartmentID, FullScope.JobCodeID, FullScope.PayCodeID, FullScope.PayCodeGroupID, FullScope.EmployeeID, FullScope.FiscalYearID, m.FiscalMonthID, Dollars = ISNULL((Sum(Dollars) over(PARTITION BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0), Hours = ISNULL((Sum(Hours) over(PARTITION BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, SortOrder, SUM(Hours) as Hours, SUM(Dollars) as Dollars FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, m.SortOrder, Hours, Dollars FROM #PayrollSampledMonthlyDetailedStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and isnull(p.IsSystemGenerated,0) = 0 and p.TimeClassID = 1 UNION ALL SELECT /*recods for months which are present in current year*/ DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, m.SortOrder, Hours, Dollars FROM fw.FactPayrollSampledMonthlyDetailed p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and isnull(p.IsSystemGenerated,0) = 0 and p.TimeClassID = 1 and p.FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4))+' UNION ALL SELECT /*combination of all for key columns months for current year*/ DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, m.SortOrder, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledMonthlyDetailedStaging p CROSS APPLY fw.DimFiscalMonth m where m.FiscalMonthID <> 0 and isnull(p.IsSystemGenerated,0) = 0 and p.TimeClassID = 1 UNION ALL SELECT /*combination of all for key columns months for (year-1). If some combination was in previous year - same should be in current, to receive baseline value*/ p.DepartmentID, p.JobCodeID, p.EmployeeID, p.PayCodeID, p.PayCodeGroupID, fy.FiscalYearID, m.SortOrder, 0 AS Hours, 0 AS Dollars FROM fw.FactPayrollSampledMonthlyDetailed p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select distinct FiscalYearID from int.FactStaffing dm where dm.FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')) fy WHERE m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and p.TimeClassID <> 20 and p.FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4))+' ) AllCombinations GROUP BY DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Dollars is not null or Hours is not null' print @sql exec (@sql) end else begin --Budget insert into #temp select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID, Hours, Dollars, FTEs from #PayrollSampledMonthlyDetailedStaging where TimeClassID = 2 end delete from #PayrollSampledMonthlyDetailedStaging where TimeClassID = 20 and (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) insert into #PayrollSampledMonthlyDetailedStaging(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, FiscalYearID, FiscalMonthID, 20, Hours, Dollars, FTEs from #temp where (FiscalYearID = @fiscalYearID or @fiscalYearID = 0) and not (Hours =0 and Dollars = 0) drop table #temp; GO --------------------------------------------- -- fw.procFactPayrollSampledMonthlyUpdateFTEs /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2019-10-21 KF D-08819 FTE Baseline Calculation Issue ** 2 2020-09-03 KF JAZZ-4280 FTEs YTD logic for Rolling Methodology incorrectly calculating ** 3 2020-02-18 HV JAZZ-15496 Bug - Run Management Reporting Monthly Process is failed due to "Divide by zero error encountered..." error ** 4 2021-06-08 KF JAZZ-21092 Monthly FTE Factor for Rolling Average ** 5 2021-09-14 KF JAZZ-26273 Update Monthly FTE YTD Factor for Rolling Average ** 6 2024-04-23 HV JAZZ-68507 Inconsistencies in MR conversion factor used across TimeClasses *************************************************************/ CREATE PROCEDURE [fw].[procFactPayrollSampledMonthlyUpdateFTEs] @fiscalYearID SMALLINT = 0, @timeClassID TINYINT = 20 AS DECLARE @targetType int = (select Value from mr.SystemSetting where Name = 'Target Basis') IF(@targetType = 10) --Rolling Average BEGIN CREATE TABLE #workingHours (FiscalYearID smallint, FiscalMonthID tinyint, WorkWeekID INT, WorkingHours Decimal(19,4), WorkingHoursYTD Decimal(38,4), RollingWorkingHours Decimal(19,4), RollingWorkingHoursYTD Decimal(38,4)) DECLARE @useCurrentMonthFTEFactor bit = (SELECT Value FROM mr.SystemSetting WHERE Name = 'Use The Current Month FTE Factor Instead Of The Rolling Average') DECLARE @numberOfMonths INT = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') DECLARE @sql nvarchar(max) SET @sql = ' INSERT INTO #workingHours (FiscalYearID, FiscalMonthID, WorkWeekID, WorkingHours, WorkingHoursYTD, RollingWorkingHours, RollingWorkingHoursYTD) SELECT FiscalYearID, FiscalMonthID, WorkWeekID, WorkingHours, WorkingHoursYTD, RollingWorkingHours, COALESCE((Sum(RollingWorkingHours) over(PARTITION BY WorkWeekID, FiscalYearID ORDER BY SortOrder)), 0) AS RollingWorkingHoursYTD FROM ( SELECT FY.FiscalYearID, FM.FiscalMonthID, wpmCY.WorkWeekID, FM.SortOrder, wpmCY.Hours AS WorkingHours, wpmCY.YTDHours AS WorkingHoursYTD, COALESCE((Sum(wpmCY.Hours) over(PARTITION BY wpmCY.WorkWeekID ORDER BY FY.FiscalYearID*12+FM.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfMonths as nvarchar(2))+', 0) AS RollingWorkingHours FROM [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY INNER JOIN fw.DimFiscalMonth FM ON FM.FiscalMonthID = wpmCY.FiscalMonthID INNER JOIN fw.DimFiscalYear FY ON FY.FiscalYearID = wpmCY.FiscalYearID ) S ' exec (@sql) IF(@useCurrentMonthFTEFactor = 1 AND @timeClassID IN (4, 20, 22)) BEGIN UPDATE fact SET fact.FTEs= CASE WHEN wpmCY.WorkingHours = 0 THEN 0 ELSE fact.Hours/wpmCY.WorkingHours END, fact.FTEsYTD= CASE WHEN wpmCY.WorkingHoursYTD = 0 THEN 0 ELSE fact.HoursYTD/wpmCY.WorkingHoursYTD END, fact.FTEsPriorYear = CASE WHEN COALESCE(wpmPY.WorkingHours, 0) = 0 THEN 0 ELSE fact.HoursPriorYear / wpmPY.WorkingHours END, fact.FTEsPriorYTD = CASE WHEN COALESCE(wpmPY.WorkingHoursYTD, 0) = 0 THEN 0 ELSE fact.HoursPriorYTD / wpmPY.WorkingHoursYTD END FROM ( SELECT fact.*, CASE WHEN jc.WorkWeekOverrideID != -1 THEN jc.WorkWeekOverrideID WHEN jc.WorkWeekOverrideID = -1 AND jcg.WorkWeekOverrideID != -1 THEN jcg.WorkWeekOverrideID WHEN jc.WorkWeekOverrideID = -1 and jcg.WorkWeekOverrideID =- 1 THEN D.WorkWeekID END AS WorkWeekID FROM fw.FactPayrollSampledMonthly fact inner join fw.DimDepartment D on fact.DepartmentID= D.DepartmentID inner join fw.DimJobCode JC on fact.JobCodeID= JC.JobCodeID inner join fw.DimJobCodeGroup JCG on JC.jobCodeGroupID = JCG.JobCodeGroupID inner join fw.DimPayCodeGroup PCG on fact.PayCodeGroupID = PCG.PayCodeGroupID WHERE PCG.ProductiveClassID in ('3','2') --Productive and Non-Productive and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and fact.TimeClassID = @timeClassID ) fact inner join #workingHours wpmCY on fact.FiscalMonthID= wpmCY.FiscalMonthID and fact.FiscalYearID= wpmCY.FiscalYearID and wpmCY.WorkWeekID= fact.WorkWeekID left join #workingHours wpmPY on fact.FiscalMonthID= wpmPY.FiscalMonthID and (fact.FiscalYearID-1)=wpmPY.FiscalYearID and wpmPY.WorkWeekID=fact.WorkWeekID END ELSE BEGIN UPDATE fact SET fact.FTEs= CASE WHEN wpmCY.RollingWorkingHours = 0 THEN 0 ELSE fact.Hours/wpmCY.RollingWorkingHours END, fact.FTEsYTD= CASE WHEN wpmCY.RollingWorkingHoursYTD = 0 THEN 0 ELSE fact.HoursYTD/wpmCY.RollingWorkingHoursYTD END, fact.FTEsPriorYear = CASE WHEN COALESCE(wpmPY.RollingWorkingHours, 0) = 0 THEN 0 ELSE fact.HoursPriorYear / wpmPY.RollingWorkingHours END, fact.FTEsPriorYTD = CASE WHEN COALESCE(wpmPY.RollingWorkingHoursYTD, 0) = 0 THEN 0 ELSE fact.HoursPriorYTD / (wpmPY.RollingWorkingHoursYTD) END FROM ( SELECT fact.*, CASE WHEN jc.WorkWeekOverrideID != -1 THEN jc.WorkWeekOverrideID WHEN jc.WorkWeekOverrideID = -1 AND jcg.WorkWeekOverrideID != -1 THEN jcg.WorkWeekOverrideID WHEN jc.WorkWeekOverrideID = -1 and jcg.WorkWeekOverrideID =- 1 THEN D.WorkWeekID END AS WorkWeekID FROM fw.FactPayrollSampledMonthly fact inner join fw.DimDepartment D on fact.DepartmentID= D.DepartmentID inner join fw.DimJobCode JC on fact.JobCodeID= JC.JobCodeID inner join fw.DimJobCodeGroup JCG on JC.jobCodeGroupID = JCG.JobCodeGroupID inner join fw.DimPayCodeGroup PCG on fact.PayCodeGroupID = PCG.PayCodeGroupID WHERE PCG.ProductiveClassID in ('3','2') --Productive and Non-Productive and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and fact.TimeClassID = @timeClassID ) fact inner join #workingHours wpmCY on fact.FiscalMonthID= wpmCY.FiscalMonthID and fact.FiscalYearID= wpmCY.FiscalYearID and wpmCY.WorkWeekID= fact.WorkWeekID left join #workingHours wpmPY on fact.FiscalMonthID= wpmPY.FiscalMonthID and (fact.FiscalYearID-1)=wpmPY.FiscalYearID and wpmPY.WorkWeekID=fact.WorkWeekID IF OBJECT_ID('tempdb..#workingHours') IS NOT NULL DROP TABLE #workingHours END END ELSE -- Not rolling average BEGIN update fact set fact.FTEs=fact.Hours / (wpmCY.Hours), fact.FTEsYTD = fact.HoursYTD / (wpmCY.YTDHours), fact.FTEsPriorYear = CASE WHEN COALESCE(wpmPY.Hours, 0) = 0 THEN 0 ELSE fact.HoursPriorYear / (wpmPY.Hours) END, fact.FTEsPriorYTD = CASE WHEN COALESCE(wpmPY.YTDHours, 0) = 0 THEN 0 ELSE fact.HoursPriorYTD / (wpmPY.YTDHours) END from fw.FactPayrollSampledMonthly fact inner join [fw].[DimDepartment] D on fact.DepartmentID=D.DepartmentID inner join [fw].[DimJobCode] JC on fact.JobCodeID=JC.JobCodeID inner join fw.DimJobCodeGroup JCG on JC.jobCodeGroupID = JCG.JobCodeGroupID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-1 ELSE fact.FiscalYearID END=wpmCY.FiscalYearID and wpmCY.WorkWeekID=D.WorkWeekID left join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmPY on fact.FiscalMonthID=wpmPY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-2 ELSE fact.FiscalYearID-1 END=wpmPY.FiscalYearID and wpmPY.WorkWeekID=D.WorkWeekID inner join fw.DimFiscalMonth fm on fact.FiscalMonthID=fm.FiscalMonthID inner join [fw].[DimPayCodeGroup] pcg on fact.PayCodeGroupID = pcg.PayCodeGroupID where pcg.ProductiveClassID in ('3','2') --Productive and Non-Productive and jc.WorkWeekOverrideID=-1 and jcg.WorkWeekOverrideID=-1 and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and fact.TimeClassID = @timeClassID option (recompile) update fact set fact.FTEs=fact.Hours / (wpmCY.Hours), fact.FTEsYTD = fact.HoursYTD / (wpmCY.YTDHours), fact.FTEsPriorYear = CASE WHEN COALESCE(wpmPY.Hours, 0) = 0 THEN 0 ELSE fact.HoursPriorYear / (wpmPY.Hours) END, fact.FTEsPriorYTD = CASE WHEN COALESCE(wpmPY.YTDHours, 0) = 0 THEN 0 ELSE fact.HoursPriorYTD / (wpmPY.YTDHours) END from fw.FactPayrollSampledMonthly fact inner join [fw].[DimJobCode] JC on fact.JobCodeID=JC.JobCodeID inner join fw.DimJobCodeGroup JCG on JC.jobCodeGroupID = JCG.JobCodeGroupID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-1 ELSE fact.FiscalYearID END=wpmCY.FiscalYearID and wpmCY.WorkWeekID=jcg.WorkWeekOverrideID left join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmPY on fact.FiscalMonthID=wpmPY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-2 ELSE fact.FiscalYearID-1 END=wpmPY.FiscalYearID and wpmPY.WorkWeekID=jcg.WorkWeekOverrideID inner join fw.DimFiscalMonth fm on fact.FiscalMonthID=fm.FiscalMonthID inner join [fw].[DimPayCodeGroup] pcg on fact.PayCodeGroupID = pcg.PayCodeGroupID where pcg.ProductiveClassID in ('3','2') --Productive and Non-Productive and jcg.WorkWeekOverrideID<>-1 and jc.WorkWeekOverrideID=-1 and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and fact.TimeClassID = @timeClassID option (recompile) update fact set fact.FTEs=fact.Hours / (wpmCY.Hours), fact.FTEsYTD = fact.HoursYTD / (wpmCY.YTDHours), fact.FTEsPriorYear = CASE WHEN COALESCE(wpmPY.Hours, 0) = 0 THEN 0 ELSE fact.HoursPriorYear / (wpmPY.Hours) END, fact.FTEsPriorYTD = CASE WHEN COALESCE(wpmPY.YTDHours, 0) = 0 THEN 0 ELSE fact.HoursPriorYTD / (wpmPY.YTDHours) END from fw.FactPayrollSampledMonthly fact inner join [fw].[DimJobCode] JC on fact.JobCodeID=JC.JobCodeID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-1 ELSE fact.FiscalYearID END=wpmCY.FiscalYearID and wpmCY.WorkWeekID=jc.WorkWeekOverrideID left join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmPY on fact.FiscalMonthID=wpmPY.FiscalMonthID and CASE WHEN @targetType = 1 AND TimeClassID in (20,4,22) THEN fact.FiscalYearID-2 ELSE fact.FiscalYearID-1 END=wpmPY.FiscalYearID and wpmPY.WorkWeekID=jc.WorkWeekOverrideID inner join fw.DimFiscalMonth fm on fact.FiscalMonthID=fm.FiscalMonthID inner join [fw].[DimPayCodeGroup] pcg on fact.PayCodeGroupID = pcg.PayCodeGroupID where pcg.ProductiveClassID in ('3','2') --Productive and Non-Productive and jc.WorkWeekOverrideID<>-1 and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and fact.TimeClassID = @timeClassID option (recompile) END GO --------------------------------------------- -- fw.procFactPayrollSampledPayPeriodBaselineTargetOverridesUpdate /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2021-02-18 KF JAZZ-15158 Variable Productive Hours - Detailed Target Spread *************************************************************/ CREATE PROCEDURE [fw].[procFactPayrollSampledPayPeriodBaselineTargetOverridesUpdate] -- #PayrollSampledPayPeriodStaging should be created before calling this procedure AS IF OBJECT_ID('tempdb..#VariableHours') IS NOT NULL DROP TABLE #VariableHours IF OBJECT_ID('tempdb..#Spreads') IS NOT NULL DROP TABLE #Spreads DECLARE @ProductiveClassProductiveID INT = 3 SELECT FP.DepartmentID, FP.PayPeriodID, FP.JobCodeID, FP.PayCodeGroupID, CAST(FP.Hours AS decimal(21,6)) AS Hours, PT.VariableWorkedHoursPerUOS INTO #VariableHours FROM #PayrollSampledPayPeriodStaging FP INNER JOIN fw.DimPayPeriod PP ON PP.PayPeriodID = FP.PayPeriodID INNER JOIN clientpi.ProductivityTargetsByDepartment PT ON PT.FiscalYearID = PP.FiscalYearIDSecond AND PT.DepartmentID = FP.DepartmentID AND (PT.PeriodNumber = PP.PeriodNumber OR PT.PeriodNumber = 0) LEFT JOIN ( SELECT VO.DepartmentID, VO.JobCodeID, VO.PayCodeGroupID, CASE WHEN VO.Variability > 0 THEN 1 ELSE 0 END AS IsVariable FROM ob.PayrollVariabilityOverrideCache VO INNER JOIN fw.DimPayCodeGroup PCG ON PCG.PayCodeGroupID = VO.PayCodeGroupID WHERE PCG.ProductiveClassID = @ProductiveClassProductiveID ) V1 ON V1.DepartmentID = FP.DepartmentID AND V1.JobCodeID = FP.JobCodeID AND V1.PayCodeGroupID = FP.PayCodeGroupID LEFT JOIN ( SELECT D.DepartmentID, JC.JobCodeID, PCG.PayCodeGroupID, 1 AS IsVariable FROM fw.DimDepartment D CROSS JOIN fw.DimJobCode JC CROSS JOIN fw.DimPayCodeGroup PCG WHERE D.IsVariable = 1 AND JC.IsVariable = 1 AND PCG.IsVariable = 1 AND PCG.ProductiveClassID = @ProductiveClassProductiveID ) V2 ON V2.DepartmentID = FP.DepartmentID AND V2.JobCodeID = FP.JobCodeID AND V2.PayCodeGroupID = FP.PayCodeGroupID WHERE FP.TimeClassID = 20 AND COALESCE(V1.IsVariable, V2.IsVariable) = 1 AND (NOT (FP.IsSystemGenerated = 1 AND FP.Hours = 0)) SELECT VH.DepartmentID, VH.PayPeriodID, VH.JobCodeID, VH.PayCodeGroupID, (CASE WHEN D.IsZeroSum = 1 THEN 1.0 ELSE VH.Hours END)/D.Total AS Spread INTO #Spreads FROM #VariableHours VH INNER JOIN ( SELECT DepartmentID, PayPeriodID, CASE WHEN SUM(Hours) = 0 THEN 1 ELSE 0 END AS IsZeroSum, CASE WHEN SUM(Hours) = 0 THEN COUNT(1) ELSE SUM(Hours) END AS Total FROM #VariableHours GROUP BY DepartmentID, PayPeriodID ) D ON D.DepartmentID = VH.DepartmentID AND D.PayPeriodID = VH.PayPeriodID UPDATE ST SET Hours = S.Spread * VH.VariableWorkedHoursPerUOS * COALESCE(FS.Units, 0) FROM #VariableHours VH INNER JOIN #Spreads S ON S.DepartmentID = VH.DepartmentID AND S.PayPeriodID = VH.PayPeriodID AND S.JobCodeID = VH.JobCodeID AND S.PayCodeGroupID = VH.PayCodeGroupID INNER JOIN #PayrollSampledPayPeriodStaging ST ON ST.DepartmentID = VH.DepartmentID AND ST.PayPeriodID = VH.PayPeriodID AND ST.JobCodeID = VH.JobCodeID AND ST.PayCodeGroupID = VH.PayCodeGroupID LEFT JOIN ( SELECT DepartmentID, PayPeriodID, SUM(Units) AS Units FROM fw.viewPrimaryStatisticsStaffingByPayPeriod WHERE TimeClassID = 20 AND IsDeleted = 0 GROUP BY DepartmentID, PayPeriodID ) FS ON FS.DepartmentID = VH.DepartmentID AND FS.PayPeriodID = VH.PayPeriodID WHERE ST.TimeClassID = 20 IF OBJECT_ID('tempdb..#VariableHours') IS NOT NULL DROP TABLE #VariableHours IF OBJECT_ID('tempdb..#Spreads') IS NOT NULL DROP TABLE #Spreads GO --------------------------------------------- -- fw.procFactPayrollSampledPayPeriodBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 2 2018-05-24 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 3 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 4 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 5 2019-08-20 vfay D-08311 PR Sampling Proc : removed filtering out 0 Value Rows ** 6 2024-01-30 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values ** 7 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int *************************************************************/ CREATE PROC [fw].[procFactPayrollSampledPayPeriodBaselineTargetUpdate] @targetType tinyint = null, @numberOfPayPeriods tinyint = null, @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0 as if (@targetType is null) set @targetType = (select Value from pi.SystemSetting where Name = 'Target Basis') if (@numberOfPayPeriods is null) set @numberOfPayPeriods = (select Value from pi.SystemSetting where Name = 'Number Of Rolling Average Pay Periods') create table #departments (val int primary key) insert into #departments select val from ConvertCSValuesToTable(@departmentIDs, ',') create table #payperiods (val smallint primary key, PayCycleID int) insert into #payperiods select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID create table #PayPeriodsPriorYear (val smallint primary key, PayCycleID int) insert into #PayPeriodsPriorYear select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID-1 declare @sql varchar(max) create table #temp ( DepartmentID int, JobCodeID int, PayCodeGroupID int, PayPeriodID smallint, Hours decimal (18, 6), Dollars decimal (18, 6) ) if (@targetType = 10) begin --Rolling Average IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods select PayCycleID, PayPeriodID, SortOrder into #tempSortedPayPeriods from pi.viewPayPeriodsSortedInPayCycles IF @fiscalYearID = 0 BEGIN set @sql = ' insert into #temp (DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID,Hours,Dollars) select DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, isnull(Hours,0.0),isnull(Dollars,0.0) FROM ( select FullScope.DepartmentID, FullScope.JobCodeID, FullScope.PayCodeGroupID, FullScope.PayPeriodID, Dollars = ISNULL((SUM(Dollars) over(PARTITION BY DepartmentID, JobCodeID, PayCodeGroupID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfPayPeriods AS NVARCHAR(2)) +', 0), Hours = ISNULL((SUM(Hours) over(PARTITION BY DepartmentID, JobCodeID, PayCodeGroupID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfPayPeriods AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(Dollars) as Dollars, SUM(Hours) as Hours FROM ( SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID, p.PayPeriodID, p.Hours, p.Dollars FROM #PayrollSampledPayPeriodStaging p where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID, dpp.PayPeriodID, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledPayPeriodStaging p inner join #tempSortedPayPeriods pp on pp.PayPeriodID = p.PayPeriodID FULL join #tempSortedPayPeriods dpp on dpp.PayCycleID = pp.PayCycleID where dpp.SortOrder - pp.SortOrder between 1 and '+cast(@numberOfPayPeriods as nvarchar(2))+' and p.TimeClassID = 1 and p.isSystemGenerated = 0 ) AllCombinations GROUP BY DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID ) FullScope inner join #tempSortedPayPeriods t on t.PayPeriodID = FullScope.PayPeriodID ) FinalDataset WHERE (Dollars is not null or Hours is not null)' END ELSE BEGIN -- @fiscalYearID != 0 IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope select * into #PayPeriodsAllScope from #payperiods insert into #PayPeriodsAllScope select pp.PayPeriodID, pp.PayCycleID from fw.DimPayPeriod pp inner join #tempSortedPayPeriods t on t.PayPeriodID = pp.PayPeriodID inner join ( select s.PayCycleID, MIN(s.SortOrder-@numberOfPayPeriods) as MinSortOrder, MIN(s.SortOrder -1) as MaxSortOrder from #payperiods pp inner join #tempSortedPayPeriods s on s.PayPeriodID = pp.val group by s.PayCycleID ) r on r.PayCycleID = pp.PayCycleID and t.SortOrder between MinSortOrder and MaxSortOrder set @sql = ' select C.DepartmentID, C.JobCodeID, C.PayCodeGroupID, C.PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(C.Dollars) as Dollars, SUM(C.Hours) as Hours into #fullscope FROM ( SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID , p.PayPeriodID, p.Hours, p.Dollars FROM #PayrollSampledPayPeriodStaging p /*table contains only this particular actuals (filtered by Depts, Year) no need for additional filters*/ where TimeClassID = 1 and isSystemGenerated = 0 UNION ALL SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID , p.PayPeriodID, p.Hours, p.Dollars FROM fw.FactPayrollSampledPayPeriod p inner join #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end+' where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID, dpp.Val as PayPeriodID, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledPayPeriodStaging p inner join fw.DimPayPeriod pp on pp.PayPeriodID = p.PayPeriodID FULL join #PayPeriodsAllScope dpp on dpp.PayCycleID = pp.PayCycleID where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeGroupID, dpp.PayPeriodID, 0 AS Hours, 0 AS Dollars FROM fw.FactPayrollSampledPayPeriodDetailed p INNER JOIN #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ INNER JOIN fw.DimPayPeriod dpp ON dpp.PayCycleID = pppy.PayCycleID '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end +' where p.TimeClassID = 1 and p.isSystemGenerated = 0 ) C inner join #PayPeriodsAllScope P on p.val = C.PayPeriodID GROUP BY C.DepartmentID, C.JobCodeID, C.PayCodeGroupID, C.PayPeriodID insert into #temp (DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID,Hours,Dollars) select DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, isnull(Hours,0.0),isnull(Dollars,0.0) FROM ( select f.DepartmentID, f.JobCodeID, f.PayCodeGroupID, f.PayPeriodID, Dollars = ISNULL((SUM(f.Dollars) over(PARTITION BY f.DepartmentID, f.JobCodeID, f.PayCodeGroupID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfPayPeriods AS NVARCHAR(2)) +', 0), Hours = ISNULL((SUM(f.Hours) over(PARTITION BY f.DepartmentID, f.JobCodeID, f.PayCodeGroupID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfPayPeriods AS NVARCHAR(2)) +', 0) FROM #fullscope f inner join #tempSortedPayPeriods t on t.PayPeriodID = f.PayPeriodID ) FinalDataset INNER JOIN #PayPeriods PP on pp.Val = FinalDataset.PayPeriodID WHERE (Dollars is not null or Hours is not null)' END exec(@sql) IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope end else begin --Budget insert into #temp (DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, Hours ,Dollars) select DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, isnull(Hours,0.0),isnull(Dollars,0.0) from #PayrollSampledPayPeriodStaging where TimeClassID = 2 and (@departmentIDs is null or DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) end insert into #PayrollSampledPayPeriodStaging (DepartmentID, JobCodeID, PayPeriodID, PayCodeGroupID, TimeClassID, Hours,Dollars,HoursYTD,HoursPriorYear,HoursPriorYTD,DollarsYTD,DollarsPriorYear,DollarsPriorYTD,FTEs,FTEsYTD,FTEsPriorYear,FTEsPriorYTD, isSystemGenerated) SELECT DepartmentID, JobCodeID, PayPeriodID, PayCodeGroupID, 20 as TimeClassID, Hours,Dollars,0 as HoursYTD,0 as HoursPriorYear,0 as HoursPriorYTD,0 as DollarsYTD,0 as DollarsPriorYear,0 as DollarsPriorYTD,0 as FTEs,0 as FTEsYTD,0 as FTEsPriorYear,0 as FTEsPriorYTD, 0 as isSystemGenerated from #temp where (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) drop table #temp drop table #departments IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods; GO --------------------------------------------- -- fw.procFactPayrollSampledPayPeriodDetailedBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 2 2018-05-16 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 3 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 4 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 5 2019-08-23 vfay D-08311 PR Sampling Proc : removed filtering out 0 Value Rows ** 6 2024-01-30 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values ** 7 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int *************************************************************/ CREATE proc [fw].[procFactPayrollSampledPayPeriodDetailedBaselineTargetUpdate] @targetType tinyint = null, @numberOfPayPeriods tinyint = null, @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0 with recompile as if (@targetType is null) set @targetType = (select Value from pi.SystemSetting where Name = 'Target Basis') if (@numberOfPayPeriods is null) set @numberOfPayPeriods = (select Value from pi.SystemSetting where Name = 'Number Of Rolling Average Pay Periods') create table #departments (val int primary key) insert into #departments select val from ConvertCSValuesToTable(@departmentIDs, ',') create table #payperiods (val smallint primary key, PayCycleID int) insert into #payperiods select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID create table #PayPeriodsPriorYear (val smallint primary key, PayCycleID int) insert into #PayPeriodsPriorYear select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID-1 declare @sql varchar(max) create table #temp ( DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, EmployeeID int, PayPeriodID smallint, Hours decimal (18, 6), Dollars decimal (18, 6) ) if (@targetType = 10) begin --Rolling Average IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods select PayCycleID, PayPeriodID, SortOrder into #tempSortedPayPeriods from pi.viewPayPeriodsSortedInPayCycles IF @fiscalYearID = 0 BEGIN set @sql = ' insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, Hours, Dollars) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, isnull(Hours,0.0),isnull(Dollars,0.0) FROM ( select FullScope.DepartmentID, FullScope.JobCodeID, FullScope.PayCodeID, FullScope.PayCodeGroupID, FullScope.EmployeeId, FullScope.PayPeriodID, Dollars = ISNULL((Sum(Dollars) over(PARTITION BY DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0), Hours = ISNULL((Sum(Hours) over(PARTITION BY DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0) FROM ( select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(Dollars) as Dollars, SUM(Hours) as Hours FROM ( SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, p.EmployeeID, p.PayPeriodID, p.Hours, p.Dollars FROM #PayrollSampledPayPeriodDetailedStaging p where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, p.EmployeeID, dpp.PayPeriodID, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledPayPeriodDetailedStaging p inner join #tempSortedPayPeriods pp on pp.PayPeriodID = p.PayPeriodID FULL join #tempSortedPayPeriods dpp on dpp.PayCycleID = pp.PayCycleID where dpp.SortOrder - pp.SortOrder between 1 and '+cast(@numberOfPayPeriods as nvarchar(2))+' and p.TimeClassID = 1 and p.isSystemGenerated = 0 ) AllCombinations GROUP BY DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, PayPeriodID, EmployeeID ) FullScope inner join #tempSortedPayPeriods t on t.PayPeriodID = FullScope.PayPeriodID ) FinalDataset WHERE (Dollars is not null or Hours is not null)' end ELSE BEGIN -- @fiscalYearID != 0 IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope select * into #PayPeriodsAllScope from #payperiods insert into #PayPeriodsAllScope select pp.PayPeriodID, pp.PayCycleID from fw.DimPayPeriod pp inner join #tempSortedPayPeriods t on t.PayPeriodID = pp.PayPeriodID inner join ( select s.PayCycleID, MIN(s.SortOrder-@numberOfPayPeriods) as MinSortOrder, MIN(s.SortOrder -1) as MaxSortOrder from #payperiods pp inner join #tempSortedPayPeriods s on s.PayPeriodID = pp.val group by s.PayCycleID ) r on r.PayCycleID = pp.PayCycleID and t.SortOrder between MinSortOrder and MaxSortOrder set @sql = ' select C.DepartmentID, C.JobCodeID, C.PayCodeID, C.PayCodeGroupID, C.EmployeeID, C.PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(C.Dollars) as Dollars, SUM(C.Hours) as Hours into #fullscope FROM ( SELECT p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID , EmployeeID, p.PayPeriodID, p.Hours, p.Dollars FROM #PayrollSampledPayPeriodDetailedStaging p /*table contains only this particular actuals (filtered by Depts, Year) no need for additional filters*/ where TimeClassID = 1 and isSystemGenerated = 0 UNION ALL SELECT p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, p.EmployeeID, p.PayPeriodID, Hours, Dollars FROM fw.FactPayrollSampledPayPeriodDetailed p inner join #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end+' where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, EmployeeID ,dpp.Val as PayPeriodID, 0 AS Hours, 0 AS Dollars FROM #PayrollSampledPayPeriodDetailedStaging p inner join fw.DimPayPeriod pp on pp.PayPeriodID = p.PayPeriodID FULL join #PayPeriodsAllScope dpp on dpp.PayCycleID = pp.PayCycleID where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT p.DepartmentID, p.JobCodeID, p.PayCodeID, p.PayCodeGroupID, p.EmployeeID, dpp.PayPeriodID, 0 AS Hours, 0 AS Dollars FROM fw.FactPayrollSampledPayPeriodDetailed p INNER JOIN #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ INNER JOIN fw.DimPayPeriod dpp ON dpp.PayCycleID = pppy.PayCycleID '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end +' where p.TimeClassID = 1 and p.isSystemGenerated = 0 ) C inner join #PayPeriodsAllScope P on p.val = C.PayPeriodID GROUP BY C.DepartmentID, C.JobCodeID, C.PayCodeID, C.PayCodeGroupID, C.EmployeeID, C.PayPeriodID insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, Hours, Dollars) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, isnull(Hours,0.0), isnull(Dollars,0.0) FROM ( select f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, Dollars = ISNULL((Sum(f.Dollars) over(PARTITION BY f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0), Hours = ISNULL((Sum(f.Hours) over(PARTITION BY f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0) FROM #fullscope f inner join #tempSortedPayPeriods t on t.PayPeriodID = f.PayPeriodID ) FinalDataset INNER JOIN #PayPeriods PP on pp.Val = FinalDataset.PayPeriodID WHERE (Dollars is not null or Hours is not null)' END exec(@sql) IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope end else begin --Budget insert into #temp (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, Hours ,Dollars) select DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, isnull(Hours,0.0),isnull(Dollars,0.0) from #PayrollSampledPayPeriodDetailedStaging where TimeClassID = 2 and (@departmentIDs is null or DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) end insert into #PayrollSampledPayPeriodDetailedStaging (DepartmentID, JobCodeID, PayPeriodID, PayCodeGroupID, PayCodeID, EmployeeID, TimeClassID, Hours, Dollars) SELECT DepartmentID, JobCodeID, PayPeriodID, PayCodeGroupID, PayCodeID, EmployeeID, 20 as TimeClassID, Hours, Dollars from #temp where (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) drop table #temp drop table #departments drop table #payperiods IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods; GO --------------------------------------------- -- fw.procFactProviderSampledBaselineTargetUpdate /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-06-27 KF B-20195 MR - Provider calculate baseline target ** 2 2018-07-24 KF B-20342 MR - Update provider sampling to be in the appropriate format *************************************************************/ CREATE PROCEDURE [fw].[procFactProviderSampledBaselineTargetUpdate] @fiscalYearID INT = 0 AS CREATE TABLE #temp ( DepartmentID INT, ProviderID INT, FiscalYearID INT, FiscalMonthID INT, OBForecastDetailID INT, Dollars DECIMAL(18,6), Hours DECIMAL(18,6), Volume DECIMAL(18,6), FTEs DECIMAL(18,6) ) --DECLARE @maxCalculatingFiscalYear INT = (SELECT MAX(FiscalYearID) FROM #ProviderSampledStaging) --TODO: if Prior Year YTD/Rolling Average types are added, @targetType initialization should be changed in proc client.procFactProviderSampledMonthlyFTEsInsert based on mr.SystemSetting --Budget INSERT INTO #temp SELECT DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, OBForecastDetailID, Dollars, Hours, Volume, FTEs FROM #ProviderSampledStaging WHERE TimeClassID = 2 AND (FiscalYearID = @FiscalYearID OR @FiscalYearID = 0) DELETE FROM #ProviderSampledStaging WHERE TimeClassID = 20 and (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) INSERT INTO #ProviderSampledStaging (DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, TimeClassID, OBForecastDetailID, Dollars, Hours, Volume, FTEs) SELECT source.DepartmentID, source.ProviderID, source.FiscalYearID, source.FiscalMonthID, 20, source.OBForecastDetailID, source.Dollars, source.Hours, source.Volume, source.FTEs FROM #temp source WHERE NOT(Dollars = 0 AND Hours = 0 AND Volume = 0 AND FTEs = 0) DROP TABLE #temp GO --------------------------------------------- -- fw.procFactRoleAssignmentImportSample CREATE proc [fw].[procFactRoleAssignmentImportSample] as declare @rowID int declare @userGUID uniqueidentifier declare @roleID smallint declare @lootID nvarchar(16) declare crsRoleImport cursor fast_forward for select RowID, UserGUID, RoleID, LootGroupID from client.viewFactRoleAssignmentImport open crsRoleImport fetch next from crsRoleImport into @rowID, @userGUID, @roleID, @lootID while(@@FETCH_STATUS = 0) begin exec procS3AssignIdentityToRole @userGUID, @roleID, @lootID update client.FactRoleAssignmentImport set ImportDate = GETDATE() where RowID = @rowID and SampleDate = '01/01/1900' fetch next from crsRoleImport into @rowID, @userGUID, @roleID, @lootID end close crsRoleImport deallocate crsRoleImport GO --------------------------------------------- -- fw.procFactStatisticPrimarySampledBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-03-06 gforeman B-14693 Added year filter ** 2 2017-03-28 ipetriv D-05641 Logic for Prior and Actual was changed to simply copy actuals from previous year ** 3 2017-04-05 ipetriv D-05789 Changed algorithm for rolling average calculation ** 4 2017-05-24 IPetriv B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactStatisticPrimarySampledMonthly. ** 5 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 6 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 7 2018-05-16 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 8 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 9 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output *************************************************************/ CREATE proc [fw].[procFactStatisticPrimarySampledBaselineTargetUpdate] @targetType int = null, @numberOfMonths int = null, @fiscalYearID int = 0 as if (@targetType is null) set @targetType = (select Value from mr.SystemSetting where Name = 'Target Basis') if (@numberOfMonths is null) set @numberOfMonths = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') declare @sql varchar(max) declare @maxCalculatingFiscalYear int = (select max(FiscalYearID) from #StatisticPrimarySampledStaging) create table #temp ( DepartmentID int, AccountID int, FiscalYearID smallint, FiscalMonthID tinyint, Amount decimal (19, 4) ) if (@targetType = 1) begin --Prior Year Actual if @fiscalYearID <> 0 insert into #temp select d.DepartmentID, d.AccountID, d.FiscalYearID+1, d.FiscalMonthID, d.Amount from fw.FactStatisticPrimarySampledMonthly d WHERE d.TimeClassID = 1 and d.FiscalYearID = @fiscalYearID-1 else insert into #temp select d.DepartmentID, d.AccountID, d.FiscalYearID+1, d.FiscalMonthID, d.Amount from #StatisticPrimarySampledStaging d WHERE d.TimeClassID = 1 end else if (@targetType = 10) begin --Rolling Average IF @fiscalYearID = 0 set @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticPrimarySampledStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months which were present in prior year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Amount FROM #StatisticPrimarySampledStaging p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select FiscalYearID from fw.DimFiscalYear dm ) fy where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID <='+cast(@maxCalculatingFiscalYear as nvarchar(4)) ELSE SET @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticPrimarySampledStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*recods with amounts from previous year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM fw.FactStatisticPrimarySampledMonthly p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4)) +' UNION ALL SELECT /*combination of all for key columns months for current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, 0 AS Amount FROM #StatisticPrimarySampledStaging p CROSS APPLY fw.DimFiscalMonth m where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months which were present in prior year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Amount FROM fw.FactStatisticPrimarySampledMonthly p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select FiscalYearID from fw.DimFiscalYear dm where FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')'+' ) fy where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and p.FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4)) +' ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID ='+cast(@fiscalYearID as nvarchar(4)) exec (@sql) end else begin --Budget insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Amount from #StatisticPrimarySampledStaging where TimeClassID = 2 and (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) end insert into #StatisticPrimarySampledStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, 20, Amount from #temp where (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) and Amount !=0 drop table #temp GO --------------------------------------------- -- fw.procFactStatisticSampledBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-03-06 gforeman B-14693 Added year filter ** 2 2017-03-28 ipetriv D-05641 Logic for Prior and Actual was changed to simply copy actuals from previous year ** 3 2017-04-05 ipetriv D-05789 Changed algorithm for rolling average calculation ** 4 2017-05-24 IPetriv B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactPayrollSampledMonthlyDetailed. ** 5 2017-06-07 IPetriv B-15086 Fixed after integration test fails ** 6 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 7 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 8 2018-05-16 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 9 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 10 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output *************************************************************/ CREATE proc [fw].[procFactStatisticSampledBaselineTargetUpdate] @targetType int = null, @numberOfMonths int = null, @fiscalYearID int = 0 with recompile as if (@targetType is null) set @targetType = (select Value from mr.SystemSetting where Name = 'Target Basis') if (@numberOfMonths is null) set @numberOfMonths = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') declare @sql varchar(max) declare @maxCalculatingFiscalYear int = (select max(FiscalYearID) from #StatisticSampledMonthlyStaging) create table #temp ( DepartmentID int, AccountID int, FiscalYearID smallint, FiscalMonthID tinyint, Amount decimal (18, 6) ) if (@targetType = 1) begin --Prior Year Actual if @fiscalYearID <> 0 insert into #temp select d.DepartmentID, d.AccountID, d.FiscalYearID+1, d.FiscalMonthID, d.Amount from fw.FactStatisticSampledMonthly d where d.TimeClassID = 1 and d.FiscalYearID = @fiscalYearID-1 else insert into #temp select d.DepartmentID, d.AccountID, d.FiscalYearID+1, d.FiscalMonthID, d.Amount from #StatisticSampledMonthlyStaging d where d.TimeClassID = 1 end else if (@targetType = 10) begin --Rolling Average IF @fiscalYearID = 0 set @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticSampledMonthlyStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, fy.SortOrder, 0 AS Amount FROM #StatisticSampledMonthlyStaging p INNER JOIN fw.DimFiscalMonth m on m.FiscalMonthID = p.FiscalMonthID INNER JOIN (select FiscalYearID,FiscalMonthID,fm.sortOrder,fy.FiscalYearID*12+fm.SortOrder as ChronologicalOrder from fw.DimFiscalYear fy full join fw.DimFiscalMonth fm on 1= 1 where FiscalMonthID <> 0 and FiscalYearID <> 0) fy ON ChronologicalOrder - (p.FiscalYearID*12+m.SortOrder) between 1 and '+cast(@numberOfMonths as nvarchar(2))+' where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID <='+cast(@maxCalculatingFiscalYear as nvarchar(4)) ELSE set @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticSampledMonthlyStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(isSystemGenerated,0) = 0 UNION ALL SELECT /*recods with amounts from previous year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM fw.FactStatisticSampledMonthly p INNER JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(isSystemGenerated,0) = 0 and FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4)) +' UNION ALL SELECT /*combination of all for key columns months for current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, 0 AS Amount FROM #StatisticSampledMonthlyStaging p CROSS APPLY fw.DimFiscalMonth m where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Amount FROM fw.FactStatisticSampledMonthly p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select FiscalYearID from fw.DimFiscalYear dm where FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')'+' ) fy where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and p.FiscalYearID ='+cast(@fiscalYearID-1 as nvarchar(4))+' ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID ='+cast(@fiscalYearID as nvarchar(4)) exec (@sql) end else begin --Budget insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Amount from #StatisticSampledMonthlyStaging where TimeClassID = 2 and (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) end insert into #StatisticSampledMonthlyStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, isSystemGenerated) select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, 20, Amount, 0 as isSystemGenerated from #temp WHERE (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) and Amount !=0 drop table #temp GO --------------------------------------------- -- fw.procFactStatisticSampledPayPeriodBaselineTargetUpdate /************************************************************ ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-02-08 GJF B-14308 Added year filter ** 2 2017-04-05 ipetriv D-05789 Changed algorithm for rolling average calculation ** 3 2017-05-29 ipetriv B-15994 Refactored sampling process and implemented using of staging tables ** 4 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 5 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 6 2018-05-16 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 7 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 8 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 9 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output ** 10 2020-07-30 HV JAZZ-2302 YTD PR Calculations Incorrect when Processing Current Year Only ** 11 2024-01-30 KF JAZZ-66821 Run PR Process Task: Some procs don't support non-consecutive pay period id (expect consecutive pay period id). It causes wrong YTD values & wrong Rolling Average Baseline Target values *************************************************************/ CREATE PROCEDURE [fw].[procFactStatisticSampledPayPeriodBaselineTargetUpdate] @targetType tinyint = null, @numberOfPayPeriods tinyint = null, @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0 with recompile as if (@targetType is null) set @targetType = (select Value from pi.SystemSetting where Name = 'Target Basis') if (@numberOfPayPeriods is null) set @numberOfPayPeriods = (select Value from pi.SystemSetting where Name = 'Number Of Rolling Average Pay Periods') declare @sql varchar(max) create table #departments (val int primary key) insert into #departments select val from ConvertCSValuesToTable(@departmentIDs, ',') create table #payperiods(val smallint primary key, PayCycleID int) insert into #payperiods select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID create table #PayPeriodsPriorYear (val smallint primary key, PayCycleID int) insert into #PayPeriodsPriorYear select PayPeriodID, PayCycleID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID-1 create table #temp ( DepartmentID int, AccountID int, PayPeriodID smallint, Units decimal (18, 6) ) if (@targetType = 10) begin --Rolling Average IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods SELECT PayCycleID, PayPeriodID, SortOrder INTO #tempSortedPayPeriods FROM pi.viewPayPeriodsSortedInPayCycles IF @fiscalYearID = 0 BEGIN set @sql = ' insert into #temp (DepartmentID, AccountID, PayPeriodID, Units) select DepartmentID, AccountID, PayPeriodID, isnull(Units,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.PayPeriodID, Units = ISNULL((Sum(Units) over(PARTITION BY DepartmentID, AccountID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0) FROM ( select DepartmentID, AccountID, PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(Units) as Units FROM ( SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.AccountID, p.PayPeriodID, p.Units FROM #StatisticSampledPayPeriod p where TimeClassID = 1 and isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, dpp.PayPeriodID, 0 AS Units FROM #StatisticSampledPayPeriod p inner join #tempSortedPayPeriods pp on pp.PayPeriodID = p.PayPeriodID FULL join #tempSortedPayPeriods dpp on dpp.PayCycleID = pp.PayCycleID where dpp.SortOrder - pp.SortOrder between 1 and '+cast(@numberOfPayPeriods as nvarchar(2))+' and p.TimeClassID = 1 and p.isSystemGenerated = 0 ) AllCombinations GROUP BY DepartmentID, AccountID, PayPeriodID ) FullScope inner join #tempSortedPayPeriods t on t.PayPeriodID = FullScope.PayPeriodID ) FinalDataset WHERE Units is not null' END ELSE BEGIN -- @fiscalYearID != 0 IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope select * into #PayPeriodsAllScope from #payperiods insert into #PayPeriodsAllScope select pp.PayPeriodID, pp.PayCycleID from fw.DimPayPeriod pp inner join #tempSortedPayPeriods t on t.PayPeriodID = pp.PayPeriodID inner join ( select s.PayCycleID, MIN(s.SortOrder-@numberOfPayPeriods) as MinSortOrder, MIN(s.SortOrder -1) as MaxSortOrder from #payperiods pp inner join #tempSortedPayPeriods s on s.PayPeriodID = pp.val group by s.PayCycleID ) r on r.PayCycleID = pp.PayCycleID and t.SortOrder between MinSortOrder and MaxSortOrder set @sql = ' select C.DepartmentID, C.AccountID, C.PayPeriodID, /*records for months, which are absent in current year, but exist at least one month*/ SUM(C.Units) as Units into #fullscope FROM ( SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.AccountID, p.PayPeriodID, p.Units FROM #StatisticSampledPayPeriod p /*table contains only this particular actuals (filtered by Depts, Year) no need for additional filters*/ where TimeClassID = 1 and isSystemGenerated = 0 UNION ALL SELECT /*recods for months which are present in current year*/ p.DepartmentID, p.AccountID, p.PayPeriodID, p.Units FROM fw.FactStatisticSampledPayPeriod p inner join #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end+' where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, dpp.val as PayPeriodID, 0 AS Units FROM #StatisticSampledPayPeriod p inner join fw.DimPayPeriod pp on pp.PayPeriodID = p.PayPeriodID FULL join #PayPeriodsAllScope dpp on dpp.PayCycleID = pp.PayCycleID where p.TimeClassID = 1 and p.isSystemGenerated = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, dpp.PayPeriodID, 0 AS Units FROM fw.FactStatisticSampledPayPeriod p INNER JOIN #PayPeriodsPriorYear pppy on p.PayPeriodID = pppy.val /*filtering only values for "prior year", in fact periods, which affects current year*/ INNER JOIN fw.DimPayPeriod dpp ON dpp.PayCycleID = pppy.PayCycleID '+ case when @departmentIDs IS NULL then '' else ' INNER JOIN #departments dpt on dpt.val = p.DepartmentID' end +' where p.TimeClassID = 1 and p.isSystemGenerated = 0 ) C inner join #PayPeriodsAllScope P on p.val = C.PayPeriodID GROUP BY C.DepartmentID, C.AccountID, C.PayPeriodID insert into #temp (DepartmentID, AccountID, PayPeriodID, Units) select DepartmentID, AccountID, PayPeriodID, isnull(Units,0.0) FROM ( select f.DepartmentID, f.AccountID, f.PayPeriodID, Units = ISNULL((Sum(f.Units) over(PARTITION BY f.DepartmentID, f.AccountID, t.PayCycleID ORDER BY t.SortOrder ROWS BETWEEN '+cast(@numberOfPayPeriods as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/'+cast(@numberOfPayPeriods as nvarchar(2))+', 0) FROM #fullscope f inner join #tempSortedPayPeriods t on t.PayPeriodID = f.PayPeriodID ) FinalDataset INNER JOIN #PayPeriods PP on pp.Val = FinalDataset.PayPeriodID WHERE Units is not null' END exec(@sql) IF OBJECT_ID('tempdb..#fullscope') IS NOT NULL DROP TABLE #fullscope end else begin --Budget insert into #temp (DepartmentID, AccountID, PayPeriodID, Units) select DepartmentID, AccountID, PayPeriodID, Units from #StatisticSampledPayPeriod where TimeClassID = 2 and (@departmentIDs is null or DepartmentID in (select val from #departments)) and (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) end insert into #StatisticSampledPayPeriod (DepartmentID, AccountID,PayPeriodID, TimeClassID, Units) select source.DepartmentID, source.AccountID, source.PayPeriodID, 20, source.Units from #temp source where (@fiscalYearID = 0 or PayPeriodID in(select val from #payperiods)) and Units !=0 drop table #temp drop table #departments drop table #payperiods drop table #PayPeriodsPriorYear IF OBJECT_ID('tempdb..#PayPeriodsAllScope') IS NOT NULL DROP TABLE #PayPeriodsAllScope IF OBJECT_ID('tempdb..#tempSortedPayPeriods') IS NOT NULL DROP TABLE #tempSortedPayPeriods GO --------------------------------------------- -- fw.procFactStatisticSecondarySampledBaselineTargetUpdate /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-03-07 gforeman B-14693 Added year filter ** 2 2017-03-28 ipetriv D-05641 Logic for Prior and Actual was changed to simply copy actuals from previous year ** 3 2017-04-05 ipetriv D-05789 Changed algorithm for rolling average calculation ** 4 2017-05-29 ipetriv B-15994 Refactored sampling process and implemented using of staging tables ** 5 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 6 2017-07-20 IP D-06150 Fixed updating values for Target Type = 2 ** 7 2018-05-16 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 8 2018-05-16 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 9 2018-06-01 IP D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values (one year part) ** 10 2018-06-05 IP TK-58643 added filetr for current year only and non-zero records in output *************************************************************/ CREATE proc [fw].[procFactStatisticSecondarySampledBaselineTargetUpdate] @targetType int = null, @numberOfMonths int = null, @fiscalYearID int = 0 as if (@targetType is null) set @targetType = (select Value from mr.SystemSetting where Name = 'Target Basis') if (@numberOfMonths is null) set @numberOfMonths = (select Value from mr.SystemSetting where Name = 'Number Of Rolling Average Months') declare @sql varchar(max) declare @maxCalculatingFiscalYear int = (select max(FiscalYearID) from #StatisticSecondarySampledMonthlyStaging) create table #temp ( DepartmentID int, AccountID int, FiscalYearID smallint, FiscalMonthID tinyint, Amount decimal (19, 4) ) if (@targetType = 1) begin --Prior Year Actual insert into #temp select d.DepartmentID, d.AccountID, d.FiscalYearID+1, d.FiscalMonthID, d.Amount from fw.FactStatisticSecondarySampledMonthly d where d.TimeClassID = 1 and (@fiscalYearID = 0 or d.FiscalYearID = @fiscalYearID-1) end else if (@targetType = 10) begin --Rolling Average IF @fiscalYearID = 0 set @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticSecondarySampledMonthlyStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Amount FROM #StatisticSecondarySampledMonthlyStaging p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select FiscalYearID from fw.DimFiscalYear dm) fy where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID <='+cast(@maxCalculatingFiscalYear as nvarchar(4)) ELSE SET @sql = ' insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID,isnull(Amount,0.0) FROM ( select FullScope.DepartmentID, FullScope.AccountID, FullScope.FiscalYearID, m.FiscalMonthID, Amount = ISNULL((Sum(Amount) over(PARTITION BY DepartmentID,AccountID ORDER BY FiscalYearID*12+m.SortOrder ROWS BETWEEN '+cast(@numberOfMonths as nvarchar(2))+' PRECEDING AND 1 PRECEDING))/' + cast(@numberOfMonths AS NVARCHAR(2)) +', 0) FROM ( select DepartmentID, /*records for months, which are absent in current year, but exist at least one month*/ AccountID, FiscalYearID, SortOrder, SUM(Amount) as Amount FROM ( SELECT /*recods for months which are present in current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM #StatisticSecondarySampledMonthlyStaging p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 UNION ALL SELECT /*combination of all for key columns months for current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, Amount FROM fw.FactStatisticSecondarySampledMonthly p JOIN fw.DimFiscalMonth m ON p.FiscalMonthID = m.FiscalMonthID where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4)) +' UNION ALL SELECT /*combination of all for key columns months for current year*/ DepartmentID, AccountID, FiscalYearID, m.SortOrder, 0 AS Amount FROM #StatisticSecondarySampledMonthlyStaging p CROSS APPLY fw.DimFiscalMonth m where m.FiscalMonthID <> 0 and TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and FiscalYearID = '+cast(@fiscalYearID as nvarchar(4)) +' UNION ALL SELECT /*combination of all for key columns months for current year*/ p.DepartmentID, p.AccountID, fy.FiscalYearID, m.SortOrder, 0 AS Amount FROM fw.FactStatisticSecondarySampledMonthly p CROSS JOIN fw.DimFiscalMonth m CROSS JOIN (select FiscalYearID from fw.DimFiscalYear dm where dm.FiscalYearID in ('+cast(@fiscalYearID-1 as nvarchar(4))+','+cast(@fiscalYearID as nvarchar(4))+')'+' ) fy where m.FiscalMonthID <> 0 and p.TimeClassID = 1 and isnull(p.IsSystemGenerated,0) = 0 and p.FiscalYearID = '+cast(@fiscalYearID-1 as nvarchar(4))+' ) AllCombinations GROUP BY DepartmentID,AccountID,FiscalYearID,SortOrder ) FullScope JOIN fw.DimFiscalMonth m ON FullScope.SortOrder = m.SortOrder ) FinalDataset WHERE Amount is not null AND FiscalYearID ='+cast(@fiscalYearID as nvarchar(4)) exec (@sql) end else begin --Budget insert into #temp select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Amount from #StatisticSecondarySampledMonthlyStaging where TimeClassID = 2 and (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) end INSERT INTO #StatisticSecondarySampledMonthlyStaging (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,Amount,TimeClassID) SELECT DepartmentID,AccountID,FiscalYearID,FiscalMonthID,Amount,20 FROM #temp WHERE (@fiscalYearID = 0 or FiscalYearID = @fiscalYearID) and Amount !=0 exec [dbo].[procRollingDeleteOnTable] 'fw', 'FactStatisticSecondarySampledMonthly', 'RowID', 'fw.FactStatisticSecondarySampledMonthly', 'TimeClassID = 20 and IsDeleted = 1', 10000, 0.5, 0 drop table #temp GO --------------------------------------------- -- fw.procFillFactPatientBillingLineItemGroupedCache /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-10-13 KF JAZZ-44078 Charge Based Statistics Modals Performance Improvement ** 2 2022-02-01 KF JAZZ-48413 Charge Based Statistics Modals Performance Improvement- Bug Fixing *************************************************************/ CREATE PROC [fw].[procFillFactPatientBillingLineItemGroupedCache] AS -- Truncate table, drop indexes TRUNCATE TABLE fw.FactPatientBillingLineItemGroupedCache EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPatientBillingLineItemGroupedCache', @indexName = 'CORE_PostDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc' EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPatientBillingLineItemGroupedCache', @indexName = 'CORE_ServiceDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc' -- Split by batches DECLARE @batchSize INT = 200000000 IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) DECLARE @fromClause nvarchar(max) = ' dss.FactPatientBillingLineItemDetail fd INNER JOIN fw.DimDepartment d ON d.DepartmentID = fd.DepartmentID', @whereClause nvarchar(max) = '', @declareParameters nvarchar(max) = '' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'fd', @fromClause = @fromClause, @whereClause = @whereClause, @declareParameters = @declareParameters, @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactPatientBillingLineItemGroupedCache (DepartmentID, ChargeCodeID, PatientTypeRollupID, ServiceDateID, PostDateID, FiscalYearID, UnitsOfService) SELECT fd.DepartmentID, fd.ChargeCodeId, pt.PatientTypeRollupId, fd.ServiceDateId, fd.PostDateID, fd.FiscalYearID, COALESCE(SUM(fd.UnitsOfService), 0.0E0) AS UnitsOfService FROM dss.FactPatientBillingLineItemDetail fd INNER JOIN clientdss.FactPatientEncounterSummary fs ON fs.EncounterID = fd.EncounterID INNER JOIN fw.DimPatientType pt ON pt.PatientTypeID = fs.PatientTypeID INNER JOIN fw.DimChargeCode c ON c.ChargeCodeID = fd.ChargeCodeID INNER JOIN fw.DimPatientTypeRollup ptr ON ptr.PatientTypeRollupId = pt.PatientTypeRollupId INNER JOIN #inputDepartments ID ON ID.DepartmentID = fd.DepartmentID WHERE ID.BatchID = @BatchID GROUP BY fd.DepartmentID, fd.ChargeCodeId, pt.PatientTypeRollupId, fd.ServiceDateId, fd.PostDateID, fd.FiscalYearID SET @BatchID = @BatchID + 1 END -- Recreate indexes CREATE INDEX CORE_PostDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc ON fw.FactPatientBillingLineItemGroupedCache (PostDateID, DepartmentID, ChargeCodeID, PatientTypeRollupID) INCLUDE(UnitsOfService) CREATE INDEX CORE_ServiceDateID_DepartmentID_ChargeCodeID_PatientTypeRollupID_inc ON fw.FactPatientBillingLineItemGroupedCache (ServiceDateID, DepartmentID, ChargeCodeID, PatientTypeRollupID) INCLUDE(UnitsOfService) IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments IF OBJECT_ID('tempdb..#transactions') IS NOT NULL DROP TABLE #transactions GO --------------------------------------------- -- fw.procFlexProviderStatisticsMonthly /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-06-27 KZ B-19363 MR - Provider flexing - flexing ** 2 2018-06-28 KF B-19363 MR - Provider flexing - flexing ** 3 2018-07-10 KZ B-20342 MR - Update provider sampling to be in the appropriate format *************************************************************/ CREATE PROCEDURE [fw].[procFlexProviderStatisticsMonthly] @fiscalYearID INT = 0, @departmentIDs nvarchar(max) = null AS declare @minYear int = @fiscalYearID - 1 declare @maxYear int = @fiscalYearID if (@minYear = 0 or @maxYear = 0) begin select @minYear = min(FiscalYearID) from [fw].[FactProviderSampledMonthly_Pivoted] select @maxYear = max(FiscalYearID) from [fw].[FactProviderSampledMonthly_Pivoted] end declare @currentYear int select @currentYear = Setting from [dbo].[DBSetting] where Name='Current_GL_YearID' declare @currentMonth int select @currentMonth = Setting from [dbo].[DBSetting] where Name='Current_GL_MonthID' declare @month int select @month = SortOrder + @currentYear * 12 from [fw].[DimFiscalMonth] where FiscalMonthID=@currentMonth DELETE FROM [fw].[FactProviderSampledMonthly_Pivoted] WHERE TimeClassID = 4 AND (FiscalYearID between @minYear AND @maxYear) AND (@departmentIDs is null or DepartmentID in (select val from ConvertCSValuesToTable(@departmentIDs, ','))) INSERT INTO [fw].[FactProviderSampledMonthly_Pivoted] ([DepartmentID], [ProviderID], [OBForecastDetailID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [Volume]) SELECT F.[DepartmentID], F.[ProviderID], F.[OBForecastDetailID], F.[FiscalYearID], F.[FiscalMonthID], 4 as [TimeClassID], iif(F.FiscalYearID * 12 + max(M.SortOrder) <= @month, sum( case when F.TimeClassID = 1 then F.[Volume] * cast(FD.IsVariable as decimal(18, 6)) * cast(D.IsVariable as decimal(18, 6)) * cast(P.IsVariable as decimal(18, 6)) when F.TimeClassID = 20 then F.[Volume] * (1.0 - (cast(FD.IsVariable as decimal(18, 6)) * cast(D.IsVariable as decimal(18, 6)) * cast(P.IsVariable as decimal(18, 6)))) else 0 end) , coalesce(sum(case when F.TimeClassID = 20 then F.[Volume] end), 0)) as [Amount] FROM [fw].[FactProviderSampledMonthly_Pivoted] F INNER JOIN [fw].[DimDepartment] D on D.DepartmentID = F.DepartmentID INNER JOIN [ob].[DimOBForecastDetail] FD on FD.OBForecastDetailID = F.OBForecastDetailID INNER JOIN [fw].[DimProvider] P on P.ProviderID = F.ProviderID INNER JOIN [fw].[DimFiscalMonth] M on M.FiscalMonthID = F.FiscalMonthID WHERE F.IsDeleted = 0 and F.TimeClassID in(1, 20) AND (FiscalYearID between @minYear AND @maxYear) AND (@departmentIDs is null or F.DepartmentID in (select val from ConvertCSValuesToTable(@departmentIDs, ','))) GROUP BY F.[DepartmentID], F.[ProviderID], F.[OBForecastDetailID], F.[FiscalYearID], F.[FiscalMonthID] GO --------------------------------------------- -- fw.procFlexStatisticsDaily CREATE PROCEDURE [fw].[procFlexStatisticsDaily] /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2019-03-19 KF D-08059 PR | Daily and pay period screens are calculating targets differently ** 2 2022-07-05 HV JAZZ-39736 PR Metrics Definition - Statistics Daily Flexing ** 3 2022-08-02 HV JAZZ-41284 Daily flexing - Payroll Hours and Dollars ** 4 2022-08-30 KF JAZZ-42568 Flex UOS not accounting for account variability for daily PR ** 5 2024-02-23 HV JAZZ-67657 [RowId] Convert fw.FactStatisticSampledDaily.Rowid to bigint *************************************************************/ @FiscalYearID INT = 0, @DepartmentIDs NVARCHAR(MAX) = null, @isOnlyOnePayPeriod BIT = 0 AS DECLARE @currentDateOverride nvarchar(max) = (SELECT Value FROM [pi].[SystemSetting] WHERE Name = 'Current Date Override') DECLARE @currentDate date = CASE WHEN @currentDateOverride = '' THEN CAST(GETDATE() AS DATE) ELSE CAST (@currentDateOverride AS date) END DECLARE @yesterdayDate date = DATEADD(DAY, - 1, @currentDate) DECLARE @yesterdayDateID int = (SELECT DateID FROM fw.DimDate WHERE CalendarDateTime = @yesterdayDate) IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope CREATE TABLE #DailyCalcPeriodsScope (PayPeriodID int primary key,PayCycleID int,PeriodStartCalendarDate date,PeriodEndCalendarDate date) INSERT INTO #DailyCalcPeriodsScope (PayPeriodID,PayCycleID,PeriodStartCalendarDate,PeriodEndCalendarDate) SELECT PayPeriodID,PayCycleID,PeriodStartCalendarDate,PeriodEndCalendarDate FROM fw.DimPayPeriod WHERE (@isOnlyOnePayPeriod = 1 and @yesterdayDate BETWEEN PeriodStartCalendarDate and PeriodEndCalendarDate) or (@isOnlyOnePayPeriod = 0 and (FiscalYearIDSecond = @fiscalYearID or @fiscalYearID = 0)) IF OBJECT_ID('tempdb..#DepartmentIDs') IS NOT NULL DROP TABLE #DepartmentIDs CREATE TABLE #DepartmentIDs (val int primary key) INSERT INTO #DepartmentIDs select val from ConvertCSValuesToTable(@departmentIDs, ',') DECLARE @FromClause NVARCHAR(MAX) = 'fw.FactStatisticSampledDaily F INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = F.PayPeriodID' DECLARE @WhereClause NVARCHAR(MAX) = 'F.TimeClassID = 4' IF(@DepartmentIDs IS NOT NULL) BEGIN SET @FromClause = @fromClause + ' INNER JOIN #DepartmentIDs TD ON TD.val = F.DepartmentID' END exec [dbo].[procRollingDeleteOnTable] @tableSchema = 'fw', @tableName = 'FactStatisticSampledDaily', @identityColumn = 'RowID', @fromClause = @FromClause, @whereClause = @WhereClause, @deleteRecordCount = 10000000, @truncateThreshold = 0.5, @isPrintingStatement = 0 DECLARE @nextRowID BIGINT SELECT @nextRowID = ISNULL((SELECT MAX(RowID) FROM fw.FactStatisticSampledDaily), 1) DBCC CHECKIDENT('fw.FactStatisticSampledDaily','RESEED', @nextRowID); DECLARE @BatchSize INT = 30000000 IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods SELECT F.PayPeriodID, COUNT(1) AS RecordsCount, 0 AS BatchID INTO #inputPayPeriods FROM fw.FactStatisticSampledDaily F INNER JOIN #DailyCalcPeriodsScope dcp on F.PayPeriodID = dcp.PayPeriodID WHERE F.IsDeleted = 0 AND F.TimeClassID in(1, 20) GROUP BY F.PayPeriodID -- Split data into batches WHILE EXISTS (SELECT TOP 1 1 FROM #inputPayPeriods WHERE BatchID = 0) BEGIN ;WITH PayPeriodInfo AS ( SELECT DM.PayPeriodID, ROW_NUMBER() OVER (ORDER BY DM.PayPeriodID) AS RowNumber, SUM(RecordsCount) OVER (ORDER BY DM.PayPeriodID) AS Total, M.MaxBatchID+1 AS BatchID FROM #inputPayPeriods IPP INNER JOIN fw.DimPayPeriod DM ON DM.PayPeriodID = IPP.PayPeriodID CROSS JOIN (SELECT MAX(BatchID) AS MaxBatchID FROM #inputPayPeriods) M WHERE IPP.BatchID = 0 ) UPDATE IPP SET IPP.BatchID = MI.BatchID FROM #inputPayPeriods IPP INNER JOIN PayPeriodInfo MI ON MI.PayPeriodID = IPP.PayPeriodID WHERE MI.Total <= @BatchSize OR MI.RowNumber = 1 END DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactStatisticSampledDaily (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) SELECT S.DepartmentID, S.AccountID, S.PayPeriodID, S.DateID, S.TimeClassID, S.Units FROM ( SELECT F.DepartmentID, F.AccountID, F.PayPeriodID, F.DateID, 4 AS TimeClassID, CASE WHEN F.DateID <= @yesterdayDateID THEN SUM(CASE WHEN F.TimeClassID = 1 THEN F.Units * A.Variability * CAST(D.IsVariable as decimal(18, 6)) WHEN F.TimeClassID = 20 THEN F.Units * (1.0 - (A.Variability * CAST(D.IsVariable as decimal(18, 6)))) ELSE 0 END) ELSE COALESCE(SUM(CASE WHEN F.TimeClassID = 20 THEN F.Units END), 0) END AS Units FROM fw.FactStatisticSampledDaily F INNER JOIN fw.DimDepartment D on D.DepartmentID = F.DepartmentID INNER JOIN fw.DimAccount A on A.AccountID = F.AccountID INNER JOIN fw.DimDate DD on DD.DateID = F.DateID INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = F.PayPeriodID LEFT JOIN #DepartmentIDs TD ON TD.val = D.DepartmentID WHERE F.IsDeleted = 0 AND F.TimeClassID in(1, 20) AND (@DepartmentIDs IS NULL OR TD.val IS NOT NULL) AND IPP.BatchID = @BatchID GROUP BY F.DepartmentID, F.AccountID, F.DateID, F.PayPeriodID ) S SET @BatchID = @BatchID + 1 END IF OBJECT_ID('tempdb..#DepartmentIDs') IS NOT NULL DROP TABLE #DepartmentIDs GO --------------------------------------------- -- fw.procGLSampledAdjustedTargetMonthlyInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-10-02 IP B-17596 Created ** 2 2018-11-19 OV D-06627 fix: GL Dollars Adjusted Target records are not added when there is only Actual data ** 3 2020-02-05 IH D-08896 Add handling of Units ** 4 2022-08-23 BC JAZZ-11498 Change Table Variable to Temporary Tables *************************************************************/ CREATE PROCEDURE [fw].[procGLSampledAdjustedTargetMonthlyInsert] (@FiscalYearID INT = 0) AS BEGIN /* Proposal If the client is not using flexing, this will be the target plus the efficiency factor This should work regardless of the target basis (i.e. rolling avg or budget) The factor will be applied after the inversion If the factor type is percentage, the adjusted target will be the target*(1+factor) i.e. if my target is 100 and my factor is 5%, the adjusted target will be 100*(1+0.05)=105 i.e. if my target is 100 and my factor is -5%, the adjusted target will be 100*(1+-0.05)=95 If the factor type is value, the adjusted value will be target + factor i.e. if my target is 1000 and my factor is 200, the adjusted target will be will be 1000+200=1200 i.e. if my target is 1000 and my factor is -200, the adjusted target will be 1000-200=800 If there is more than one factor impacting a department and account or job code/pay code group combination, then the factors should layer on top of each other based on history order If an efficiency factor does not exist for a particular account/job code, then the value in the new time class will be either flex or baseline target if flex is not used This will happen after Flex is calculated Include integration tests */ DECLARE @IsFlexingEnabled INT = ( SELECT VALUE FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope CREATE TABLE #EfficiencyFactorScope ( EfficiencyFactorGUID [uniqueidentifier] NOT NULL ,[DepartmentID] [int] NOT NULL ,[AccountID] [int] NOT NULL ,[FiscalYearID] [smallint] NOT NULL ,[FiscalMonthID] [tinyint] NOT NULL ,Value NUMERIC(25, 6) NOT NULL ,Type TINYINT ,FactorType CHAR(1) ,DateCreated DATETIME ,UNIQUE CLUSTERED ( FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) ); IF EXISTS (SELECT TOP 1 * FROM [mr].[EfficiencyFactor]) BEGIN WITH EfficiencyFactorScope AS ( SELECT * ,rn = ROW_NUMBER() OVER ( PARTITION BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ORDER BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) FROM ( SELECT DISTINCT ef.EfficiencyFactorGUID ,ef.FiscalYearID ,efgd.FiscalMonthID ,efd.DepartmentID ,isnull(efgd.AccountID, da.AccountID) AS AccountID ,CASE WHEN isnull(efgd.AccountID, - 999) = da.AccountID THEN 0 ELSE efgd.Value END AS Value ,ef.Type ,ef.FactorType ,ef.DateCreated FROM mr.EfficiencyFactor ef INNER JOIN mr.EfficiencyFactorDepartment efd ON ef.EfficiencyFactorGUID = efd.EfficiencyFactorGUID INNER JOIN mr.EfficiencyFactorGLDetails efgd ON efgd.EfficiencyFactorGUID = ef.EfficiencyFactorGUID LEFT JOIN fw.DimAccount da ON efgd.OBFinancialReportingID = da.OBDollarsFinancialReportingID AND efgd.AccountID IS NULL LEFT JOIN mr.EfficiencyFactorGLDetails efgd_exist ON efgd.EfficiencyFactorGUID = efgd_exist.EfficiencyFactorGUID AND efgd_exist.AccountID = da.AccountID AND efgd_exist.FiscalMonthID = efgd.FiscalMonthID WHERE ( @FiscalYearID = ef.FiscalYearID OR @FiscalYearID = 0 ) AND ( efgd_exist.AccountID IS NULL OR da.AccountID IS NULL ) AND ef.Type = 0 AND isnull(efgd.AccountID, da.AccountID) IS NOT NULL ) X ) INSERT INTO #EfficiencyFactorScope ( EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated ) SELECT EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated FROM EfficiencyFactorScope WHERE RN = 1 DELETE FROM fw.FactGLSampled WHERE ( @FiscalYearID = FiscalYearID OR @FiscalYearID = 0 ) AND TimeClassID = 22 INSERT INTO fw.FactGLSampled ( DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,TimeClassID ,IsDeleted ,Dollars ,Units ) SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,22 AS TimeClassID ,0 AS IsDeleted ,SUM(Dollars) ,SUM(Units) FROM ( SELECT isnull(fact.DepartmentID, ToApply.DepartmentID) AS DepartmentID ,isnull(fact.AccountID, toApply.AccountID) AS AccountID ,isnull(fact.FiscalYearID, toApply.FiscalYearID) AS FiscalYearID ,isnull(fact.FiscalMonthID, toApply.FiscalMonthID) AS FiscalMonthID ,Dollars = CASE WHEN FactorType = 'P' THEN isnull(Dollars, 0.0) * isnull(Value, 0.0) / 100.00 ELSE isnull(Value, 0.0) END ,Units = 0.0 FROM #EfficiencyFactorScope ToApply INNER JOIN ( SELECT DISTINCT DepartmentID ,AccountID FROM fw.FactGLSampled ) GenCand ON GenCand.DepartmentID = ToApply.DepartmentID AND GenCand.AccountID = ToApply.AccountID FULL JOIN (select DepartmentID , AccountID , FiscalYearID , FiscalMonthID , SUM(CASE WHEN (@IsFlexingEnabled = 1 and isnull(fact.TimeClassID, 0) = 4) OR (isnull(fact.TimeClassID, 0) = 20 AND @IsFlexingEnabled = 0) THEN isnull(fact.Dollars,0.0) ELSE 0.0 END) as Dollars FROM fw.FactGLSampled fact WHERE fact.TimeClassID in (1, 4, 20) and fact.FiscalYearID = @FiscalYearID OR @FiscalYearID = 0 GROUP BY DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ) fact ON fact.DepartmentID = ToApply.DepartmentID AND fact.AccountID = ToApply.AccountID AND fact.FiscalYearID = ToApply.FiscalYearID AND fact.FiscalMonthID = ToApply.FiscalMonthID where value is not null UNION ALL SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,CASE WHEN (@IsFlexingEnabled = 1 and isnull(fact.TimeClassID, 0) = 4) OR (isnull(fact.TimeClassID, 0) = 20 AND @IsFlexingEnabled = 0) THEN isnull(fact.Dollars,0.0) ELSE 0.0 END as Dollars ,CASE WHEN (@IsFlexingEnabled = 1 and isnull(fact.TimeClassID, 0) = 4) OR (isnull(fact.TimeClassID, 0) = 20 AND @IsFlexingEnabled = 0) THEN fact.Units ELSE 0.0 END as Units FROM fw.FactGLSampled fact WHERE fact.FiscalYearID = @FiscalYearID OR @FiscalYearID = 0 ) X WHERE x.Dollars != 0 OR x.Units != 0 GROUP BY DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID EXEC [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactGLSampled' ,@keyNameCSV = 'AccountID' ,@measureNameCSV = 'Dollars,Units' ,@fiscalYearID = @FiscalYearID ,@timeClassID = 22 ,@isDebugOnly = 0 END END IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope GO --------------------------------------------- -- fw.procGLSampledFlexInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 5/10/16 NL B-11692 Including FiscalYearID in delete ** 2 10/38/17 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup *************************************************************/ CREATE PROC [fw].[procGLSampledFlexInsert] @fiscalyearid smallint with recompile as --delete existing data WHILE EXISTS(SELECT NULL FROM fw.FactGLSampled (nolock) WHERE FiscalYearID = @fiscalYearID and TimeClassID = 4) BEGIN DELETE TOP (10000) fw.FactGLSampled WHERE FiscalYearID = @fiscalYearID and TimeClassID = 4 END --push new data to fact table INSERT INTO [fw].[FactGLSampled]([DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [Units], [Dollars]) SELECT GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, 4, SUM(0) as Units, SUM(CASE WHEN acc.Inversion = -1 THEN gl.value * -1 ELSE gl.value END) AS Dollars FROM [int].[FactGL] gl INNER JOIN [fw].[DimAccount] acc on acc.AccountCode = gl.AccountCode WHERE gl.TimeClassID = 2 AND gl.FiscalYearID = @fiscalyearid AND (gl.value != 0) GROUP BY gl.DepartmentID, gl.AccountID, gl.FiscalYearID, gl.FiscalMonthID, gl.TimeClassID --run calculations exec fw.procFactMonthlyMergeDuplicates 'fw.FactGLSampled', 'AccountID', 'Dollars,Units', @fiscalYearID, 4, 0 exec fw.procFactMonthlyYTDPriorYearUpdate 'fw.FactGLSampled', 'AccountID', 'Dollars,Units', @fiscalYearID, 4, 0 GO --------------------------------------------- -- fw.procGLSampledInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-01-13 AKK D-01370 Fixing order of operations for WHEN condition ** 2 2014-09-30 JG Kris updated proc to optimize performance ** 3 2015-07-15 NL D-02813 Removing parameter from YTD call ** 4 2016-12-27 AK D-05183 Added IsSystemGenerated reset ** 5 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 6 2017-02-21 GF D-05545 Add debug flag to disable output for standard run ** 7 2020-02-06 KF D-08896 FP/ MR / Flexing / Drivers - MR GL Hours Flexing doesn't work *************************************************************/ CREATE proc [fw].[procGLSampledInsert] @fiscalyearid smallint, @timeclassid tinyint, @isDebug bit = 0 with recompile as --this proc is obsolete, call All instead exec fw.procGLSampledInsertAll @fiscalyearid, @isDebug GO --------------------------------------------- -- fw.procGLSampledInsertAll /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-07-05 IP D-06023 Changing columns size to support values over 1 trillion ** 2 2017-07-19 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 3 2018-01-12 IP TK-53108 Fixed conditions of merge statement (include TimeClassID = 12 to target) ** 4 2018-01-12 IP TK-53108 Fixed conditions of merge statement (include TimeClassID = 4 to target and source) ** 5 2018-02-01 IP TK-53658 Re-applied stored procedure ** 6 2018-02-14 GF Apply account inversion fix ** 7 2019-02-05 OV D-07814 Optimize the proc to do truncate/insert for each year where @fiscalYearID = 0 ** 8 2020-02-05 KF D-08896 FP/ MR / Flexing / Drivers - MR GL Hours Flexing doesn't work ** 9 2020-02-18 KF B-26204 MR | GL Hour Flexing ** 10 2021-11-11 HV JAZZ-28155 Remove MR 3.0 Flag and all associated code ** 11 2023-09-14 BS JAZZ-55750 Remove filter to allow other time classes in MR reporting ** 12 2024-06-04 ishah JAZZ-61244 [TrLog][High] Bug - Run Management Reporting Monthly Process (MR Sampling, all years run): Task failed on Inserting GL Sampled. *************************************************************/ CREATE PROC [fw].[procGLSampledInsertAll] @fiscalYearID smallint = 0, @isDebug bit = 0 as print 'Starting calculating staging table --- '+convert(varchar(20),GETDATE(),113) IF OBJECT_ID('tempdb..#FactGLStagingValue') IS NOT NULL DROP TABLE #FactGLStagingValue IF OBJECT_ID('tempdb..#FactGLStaging') IS NOT NULL DROP TABLE #FactGLStaging IF OBJECT_ID('tempdb..#StatisticSampledMonthlyStaging') IS NOT NULL DROP TABLE #StatisticSampledMonthlyStaging IF OBJECT_ID('fw.FactGLStagingWithCalcs') IS NOT NULL DROP TABLE fw.FactGLStagingWithCalcs IF OBJECT_ID('tempdb..#SummaryOfChanges') IS NOT NULL DROP TABLE #SummaryOfChanges exec client.procGLSampledInsertPreprocess --push new data to fact table CREATE TABLE #SummaryOfChanges (Change VARCHAR(20), FiscalYearID smallint, TimeClassID tinyint, IsDeleted bit); CREATE TABLE #FactGLStagingValue ( DepartmentID int, AccountID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(21,6), ApplyDate datetime, Src varchar(max), UNIQUE NONCLUSTERED (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID) ) exec fw.procPrepareGL @fiscalYearID CREATE TABLE #FactGLStaging (RowID bigint identity(1,1), DepartmentID int, AccountID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Units decimal(21,6), Dollars decimal(21,6), FTEs decimal(21,6),isDeleted bit default 0, isSystemGenerated bit default 0) DECLARE @batchSize INT IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) -- Split by batches EXEC mr.procGetIntBatchSize @DefaultBatchSize = 30000000, @ResultBatchSize = @batchSize OUTPUT DECLARE @fromClause nvarchar(max), @whereClause nvarchar(max) SET @fromClause = ' ( select GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, GL.TimeClassID from #FactGLStagingValue GL inner join fw.DimAccount A on A.AccountID = GL.AccountID where gl.Amount != 0 group by GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, GL.TimeClassID ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #FactGLStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, Dollars) select GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, GL.TimeClassID, sum(0) as Units, sum(CASE WHEN A.Inversion = -1 then GL.Amount * -1 ELSE GL.Amount END) AS Dollars from #FactGLStagingValue GL inner join #inputDepartments IP on IP.DepartmentID = GL.DepartmentID inner join fw.DimAccount A on A.AccountID = GL.AccountID where gl.Amount != 0 and IP.BatchID = @BatchID group by GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, GL.TimeClassID SET @BatchID = @BatchID + 1 END IF OBJECT_ID('tempdb..#FactGLStagingValue') IS NOT NULL DROP TABLE #FactGLStagingValue exec fw.procFactMonthlyMergeDuplicates '#FactGLStaging', 'AccountID', 'Dollars,Units', @fiscalYearID, 0, 0 -- Statistics Hours to GL Units IF EXISTS (SELECT * FROM mr.SystemSetting WHERE Name = 'Feature Flag Use GL Units' AND Value = 1) BEGIN CREATE TABLE #StatisticSampledMonthlyStaging (RowID bigint identity(1,1),AccountID int, DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(19,4)) insert into #StatisticSampledMonthlyStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) exec fw.PrepareStatistics @FiscalYearID,0 SELECT STAT.DepartmentID, STAT.AccountID, STAT.FiscalYearID, STAT.FiscalMonthID, STAT.TimeClassID, SUM(STAT.Amount) AS Units INTO #FactGLUnits FROM #StatisticSampledMonthlyStaging STAT INNER JOIN fw.DimAccount A ON A.AccountID = STAT.AccountID WHERE A.OBStatUnitTypeID = 51 --Hours GROUP BY STAT.DepartmentID, STAT.AccountID, STAT.FiscalYearID, STAT.FiscalMonthID, STAT.TimeClassID SET @fromClause = ' ( SELECT GL.DepartmentID, GL.AccountID, GL.FiscalYearID, GL.FiscalMonthID, GL.TimeClassID FROM #FactGLStaging GL INNER JOIN #FactGLUnits U ON U.DepartmentID = GL.DepartmentID AND U.AccountID = GL.AccountID AND U.FiscalYearID = GL.FiscalYearID AND U.FiscalMonthID = GL.FiscalMonthID AND U.TimeClassID = GL.TimeClassID ) X ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN UPDATE GL SET GL.Units = U.Units FROM #FactGLStaging GL INNER JOIN #FactGLUnits U ON U.DepartmentID = GL.DepartmentID AND U.AccountID = GL.AccountID AND U.FiscalYearID = GL.FiscalYearID AND U.FiscalMonthID = GL.FiscalMonthID AND U.TimeClassID = GL.TimeClassID INNER JOIN #inputDepartments IP on IP.DepartmentID = U.DepartmentID WHERE IP.BatchID = @BatchID SET @BatchID = @BatchID + 1 END SET @fromClause = ' ( SELECT U.DepartmentID, U.AccountID, U.FiscalYearID, U.FiscalMonthID, U.TimeClassID, U.Units, 0 as Dollars FROM #FactGLUnits U LEFT JOIN #FactGLStaging GL ON U.DepartmentID = GL.DepartmentID AND U.AccountID = GL.AccountID AND U.FiscalYearID = GL.FiscalYearID AND U.FiscalMonthID = GL.FiscalMonthID AND U.TimeClassID = GL.TimeClassID WHERE GL.RowID IS NULL ) X ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #FactGLStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, Dollars) SELECT U.DepartmentID, U.AccountID, U.FiscalYearID, U.FiscalMonthID, U.TimeClassID, U.Units, 0 FROM #FactGLUnits U INNER JOIN #inputDepartments IP on IP.DepartmentID = U.DepartmentID LEFT JOIN #FactGLStaging GL ON U.DepartmentID = GL.DepartmentID AND U.AccountID = GL.AccountID AND U.FiscalYearID = GL.FiscalYearID AND U.FiscalMonthID = GL.FiscalMonthID AND U.TimeClassID = GL.TimeClassID WHERE GL.RowID IS NULL AND IP.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END --'Feature Flag Use GL Units' -- --run calculations exec fw.procFactGLSampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactGLSampled','#FactGLStaging', 'AccountID', 'Dollars,Units', @fiscalYearID, 0, 0 if @FiscalYearID = 0 BEGIN truncate table fw.FactGLSampled declare @maxYear int = (select max(FiscalYearID) from fw.FactGLStagingWithCalcs) declare @minYear int = (select min(FiscalYearID) from fw.FactGLStagingWithCalcs) WHILE @minYear <= @maxYear BEGIN SET @whereClause = 'FiscalYearID = ' + cast(@minYear as nvarchar(100)) + ' ' IF OBJECT_ID('tempdb..#inputDepartmentsForFactGLSampled') IS NOT NULL DROP TABLE #inputDepartmentsForFactGLSampled CREATE TABLE #inputDepartmentsForFactGLSampled (DepartmentID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputDepartmentsForFactGLSampled EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = 'fw.FactGLStagingWithCalcs X', @whereClause = @whereClause, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartmentsForFactGLSampled SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactGLSampled ( DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,TimeClassID ,Units ,UnitsYTD ,UnitsPriorYear ,UnitsPriorYTD ,Dollars ,DollarsYTD ,DollarsPriorYear ,DollarsPriorYTD ,TransactionID ,IsSystemGenerated) SELECT FG.DepartmentID ,FG.AccountID ,FG.FiscalYearID ,FG.FiscalMonthID ,FG.TimeClassID ,FG.Units ,FG.UnitsYTD ,FG.UnitsPriorYear ,FG.UnitsPriorYTD ,FG.Dollars ,FG.DollarsYTD ,FG.DollarsPriorYear ,FG.DollarsPriorYTD ,0 ,FG.IsSystemGenerated FROM fw.FactGLStagingWithCalcs FG INNER JOIN #inputDepartmentsForFactGLSampled IP ON IP.DepartmentID = FG.DepartmentID WHERE FiscalYearID = @minYear AND IP.BatchID = @BatchID SET @BatchID = @BatchID + 1 END SET @minYear = @minYear + 1 END END ELSE BEGIN ;with tgt (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, IsDeleted, IsSystemGenerated) as ( select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, IsDeleted, IsSystemGenerated from fw.FactGLSampled where ( TimeClassID != 4 or (TimeClassID = 4 and exists(select 1 from [mr].[SystemSetting] where Name = 'Is MR Flexing Manually Loaded' and Value = '1')) ) AND (FiscalYearID = @fiscalYearID) ), src (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, IsSystemGenerated) as ( select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, IsSystemGenerated from fw.FactGLStagingWithCalcs where ( TimeClassID != 4 or (TimeClassID = 4 and exists(select 1 from [mr].[SystemSetting] where Name = 'Is MR Flexing Manually Loaded' and Value = '1')) ) AND (FiscalYearID = @fiscalYearID) ) MERGE tgt as target USING src as source ON ( target.departmentid = source.departmentid and target.accountid = source.accountid and target.fiscalyearid = source.fiscalyearid and target.fiscalmonthid = source.fiscalmonthid and target.timeclassid = source.timeclassid ) WHEN MATCHED AND ( target.Units<> source.Units or target.UnitsYTD<> source.UnitsYTD or target.UnitsPriorYear<> source.UnitsPriorYear or target.UnitsPriorYTD<> source.UnitsPriorYTD or target.Dollars<> source.Dollars or target.DollarsYTD<> source.DollarsYTD or target.DollarsPriorYear<> source.DollarsPriorYear or target.DollarsPriorYTD<> source.DollarsPriorYTD or target.IsSystemGenerated <> source.IsSystemGenerated ) THEN UPDATE SET target.Units = source.Units, target.UnitsYTD= source.UnitsYTD, target.UnitsPriorYear= source.UnitsPriorYear, target.UnitsPriorYTD= source.UnitsPriorYTD, target.Dollars= source.Dollars, target.DollarsYTD= source.DollarsYTD, target.DollarsPriorYear= source.DollarsPriorYear, target.DollarsPriorYTD= source.DollarsPriorYTD, target.IsSystemGenerated = source.IsSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, IsDeleted, IsSystemGenerated) VALUES ( source.DepartmentID, source.AccountID, source.FiscalYearID, source.FiscalMonthID, source.TimeClassID, source.Units, source.UnitsYTD, source.UnitsPriorYear, source.UnitsPriorYTD, source.Dollars, source.DollarsYTD, source.DollarsPriorYear, source.DollarsPriorYTD, 0, source.IsSystemGenerated) WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT $action, inserted.FiscalYearID, inserted.TimeClassID, inserted.isdeleted INTO #SummaryOfChanges; END EXEC dbo.procRollingDeleteOnTable 'fw', 'fw.FactGLSampled', 'RowID', 'fw.FactGLSampled', 'isDeleted = 1', 10000000, 0.5, 0 DECLARE @nextRowID BIGINT SELECT @nextRowID = ISNULL((SELECT MAX(RowID) FROM fw.FactGLSampled), 1) DBCC CHECKIDENT('fw.FactGLSampled','RESEED', @nextRowID); --return summary of results if (@isDebug = 1) begin SELECT 'GL Sample' as SampleType, FiscalYearID, TimeClassID, Change, IsDeleted, COUNT(*) AS CountPerChange FROM #SummaryOfChanges GROUP BY Change, FiscalYearID, TimeClassID, IsDeleted; end IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments IF OBJECT_ID('tempdb..#FactGLStaging') IS NOT NULL DROP TABLE #FactGLStaging IF OBJECT_ID('tempdb..#StatisticSampledMonthlyStaging') IS NOT NULL DROP TABLE #StatisticSampledMonthlyStaging IF OBJECT_ID('fw.FactGLStagingWithCalcs') IS NOT NULL DROP TABLE fw.FactGLStagingWithCalcs IF OBJECT_ID('tempdb..#SummaryOfChanges') IS NOT NULL DROP TABLE #SummaryOfChanges GO --------------------------------------------- -- fw.procGLSampledPerformFlexing CREATE PROC [fw].[procGLSampledPerformFlexing] @CostingResultID int, @CostingTimeClassID tinyint, @FiscalYearID int AS /* ************************************************************************************************************************ ** Author: Nathan LeRoy ** Create Date: 2016-04-22 ** Description: Runs GL flexing for MR ** Last Modified: 2016-05-23 ************************************************************************************************************************** ** Change History ************************************************************************************************************************** ** CID Date Author WI Description ** 1 5/10/16 NL B-11692 Changed flexing to work like new ABB flexing procs ** 2 5/20/16 NL B-12055 Removed call to insert flexed data (handled in engine now) ** 3 8/05/16 NL Added call to procABBMRTransferFlexedPayrollSampledMonthlyToFactGLSampled ** 4 9/23/16 NL Adding copy from budget -> flex ** 5 1/30/16 NL MANUAL changing the way this handles NULL cost data *************************************************************************************************************************/ -- reset all of the flex data to budget (only data that should be flexed like ABB) SELECT DISTINCT DepartmentID INTO #ABBDepts FROM ( SELECT DepartmentID FROM [dss].[FactCostingOutDetailGL] WHERE CostingResultID = @CostingResultID UNION ALL SELECT DepartmentID FROM [dss].[FactCostingOutDetailPayroll] WHERE CostingResultID = @CostingResultID) depts; INSERT INTO [fw].[FactGLSampled]([DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [IsDeleted], [Units], [UnitsYTD], [UnitsPriorYear], [UnitsPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [IsSystemGenerated]) SELECT [DepartmentID], [AccountID], [FiscalYearID], [FiscalMonthID], 4, [IsDeleted], [Units], [UnitsYTD], [UnitsPriorYear], [UnitsPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [IsSystemGenerated] FROM [fw].[FactGLSampled] WHERE TimeClassID = 2 and FiscalYearID = @FiscalYearID and DepartmentID in ( select DepartmentID from #ABBDepts ); -- perform the flexing UPDATE ab SET -- BEG CID 5 -- ab.Dollars = CASE WHEN ISNULL(ab.Variability, 0) = 0 THEN ab.Dollars ELSE ISNULL(((ab.Dollars * (1 - (cost.TotalVariableDirectCost / NULLIF(cost.TotalCost, 0.0)))) + cost.TotalExtendedVariableDirectCost), 0) END -- END CID 5 -- FROM (SELECT gl.DepartmentID, gl.AccountID, gl.FiscalYearID, gl.FiscalMonthID, gl.TimeClassID, gl.Dollars, ISNULL(avo.Variability, av.Variability) as Variability FROM [fw].[FactGLSampled] gl LEFT JOIN (SELECT AccountID, Variability FROM [dss].[AccountVariability] WHERE CostingConfigGuid = (SELECT CostingConfigGuid FROM [dss].[CostingResult] WHERE CostingResultID = @CostingResultID)) av ON gl.AccountID = av.AccountID LEFT JOIN (SELECT DepartmentID, AccountID, Variability FROM [dss].[AccountVariabilityOverride] WHERE CostingConfigGuid = (SELECT CostingConfigGuid FROM [dss].[CostingResult] WHERE CostingResultID = @CostingResultID)) avo on gl.DepartmentID = avo.DepartmentID and gl.AccountID = avo.AccountID WHERE TimeClassID = 4 AND FiscalYearID = @FiscalYearID) ab INNER JOIN #ABBDepts abd on ab.DepartmentID = abd.DepartmentID LEFT JOIN (SELECT DepartmentID, AccountID, FiscalMonthID, FiscalYearID, SUM(cost.ExtendedVariableDirectCost) as TotalExtendedVariableDirectCost, SUM(cost.TotalVariableDirectCost) as TotalVariableDirectCost, SUM(cost.TotalCost) as TotalCost FROM [fw].[viewMRGLBudgetCostPerRVUbyMonth] cost WHERE cost.CostingResultID = @CostingResultID AND cost.TimeClassID = @CostingTimeClassID GROUP BY DepartmentID, AccountID, FiscalMonthID, FiscalYearID ) cost ON ab.DepartmentID = cost.DepartmentID AND ab.AccountID = cost.AccountID AND ab.FiscalMonthID = cost.FiscalMonthID AND ab.FiscalYearID = cost.FiscalYearID; DROP TABLE #ABBDepts; EXEC [fw].[procABBMRTransferFlexedPayrollSampledMonthlyToFactGLSampled] @fiscalYearID = @FiscalYearID, @CostingResultID = @CostingResultID; GO --------------------------------------------- -- fw.procGetSQLObjectsRelatedToDimension CREATE PROCEDURE [fw].[procGetSQLObjectsRelatedToDimension] @dimensionGlobalId NVARCHAR(50), @dimensionIdValue INT AS --create temp table CREATE TABLE #related_objects (Id int IDENTITY(1,1), FK_Schema VARCHAR(500) not null default(''), FK_Table VARCHAR(500) not null default(''), FK_Column VARCHAR(500) not null default(''),FriendlyName VARCHAR(200) DEFAULT('')) --create temp table CREATE TABLE #result(FK_Schema VARCHAR(500) not null default(''), FK_Table VARCHAR(500) not null default(''), FK_Column VARCHAR(500) not null default(''),FriendlyName VARCHAR(200) DEFAULT('')) --fill table with related objects INSERT INTO #related_objects(FK_Schema, FK_Table, FK_Column, FriendlyName) SELECT g.SchemaName FK_Schema, g.ObjectName FK_Table, a.SQLColumnName FK_Column, d.FriendlyName FROM dbo.ScoreAttribute a INNER JOIN dbo.ScoreDimensionGroup g ON g.DimensionGroupGUID = a.DimensionGroupGUID INNER JOIN dbo.ScoreDimension d ON d.DimensionGUID = g.DimensionGUID WHERE a.ForeignKeyGUID = (SELECT DefaultKeyGUID FROM dbo.ScoreDimension WHERE GlobalID = @dimensionGlobalId) INSERT INTO #related_objects(FK_Schema, FK_Table, FK_Column, FriendlyName) SELECT dt.SQLSchemaName FK_Schema, dt.SQLObjectName FK_Table, a.SQLColumnName FK_Column ,dt.FriendlyName FROM ScoreDataTable dt INNER JOIN ScoreDataTableKeyLink kl ON kl.DataTableGUID = dt.DataTableGUID INNER JOIN dbo.ScoreAttribute a ON a.AttributeGUID = kl.KeyGUID WHERE a.AttributeGUID = (SELECT DefaultKeyGUID FROM dbo.ScoreDimension WHERE GlobalID = @dimensionGlobalId) INSERT INTO #related_objects(FK_Schema, FK_Table, FK_Column, FriendlyName) SELECT fk.FK_Schema, fk.FK_Table, fk.FK_Column, fk.FK_Table FROM dbo.ScoreDimension d JOIN dbo.ScoreDimensionGroup dg ON d.DimensionGUID = dg.DimensionGUID JOIN dbo.viewSysForeignKeys fk ON dg.ObjectName = PK_Table LEFT JOIN #related_objects r ON r.FK_Schema = fk.FK_Schema AND r.FK_Table = fk.FK_Table AND r.FK_Column = fk.FK_Column WHERE d.GlobalID = @dimensionGlobalId AND r.FK_Schema IS NULL DECLARE @count INT = 1, @total INT = 0, @table VARCHAR(150), @schema VARCHAR(50), @column VARCHAR(50), @friendlyName VARCHAR(500), @sql VARCHAR(MAX) SELECT @total = COUNT(0) FROM #related_objects WHILE(@count <= @total) BEGIN SELECT @schema = FK_Schema, @table = FK_Table, @column = FK_Column, @friendlyName = FriendlyName FROM #related_objects WHERE Id = @count SET @sql = 'IF EXISTS(SELECT TOP 1 1 FROM ['+@schema+'].['+@table+'] WHERE '+@column+'='''+CAST(@dimensionIdValue AS VARCHAR)+''') BEGIN INSERT INTO #result (FK_Schema, FK_Table, FK_Column,FriendlyName) VALUES ('''+@schema+''','''+@table+''','''+@column+''','''+@friendlyName+''') END' EXEC(@sql) SET @count = @count + 1 END SELECT FK_Schema, FK_Table, FriendlyName FROM #result DROP TABLE #related_objects DROP TABLE #result GO --------------------------------------------- -- fw.procGetStatisticsDrillIn CREATE PROCEDURE [fw].[procGetStatisticsDrillIn]( @DepartmentIDs VARCHAR(max) ,@AccountIDs VARCHAR(max) ,@PayPeriodIDs VARCHAR(max) ,@isYTD bit ) AS /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-12-18 IP B-17582 created procedure ** 2 2018-05-08 KF B-19364 MRPR - Set Global Weights for Charge Codes - System Center Page ** 3 2018-10-20 IH D-07606 PR - Delete rounding charge code values ** 4 2019-04-19 OV B-20579 filtered by new column 'TimeClassID' from int.FactSharedImportDailyStatistics ** 5 2019-05-01 KF D-08230 [fw].[procGetStatisticsDrillIn] is not taking the actual weighted average ** 6 2022-05-11 HV JAZZ-36796 PR - Volume charge code data doesn't populate if loaded with real time stamp ** 7 2022-07-01 HV JAZZ-40032 Rollback to previous version ** 8 2022-07-19 HV JAZZ-39414 procGetStatisticsDrillIn timing out after 3 minutes JAZZ-36796 PR - Volume charge code data doesn't populate if loaded with real time stamp ** 9 2023-02-17 IS JAZZ-49480 fw.procGetStatisticsDrillIn has excessive part looking at TimeClassID=2 data *************************************************************/ BEGIN IF OBJECT_ID('tempdb..#filtering') IS NOT NULL DROP TABLE #filtering IF OBJECT_ID('tempdb..#SubSelect') IS NOT NULL DROP TABLE #SubSelect IF OBJECT_ID('tempdb..#FDPSD') IS NOT NULL DROP TABLE #FDPSD IF OBJECT_ID('tempdb..#ConsolidatedParams') IS NOT NULL DROP TABLE #ConsolidatedParams CREATE TABLE #FDPSD (DepartmentID int primary key) insert into #FDPSD select distinct DriverDepartmentID as DepartmentID from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache CREATE TABLE #ConsolidatedParams (DepartmentID int, AccountId int, PayPeriodID int) CREATE TABLE #filtering ( DepartmentID INT ,AccountID INT ,PayPeriodID INT ,TimeClassID INT ,SelectTable TINYINT ) IF @isYTD = 1 INSERT INTO #ConsolidatedParams (DepartmentID,AccountId,PayPeriodID) SELECT DISTINCT d.DepartmentID,A.val as AccountID,pp_a.PayPeriodID FROM ConvertCSValuesToTable(@departmentIDs, ',') csv inner join fw.DimDepartment d on d.DepartmentID = csv.val inner join fw.DimPayPeriod pp on pp.PayCycleID =d.PayCycleID inner join ConvertCSValuesToTable(@PayPeriodIDs, ',') p on p.val = pp.PayPeriodCode INNER JOIN fw.DimPayPeriod pp_a on pp_a.PeriodNumber <= pp.PeriodNumber and pp_a.FiscalYearIDSecond = pp.FiscalYearIDSecond and pp_a.PayCycleID = pp.PayCycleID inner join ConvertCSValuesToTable(@AccountIDs, ',') a on 1=1 ELSE INSERT INTO #ConsolidatedParams (DepartmentID,AccountId,PayPeriodID) SELECT DISTINCT d.DepartmentID,A.val as AccountID,pp.PayPeriodID FROM ConvertCSValuesToTable(@departmentIDs, ',') csv inner join fw.DimDepartment d on d.DepartmentID = csv.val inner join fw.DimPayPeriod pp on pp.PayCycleID =d.PayCycleID inner join ConvertCSValuesToTable(@PayPeriodIDs, ',') p on p.val = pp.PayPeriodCode inner join ConvertCSValuesToTable(@AccountIDs, ',') a on 1=1 INSERT INTO #filtering ( DepartmentID ,AccountID ,PayPeriodID ,TimeClassID ,SelectTable ) SELECT STAT.DepartmentID ,STAT.AccountID ,STAT.PayPeriodID ,STAT.TimeClassID ,1 AS SelectTable FROM [int].[FactStatisticsbyPayPeriod] STAT INNER JOIN [fw].[DimDepartment] D ON D.Departmentid = STAT.Departmentid inner join #ConsolidatedParams cp on cp.AccountId = STAT.AccountID and cp.DepartmentID = STAT.DepartmentID and cp.PayPeriodID = STAT.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID WHERE STAT.Value != 0 AND STAT.Isdeleted = 0 AND STAT.PayPeriodID != 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null) AND STAT.TimeClassID = 1 AND stat.DepartmentID <> 0 UNION SELECT stat.DepartmentID ,stat.AccountID ,PP.PayPeriodID ,stat.TimeClassID ,2 AS SelectTable FROM [int].[FactSharedImportDailyStatistics] stat INNER JOIN [fw].[DimDate] DATE ON stat.DateID = DATE.DateID INNER JOIN [fw].[DimDepartment] D ON D.Departmentid = STAT.Departmentid INNER JOIN [fw].[DimPayPeriod] PP ON D.PayCycleID = PP.PayCycleID AND DATE.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate AND PP.PeriodEndCalendarDate inner join #ConsolidatedParams cp on cp.AccountId = STAT.AccountID and cp.DepartmentID = STAT.DepartmentID and cp.PayPeriodID = pp.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID WHERE stat.Value <> 0 AND TimeClassID = 1 AND STAT.Isdeleted = 0 AND PP.PayPeriodID != 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null) AND stat.DepartmentID <> 0 GROUP BY stat.DepartmentID ,stat.AccountID ,PP.PayPeriodID ,stat.TimeClassID UNION SELECT STAT.DepartmentID ,STAT.AccountID ,PP.PayPeriodID ,1 AS TimeClassID ,3 AS SelectTable FROM [fw].[FactChargeBasedStatistics] STAT INNER JOIN [fw].[DimDate] DATE ON STAT.DateID = DATE.DateID INNER JOIN [fw].[DimDepartment] DEPT ON STAT.DepartmentID = DEPT.DepartmentID INNER JOIN [fw].[DimPayPeriod] PP ON DEPT.PayCycleID = PP.PayCycleID AND DATE.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate AND PP.PeriodEndCalendarDate inner join #ConsolidatedParams cp on cp.AccountId = STAT.AccountID and cp.DepartmentID = STAT.DepartmentID and cp.PayPeriodID = pp.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID WHERE STAT.Value != 0 AND STAT.IsDeleted = 0 AND PP.PayPeriodID != 0 and (DEPT.IsPR = 1 or FDPSD.DepartmentID is not null) GROUP BY STAT.DepartmentID ,STAT.AccountID ,PP.PayPeriodID DELETE F FROM #filtering f inner join ( SELECT DepartmentID ,AccountID ,PayPeriodID ,TimeClassID ,SelectTable ,max(SelectTable) OVER(PARTITION BY DepartmentID,AccountID,TimeClassID,PayPeriodID ORDER BY DepartmentID,AccountID,TimeClassID,PayPeriodID) AS SelectTableMax ,count(SelectTable) OVER(PARTITION BY DepartmentID,AccountID,TimeClassID,PayPeriodID ORDER BY DepartmentID,AccountID,TimeClassID,PayPeriodID) AS SelectTableCount FROM #filtering) d on f.DepartmentID = d.DepartmentID and f.AccountID = d.AccountID and f.TimeClassID = d.TimeClassID and f.PayPeriodID = d.PayPeriodID and NOT (d.SelectTableCount = 1 and d.SelectTableMax = 3) SELECT pt.PatientTypeRollupID, bl.DepartmentID, bl.FiscalYearID as FiscalYearID, bl.ChargeCodeID, sum(bl.UnitsOfService) AS ChargeCodeValue_UnitsOfService INTO #SubSelect FROM [dss].[FactPatientBillingLineItemDetail] bl INNER JOIN clientdss.FactPatientEncounterSummary es WITH (READUNCOMMITTED) ON bl.EncounterID = es.EncounterID INNER JOIN fw.DimPatientType pt WITH (READUNCOMMITTED) ON es.PatientTypeID = pt.PatientTypeID INNER JOIN ( SELECT DISTINCT DepartmentID, dpp.PeriodStartCalendarDate, dateadd(millisecond, -1, convert(datetime2(3),dateadd(day, 1, convert(date, dpp.PeriodEndCalendarDate)))) as PeriodEndCalendarDate from #filtering f INNER JOIN fw.DimPayPeriod dpp on dpp.PayPeriodID = f.PayPeriodID ) flt on flt.DepartmentID = bl.DepartmentID and bl.ServiceDateTime between flt.PeriodStartCalendarDate and flt.PeriodEndCalendarDate GROUP BY pt.PatientTypeRollupID, bl.ChargeCodeID, bl.DepartmentID, bl.FiscalYearID option (recompile) SELECT S.ChargeCode, S.PatientTypeRollup, round(S.ChargeCodeValue_UnitsOfService, 0) AS ChargeCodeValue_UnitsOfService, CAST(S.StatisticValue/S.ChargeCodeValue_UnitsOfService AS Numeric(19,4)) AS Weight, S.StatisticValue FROM ( SELECT cc.NAME AS ChargeCode ,ptr.NAME AS PatientTypeRollup ,sum(subselect.ChargeCodeValue_UnitsOfService) as ChargeCodeValue_UnitsOfService ,sum(subselect.ChargeCodeValue_UnitsOfService * map.Weight) AS StatisticValue FROM #SubSelect subselect INNER JOIN [fw].[viewDepartmentChargeCodeStatisticMapping] map WITH (READUNCOMMITTED) ON subselect.DepartmentID = map.DepartmentID AND subselect.ChargeCodeID = map.ChargeCodeID AND subselect.PatientTypeRollupID = map.PatientTypeRollupID AND map.FiscalYearID = subselect.FiscalYearID INNER JOIN fw.DimChargeCode cc ON cc.ChargeCodeID = map.ChargeCodeID INNER JOIN fw.DimPatientTypeRollup ptr WITH (READUNCOMMITTED) ON ptr.PatientTypeRollupID = subselect.PatientTypeRollupID INNER JOIN (select distinct AccountID from #filtering) flt ON flt.AccountID = map.AccountID WHERE map.Weight <> 0 GROUP BY cc.NAME, ptr.NAME HAVING sum(subselect.ChargeCodeValue_UnitsOfService) <> 0 ) S IF OBJECT_ID('tempdb..#filtering') IS NOT NULL DROP TABLE #filtering IF OBJECT_ID('tempdb..#SubSelect') IS NOT NULL DROP TABLE #SubSelect IF OBJECT_ID('tempdb..#FDPSD') IS NOT NULL DROP TABLE #FDPSD IF OBJECT_ID('tempdb..#ConsolidatedParams') IS NOT NULL DROP TABLE #ConsolidatedParams END GO --------------------------------------------- -- fw.procInsertDimensionDefaults --Author: gforeman --Branch: GoldenManMigr --Forward CREATE PROCEDURE [fw].[procInsertDimensionDefaults] AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @DEFAULTID int SET @DEFAULTID = 0 DECLARE @DEFAULTNAME nvarchar(100) SET @DEFAULTNAME = 'Not Specified' IF NOT EXISTS (SELECT 1 FROM fw.DimAccount where AccountID = 0) BEGIN SET IDENTITY_INSERT fw.DimAccount ON INSERT INTO fw.DimAccount (AccountID) VALUES (@DEFAULTID) SET IDENTITY_INSERT fw.DimAccount OFF END IF NOT EXISTS (SELECT 1 FROM fw.DimDepartment where DepartmentID = 0) BEGIN SET IDENTITY_INSERT fw.DimDepartment ON INSERT INTO fw.DimDepartment (DepartmentID, Description) VALUES (@DEFAULTID, @DEFAULTNAME) SET IDENTITY_INSERT fw.DimDepartment OFF END IF NOT EXISTS (SELECT 1 FROM fw.DimEmployee where EmployeeID = 0) BEGIN SET IDENTITY_INSERT fw.DimEmployee ON INSERT INTO fw.DimEmployee (EmployeeID, NameLast, NameFirst) VALUES (@DEFAULTID, @DEFAULTNAME, @DEFAULTNAME) SET IDENTITY_INSERT fw.DimEmployee OFF END IF NOT EXISTS (SELECT 1 FROM fw.DimJobCode where JobCodeID = 0) BEGIN SET IDENTITY_INSERT fw.DimJobCode ON INSERT INTO fw.DimJobCode (JobCodeID) VALUES (@DEFAULTID) SET IDENTITY_INSERT fw.DimJobCode OFF END END GO --------------------------------------------- -- fw.procInsertPayPeriodsForPayCycle CREATE PROC fw.procInsertPayPeriodsForPayCycle @payCycleId INT, @numOfYearsToAdd INT AS ----verify paycycle id exists if it does not exit out IF NOT EXISTS (SELECT 1 FROM fw.DimPayCycle WHERE PayCycleID=@payCycleId) BEGIN EXEC [migration].[LogMigrationDetail] @Name = 'fw.procInsertPayPeriodsForPayCycle', @Message = 'PayCycleId not found', @AffectedObject = 'fw.DimPayPeriod', @Status='Warning'; Return END --limiting this to at most 20 years into the future from today and 20 years at a time IF ((@numOfYearsToAdd>20) OR (DATEDIFF(YEAR, GETDATE(), (SELECT DATEADD(YEAR, @numOfYearsToAdd , MAX(PeriodEndCalendarDate)) FROM fw.dimpayperiod WHERE PayCycleID = @payCycleId)) > 20)) BEGIN EXEC [migration].[LogMigrationDetail] @Name = 'fw.procInsertPayPeriodsForPayCycle', @Message = 'Over limit of 20 for number of years to add at once or over 20 years from today for pay periods', @AffectedObject = 'fw.DimPayPeriod', @Status='Warning'; Return END DECLARE @lastPayPeriod INT; DECLARE @paygap INT; DECLARE @newStart DATETIME; DECLARE @fiscalYear INT; DECLARE @previousFiscalYear INT; DECLARE @previousPeriodNum INT; DECLARE @payCycleName VARCHAR(200); SELECT TOP 1 @lastPayPeriod = pp.PayPeriodID, @paygap = pp.PeriodDays, @newStart = DATEADD(DAY, 1, PeriodEndCalendarDate), @FiscalYear = dbo.GetFiscalYearForDate(PeriodEndCalendarDate) + @numOfYearsToAdd, @previousFiscalYear = dbo.GetFiscalYearForDate(PeriodEndCalendarDate), @previousPeriodNum = pp.periodnumber, @payCycleName = pp.PayCycleName FROM fw.dimpayperiod pp WHERE pp.PayCycleID = @payCycleId ORDER BY PayPeriodID desc DECLARE @endDate DATETIME SET @endDate = DATEFROMPARTS(@fiscalYear, (DATEPART(MONTH, dbo.GetFiscalYearEndDate())), DATEPART(DAY, dbo.GetFiscalYearEndDate())) DECLARE @numOfEntries INT SET @numOfEntries = (SELECT FLOOR(DATEDIFF(day, @newStart, @endDate )/@paygap)) DECLARE @historyItemGUID UNIQUEIDENTIFIER = (SELECT NEWID()); IF OBJECT_ID('tempdb..#tempTablePayPeriods') IS NOT NULL DROP TABLE #tempTablePayPeriods; CREATE TABLE #tempTablePayPeriods (PeriodDays TINYINT, RowNumberID INT, WorkingDays TINYINT, PayCycleId INT, PayCycleSortOrder INT, AccrualMethod NVARCHAR(100), PayCycleCode NVARCHAR(200), PeriodEndCalendarDate DATETIME, FiscalYearIDStart INT, FiscalYearIDSecond INT, PeriodNumber TINYINT, PayPeriodCode NVARCHAR(100), Code NVARCHAR(350), Name NVARCHAR(350), PayCycleName VARCHAR(200), HistoryItemGUID UNIQUEIDENTIFIER) INSERT into #tempTablePayPeriods SELECT *,CONCAT(FiscalYearIdSecond, '-', PeriodNumber) PayPeriodCode, CONCAT(PayCycleCode, ' - ', finalCalculations.FiscalYearIdSecond,'-', PeriodNumber) Code, CONCAT(@payCycleName, ' - ',finalCalculations.FiscalYearIdSecond, '-', PeriodNumber) Name, @payCycleName PayCycleName, @historyItemGUID HistoryItemGuid FROM ( SELECT PeriodDays, RowNumberID, WorkingDays, PayCycleId, PayCycleSortOrder, AccrualMethod, PayCycleCode, PeriodEndCalendarDate, FiscalYearIDStart, FiscalYearIDSecond, IIF(FiscalYearIdSecond = @previousFiscalYear, PeriodNumberCalc + @previousPeriodNum, PeriodNumberCalc) AS 'PeriodNumber' FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY FiscalYearIdSecond ORDER BY RowNumberID) AS 'PeriodNumberCalc' FROM ( SELECT *, dbo.GetFiscalYearForDate((dateadd(day,(1)-PeriodDays,PeriodEndCalendarDate))) FiscalYearIdStart, dbo.GetFiscalYearForDate(PeriodEndCalendarDate) FiscalYearIdSecond FROM ( SELECT pp.PeriodDays, rn.RowNumberID, pp.WorkingDays, pc.PayCycleID, pc.SortOrder PayCycleSortOrder, pc.AccrualMethod, pc.Code PayCycleCode, DATEADD(DAY, (@paygap * rn.RowNumberID), pp.PeriodEndCalendarDate) PeriodEndCalendarDate FROM fw.DimPayPeriod pp INNER JOIN fw.DimRowNumber rn ON rn.RowNumberID BETWEEN 1 AND @numOfEntries -- however many new entries are required INNER JOIN fw.DimPayCycle pc ON pc.PayCycleID = pp.PayCycleID WHERE pp.PayCycleID =@payCycleId AND pp.PayPeriodID = @lastPayPeriod-- this whatever the last row in the current paycycle is ) baseSelection ) periodNumber )periodNumberFilter ) finalCalculations ORDER BY finalCalculations.RowNumberID INSERT INTO fw.dimpayperiod (PeriodDays, WorkingDays, PayCycleId, PayCycleSortOrder, AccrualMethod, PayCycleCode, PeriodEndCalendarDate, FiscalYearIDStart, FiscalYearIDSecond, PeriodNumber, PayPeriodCode, Code, Name, PayCycleName, HistoryItemGUID) SELECT PeriodDays, WorkingDays, PayCycleId, PayCycleSortOrder, AccrualMethod, PayCycleCode, PeriodEndCalendarDate, FiscalYearIDStart, FiscalYearIDSecond, PeriodNumber, PayPeriodCode, Code, Name, PayCycleName, HistoryItemGUID FROM #tempTablePayPeriods --insert into history item table DECLARE @entityguid UNIQUEIDENTIFIER SET @entityguid = (SELECT DimensionGUID FROM dbo.ScoreDimension WHERE GlobalID='Pay Period') EXEC dbo.procLogObjectHistoryItemGUIDObjectType 'Strata.Score.Config.Dimension.ScoreDimension, Strata.Score, Version=2024.33.0.0, Culture=neutral, PublicKeyToken=null', @entityguid,'Adding Pay Period Ids for Pay Cycle', 0, @historyItemGUID DROP TABLE #tempTablePayPeriods; GO --------------------------------------------- -- fw.procMergeEncounterBasedStatistics CREATE PROC fw.procMergeEncounterBasedStatistics @statisticID int AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToMerge ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToMerge(RowId) INSERT #detailsToMerge (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatistics ebs WHERE ebs.StatisticID = @statisticID GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID CREATE TABLE #batch ( DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToMerge WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToMerge WHERE RowId >= @startRowId ORDER BY RowID) as d TRUNCATE TABLE #batch INSERT #batch (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #detailsToMerge ebs WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId UPDATE fw.FactChargeBasedStatistics SET Value = ebs.Value FROM fw.FactChargeBasedStatistics cbs JOIN #batch ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #batch ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatistics cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.DateID = cbs.DateID ) SELECT @startRowId = MIN(d.RowId) FROM #detailsToMerge d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToMerge DROP TABLE IF EXISTS #batch END GO --------------------------------------------- -- fw.procMergeEncounterBasedStatisticsMonthly CREATE PROC fw.procMergeEncounterBasedStatisticsMonthly @statisticID int AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #detailsToMerge CREATE TABLE #detailsToMerge ( FiscalYearID smallint, FiscalMonthID tinyint, DepartmentID int, AccountID int, Value decimal(19, 4) ) INSERT #detailsToMerge (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM fw.FactEncounterBasedStatisticsMonthly ebs WHERE ebs.StatisticID = @statisticID UPDATE #detailsToMerge SET Value = aggr.AggregatedValue FROM ( SELECT ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID, SUM(ebs.Value) AS AggregatedValue FROM #detailsToMerge d JOIN fw.FactEncounterBasedStatisticsMonthly ebs ON ebs.DepartmentID = d.DepartmentID AND ebs.AccountID = d.AccountID AND ebs.FiscalYearID = d.FiscalYearID AND ebs.FiscalMonthID = d.FiscalMonthID GROUP BY ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID ) aggr JOIN #detailsToMerge det ON aggr.DepartmentID = det.DepartmentID AND aggr.AccountID = det.AccountID AND aggr.FiscalYearID = det.FiscalYearID AND aggr.FiscalMonthID = det.FiscalMonthID UPDATE fw.FactChargeBasedStatisticsMonthly SET Value = ebs.Value FROM #detailsToMerge ebs JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM #detailsToMerge ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatisticsMonthly cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID ) END GO --------------------------------------------- -- fw.procOptimizationRebuildIndexesAll CREATE proc [fw].[procOptimizationRebuildIndexesAll] @AreYouSureYouWantToTakeDownTheSQLServer bit = 0 as /************************************************************ ** Author: akowalski ** Create Date: 2015-12-08 ** Description: Rebuilds indexs and updates statistics on all tables in the database. Do not use unless you're sure you know what you're doing. It could take days to complete on platform customers. ** Last Modified: 2015-12-08 ** GM Release: 2015-12-08 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** *************************************************************/ if @AreYouSureYouWantToTakeDownTheSQLServer=1 begin SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression<>0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN --=================== BEGIN CID 1 ===================== set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --=================== END CID 1 ======================= --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression=0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN --=================== BEGIN CID 1 ===================== set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD WITH (DATA_COMPRESSION = PAGE) update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --=================== END CID 1 ======================= --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor end RETURN GO --------------------------------------------- -- fw.procOptimizationRebuildIndexesDimensions CREATE proc [fw].[procOptimizationRebuildIndexesDimensions] as /************************************************************ ** Author: akowalski ** Create Date: 2013-02-18 ** Description: Finds all dimension tables in the FW schemas and rebuilds indexes, for after dimension customization. ** Last Modified: 2013-02-18 ** GM Release: 2013-03-12 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2013-02-19 DK 56588 Adding update statistics command ** *************************************************************/ SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in('fw', 'client')) and t.name like 'dim%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression<>0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN --=================== BEGIN CID 1 ===================== set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --=================== END CID 1 ======================= --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in('fw', 'client')) and t.name like 'dim%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression=0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN --=================== BEGIN CID 1 ===================== set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD WITH (DATA_COMPRESSION = PAGE) update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --=================== END CID 1 ======================= --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor RETURN GO --------------------------------------------- -- fw.procOptimizationRebuildIndexesFillins CREATE proc fw.procOptimizationRebuildIndexesFillins as /************************************************************ ** Author: akowalski ** Create Date: 2013-02-18 ** Description: Finds all fillin tables rebuilds indexes, for after fillin refreshes. ** Last Modified: 2013-02-18 ** GM Release: 2013-03-12 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** ** *************************************************************/ SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('data', 'dbo')) and t.name like 'ScoreFillin%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression<>0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('data', 'dbo')) and t.name like 'ScoreFillin%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression=0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD WITH (DATA_COMPRESSION = PAGE) update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor RETURN GO --------------------------------------------- -- fw.procOptimizationRebuildIndexesSecurity CREATE proc fw.procOptimizationRebuildIndexesSecurity as /************************************************************ ** Author: akowalski ** Create Date: 2014-04-23 ** Description: Finds all security related tables, for after mass security assignments. ** Last Modified: 2014-04-23 ** GM Release: 2014.3 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** ** *************************************************************/ SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('dbo')) and t.name like 'S3%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression<>0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('dbo')) and t.name like 'S3%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression=0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD WITH (DATA_COMPRESSION = PAGE) update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor alter index all on dbo.xplan REBUILD update statistics dbo.xplan WITH FULLSCAN RETURN GO --------------------------------------------- -- fw.procOptimizationRebuildIndexesWorkflow CREATE proc fw.procOptimizationRebuildIndexesWorkflow as /************************************************************ ** Author: akowalski ** Create Date: 2014-04-23 ** Description: Finds all workflow related tables, for during heavy capital budgeting. ** Last Modified: 2014-04-23 ** GM Release: 2014.3 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** ** *************************************************************/ SET NOCOUNT ON; DECLARE @SCHEMA nvarchar(256) DECLARE @FactTableName nvarchar(256) DECLARE @SQL nvarchar(1024) DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('dbo')) and t.name like 'WF%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression<>0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor DECLARE FactTableCursor CURSOR FOR select t.name, (select name from sys.schemas where schema_id = t.schema_id) from sys.tables t where t.schema_id in(select schema_id from sys.schemas where name in ('dbo')) and t.name like 'WF%' and t.object_ID not in ( select distinct t.object_id from sys.tables t inner join sys.indexes i on t.object_id=i.object_id inner join sys.partitions p on t.object_id=p.object_ID and i.index_id=p.index_id where p.data_compression=0 ) order by t.name open FactTableCursor FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = 'alter index all on ' + @SCHEMA + '.' + @FactTableName + ' REBUILD WITH (DATA_COMPRESSION = PAGE) update statistics ' + @SCHEMA + '.' + @FactTableName + ' WITH FULLSCAN' --print @SQL EXECUTE sp_executesql @SQL FETCH NEXT FROM FactTableCursor INTO @FactTableName, @SCHEMA END CLOSE FactTableCursor DEALLOCATE FactTableCursor RETURN GO --------------------------------------------- -- fw.procPayRollSampledAdjustedTargetMonthlyInsert CREATE PROCEDURE [fw].[procPayRollSampledAdjustedTargetMonthlyInsert] (@FiscalYearID int = 0) AS BEGIN /* Proposal If the client is not using flexing, this will be the target plus the efficiency factor This should work regardless of the target basis (i.e. rolling avg or budget) The factor will be applied after the inversion If the factor type is percentage, the adjusted target will be the target*(1+factor) i.e. if my target is 100 and my factor is 5%, the adjusted target will be 100*(1+0.05)=105 i.e. if my target is 100 and my factor is -5%, the adjusted target will be 100*(1+-0.05)=95 If the factor type is value, the adjusted value will be target + factor i.e. if my target is 1000 and my factor is 200, the adjusted target will be will be 1000+200=1200 i.e. if my target is 1000 and my factor is -200, the adjusted target will be 1000-200=800 If there is more than one factor impacting a department and account or job code/pay code group combination, then the factors should layer on top of each other based on history order If an efficiency factor does not exist for a particular account/job code, then the value in the new time class will be either flex or baseline target if flex is not used This will happen after Flex is calculated Include integration tests */ /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-04-18 IP TK-57807 Fixed issue PR Statistic Sampling: 'Reallocate between departments' adjustment is calculated incorrectly ** 2 2019-01-17 GF D-08031 Optimized PCG case ** 3 2019-06-14 OV D-08158 Added join to JobCodeGroup ** 4 2019-10-22 KF D-08819 FTE Baseline Calculation Issue ** 5 2022-08-23 BC JAZZ-11498 Change Table Variable to Temporary Tables ************************************************************ */ DECLARE @IsFlexingEnabled INT = ( SELECT value FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) IF EXISTS (SELECT TOP 1 * FROM [mr].[EfficiencyFactor]) BEGIN IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope CREATE TABLE #EfficiencyFactorScope ( EfficiencyFactorGUID [uniqueidentifier] NOT NULL ,[DepartmentID] [int] NOT NULL ,[JobCodeID] [int] NOT NULL ,[FiscalYearID] [smallint] NOT NULL ,[FiscalMonthID] [tinyint] NOT NULL ,Value NUMERIC(25, 6) NOT NULL ,Type TINYINT ,PayCodeGroupID [int] not null ,FactorType CHAR(1) ,DateCreated DATETIME ,UNIQUE CLUSTERED ( FiscalYearID ,FiscalMonthID ,DepartmentID ,JobCodeID ,EfficiencyFactorGUID ,PayCodeGroupID ) ); WITH EfficiencyFactorScope AS ( SELECT * ,rn = ROW_NUMBER() OVER ( PARTITION BY FiscalYearID ,FiscalMonthID ,DepartmentID ,JobCodeID ,Type ,PayCodeGroupID ,EfficiencyFactorGUID ORDER BY FiscalYearID ,FiscalMonthID ,DepartmentID ,JobCodeID ,Type ,PayCodeGroupID ,EfficiencyFactorGUID ) FROM ( SELECT DISTINCT ef.EfficiencyFactorGUID ,ef.FiscalYearID ,efgd.FiscalMonthID ,efd.DepartmentID ,isnull(efgd.JobCodeID, djc.JobCodeID) AS JobCodeID ,efgd.Value ,ef.Type ,efgd.PayCodeGroupID ,ef.FactorType ,ef.DateCreated FROM mr.EfficiencyFactor ef INNER JOIN mr.EfficiencyFactorDepartment efd ON ef.EfficiencyFactorGUID = efd.EfficiencyFactorGUID INNER JOIN mr.EfficiencyFactorPayrollDetails efgd ON efgd.EfficiencyFactorGUID = ef.EfficiencyFactorGUID left JOIN fw.DimJobCode djc ON efgd.JobCodeGroupID = djc.JobCodeGroupID and efgd.JobCodeID is null INNER JOIN (SELECT DISTINCT DepartmentID,JobCodeID FROM fw.FactPayRollSampledMonthly) scope on scope.JobCodeID = isnull(efgd.JobCodeID, djc.JobCodeID) and scope.DepartmentID = efd.DepartmentID left JOIN mr.EfficiencyFactorPayrollDetails efgd_exist ON efgd.EfficiencyFactorGUID = efgd_exist.EfficiencyFactorGUID and efgd.PayCodeGroupID = efgd_exist.PayCodeGroupID and efgd_exist.JobCodeID = djc.JobCodeID and efgd_exist.FiscalMonthID = efgd.FiscalMonthID WHERE (@FiscalYearID = ef.FiscalYearID or @FiscalYearID = 0) and (efgd_exist.JobCodeID is null or djc.JobCodeID is null) AND isnull(efgd.JobCodeID, djc.JobCodeID) IS NOT NULL AND ef.Type in (2,3) --Payroll Dollars&Hours ) X ) INSERT INTO #EfficiencyFactorScope ( EfficiencyFactorGUID ,[DepartmentID] ,[JobCodeID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,PayCodeGroupID ,FactorType ,DateCreated ) SELECT EfficiencyFactorGUID ,[DepartmentID] ,[JobCodeID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,PayCodeGroupID ,FactorType ,DateCreated FROM EfficiencyFactorScope WHERE RN = 1 DELETE FROM fw.FactPayRollSampledMonthly WHERE (@FiscalYearID = FiscalYearID or @FiscalYearID = 0) and TimeClassID = 22 INSERT INTO fw.FactPayRollSampledMonthly (DepartmentID, JobCodeID, FiscalYearID, FiscalMonthID, TimeClassID, PayCodeGroupID, IsDeleted, Hours, Dollars) SELECT DepartmentID ,JobCodeID ,FiscalYearID ,FiscalMonthID ,22 as TimeClassID ,PayCodeGroupID ,0 as IsDeleted ,SUM(H) as Hours ,SUM(D) as Dollars FROM ( SELECT isnull(fact.DepartmentID,ToApply.DepartmentID) as DepartmentID ,isnull(fact.JobCodeID,ToApply.JobCodeID) as JobCodeID ,isnull(fact.FiscalYearID,ToApply.FiscalYearID) as FiscalYearID ,isnull(fact.FiscalMonthID,ToApply.FiscalMonthID) as FiscalMonthID ,isnull(fact.PayCodeGroupID,ToApply.PayCodeGroupID) as PayCodeGroupID ,H = CASE WHEN Type = 3 and FactorType = 'P' THEN isnull(Hours,0.0)*isnull(Value,0.0)/100.00 WHEN Type = 3 and FactorType = 'V' THEN isnull(Value,0.0) ELSE 0.0 END ,D = CASE WHEN Type = 2 and FactorType = 'P' THEN isnull(Dollars,0.0)*isnull(Value,0.0)/100.00 WHEN Type = 2 and FactorType = 'V' THEN isnull(Value,0.0) ELSE 0.0 END FROM #EfficiencyFactorScope ToApply INNER JOIN (SELECT DISTINCT DepartmentID,JobCodeID FROM fw.FactPayRollSampledMonthly) GenCand on GenCand.DepartmentID = ToApply.DepartmentID AND GenCand.JobCodeID = ToApply.JobCodeID FULL JOIN (select DepartmentID ,JobCodeID ,FiscalYearID ,FiscalMonthID ,PayCodeGroupID ,Hours ,Dollars FROM fw.FactPayRollSampledMonthly WHERE ( ( isnull(TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) AND isnull(IsSystemGenerated,0) = 0 and (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) fact ON fact.DepartmentID = ToApply.DepartmentID AND fact.JobCodeID = ToApply.JobCodeID AND fact.FiscalYearID = ToApply.FiscalYearID AND fact.FiscalMonthID = ToApply.FiscalMonthID AND fact.PayCodeGroupID = ToApply.PayCodeGroupID UNION ALL select DepartmentID ,JobCodeID ,FiscalYearID ,FiscalMonthID ,PayCodeGroupID ,Hours ,Dollars FROM fw.FactPayRollSampledMonthly WHERE ( ( isnull(TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) AND isnull(IsSystemGenerated,0) = 0 and (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) X GROUP BY DepartmentID ,JobCodeID ,FiscalYearID ,FiscalMonthID ,PayCodeGroupID exec [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactPayRollSampledMonthly',@keyNameCSV = 'JobCodeID,PayCodeGroupID,PayCodeID',@measureNameCSV = 'Dollars,Hours',@fiscalYearID = 0,@timeClassID = 22,@isDebugOnly = 0 exec [fw].[procFactPayrollSampledMonthlyUpdateFTEs] @fiscalYearID = @FiscalYearID, @timeClassID = 22 END END IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope GO --------------------------------------------- -- fw.procPayrollSampledDailyDetailedInsert /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2017-02-16 GF B-14308 Created ** 2 2017-02-20 GF D-05613 Add tests for zero rows, FTEs ** 3 2017-03-06 GF B-14693 Ensure daily enabled ** 4 2017-04-04 IP TK-40663 Added test to compare general sums ** 5 2017-05-10 IP D-05913 Added testcase from rolling baseline target values ** 6 2017-06-07 IP Commented out baseline test ** 7 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 8 2017-06-19 IP Modify SP to use unique temp table procPayrollSampledDailyDetailedInsert ** 9 2017-06-23 IP Fixed issue with transaction log out of memory procPayrollSampledDailyDetailedInsert ** 10 2017-09-08 IP Adding Budget Adjustments to fw_procPayrollSampledDailyDetailedInsert ** 11 2017-09-23 IP Adding Budget Adjustments to fw_procPayrollSampledDailyDetailedInsert ** 12 2018-02-15 IP Add react to archived FTE Adjutments in fw_procPayrollSampledDailyDetailedInsert ** 13 2018-02-22 IP D-06786 add department calculation for TC = 2 if dept is not in PR , Dept is in Budget Allocation ** 14 2018-03-08 ip B-18793 PR - Daily processing post action 2 week run ** 15 2018-05-17 IP D-07329 Returning fuctionality to include stats for departments using non-PR driver departments ** 16 2018-05-21 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 17 2018-05-17 IP TK-58509 reverting functionality of ignoring 0s ** 18 2018-05-17 IP TK-58523 reaplying changes for D-06786 ** 19 2018-08-27 OV D-07628 Fixed issu: PR Payroll Files Not Displaying in Data Sets ** 20 2018-08-28 IP D-07628 Fixed issu: PR Payroll Files Not Displaying in Data Sets (add ignoring @fiscalYearID if @isCalcDaily is set) ** 21 2018-09-11 kzhuk D-07649 PR Daily custom action calls procedures for wrong year ** 22 2018-10-05 OV D-07728 fix: PR Payroll Daily Sampling: isPR=0 departments and Job Codes are not filtered out during sampling for one year ** 23 2019-02-25 OV D-07697 fix: Daily custom action: FTEs are not calculated in case there was no data in the table before ** 24 2019-03-05 OV D-08020 table variables @departments converted to temp tables #departmentIDs ** 25 2019-03-29 OV D-07650 Payroll data are sampled for all Pay Period including after yesterday ** 26 2019-04-18 OV B-20571 Allow clients to input daily budget Payroll data ** 27 2019-04-23 OV B-20571 Take Dollars and Hours separately from different tables as Value, grouped by IDs and UnitType in the end ** 28 2019-05-14 OV B-22955 Filtered procedure by new 'isDaily' column from DimJobCode ** 29 2019-07-24 OV D-08629 FTEs are set to 0 for first Pay Period days belonging to previous year ** 30 2019-10-15 WR D-08686 Run PR Process Task is filling transaction log ** 31 2019-11-25 IH TK-80619 Rollback transaction log changes ** 32 2020-01-08 HV B-25788 procPayrollSampledDailyInsert DBA Enhancements ** 33 2021-12-10 HV JAZZ-23990 procPayrollSampledDailyDetailedInsert Filling Up Temp DB ** 34 2021-12-16 HV JAZZ-23990 procPayrollSampledDailyDetailedInsert Filling Up Temp DB ** 35 2022-01-20 HV JAZZ-32256 PR Department Productivity Daily Page Performance Improvements ** 36 2022-02-15 HV JAZZ-33795 PR Department Productivity Daily Page: Compress view index ** 37 2022-03-21 HV JAZZ-31812 PR - Daily budget hours doubled in certain pay periods JAZZ-22706 Year Changeover In Daily Staffing is inflating Prior Year Days from Transfer Proc Update ** 38 2022-10-27 ishah JAZZ-45100 Reuse split by batches functionality in existing procedure ** 39 2022-11-22 HV JAZZ-44508 Automated Daily PR processing doesn't calculate future target, when system center processing does ** 40 2023-10-09 HV JAZZ-61830 PR - Index and department filter changes - fw.procPayrollSampledDailyDetailedInsert and client.procFactPayrollSampledDailyDetailedFTEsInsert_Staging ** 41 2023-11-09 BS JAZZ-62716 PR -Transaction Log is filled out: fw.procPayrollSampledDailyDetailedInsert and client.procFactPayrollSampledDailyDetailedFTEsInsert_Staging (insert by batches) ** 42 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int *************************************************************/ CREATE proc [fw].[procPayrollSampledDailyDetailedInsert] @fiscalYearID int = 0, @isCalcDaily bit = 0, @isFeatureFlagOn bit = 0 with recompile as declare @yearOfSampling int = [fw].[GetPayPeriodSamplingYear] (@fiscalYearID, @isCalcDaily) DECLARE @currentDateOverride nvarchar(max) = (SELECT Value FROM [pi].[SystemSetting] WHERE Name = 'Current Date Override') DECLARE @currentDate date = CASE WHEN @currentDateOverride = '' THEN CAST(GETDATE() AS DATE) ELSE CAST (@currentDateOverride AS DATE) END DECLARE @yesterday_date date = DATEADD(DAY, - 1, @currentDate) IF OBJECT_ID('tempdb..#PayrollSampledDailyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledDailyDetailedStaging declare @IterationFiscalYearID int IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations create table #departmentsBudgetAllocations (val int primary key) insert into #departmentsBudgetAllocations (val) select SourceDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.TargetDepartmentID and d.IsPR = 1 where SourceDepartmentID <> 0 union -- unique select TargetDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.SourceDepartmentID and d.IsPR = 1 -- Filtering all departments that move data FROM selected where TargetDepartmentID <> 0 IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope select PayPeriodID,PayCycleID,PeriodStartCalendarDate,PeriodEndCalendarDate into #DailyCalcPeriodsScope from fw.DimPayPeriod where (@isCalcDaily = 1 and @yesterday_date BETWEEN PeriodStartCalendarDate and PeriodEndCalendarDate) -- if @isCalcDaily = 1 is present we ignore what @yearOfSampling is passed to stored procedure (based on B-18793) or (@isCalcDaily = 0 AND (@fiscalYearID = FiscalYearIDSecond or @fiscalYearID = 0)) -- if @isCalcDaily = 0 we should react to what @fiscalYearID is set --cancel if not using daily if (not exists(select 1 from pi.SystemSetting where Name = 'PR Daily Enabled' and Value = '1')) begin return end --pull new data - actuals create table #PayrollSampledDailyDetailedStaging (DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, EmployeeID int, PayPeriodID int, DateID int, TimeClassID int, Hours decimal(18,4), Dollars decimal(18,4), FTEs decimal(18,4)) -- Split by batches DECLARE @batchSize INT EXEC mr.procGetIntBatchSize @DefaultBatchSize = 120000000, @ResultBatchSize = @batchSize OUTPUT IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) DECLARE @fromClause nvarchar(max) = ' ( select data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, pp.PayPeriodID, data.DateID, data.TimeClassID, sum(case when data.UnitTypeID = 51 and pc.IsHoursIgnored = 0 then data.Value else 0 end) as Hours, sum(case when data.UnitTypeID = 34 and pc.IsDollarsIgnored = 0 then data.Value else 0 end) as Dollars, 0 AS FTEs from int.FactStaffingDaily data inner join [fw].[DimPayCode] pc on data.PayCodeID = pc.PayCodeID inner join fw.DimDepartment d on d.DepartmentID = data.DepartmentID inner join fw.DimDate dt on dt.DateID = data.DateID inner join fw.DimPayPeriod pp on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID where pp.PayPeriodID != 0 and data.IsDeleted = 0 and data.Value != 0 and d.IsPR = 1 and TimeClassID = 1 group by data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, pp.PayPeriodID, data.DateID, data.TimeClassID) X' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs) select data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, pp.PayPeriodID, data.DateID, data.TimeClassID, sum(case when data.UnitTypeID = 51 and pc.IsHoursIgnored = 0 then data.Value else 0 end) as Hours, sum(case when data.UnitTypeID = 34 and pc.IsDollarsIgnored = 0 then data.Value else 0 end) as Dollars, 0 AS FTEs from int.FactStaffingDaily data inner join [fw].[DimPayCode] pc on data.PayCodeID = pc.PayCodeID inner join fw.DimDepartment d on d.DepartmentID = data.DepartmentID inner join fw.DimDate dt on dt.DateID = data.DateID inner join fw.DimPayPeriod pp on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID inner join #inputDepartments ID ON ID.DepartmentID = data.DepartmentID where pp.PayPeriodID != 0 and data.IsDeleted = 0 and data.Value != 0 and d.IsPR = 1 and TimeClassID = 1 and ID.BatchID = @BatchID -- and (@fiscalYearID = 0 or dt.FiscalYear = @fiscalYearID) -- #DailyCalcPeriodsScope already contains all Pay Periods that should be recalculated, so filtering by year could bring destructive effect in case @fisclaYearID <> 'calendar year' (conflict @FiscalYearID and @isCalcDaily) group by data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, pp.PayPeriodID, data.DateID, data.TimeClassID SET @BatchID = @BatchID + 1 END --pull new data - budget from daily, payperiod, monthly data IF OBJECT_ID('tempdb..#StaffingDaily') IS NOT NULL DROP TABLE #StaffingDaily CREATE TABLE #StaffingDaily ( DepartmentID INT, JobCodeID int, PayCodeID SMALLINT, PayCodeGroupID INT, DateID INT, TimeClassID TINYINT, PayPeriodID SMALLINT, UnitTypeID TINYINT, IsHoursIgnored BIT, IsDollarsIgnored BIT, Value DECIMAL(19,4)) -- Split by batches TRUNCATE TABLE #inputDepartments SET @fromClause = ' ( SELECT FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored FROM int.FactStaffingDaily FACT inner join [fw].[DimPayCode] PC on PC.PayCodeID = FACT.PayCodeID inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join [fw].[DimDate] DT on DT.DateID = FACT.dateID inner join fw.dimpayPeriod PP on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where DT.FiscalMonth != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or dba.val IS NOT NULL) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored) X' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #StaffingDaily(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, DateID, TimeClassID, PayPeriodID, UnitTypeID, IsHoursIgnored, IsDollarsIgnored, Value) select FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored, sum(FACT.Value) AS Value from int.FactStaffingDaily FACT inner join [fw].[DimPayCode] PC on PC.PayCodeID = FACT.PayCodeID inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join [fw].[DimDate] DT on DT.DateID = FACT.dateID inner join fw.dimpayPeriod PP on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID inner join #inputDepartments ID ON ID.DepartmentID = FACT.DepartmentID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where DT.FiscalMonth != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or dba.val IS NOT NULL) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 and ID.BatchID = @BatchID group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored SET @BatchID = @BatchID + 1 END ------------------------------------------------------------------------------------------------------------------------------------- -- Split by batches TRUNCATE TABLE #inputDepartments SET @fromClause = ' ( SELECT FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored FROM int.FactStaffingByPayPeriod FACT inner join [fw].[DimPayCode] PC on PC.PayCodeID = FACT.PayCodeID inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join fw.DimPayPeriod pp on pp.PayPeriodID = FACT.PayPeriodID inner join [fw].[DimDate] DT on dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate left join #StaffingDaily spp on SPP.PayPeriodID = FACT.PayPeriodID and SPP.DepartmentID = FACT.DepartmentID and SPP.JobCodeID = FACT.JobCodeID and SPP.PayCodeID = FACT.PayCodeID and SPP.TimeClassID = FACT.TimeClassID and SPP.UnitTypeID = FACT.UnitTypeID inner join fw.DimPayCycle PCC on PCC.PayCycleID = PP.PayCycleID inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where spp.DepartmentID IS NULL and DT.FiscalMonth != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or dba.val IS NOT NULL) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored ) X' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #StaffingDaily(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, DateID, TimeClassID, PayPeriodID, UnitTypeID, IsHoursIgnored, IsDollarsIgnored, Value) select FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored, sum(FACT.Value/PCC.PeriodDays) AS Value from int.FactStaffingByPayPeriod FACT inner join [fw].[DimPayCode] PC on PC.PayCodeID = FACT.PayCodeID inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join fw.DimPayPeriod pp on pp.PayPeriodID = FACT.PayPeriodID inner join [fw].[DimDate] DT on dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate left join #StaffingDaily spp on SPP.PayPeriodID = FACT.PayPeriodID and SPP.DepartmentID = FACT.DepartmentID and SPP.JobCodeID = FACT.JobCodeID and SPP.PayCodeID = FACT.PayCodeID and SPP.TimeClassID = FACT.TimeClassID and SPP.UnitTypeID = FACT.UnitTypeID inner join fw.DimPayCycle PCC on PCC.PayCycleID = PP.PayCycleID inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID inner join #inputDepartments ID ON ID.DepartmentID = FACT.DepartmentID where spp.DepartmentID IS NULL and DT.FiscalMonth != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or dba.val IS NOT NULL) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 and ID.BatchID = @BatchID group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored SET @BatchID = @BatchID + 1 END -------------------------------------------------------------------------------------------------------------------- TRUNCATE TABLE #inputDepartments SET @fromClause = ' int.FactStaffing FACT INNER JOIN fw.DimDepartment d ON d.DepartmentID = FACT.DepartmentID' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'FACT', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #StaffingDaily(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, DateID, TimeClassID, PayPeriodID, UnitTypeID, IsHoursIgnored, IsDollarsIgnored, Value) select FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored, sum(FACT.Value/ dbo.GetDaysInMonth(DT.CalendarDateTime)) as Value from [int].[FactStaffing] FACT inner join [fw].[DimPayCode] PC on PC.PayCodeID = FACT.PayCodeID inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join [fw].[DimDate] DT on DT.CalendarMonth = FACT.FiscalMonthID and DT.FiscalYear = FACT.FiscalYearID inner join fw.DimPayperiod pp on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate left join #StaffingDaily spp on SPP.PayPeriodID = PP.PayPeriodID and SPP.DepartmentID = FACT.DepartmentID and SPP.JobCodeID = FACT.JobCodeID and SPP.PayCodeID = FACT.PayCodeID and SPP.TimeClassID = FACT.TimeClassID and SPP.UnitTypeID = FACT.UnitTypeID inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID inner join #inputDepartments ID ON ID.DepartmentID = FACT.DepartmentID where spp.DepartmentID is null and FACT.FiscalMonthID != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or dba.val IS NOT NULL) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 and ID.BatchID = @BatchID group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, PC.PayCodeGroupID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, FACT.UnitTypeID, pc.IsHoursIgnored, pc.IsDollarsIgnored SET @BatchID = @BatchID + 1 END TRUNCATE TABLE #inputDepartments SET @fromClause = ' (SELECT G.DepartmentID, G.JobCodeID, G.PayCodeID, G.PayCodeGroupID, G.PayPeriodID, G.DateID, G.TimeClassID FROM #StaffingDaily G INNER JOIN fw.DimJobCode jc on G.jobCodeID = jc.JobCodeID WHERE jc.IsPR = 1 and jc.IsDaily = 1 GROUP BY G.DepartmentID, G.JobCodeID, G.PayCodeID, G.PayCodeGroupID, G.PayPeriodID, G.DateID, G.TimeClassID) X' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs) select G.DepartmentID, G.JobCodeID, G.PayCodeID, G.PayCodeGroupID, 0 as EmployeeID, G.PayPeriodID, G.DateID, G.TimeClassID, SUM(case when G.UnitTypeID = 51 and G.IsHoursIgnored = 0 then G.Value else 0 end) as Hours, SUM(case when G.UnitTypeID = 34 and G.IsDollarsIgnored = 0 then G.Value else 0 end) as Dollars, 0 from #StaffingDaily G inner join #inputDepartments ID ON ID.DepartmentID = G.DepartmentID inner join fw.DimJobCode jc on G.jobCodeID = jc.JobCodeID WHERE jc.IsPR = 1 and jc.IsDaily = 1 and ID.BatchID = @BatchID GROUP BY G.DepartmentID, G.JobCodeID, G.PayCodeID, G.PayCodeGroupID, G.PayPeriodID, G.DateID, G.TimeClassID SET @BatchID = @BatchID + 1 END /*Budget adjustments FTE start*/ --pull new data - adjustments DECLARE @NonProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @NonProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) insert into #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars) SELECT Adj.DepartmentID, Adj.JobCodeID, Adj.PayCodeId, Adj.PayCodeGroupID, 0 as EmployeeID, PP.PayPeriodID, dt.DateID, 2 AS TimeClassID, -- always Budgeted sum(Adj.Hours / dbo.GetDaysInMonth(DT.CalendarDateTime)) AS Hours, 0 AS Dollars FROM ( SELECT b.DepartmentID, b.JobCodeID, @ProdPayCodeID as PayCodeID, @ProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, ba.ProductiveChange AS Hours FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@yearOfSampling = 0 or b.FiscalYearID = @yearOfSampling) -- if @isCalcDaily = 1 we'll take calndar year, else - @FiscalYearId and fact.DepartmentID is null and b.Archived = 0 UNION ALL SELECT b.DepartmentID, b.JobCodeID, @NonProdPayCodeID as PayCodeID, @NonProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, ba.NonProductiveChange AS Hours FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@yearOfSampling = 0 or b.FiscalYearID = @yearOfSampling) -- if @isCalcDaily = 1 we'll take calndar year, else - @FiscalYearId and fact.DepartmentID is null and b.Archived = 0 ) AS Adj INNER JOIN fw.DimDepartment dd on adj.DepartmentID = dd.DepartmentID INNER JOIN ( SELECT p.[PayPeriodID], p.PayCycleID, p.[PeriodNumber], p.[FiscalMonthIDStart] AS FiscalMonthID, p.[FiscalYearIDStart] AS FiscalYearID, p.[PeriodWeightStart] AS PreriodWeight, p.PeriodStartCalendarDate, p.PeriodEndCalendarDate FROM [fw].[DimPayPeriod] p inner join #DailyCalcPeriodsScope cp on cp.PayPeriodID = p.PayPeriodID UNION ALL SELECT p.[PayPeriodID], p.PayCycleID, p.[PeriodNumber], p.FiscalMonthIDSecond AS FiscalMonthID, p.FiscalYearIDSecond AS FiscalYearID, p.PeriodWeightSecond AS PreriodWeight, p.PeriodStartCalendarDate, p.PeriodEndCalendarDate FROM [fw].[DimPayPeriod] p inner join #DailyCalcPeriodsScope cp on cp.PayPeriodID = p.PayPeriodID ) PP ON PP.FiscalYearID = Adj.FiscalYearID AND pp.FiscalMonthID = adj.FiscalMonthID and pp.PayCycleID = dd.PayCycleID inner join [fw].[DimDate] DT on DT.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate and dt.FiscalYear = pp.FiscalYearID inner join #DailyCalcPeriodsScope dpc on dpc.PayPeriodID = pp.PayPeriodID WHERE PP.PreriodWeight <> 0 GROUP BY Adj.DepartmentID, Adj.JobCodeID, dt.dateID, Adj.PayCodeID, Adj.PayCodeGroupID, PP.PayPeriodID HAVING sum(Adj.Hours * PP.PreriodWeight) <> 0 /*Budget adjustments FTE end*/ -- BudgetAdjustments Start declare @iteration int = 1 DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (@yearOfSampling = 0 or FiscalYearID = @yearOfSampling) -- if @isCalcDaily = 1 we'll take calndar year, else - @FiscalYearId and DataType = 1 ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN BEGIN INSERT INTO #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, EmployeeID, PayPeriodID, PayCodeID, PayCodeGroupID, DateID, TimeClassID, Hours, Dollars, FTEs) SELECT TargetDepartmentID as DepartmentID,TargetJobCodeID as JobCodeID, stt.EmployeeID, PayPeriodID, stt.PayCodeID, stt.PayCodeGroupID, stt.DateID, stt.TimeClassID, stt.Hours, stt.Dollars, stt.FTEs FROM #PayrollSampledDailyDetailedStaging STT INNER JOIN fw.DimDate dt on dt.DateID = stt.DateID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = dt.FiscalYear INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and dt.CalendarMonth = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 UPDATE STT SET Dollars = 0, Hours = 0, FTEs = 0 FROM #PayrollSampledDailyDetailedStaging STT INNER JOIN fw.DimDate dt on dt.DateID = stt.DateID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = dt.FiscalYear INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and dt.CalendarMonth = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; -- BudgetAdjustments END --calculate baseline target declare @targetType int = (select Value from pi.SystemSetting where Name = 'Target Basis') if (@targetType = 2) begin --baseline target is based on budget, pull from monthly data TRUNCATE TABLE #inputDepartments SET @fromClause = ' #PayrollSampledDailyDetailedStaging X WHERE X.TimeClassID = 2' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN insert into #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs) select PS.DepartmentID, PS.JobCodeID, PS.PayCodeID, PS.PayCodeGroupID, PS.EmployeeID, PS.PayPeriodID, PS.DateID, 20, PS.Hours, PS.Dollars, PS.FTEs from #PayrollSampledDailyDetailedStaging PS inner join #inputDepartments ID ON ID.DepartmentID = PS.DepartmentID where PS.TimeClassID = 2 and ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END end else if(@targetType = 10) begin --baseline target is based on rolling period average, pull from pay period data TRUNCATE TABLE #inputDepartments SET @fromClause = ' ( select FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, FACT.PayCodeGroupID, FACT.EmployeeID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID, SUM(FACT.Hours) as Hours, SUM(FACT.Dollars) as Dollars from fw.FactPayrollSampledPayPeriodDetailed FACT inner join [fw].[DimPayPeriod] PP on PP.PayPeriodID = FACT.PayPeriodID inner join [fw].[DimDate] DT on DT.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate inner join [fw].[DimDepartment] D on D.DepartmentID = FACT.DepartmentID inner join #DailyCalcPeriodsScope dpc on FACT.PayPeriodID = dpc.PayPeriodID where FACT.PayPeriodID != 0 and FACT.IsDeleted = 0 and (FACT.Hours != 0 or FACT.Dollars != 0) and D.IsPR = 1 and FACT.TimeClassID = 20 and FACT.DepartmentID <> 0 --and (@fiscalYearID = 0 or DT.FiscalYear = @fiscalYearID) group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, FACT.PayCodeGroupID, FACT.EmployeeID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID) X' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN ;with groupedBaselineTargetPayroll as( select FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, FACT.PayCodeGroupID, FACT.EmployeeID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID, SUM(FACT.Hours) as Hours, SUM(FACT.Dollars) as Dollars from fw.FactPayrollSampledPayPeriodDetailed FACT inner join [fw].[DimPayPeriod] PP on PP.PayPeriodID = FACT.PayPeriodID inner join [fw].[DimDate] DT on DT.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate inner join [fw].[DimDepartment] D on D.DepartmentID = FACT.DepartmentID inner join #DailyCalcPeriodsScope dpc on FACT.PayPeriodID = dpc.PayPeriodID where FACT.PayPeriodID != 0 and FACT.IsDeleted = 0 and (FACT.Hours != 0 or FACT.Dollars != 0) and D.IsPR = 1 and FACT.TimeClassID = 20 and FACT.DepartmentID <> 0 --and (@fiscalYearID = 0 or DT.FiscalYear = @fiscalYearID) group by FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeID, FACT.PayCodeGroupID, FACT.EmployeeID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID) insert into #PayrollSampledDailyDetailedStaging (DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs) select G.DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, G.PayPeriodID, DateID, TimeClassID, Hours / PP.PeriodDays, Dollars / PP.PeriodDays, 0 from groupedBaselineTargetPayroll G inner join fw.DimPayPeriod PP on PP.PayPeriodID = G.PayPeriodID inner join #inputDepartments ID ON ID.DepartmentID = G.DepartmentID where ID.BatchID = @BatchID SET @BatchID = @BatchID + 1 END end --calculate FTEs IF @fiscalYearID = 0 and @isCalcDaily = 0 and @isFeatureFlagOn = 1 BEGIN IF OBJECT_ID('tempdb..#PayrollSampledDailyDetailedFTEs') IS NOT NULL DROP TABLE #PayrollSampledDailyDetailedFTEs create table #PayrollSampledDailyDetailedFTEs (DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, EmployeeID int, PayPeriodID int, DateID int, TimeClassID int, FTEs decimal(18,4)) exec client.procFactPayrollSampledDailyDetailedFTEsInsert_Staging @fiscalYearID = @yearOfSampling, @isFeatureFlagOn = @isFeatureFlagOn END ELSE BEGIN exec client.procFactPayrollSampledDailyDetailedFTEsInsert_Staging @fiscalYearID = @yearOfSampling END --!!!Removing all records where Department is not PR delete fact from #PayrollSampledDailyDetailedStaging fact inner join fw.dimDepartment d on d.DepartmentID = fact.DepartmentID and d.isPR = 0 IF @fiscalYearID = 0 and @isCalcDaily = 0 -- if all parameters shows that we are recalculating everything BEGIN EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'viewFactPayrollSampledDailyDetailedHours', @indexName = 'CU_viewFactPayrollSampledDailyDetailedHours', @isView = 1 truncate table [fw].[FactPayrollSampledDailyDetailed] DBCC CHECKIDENT('[fw].[FactPayrollSampledDailyDetailed]', RESEED, 0); CREATE CLUSTERED INDEX CORE_DepartmentID on #PayrollSampledDailyDetailedStaging (DepartmentID) with (data_compression = page) IF @isFeatureFlagOn = 1 BEGIN CREATE CLUSTERED INDEX CORE_DepartmentID on #PayrollSampledDailyDetailedFTEs (DepartmentID) with (data_compression = page) -- Drop Indexes EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPayrollSampledDailyDetailed', @indexName = 'IDX_FactPayrollSampledDailyDetailed' EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPayrollSampledDailyDetailed', @indexName = 'NCNU_IsDeleted' EXEC mr.procGetIntBatchSize @DefaultBatchSize = 60000000, @ResultBatchSize = @batchSize OUTPUT SET @fromClause = ' ( select f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID, SUM(f.Hours) as Hours, SUM(f.Dollars) as Dollars, SUM(isnull(fte.FTEs,0)) as FTEs, 0 as isDeleted from #PayrollSampledDailyDetailedStaging f inner join fw.DimJobCode jc on f.JobCodeID = jc.JobCodeID left join #PayrollSampledDailyDetailedFTEs fte on f.DepartmentID = fte.DepartmentID AND f.JobCodeID = fte.JobCodeID AND f.PayCodeID = fte.PayCodeID AND f.PayCodeGroupID = fte.PayCodeGroupID AND f.EmployeeID = fte.EmployeeID AND f.PayPeriodID = fte.PayPeriodID AND f.DateID = fte.DateID AND f.TimeClassID = fte.TimeClassID where jc.IsPR = 1 and jc.IsDaily = 1 group by f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID) X' -- Split data into batches IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods CREATE TABLE #inputPayPeriods (PayPeriodID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputPayPeriods EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'PayPeriodID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO [fw].[FactPayrollSampledDailyDetailed] With (TABLOCKX) ( DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, IsDeleted ) select f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID, SUM(f.Hours) as Hours, SUM(f.Dollars) as Dollars, SUM(isnull(fte.FTEs,0)) as FTEs, 0 as isDeleted from #PayrollSampledDailyDetailedStaging f INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = f.PayPeriodID and IPP.BatchID = @BatchID inner join fw.DimJobCode jc on f.JobCodeID = jc.JobCodeID left join #PayrollSampledDailyDetailedFTEs fte on f.DepartmentID = fte.DepartmentID AND f.JobCodeID = fte.JobCodeID AND f.PayCodeID = fte.PayCodeID AND f.PayCodeGroupID = fte.PayCodeGroupID AND f.EmployeeID = fte.EmployeeID AND f.PayPeriodID = fte.PayPeriodID AND f.DateID = fte.DateID AND f.TimeClassID = fte.TimeClassID where jc.IsPR = 1 and jc.IsDaily = 1 group by f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID SET @BatchID = @BatchID + 1 END CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledDailyDetailed] ON [fw].[FactPayrollSampledDailyDetailed] ( [DepartmentID] ASC, [JobCodeID] ASC, [PayCodeID] ASC, [PayCodeGroupID] ASC, [EmployeeID] ASC, [DateID] ASC, [TimeClassID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledDailyDetailed] ( [IsDeleted] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] END ELSE -- IF @isFeatureFlagOn = 0 BEGIN set @IterationFiscalYearID = (select min(dd.FiscalYear) from #PayrollSampledDailyDetailedStaging f inner join fw.DimDate dd on dd.DateID = f.DateID) WHILE @IterationFiscalYearID <= (select max(dd.FiscalYear) from #PayrollSampledDailyDetailedStaging f inner join fw.DimDate dd on dd.DateID = f.DateID ) BEGIN INSERT INTO [fw].[FactPayrollSampledDailyDetailed] With (TABLOCKX) ( DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, IsDeleted ) select f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID, SUM(f.Hours) as Hours, SUM(f.Dollars) as Dollars, SUM(f.FTEs) as FTEs, 0 as isDeleted from #PayrollSampledDailyDetailedStaging f inner join fw.DimDate dd on dd.DateID = f.DateID inner join fw.DimJobCode jc on f.JobCodeID = jc.JobCodeID where dd.FiscalYear = @IterationFiscalYearID and jc.IsPR = 1 and jc.IsDaily = 1 group by f.DepartmentID, f.JobCodeID, f.PayCodeID, f.PayCodeGroupID, f.EmployeeID, f.PayPeriodID, f.DateID, f.TimeClassID set @iterationFiscalYearId = @iterationFiscalYearId + 1 END END CREATE UNIQUE CLUSTERED INDEX CU_viewFactPayrollSampledDailyDetailedHours ON fw.viewFactPayrollSampledDailyDetailedHours (PayPeriodID, DepartmentID, EmployeeID, TimeClassID, RowID) WITH (DATA_COMPRESSION = PAGE) END ELSE BEGIN ;WITH TGT AS (SELECT t.* FROM [fw].[FactPayrollSampledDailyDetailed] t With (TABLOCKX) inner join #DailyCalcPeriodsScope dcps on dcps.PayPeriodID = t.PayPeriodID --where (@fiscalYearID = 0 or pd.FiscalYear = @fiscalYearID) -- #DailyCalcPeriodsScope already contains all Pay Periods that should be recalculated, so filtering by year could bring destructive effect in case @fisclaYearID <> 'calendar year' (conflict @FiscalYearID and @isCalcDaily) ) MERGE TGT AS target USING ( select DepartmentID,f.JobCodeID,PayCodeID,PayCodeGroupID,EmployeeID,PayPeriodID,DateID,TimeClassID, SUM(Hours) as Hours, SUM(Dollars) as Dollars, SUM(FTEs) as FTEs from #PayrollSampledDailyDetailedStaging f inner join fw.DimJobCode jc on f.JobCodeID = jc.JobCodeID where jc.isPR = 1 and jc.IsDaily = 1 group by DepartmentID,f.JobCodeID,PayCodeID,PayCodeGroupID,EmployeeID,PayPeriodID,DateID,TimeClassID ) AS source ON SOURCE.DepartmentID=TARGET.DepartmentID AND SOURCE.JobCodeID=TARGET.JobCodeID AND SOURCE.PayCodeID = TARGET.PayCodeID AND SOURCE.PayCodeGroupID=TARGET.PayCodeGroupID AND SOURCE.EmployeeID=TARGET.EmployeeID AND SOURCE.PayPeriodID=TARGET.PayPeriodID AND SOURCE.TimeClassID=TARGET.TimeClassID AND SOURCE.DateID=TARGET.DateID WHEN MATCHED AND (target.Hours <> source.Hours or target.Dollars <> source.Dollars or target.FTEs <> source.FTEs ) THEN UPDATE SET target.Hours = source.Hours, target.Dollars = source.Dollars, target.FTEs = source.FTEs WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, IsDeleted ) VALUES ( DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, 0) WHEN NOT MATCHED BY SOURCE THEN DELETE; END IF @isCalcDaily = 1 begin delete from [fw].[FactPayrollSampledDailyDetailed] where dateID > (select MIN(dateID) from fw.dimDate where CalendarDateTime >= @yesterday_date )and TimeClassID = 1 end delete from [fw].[FactPayrollSampledDailyDetailed] where Hours = 0 and Dollars = 0 and TimeClassID = 1 IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments IF OBJECT_ID('tempdb..#PayrollSampledDailyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledDailyDetailedStaging IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope IF OBJECT_ID('tempdb..#StaffingDaily') IS NOT NULL DROP TABLE #StaffingDaily IF OBJECT_ID('tempdb..#PayrollSampledDailyDetailedFTEs') IS NOT NULL DROP TABLE #PayrollSampledDailyDetailedFTEs -- UPDATE STATISTICS UPDATE STATISTICS fw.FactPayrollSampledDailyDetailed; GO --------------------------------------------- -- fw.procPayrollSampledDailyInsert /*************************************************************** ** CID Date Author WI Description ** 1 2016-12-17 mholov B-13509 Pull Budgeted amounts from monthly table ** 2 2017-01-11 akozlov D-05410 Minor fix ** 3 2017-01-31 akozlov B-13926 Added department filter ** 4 2017-02-08 gforeman B-14308 Added year filter ** 5 2017-02-20 gforeman D-05613 Prevent zero rows ** 6 2017-03-06 gforeman B-14693 Cancel sampling if daily disabled ** 7 2017-05-16 ipetriv D-05915 Added statistics recalculating to FactPayrollSampledDailyDetailed ** 8 2017-05-29 ipetriv B-15994 Refactored sampling process and implemented using of staging tables ** 9 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 10 2017-06-20 IP B-15086 fixing issues: FTEs = 0 after recalculation for one year / duplicates appers for one year recalculation ** 11 2018-09-12 ipetriv B-16737 Allow job codes in PR to use 70-hour work weeks - Sampling Updates ** 12 2018-09-11 kzhuk D-07649 PR Daily custom action calls procedures for wrong year ** 13 2019-04-24 OV B-22924 Allow 0 data (except actual) in procPayrollSampledDailyInsert (B-20571) ** 14 2019-05-14 OV B-22955 Filtered by new 'isDaily' column from DimjobCode ** 15 2019-07-23 OV D-08628 Sampled data for first PayPeriod from previous year ** 16 2019-10-31 KF D-08926 PR Payroll Daily sampling: process fails due to full DB Transaction log ** 17 2019-11-25 IH TK-80619 Rollback transaction log changes ** 18 2020-01-08 HV B-25788 procPayrollSampledDailyInsert DBA Enhancements ** 19 2020-01-14 HV D-09150 Inflated 'Target FTE Daily' values caused by duplicates in FactPayrollSampledDaily ** 20 2021-12-21 HV JAZZ-31105 procPayrollSampledDailyInsert Filling Up DB For All Years Run (Rolling Average Target Basis) ** 21 2022-10-28 ishah JAZZ-45100 Reuse split by batches functionality in existing procedure ** 22 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int **************************************************************/ CREATE PROCEDURE [fw].[procPayrollSampledDailyInsert] @departmentIDs NVARCHAR(max) = NULL, @fiscalYearID INT = 0, @isCalcDaily bit = 0, @isFeatureFlagOn bit = 0 WITH RECOMPILE AS IF OBJECT_ID('tempdb..#departments') IS NOT NULL DROP TABLE #departments SELECT val INTO #departments FROM ConvertCSValuesToTable(@departmentIDs, ',') SELECT DepartmentID, JobCodeID, WorkingHoursCoef = cast(dww.Hours AS NUMERIC(20, 6)) / 7 INTO #WorkWeekHours FROM ( SELECT DepartmentID, JobCodeID, WorkWeekID = COALESCE(jc.WorkWeekID, de.WorkWeekID, - 1) FROM ( SELECT dp.DepartmentID, WorkWeekID = CASE WHEN e.WorkWeekID > - 1 THEN e.WorkWeekID ELSE NULL END FROM fw.DimEntity e INNER JOIN fw.DimDepartment dp on e.EntityID = dp.EntityID ) DE CROSS JOIN ( SELECT djc.JobCodeID, djcg.JobCodeGroupID, WorkWeekID = CASE WHEN djc.WorkWeekOverrideID > - 1 THEN djc.WorkWeekOverrideID WHEN djc.WorkWeekOverrideID = - 1 AND djcg.WorkWeekOverrideID > - 1 THEN djcg.WorkWeekOverrideID ELSE NULL END FROM fw.DimJobCode djc INNER JOIN fw.DimJobCodeGroup djcg ON djc.JobCodeGroupID = djcg.JobCodeGroupID WHERE djc.IsDaily = 1 and djc.IsPR = 1 ) JC ) DeptJobCode LEFT JOIN fw.DimWorkWeek dww ON DeptJobCode.WorkWeekID = dww.WorkWeekID IF OBJECT_ID('tempdb..#dates') IS NOT NULL DROP TABLE #dates SELECT DISTINCT DateID INTO #dates FROM fw.DimDate dt INNER JOIN fw.DimPayPeriod pp on dt.CalendarDateTime BETWEEN pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate where (@isCalcDaily = 1 and DATEADD(DAY,-1,CAST(GETDATE() as DATE)) BETWEEN pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate) -- if @isCalcDaily = 1 is present we ignore what @yearOfSampling is passed to stored procedure (based on B-18793) or (@isCalcDaily = 0 and (@fiscalYearID = pp.FiscalYearIDSecond or @fiscalYearID = 0)) --cancel if not using daily IF ( NOT EXISTS ( SELECT 1 FROM pi.SystemSetting WHERE NAME = 'PR Daily Enabled' AND Value = '1' ) ) BEGIN RETURN END /*If target basis is rolling average then we can't calculate baseline as simple sum of detailed table. in his case we should 1)insert summed values for all timeclasses except baseline (TimeClassId = 20) 2)recalculate baseline (including FTE for baseline records) */ IF ( SELECT Value FROM pi.SystemSetting WHERE NAME = 'Target Basis' ) = 10 -- rolling average BEGIN IF @fiscalYearID = 0 AND @isCalcDaily = 0 AND @departmentIDs IS NULL BEGIN TRUNCATE TABLE [fw].[FactPayrollSampledDaily] IF @isFeatureFlagOn = 0 BEGIN /*recalculate baseline for just inserted values*/ ; WITH groupedBaselineTargetPayroll AS ( SELECT FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID, SUM(FACT.Hours) AS Hours, SUM(FACT.Dollars) AS Dollars FROM fw.FactPayrollSampledPayPeriod FACT INNER JOIN [fw].[DimPayPeriod] PP ON PP.PayPeriodID = FACT.PayPeriodID INNER JOIN [fw].[DimDate] DT ON DT.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate AND PP.PeriodEndCalendarDate INNER JOIN [fw].[DimDepartment] D ON D.DepartmentID = FACT.DepartmentID WHERE FACT.PayPeriodID != 0 AND FACT.IsDeleted = 0 AND D.IsPR = 1 AND FACT.TimeClassID = 20 AND FACT.DepartmentID != 0 GROUP BY FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID ) INSERT INTO fw.FactPayrollSampledDaily ( DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, SUM(fact.Hours), SUM(fact.Dollars), FTEs = SUM(isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0)) FROM ( SELECT DepartmentID, JobCodeID, PayCodeGroupID, G.PayPeriodID, DateID, TimeClassID, Hours / PP.PeriodDays AS Hours, Dollars / PP.PeriodDays AS Dollars FROM groupedBaselineTargetPayroll G INNER JOIN fw.DimPayPeriod PP ON PP.PayPeriodID = G.PayPeriodID ) fact INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID GROUP BY fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID UNION ALL SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, fact.Hours, fact.Dollars, FTEs = isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0) FROM ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID], sum(fact.[Dollars]) AS Dollars, sum(fact.[Hours]) AS Hours FROM [fw].[FactPayrollSampledDailyDetailed] fact INNER JOIN fw.DimDate dt ON dt.DateID = fact.DateID WHERE TimeClassID <> 20 -- all timeclasses except baseline (TimeClassId = 20) GROUP BY fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID] ) FACT INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID END ELSE --IF @isFeatureFlagOn = 1 BEGIN IF OBJECT_ID('tempdb..#groupedBaselineTargetPayroll') IS NOT NULL DROP TABLE #groupedBaselineTargetPayroll CREATE TABLE #groupedBaselineTargetPayroll (DepartmentID int, JobCodeID int, PayCodeGroupID int, PayPeriodID int, DateID int, TimeClassID int, Hours decimal(19,4), Dollars decimal(19,4)) INSERT INTO #groupedBaselineTargetPayroll( DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, DateID, TimeClassID, Hours, Dollars) SELECT FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID, SUM(FACT.Hours) AS Hours, SUM(FACT.Dollars) AS Dollars FROM fw.FactPayrollSampledPayPeriod FACT INNER JOIN [fw].[DimPayPeriod] PP ON PP.PayPeriodID = FACT.PayPeriodID INNER JOIN [fw].[DimDate] DT ON DT.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate AND PP.PeriodEndCalendarDate INNER JOIN [fw].[DimDepartment] D ON D.DepartmentID = FACT.DepartmentID WHERE FACT.PayPeriodID != 0 AND FACT.IsDeleted = 0 AND D.IsPR = 1 AND FACT.TimeClassID = 20 AND FACT.DepartmentID != 0 GROUP BY FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID DECLARE @BatchSize INT = 30000000 print 'By Batch'+convert(varchar(20),GETDATE(),113) -- Split data into batches IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods CREATE TABLE #inputPayPeriods (PayPeriodID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputPayPeriods EXEC dbo.procGetInputDataByBatches @batchSize = @BatchSize, @columnName = 'PayPeriodID', @tableAlias = 'gp', @fromClause = '#groupedBaselineTargetPayroll gp', @whereClause = '', @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Drop Indexes EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPayrollSampledDaily', @indexName = 'IDX_FactPayrollSampledDaily' EXEC dbo.procSysDropIndex @schema = 'fw', @table = 'FactPayrollSampledDaily', @indexName = 'NCNU_IsDeleted' -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactPayrollSampledDaily ( DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, SUM(fact.Hours), SUM(fact.Dollars), FTEs = SUM(isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0)) FROM ( SELECT DepartmentID, JobCodeID, PayCodeGroupID, G.PayPeriodID, DateID, TimeClassID, Hours / PP.PeriodDays AS Hours, Dollars / PP.PeriodDays AS Dollars FROM #groupedBaselineTargetPayroll G INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = G.PayPeriodID and IPP.BatchID = @BatchID INNER JOIN fw.DimPayPeriod PP ON PP.PayPeriodID = G.PayPeriodID ) fact INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID GROUP BY fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID SET @BatchID = @BatchID + 1 END INSERT INTO fw.FactPayrollSampledDaily ( DepartmentID, JobCodeID, PayCodeGroupID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, fact.Hours, fact.Dollars, FTEs = isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0) FROM ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID], sum(fact.[Dollars]) AS Dollars, sum(fact.[Hours]) AS Hours FROM [fw].[FactPayrollSampledDailyDetailed] fact INNER JOIN fw.DimDate dt ON dt.DateID = fact.DateID WHERE TimeClassID <> 20 -- all timeclasses except baseline (TimeClassId = 20) GROUP BY fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID] ) FACT INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID CREATE NONCLUSTERED INDEX [IDX_FactPayrollSampledDaily] ON [fw].[FactPayrollSampledDaily] ( [DepartmentID] ASC, [JobCodeID] ASC, [PayCodeGroupID] ASC, [PayPeriodID] ASC, [DateID] ASC, [TimeClassID] ASC ) INCLUDE ([Dollars], [FTEs], [Hours]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY] CREATE NONCLUSTERED INDEX [NCNU_IsDeleted] ON [fw].[FactPayrollSampledDaily] ( [IsDeleted] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY] IF OBJECT_ID('tempdb..#groupedBaselineTargetPayroll') IS NOT NULL DROP TABLE #groupedBaselineTargetPayroll END END ELSE BEGIN WITH TGT AS ( SELECT t.* FROM [fw].[FactPayrollSampledDaily] t WITH (TABLOCKX) INNER JOIN #dates pp on t.DateID = pp.DateID WHERE ( @departmentIDs IS NULL OR t.DepartmentID IN ( SELECT val FROM #departments ) ) ), groupedBaselineTargetPayrollFilteredByDates AS ( SELECT FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID, SUM(FACT.Hours) AS Hours, SUM(FACT.Dollars) AS Dollars FROM fw.FactPayrollSampledPayPeriod FACT INNER JOIN [fw].[DimPayPeriod] PP ON PP.PayPeriodID = FACT.PayPeriodID INNER JOIN fw.DimDate DT ON DT.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate AND PP.PeriodEndCalendarDate INNER JOIN #dates FD ON FD.DateID = DT.DateID INNER JOIN [fw].[DimDepartment] D ON D.DepartmentID = FACT.DepartmentID WHERE FACT.PayPeriodID != 0 AND FACT.IsDeleted = 0 AND D.IsPR = 1 AND FACT.TimeClassID = 20 AND FACT.DepartmentID != 0 AND ( @departmentIDs IS NULL OR FACT.DepartmentID IN ( SELECT val FROM #departments ) ) GROUP BY FACT.DepartmentID, FACT.JobCodeID, FACT.PayCodeGroupID, FACT.PayPeriodID, DT.DateID, FACT.TimeClassID ) MERGE TGT AS target USING ( SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, fact.Hours, fact.Dollars, FTEs = isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0) FROM ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID], sum(fact.[Dollars]) AS Dollars, sum(fact.[Hours]) AS Hours FROM [fw].[FactPayrollSampledDailyDetailed] fact INNER JOIN #dates dt ON dt.DateID = fact.DateID WHERE ( @departmentIDs IS NULL OR DepartmentID IN ( SELECT val FROM #departments ) ) AND TimeClassID <> 20 -- all timeclasses except baseline (TimeClassId = 20) GROUP BY fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID] ) FACT INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID UNION ALL SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID, SUM(fact.Hours), SUM(fact.Dollars), FTEs = SUM(isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0)) FROM ( SELECT DepartmentID, JobCodeID, PayCodeGroupID, G.PayPeriodID, DateID, TimeClassID, Hours / PP.PeriodDays AS Hours, Dollars / PP.PeriodDays AS Dollars FROM groupedBaselineTargetPayrollFilteredByDates G INNER JOIN fw.DimPayPeriod PP ON PP.PayPeriodID = G.PayPeriodID ) fact INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID GROUP BY fact.DepartmentID, fact.JobCodeID, fact.PayCodeGroupID, fact.PayPeriodID, fact.DateID, fact.TimeClassID ) AS source ON SOURCE.DepartmentID = TARGET.DepartmentID AND SOURCE.JobCodeID = TARGET.JobCodeID --AND SOURCE.PayCodeID = TARGET.PayCodeID AND SOURCE.PayCodeGroupID = TARGET.PayCodeGroupID --AND SOURCE.EmployeeID = TARGET.EmployeeID AND SOURCE.PayPeriodID = TARGET.PayPeriodID AND SOURCE.TimeClassID = TARGET.TimeClassID AND SOURCE.DateID = TARGET.DateID WHEN MATCHED AND ( target.Hours <> source.Hours OR target.Dollars <> source.Dollars OR target.FTEs <> source.FTEs ) THEN UPDATE SET target.Hours = source.Hours, target.Dollars = source.Dollars, target.FTEs = source.FTEs WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, JobCodeID, -- PayCodeID, PayCodeGroupID, -- EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, IsDeleted ) VALUES ( DepartmentID, JobCodeID, --PayCodeID, PayCodeGroupID, --EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, 0 ) WHEN NOT MATCHED BY SOURCE THEN DELETE; END END ELSE /*Here is inserting aggregated rows in case when "Target Basis" is not rolling average*/ BEGIN IF @fiscalYearID = 0 AND @departmentIDs IS NULL AND @isCalcDaily = 0 BEGIN TRUNCATE TABLE [fw].[FactPayrollSampledDaily] INSERT INTO [fw].[FactPayrollSampledDaily] ( [DepartmentID], [JobCodeID], [PayPeriodID], [TimeClassID], [DateID], [PayCodeGroupID], [Hours], [Dollars], [FTEs] ) SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayPeriodID], fact.[TimeClassID], fact.[DateID], fact.[PayCodeGroupID], fact.Hours, fact.Dollars, FTEs = isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0) FROM ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID], sum(fact.[Dollars]) AS Dollars, sum(fact.[Hours]) AS Hours FROM [fw].[FactPayrollSampledDailyDetailed] fact WHERE ( @departmentIDs IS NULL OR DepartmentID IN ( SELECT val FROM #departments ) ) GROUP BY fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID] ) FACT INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID END ELSE WITH TGT AS ( SELECT t.* FROM [fw].[FactPayrollSampledDaily] t WITH (TABLOCKX) INNER JOIN #dates pp ON t.DateId = pp.DateID WHERE ( @departmentIDs IS NULL OR t.DepartmentID IN ( SELECT val FROM #departments ) ) ) MERGE TGT AS target USING ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayPeriodID], fact.[TimeClassID], fact.[DateID], fact.[PayCodeGroupID], fact.Hours, fact.Dollars, FTEs = isnull(CASE WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is null THEN fact.Hours / (WorkingDays * 8.0 / PeriodDays) WHEN pcg.ProductiveClass IN ('Productive','Non-Productive') AND pp.PeriodNumber != 0 and ww.WorkingHoursCoef is not null THEN (fact.Hours) / WorkingHoursCoef END, 0) FROM ( SELECT fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID], sum(fact.[Dollars]) AS Dollars, sum(fact.[Hours]) AS Hours FROM [fw].[FactPayrollSampledDailyDetailed] fact INNER JOIN #dates dt ON dt.DateID = fact.DateID WHERE ( @departmentIDs IS NULL OR DepartmentID IN ( SELECT val FROM #departments ) ) GROUP BY fact.[DepartmentID], fact.[JobCodeID], fact.[PayCodeGroupID], fact.[PayPeriodID], fact.[DateID], fact.[TimeClassID] ) FACT INNER JOIN fw.DimPayPeriod pp ON pp.PayPeriodID = fact.PayPeriodID INNER JOIN [fw].[viewDimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID INNER JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID and fact.JobCodeID = ww.JobCodeID ) AS source ON SOURCE.DepartmentID = TARGET.DepartmentID AND SOURCE.JobCodeID = TARGET.JobCodeID --AND SOURCE.PayCodeID = TARGET.PayCodeID AND SOURCE.PayCodeGroupID = TARGET.PayCodeGroupID --AND SOURCE.EmployeeID = TARGET.EmployeeID AND SOURCE.PayPeriodID = TARGET.PayPeriodID AND SOURCE.TimeClassID = TARGET.TimeClassID AND SOURCE.DateID = TARGET.DateID WHEN MATCHED AND (target.Hours <> source.Hours or target.Dollars <> source.Dollars or target.FTEs <> source.FTEs ) THEN UPDATE SET target.Hours = source.Hours, target.Dollars = source.Dollars, target.FTEs = source.FTEs WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, JobCodeID, -- PayCodeID, PayCodeGroupID, -- EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, IsDeleted ) VALUES ( DepartmentID, JobCodeID, --PayCodeID, PayCodeGroupID, --EmployeeID, PayPeriodID, DateID, TimeClassID, Hours, Dollars, FTEs, 0 ) WHEN NOT MATCHED BY SOURCE THEN DELETE; DELETE FROM [fw].[FactPayrollSampledDaily] where TimeClassID = 1 and Dollars = 0 and Hours = 0 END IF OBJECT_ID('tempdb..#departments') IS NOT NULL DROP TABLE #departments IF OBJECT_ID('tempdb..#dates') IS NOT NULL DROP TABLE #dates; GO --------------------------------------------- -- fw.procPayrollSampledMonthlyDetailedInsert /************************************************************ ** Change History ************************************************************** ** CID Date Author WI Description ** 1 9.19.14 MJS B-02788 Excluding Budget data from the detailed sample since budgeting at Pay Code level is not supported ** 2 2015-10-28 MJS D-03587 Added logic to exclude ignored hours and dollars ** 3 2016-09-22 AK B-11845 Added procFactPayrollSampledDetailedBaselineTargetUpdate ** 4 2016-12-13 NL B-13759 Added fiscalYearID param and filtering ** 5 2017-02-22 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 6 2017-02-22 IP B-14098 MR - Adjust Budgeted FTEs (Sampling). Added part that adds adjusted values to temp table #TEMPPAYROLL ** 7 2017-03-06 GF B-14693 Added baseline target year filter ** 8 2017-03-08 GF B-14693 Fix adjustment records year filter handling ** 9 2017-04-11 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactPayrollSampledMonthlyDetailed. ** 10 2017-06-12 IP Changed type of hours/dollars fields to numeric instead of "money" ** 11 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 12 2017-07-11 IP D-06150 Fixed conditions of merge statement (update part) ** 13 2017-07-13 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 14 2017-08-29 ip B-16798 Add using of Budget Adjustment. ** 15 2018-01-17 IP B-16703 Omit archived budget adjustments ** 16 2018-02-07 IP B-18725 MR - Provider sampling from payroll ** 17 2018-02-09 IP B-18724 Omit archived Budgeted FTE Adjustments ** 18 2019-06-26 OV D-08576 FTEs are not calculated for first FY, deleted transaction ** 19 2023-09-13 KF JAZZ-55750 Remove filter to allow other time classes in MR reporting *************************************************************/ CREATE proc [fw].[procPayrollSampledMonthlyDetailedInsert] @fiscalYearID smallint = 0 as print 'Starting calculating staging table --- '+convert(varchar(20),GETDATE(),113) IF OBJECT_ID('tempdb..#PayrollSampledMonthlyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledMonthlyDetailedStaging IF OBJECT_ID('fw.PayrollSampledMonthlyDetailedStagingWithCalcs') IS NOT NULL DROP TABLE fw.PayrollSampledMonthlyDetailedStagingWithCalcs DECLARE @fromClause nvarchar(max), @whereClause nvarchar(max), @MaxBatchID INT, @BatchID INT, @batchSize INT --pull new data - data integration CREATE TABLE #PayrollSampledMonthlyDetailedStaging (RowID bigint identity(1,1), DepartmentID int, JobCodeID int, EmployeeID int, PayCodeID int, PayCodeGroupID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Hours decimal(18,6), Dollars decimal(18,6), FTEs decimal(18,6),isDeleted bit, isSystemGenerated bit) INSERT INTO #PayrollSampledMonthlyDetailedStaging(DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) SELECT pr.DepartmentID, pr.JobCodeID, pr.EmployeeID, pr.PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, SUM(CASE WHEN pr.unittypeID=51 and pc.IsHoursIgnored=0 then value ELSE 0 END) AS Hours, SUM(CASE WHEN pr.unittypeID=34 and pc.IsDollarsIgnored=0 then value ELSE 0 END) AS Dollars, 0 as FTEs FROM int.FactStaffing pr INNER JOIN fw.DimPayCode pc on pc.PayCodeID = PR.PayCodeID left join mr.viewFactProviderBasedOnPayroll vw on vw.RowID = pr.RowID WHERE pr.FiscalMonthCode not in('', '0') and pr.IsDeleted = 0 and pr.Value != 0 AND (pr.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and isnull(IsProvider,0) = 0 GROUP BY pr.DepartmentID, pr.JobCodeID, pr.EmployeeID, pr.PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, pr.PayCodeID -- BudgetAdjustments Start declare @iteration int = 1 DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) and DataType = 1 ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO #PayrollSampledMonthlyDetailedStaging(DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) SELECT TargetDepartmentID as DepartmentID,TargetJobCodeID as JobCodeID, stt.EmployeeID, stt.PayCodeID, stt.PayCodeGroupID, stt.FiscalYearID, stt.FiscalMonthID, stt.TimeClassID, stt.Hours, stt.Dollars, stt.FTEs FROM #PayrollSampledMonthlyDetailedStaging STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = stt.FiscalYearID INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 and Archived = 0 UPDATE STT SET Dollars = 0, Hours = 0, FTEs = 0 FROM #PayrollSampledMonthlyDetailedStaging STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = stt.FiscalYearID INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 and Archived = 0 set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; -- BudgetAdjustments END --pull new data - adjustments DECLARE @NonProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @NonProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) INSERT INTO #PayrollSampledMonthlyDetailedStaging(DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) SELECT b.DepartmentID, b.JobCodeID, 0 as EmployeeID, @NonProdPayCodeID AS PayCodeID, @NonProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, 2 AS TimeClassID, -- always Budgeted ba.NonProductiveChange AS Hours, 0 AS Dollars, 0 AS FTEs FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@fiscalYearID = 0 or b.FiscalYearID = @fiscalYearID) and fact.DepartmentID is null and b.Archived = 0 UNION ALL SELECT b.DepartmentID, b.JobCodeID, 0 as EmployeeID, @ProdPayCodeID AS PayCodeID, @ProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, 2 AS TimeClassID, -- always Budgeted ba.ProductiveChange AS Hours, 0 AS Dollars, 0 AS FTEs FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@fiscalYearID = 0 or b.FiscalYearID = @fiscalYearID) and fact.DepartmentID is null and b.Archived = 0 --run calculations exec fw.procFactMonthlyMergeDuplicates '#PayrollSampledMonthlyDetailedStaging', 'JobCodeID,EmployeeID,PayCodeGroupID,PayCodeID', 'Dollars,Hours', @fiscalYearID, 0, 0 --exec client.procPayrollMonthlyPostSampleAccrual --custom accrual process: customize it for different accruals, by default does nothing exec fw.procFactPayrollSampledDetailedBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactPayrollSampledMonthlyDetailed','#PayrollSampledMonthlyDetailedStaging','JobCodeID,EmployeeID,PayCodeGroupID,PayCodeID', 'Dollars,Hours', @fiscalYearID, 0, 0 exec client.procFactPayrollSampledMonthlyDetailedFTEsInsertStaging print 'finish staging calculations --- '+convert(varchar(20),GETDATE(),113) -- insert result IF @fiscalYearID = 0 BEGIN truncate table fw.FactPayrollSampledMonthlyDetailed -- split by batches IF OBJECT_ID('tempdb..#inputDetails') IS NOT NULL DROP TABLE #inputDetails SELECT @fromClause = 'fw.PayrollSampledMonthlyDetailedStagingWithCalcs s', @whereClause = '' EXEC mr.procGetIntBatchSize @DefaultBatchSize = 60000000, @ResultBatchSize = @batchSize OUTPUT CREATE TABLE #inputDetails (DepartmentID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputDetails EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 's', @fromClause = @fromClause, @whereClause = @whereClause, @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDetails SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactPayrollSampledMonthlyDetailed With (TABLOCKX) ( DepartmentID, FiscalMonthID, FiscalYearID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) SELECT S.DepartmentID, S.FiscalMonthID, S.FiscalYearID, S.JobCodeID, S.PayCodeID, S.PayCodeGroupID, S.EmployeeID, S.TimeClassID, S.Dollars, S.DollarsYTD, COALESCE(S.DollarsPriorYear,0), S.DollarsPriorYTD, S.Hours, S.HoursYTD, COALESCE(S.HoursPriorYear,0), S.HoursPriorYTD, S.FTEs, S.FTEsYTD, COALESCE(S.FTEsPriorYear,0), COALESCE(S.FTEsPriorYTD,0), 0 as IsDeleted, isnull(S.IsSystemGenerated,0) as IsSystemGenerated FROM fw.PayrollSampledMonthlyDetailedStagingWithCalcs S INNER JOIN #inputDetails ISD ON ISD.DepartmentID = S.DepartmentID WHERE ISD.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.PayrollSampledMonthlyDetailedStagingWithCalcs (DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,FiscalYearID,FiscalMonthID,TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) MERGE fw.FactPayrollSampledMonthlyDetailed With (TABLOCKX) AS target USING fw.PayrollSampledMonthlyDetailedStagingWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.JobCodeID = target.JobCodeID AND source.EmployeeID = target.EmployeeID AND source.PayCodeID = target.PayCodeID AND source.PayCodeGroupID = target.PayCodeGroupID AND source.FiscalYearID = target.FiscalYearID AND source.FiscalMonthID = target.FiscalMonthID AND source.TimeClassID = target.TimeClassID AND source.PayCodeID = target.PayCodeID WHEN MATCHED AND (target.Dollars <> source.Dollars or target.DollarsYTD <> source.DollarsYTD or target.DollarsPriorYear <> COALESCE(source.DollarsPriorYear,0) or target.DollarsPriorYTD <> COALESCE(source.DollarsPriorYTD,0) or target.Hours <> source.Hours or target.HoursYTD <> source.HoursYTD or target.HoursPriorYear <> COALESCE(source.HoursPriorYear,0) or target.HoursPriorYTD <> COALESCE(source.HoursPriorYTD,0) or target.FTEs <> source.FTEs or target.FTEsYTD <> source.FTEsYTD or target.FTEsPriorYear <> COALESCE(source.FTEsPriorYear,0) or target.FTEsPriorYTD <> COALESCE(source.FTEsPriorYTD,0) or target.isSystemGenerated <> source.isSystemGenerated) THEN UPDATE SET target.Dollars = source.Dollars, target.DollarsYTD = source.DollarsYTD, target.DollarsPriorYear = COALESCE(source.DollarsPriorYear,0), target.DollarsPriorYTD = COALESCE(source.DollarsPriorYTD,0), target.Hours = source.Hours, target.HoursYTD = source.HoursYTD, target.HoursPriorYear = COALESCE(source.HoursPriorYear,0), target.HoursPriorYTD = COALESCE(source.HoursPriorYTD,0), target.FTEs = source.FTEs, target.FTEsYTD = source.FTEsYTD, target.FTEsPriorYear = COALESCE(source.FTEsPriorYear,0), target.FTEsPriorYTD = COALESCE(source.FTEsPriorYTD,0), target.isSystemGenerated = source.isSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, FiscalMonthID, FiscalYearID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.FiscalMonthID, source.FiscalYearID, source.JobCodeID, source.PayCodeID, source.PayCodeGroupID, source.EmployeeID, source.TimeClassID, source.Dollars, source.DollarsYTD, COALESCE(source.DollarsPriorYear,0), COALESCE(source.DollarsPriorYTD,0), source.Hours, source.HoursYTD, COALESCE(source.HoursPriorYear,0), COALESCE(source.HoursPriorYTD,0), source.FTEs, source.FTEsYTD, COALESCE(source.FTEsPriorYear,0), COALESCE(source.FTEsPriorYTD,0), 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE AND Target.FiscalYearID = @fiscalYearID THEN DELETE; END IF OBJECT_ID('tempdb..#PayrollSampledMonthlyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledMonthlyDetailedStaging IF OBJECT_ID('fw.PayrollSampledMonthlyDetailedStagingWithCalcs') IS NOT NULL DROP TABLE fw.PayrollSampledMonthlyDetailedStagingWithCalcs IF OBJECT_ID('tempdb..#PayrollSampledMonthlyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledMonthlyDetailedStaging GO --------------------------------------------- -- fw.procPayrollSampledMonthlyFlexInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 5/10/16 NL B-11692 Including FiscalYearID in delete ** 2 02/20/2017 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup *************************************************************/ CREATE proc [fw].[procPayrollSampledMonthlyFlexInsert] @fiscalyearid smallint with recompile AS --delete existing data WHILE EXISTS(SELECT NULL FROM fw.FactPayrollSampledMonthly (nolock) WHERE FiscalYearID = @fiscalYearID and TimeClassID = 4) BEGIN DELETE TOP (10000) fw.FactPayrollSampledMonthly WHERE FiscalYearID = @fiscalYearID and TimeClassID = 4 END --pull new data CREATE TABLE #TEMPPAYROLL (DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Hours money, Dollars money, FTEs decimal(18,6)); INSERT INTO #TEMPPAYROLL(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) SELECT pr.DepartmentID, pr.JobCodeID, '0' as PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, SUM(CASE WHEN pr.unittypeID = 51 and pc.IsHoursIgnored=0 then value ELSE 0 END) AS Hours, SUM(CASE WHEN pr.unittypeID = 34 and pc.IsDollarsIgnored=0 then value ELSE 0 END) AS Dollars, 0 as FTEs FROM int.FactStaffing pr INNER JOIN fw.DimPayCode pc on pc.PayCodeID = PR.PayCodeID WHERE PR.FiscalMonthCode not in('', '0') and pr.IsDeleted = 0 and pr.Value != 0 AND TimeClassID = 2 AND FiscalYearID = @fiscalyearid GROUP BY pr.DepartmentID, pr.JobCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID --push to fact table INSERT INTO fw.FactPayrollSampledMonthly(DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars, FTEs) SELECT DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, 4, SUM(Hours), SUM(Dollars), 0 as FTEs FROM #TEMPPAYROLL GROUP BY DepartmentID, JobCodeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID HAVING SUM(Hours) != 0 or SUM(Dollars) != 0 --run calculations exec fw.procFactMonthlyMergeDuplicates 'fw.FactPayrollSampledMonthly', 'JobCodeID,PayCodeID,PayCodeGroupID', 'Dollars,Hours', @fiscalYearID, 4, 0 exec fw.procFactMonthlyYTDPriorYearUpdate 'fw.FactPayrollSampledMonthly', 'JobCodeID,PayCodeID,PayCodeGroupID', 'Dollars,Hours', @fiscalYearID, 4, 0 GO --------------------------------------------- -- fw.procPayrollSampledMonthlyInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-03-03 akk D-01526 Removing payroll import from sampling proc because it's redundant ** 2 2014-08-05 MJS B-02684 Updating sampling to include PayCodeGroupID ** 3 2014-09-03 MJS B-02863 Removing the parameter from the YTD proc call ** 4 2014-09-19 MJS B-02788 Setting PayCodeID to 0; Pay Code level data to be sourced from the PayrollSampledMonthlyDetailed data table ** 5 2015-10-28 MJS D-03587 Added logic to exclude ignored hours and dollars ** 6 2016-09-22 AK B-11845 Added procFactPayrollSampledBaselineTargetUpdate ** 7 2016-12-13 NL B-13759 Added fiscalYearID param and filtering ** 8 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 9 2017-02-22 IP B-14098 MR - Adjust Budgeted FTEs (Sampling). Added part that adds adjusted values to temp table #TEMPPAYROLL ** 10 2017-03-06 GF B-14693 Added baseline target year filter ** 11 2017-03-08 GF B-14693 Fix adjustment records year filter handling ** 12 2017-03-30 IP B-15085 Performace optimization by aggregating "detailed" data ** 13 2017-07-11 IP D-06150 Fixed conditions of merge statement (update part) ** 14 2017-07-25 IP B-17618 Applied logic for TimeClassID=20 when Target basis = "Prior Year" for FTE. Now it is equal to Prior Year hours divided by Prior Year FTE denominator. ** 15 2019-06-13 OV D-08158 Added join to jobcodegroup for Override ** 16 2019-06-19 OV TK-75157 FTEsPriorYear, FTEsPriorYTD are calculated incorrectly ** 17 2019-10-21 KF D-08819 FTE Baseline Calculation Issue ** 18 2023-09-14 KF JAZZ-55750 Remove filter to allow other time classes in MR reporting *************************************************************/ CREATE PROCEDURE [fw].[procPayrollSampledMonthlyInsert] @fiscalYearID SMALLINT = 0 AS --run custom scripts exec [client].[procPayrollSampledInsertPreprocess] --delete existing data IF(@fiscalYearID = 0) BEGIN TRUNCATE TABLE fw.FactPayrollSampledMonthly END ELSE BEGIN DECLARE @batchSize INT EXEC mr.procGetIntBatchSize @DefaultBatchSize = 10000000, @ResultBatchSize = @batchSize OUTPUT WHILE EXISTS(SELECT NULL FROM fw.FactPayrollSampledMonthly (nolock) WHERE FiscalYearID = @fiscalYearID) BEGIN DELETE TOP (@batchSize) fw.FactPayrollSampledMonthly WHERE FiscalYearID = @fiscalYearID END END /*If Target basis is rolling average then we can't calculate baseline as simple sum of detailed table. in his case we should 1)insert summed values for all timeclasses except baseline (TimeClassId = 20) 2)recalculate baseline 3)run stored procedure to update columns YTD, priorYear etc. */ declare @TargetBasis int = (select Value from mr.SystemSetting where Name = 'Target Basis') IF @TargetBasis = 10 -- rolling average BEGIN insert into fw.FactPayrollSampledMonthly ( DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, PayCodeGroupID, IsSystemGenerated, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeID, fact.FiscalYearID, fact.FiscalMonthID, fact.TimeClassID, fact.PayCodeGroupID, IsSystemGenerated = case when fact.Hours = 0 and fact.Dollars = 0 then 1 else 0 end, fact.Hours, fact.HoursYTD, fact.HoursPriorYear, fact.HoursPriorYTD, fact.Dollars, fact.DollarsYTD, fact.DollarsPriorYear, fact.DollarsPriorYTD, FTEs = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.Hours /wpmCY.Hours end,0), FTEsYTD = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursYTD /wpmCY.YTDHours end,0), FTEsPriorYear = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYear / wpmPY.Hours end,0), FTEsPriorYTD = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYTD / wpmPY.YTDHours end,0) FROM ( SELECT DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, sum(Hours) AS Hours, sum(HoursYTD) AS HoursYTD, sum(HoursPriorYear) AS HoursPriorYear, sum(HoursPriorYTD) AS HoursPriorYTD, sum(Dollars) AS Dollars, sum(DollarsYTD) AS DollarsYTD, sum(DollarsPriorYear) AS DollarsPriorYear, sum(DollarsPriorYTD) AS DollarsPriorYTD, PayCodeGroupID, IsSystemGenerated = min(cast(IsSystemGenerated as tinyint)) FROM fw.FactPayrollSampledMonthlyDetailed WHERE ( FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and TimeClassID <> 20 -- all timeclasses except baseline (TimeClassId = 20) GROUP BY DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, PayCodeGroupID ) fact LEFT JOIN [fw].[DimDepartment] D ON fact.DepartmentID = D.DepartmentID LEFT JOIN [fw].[DimJobCode] JC ON fact.JobCodeID = JC.JobCodeID LEFT JOIN fw.DimJobCodeGroup JCG ON JCG.JobCodeGroupID = JC.JobCodeGroupID LEFT JOIN [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY ON fact.FiscalMonthID = wpmCY.FiscalMonthID AND fact.FiscalYearID = wpmCY.FiscalYearID AND wpmCY.WorkWeekID = CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID = - 1 THEN D.WorkWeekID ELSE CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID <> - 1 THEN jcg.WorkWeekOverrideID ELSE jc.WorkWeekOverrideID END END LEFT JOIN [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmPY ON fact.FiscalMonthID = wpmPY.FiscalMonthID AND (fact.FiscalYearID - 1) = wpmPY.FiscalYearID AND wpmPY.WorkWeekID = CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID = - 1 THEN D.WorkWeekID ELSE CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID <> - 1 THEN jcg.WorkWeekOverrideID ELSE jc.WorkWeekOverrideID END END LEFT JOIN fw.DimFiscalMonth fm ON fact.FiscalMonthID = fm.FiscalMonthID LEFT JOIN [fw].[DimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID WHERE fact.Hours <> 0 or fact.HoursYTD <> 0 or fact.HoursPriorYear <> 0 or fact.HoursPriorYTD <> 0 or fact.Dollars <> 0 or fact.DollarsYTD <> 0 or fact.DollarsPriorYear <> 0 or fact.DollarsPriorYTD <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.Hours /wpmCY.Hours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursYTD /wpmCY.YTDHours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYear / wpmPY.Hours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYTD / wpmPY.YTDHours end,0) <> 0 exec fw.procFactPayrollSampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID -- recalculate baseline for just inserted values exec fw.procFactMonthlyYTDPriorYearUpdate 'fw.FactPayrollSampledMonthly', 'JobCodeID,PayCodeGroupID,PayCodeID', 'Dollars,Hours', @fiscalYearID, 20, 0 -- update baseline records columns exec fw.procFactPayrollSampledMonthlyUpdateFTEs @fiscalYearID = @fiscalYearID, @timeClassID = 20 END ELSE /*Here is inserting aggregated rows in case when "Target Basis" is not rolling average*/ BEGIN insert into fw.FactPayrollSampledMonthly ( DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, PayCodeGroupID, IsSystemGenerated, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayCodeID, fact.FiscalYearID, fact.FiscalMonthID, fact.TimeClassID, fact.PayCodeGroupID, IsSystemGenerated = case when fact.Hours = 0 and fact.Dollars = 0 then 1 else 0 end, fact.Hours, fact.HoursYTD, fact.HoursPriorYear, fact.HoursPriorYTD, fact.Dollars, fact.DollarsYTD, fact.DollarsPriorYear, fact.DollarsPriorYTD, FTEs = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.Hours /wpmCY.Hours end,0), FTEsYTD = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursYTD /wpmCY.YTDHours end,0), FTEsPriorYear = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYear / wpmPY.Hours end,0), FTEsPriorYTD = isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYTD / wpmPY.YTDHours end,0) FROM ( SELECT DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, sum(Hours) AS Hours, sum(HoursYTD) AS HoursYTD, sum(HoursPriorYear) AS HoursPriorYear, sum(HoursPriorYTD) AS HoursPriorYTD, sum(Dollars) AS Dollars, sum(DollarsYTD) AS DollarsYTD, sum(DollarsPriorYear) AS DollarsPriorYear, sum(DollarsPriorYTD) AS DollarsPriorYTD, PayCodeGroupID, IsSystemGenerated = min(cast(IsSystemGenerated as tinyint)) FROM fw.FactPayrollSampledMonthlyDetailed WHERE ( FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) GROUP BY DepartmentID, JobCodeID, PayCodeID, FiscalYearID, FiscalMonthID, TimeClassID, PayCodeGroupID ) fact LEFT JOIN [fw].[DimDepartment] D ON fact.DepartmentID = D.DepartmentID LEFT JOIN [fw].[DimJobCode] JC ON fact.JobCodeID = JC.JobCodeID LEFT JOIN fw.DimJobCodeGroup JCG ON JCG.JobCodeGroupID = JC.JobCodeGroupID LEFT JOIN [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY ON fact.FiscalMonthID = wpmCY.FiscalMonthID AND ( (@TargetBasis = 1 AND ( (fact.FiscalYearID-1 =wpmCY.FiscalYearID and TimeClassID = 20) OR (fact.FiscalYearID =wpmCY.FiscalYearID and TimeClassID <> 20) ) ) OR (@TargetBasis !=1 AND fact.FiscalYearID=wpmCY.FiscalYearID) ) AND wpmCY.WorkWeekID = CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID = - 1 THEN D.WorkWeekID ELSE CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID <> - 1 THEN jcg.WorkWeekOverrideID ELSE jc.WorkWeekOverrideID END END LEFT JOIN [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmPY ON fact.FiscalMonthID = wpmPY.FiscalMonthID AND ( (@TargetBasis = 1 AND ( (fact.FiscalYearID-2 =wpmPY.FiscalYearID and TimeClassID = 20) OR (fact.FiscalYearID-1 =wpmPY.FiscalYearID and TimeClassID <> 20) ) ) OR (@TargetBasis !=1 AND fact.FiscalYearID-1 = wpmPY.FiscalYearID) ) AND wpmPY.WorkWeekID = CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID = - 1 THEN D.WorkWeekID ELSE CASE WHEN jc.WorkWeekOverrideID = - 1 and jcg.WorkWeekOverrideID <> - 1 THEN jcg.WorkWeekOverrideID ELSE jc.WorkWeekOverrideID END END LEFT JOIN fw.DimFiscalMonth fm ON fact.FiscalMonthID = fm.FiscalMonthID LEFT JOIN [fw].[DimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID WHERE fact.Hours <> 0 or fact.HoursYTD <> 0 or fact.HoursPriorYear <> 0 or fact.HoursPriorYTD <> 0 or fact.Dollars <> 0 or fact.DollarsYTD <> 0 or fact.DollarsPriorYear <> 0 or fact.DollarsPriorYTD <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.Hours /wpmCY.Hours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursYTD /wpmCY.YTDHours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYear / wpmPY.Hours end,0) <> 0 or isnull(case when pcg.ProductiveClassID in ('3','2') then fact.HoursPriorYTD / wpmPY.YTDHours end,0) <> 0 END GO --------------------------------------------- -- fw.procPayrollSampledMonthlyPerformFlexing /************************************************************************************************************************* ** Change History ************************************************************************************************************************** ** CID Date Author WI Description ** 1 5/10/2016 NL B-11692 Changed flexing to work like new ABB flexing procs ** 2 5/20/2016 NL B-12055 Removed call to insert flexed data (handled in engine now) ** 3 2/20/2017 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 4 10/4/2017 NL D-06487 Fix some stuff that got lost including ABB dept join ** 5 10/22/2019 KF D-08819 FTE Baseline Calculation Issue *************************************************************************************************************************/ CREATE proc [fw].[procPayrollSampledMonthlyPerformFlexing] @CostingResultID int, @CostingTimeClassID tinyint, @FiscalYearID int with recompile AS --reset all of the flex data to budget (only data that should be flexed like ABB) SELECT DISTINCT DepartmentID INTO #ABBDepts from ( SELECT DepartmentID FROM [dss].[FactCostingOutDetailGL] WHERE CostingResultID = @CostingResultID UNION ALL SELECT DepartmentID FROM [dss].[FactCostingOutDetailPayroll] WHERE CostingResultID = @CostingResultID) depts; INSERT INTO [fw].[FactPayrollSampledMonthly]([DepartmentID], [JobCodeID], [PayCodeID], [FiscalYearID], [FiscalMonthID], [TimeClassID], [Hours], [HoursYTD], [HoursPriorYear], [HoursPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [FTEs], [FTEsYTD], [FTEsPriorYear], [FTEsPriorYTD], [IsDeleted], [TransactionID], [PayCodeGroupID], [IsSystemGenerated]) SELECT [DepartmentID], [JobCodeID], [PayCodeID], [FiscalYearID], [FiscalMonthID], 4, [Hours], [HoursYTD], [HoursPriorYear], [HoursPriorYTD], [Dollars], [DollarsYTD], [DollarsPriorYear], [DollarsPriorYTD], [FTEs], [FTEsYTD], [FTEsPriorYear], [FTEsPriorYTD], [IsDeleted], 12345, [PayCodeGroupID], [IsSystemGenerated] FROM [fw].[FactPayrollSampledMonthly] WHERE TimeClassID = 2 and FiscalYearID = @FiscalYearID and DepartmentID in ( select DepartmentID from #ABBDepts ); -- BEGIN CID 4 -- (this used to be right after the "run calculations" comment, before the other procs were called exec [fw].[procFactMonthlyMergeDuplicates] 'fw.FactPayrollSampledMonthly', 'JobCodeID,PayCodeGroupID', 'Dollars,Hours', @fiscalYearID, 4, 0 -- END CID 4 -- --perform flexing UPDATE pay SET pay.Dollars = CASE WHEN ISNULL(pay.Variability, 0) = 0 THEN pay.Dollars ELSE ISNULL(((pay.Dollars * (1 - (TotalVariableDirectCost / NULLIF(TotalCost, 0.0)))) + TotalExtendedVariableDirectCost), 0) END FROM (SELECT pr.DepartmentID, pr.JobCodeID, pr.PayCodeGroupID, pr.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, pr.Dollars, ISNULL(jco.Variability, jc.Variability) as Variability FROM [fw].[FactPayrollSampledMonthly] pr LEFT JOIN (SELECT JobCodeID, Variability FROM [dss].[JobCodeVariability] WHERE CostingConfigGuid = (SELECT CostingConfigGuid FROM [dss].[CostingResult] WHERE CostingResultID = @CostingResultID)) jc ON pr.JobCodeID = jc.JobCodeID LEFT JOIN (SELECT DepartmentID, JobCodeID, Variability FROM [dss].[PayCodeJobCodeVariabilityOverride] WHERE CostingConfigGuid = (SELECT CostingConfigGuid FROM [dss].[CostingResult] WHERE CostingResultID = @CostingResultID)) jco ON pr.DepartmentID = jco.DepartmentID AND pr.JobCodeID = jco.JobCodeID WHERE TimeClassID = 4 AND FiscalYearID = @FiscalYearID) pay INNER JOIN #ABBDepts abd on pay.DepartmentID = abd.DepartmentID LEFT JOIN (SELECT DepartmentID, JobCodeID, PayCodeGroupID, FiscalMonthID, FiscalYearID, SUM(cost.ExtendedVariableDirectCost) as TotalExtendedVariableDirectCost, SUM(cost.TotalVariableDirectCost) as TotalVariableDirectCost, SUM(cost.TotalCost) as TotalCost FROM [fw].[viewMRPayrollBudgetCostPerRVUbyMonth] cost WHERE cost.CostingResultID = @CostingResultID AND cost.TimeClassID = @CostingTimeClassID GROUP BY DepartmentID, JobCodeID, PayCodeGroupID, FiscalMonthID, FiscalYearID ) cost ON pay.DepartmentID = cost.DepartmentID AND pay.JobCodeID = cost.JobCodeID AND pay.PayCodeGroupID = cost.PayCodeGroupID AND cost.FiscalMonthID = pay.FiscalMonthID AND cost.FiscalYearID = pay.FiscalYearID DROP TABLE #ABBDepts; --run calculations exec [fw].[procPayrollSampledMonthlyRecalcFlexedHours] @FiscalYearID = @FiscalYearID exec [fw].[procFactMonthlyYTDPriorYearUpdate] 'fw.FactPayrollSampledMonthly', 'JobCodeID,PayCodeID,PayCodeGroupID', 'Dollars,Hours', @fiscalYearID, 4, 0 exec [fw].[procFactPayrollSampledMonthlyUpdateFTEs] @fiscalYearID = @FiscalYearID, @timeClassID = 4 --delete blank rows DELETE FROM [fw].[FactPayrollSampledMonthly] WHERE Hours = 0 and HoursPriorYear = 0 and HoursPriorYTD = 0 and HoursYTD = 0 and Dollars = 0 and DollarsPriorYear = 0 and DollarsPriorYTD = 0 and DollarsYTD = 0 GO --------------------------------------------- -- fw.procPayrollSampledMonthlyRecalcFlexedHours CREATE PROC [fw].[procPayrollSampledMonthlyRecalcFlexedHours] @FiscalYearID smallint AS /* ************************************************************************************************************************ ** Author: Nathan LeRoy ** Create Date: 2016-05-11 ** Description: Recalc payroll hours based on dollars flexing for MR ** Last Modified: 2016-05-11 ************************************************************************************************************************** ** Change History ************************************************************************************************************************** ** CID Date Author WI Description ** *************************************************************************************************************************/ UPDATE flex SET flex.Hours = COALESCE(flex.Dollars / NULLIF((orig.Dollars / NULLIF(orig.Hours, 0)), 0), 0) FROM [fw].[FactPayrollSampledMonthly] flex LEFT JOIN [fw].[FactPayrollSampledMonthly] orig ON flex.DepartmentID = orig.DepartmentID AND flex.JobCodeID = orig.JobCodeID AND flex.PayCodeGroupID = orig.PayCodeGroupID AND flex.PayCodeID = orig.PayCodeID AND flex.FiscalYearID = orig.FiscalYearID AND flex.FiscalMonthID = orig.FiscalMonthID WHERE orig.TimeClassID = 2 --budget AND flex.TimeClassID = 4 --flex AND orig.FiscalYearID = @FiscalYearID AND flex.FiscalYearID = @FiscalYearID GO --------------------------------------------- -- fw.procPayrollSampledPayPeriodDetailedInsert /************************************************************ ** Change History ************************************************************** ** CID Date Author WI Description ** 1 9.19.14 MJS B-02788 Excluding Budget data from the detailed sample since budgeting at Pay Code level is not supported ** 2 2015-10-28 MJS D-03587 Added logic to exclude ignored hours and dollars ** 3 2016-09-22 AK B-11845 Added procFactPayrollSampledDetailedBaselineTargetUpdate ** 4 2016-12-13 NL B-13759 Added fiscalYearID param and filtering ** 5 2017-02-22 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 6 2017-02-22 IP B-14098 MR - Adjust Budgeted FTEs (Sampling). Added part that adds adjusted values to temp table #TEMPPAYROLL ** 7 2017-03-06 GF B-14693 Added baseline target year filter ** 8 2017-03-08 GF B-14693 Fix adjustment records year filter handling ** 9 2017-04-11 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactPayrollSampledMonthlyDetailed. ** 10 2017-06-12 IP Changed type of hours/dollars fields to numeric instead of "money" ** 11 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 12 2017-07-11 IP D-06150 Fixed conditions of merge statement (update part) ** 13 2017-07-13 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 14 2017-08-29 ip B-16798 Add using of Budget Adjustment. ** 15 2017-09-26 GF TK-48298 Fixed adjustments for all years case ** 16 2017-11-26 IP D-06490 Fixed splitting for first-last periods ** 17 2018-01-17 IP B-16703 Omit archived budget adjustments ** 18 2018-02-09 IP B-18724 Omit archived Budgeted FTE Adjustments ** 19 2018-02-22 IP D-06786 add department calculation for TC = 2 if dept is not in PR , Dept is in Budget Allocation ** 20 2018-05-17 IP D-07329 Returning fuctionality to include stats for departments using non-PR driver departments ** 21 2018-08-09 OV B-19715 added condition where IsPR = 1 for jobcode ** 22 2018-11-16 OV D-07714 fix: deleted rows where IsPR = 0 for department ** 23 2019-08-19 vfay D-08311 PR Sampling Proc : removed filtering out 0 Value Rows ** 24 2020-12-07 HV JAZZ-11135 Remove table variable in procPayrollSampledPayPeriodDetailedInsert ** 25 2020-12-15 HV JAZZ-11506 Bug - PR Sampling: data for beginning of future year is deleted when running Payroll Pay Period Detailed one year sampling ** 26 2020-12-21 HV JAZZ-10222 Proc procPayrollSampledPayPeriodDetailedInsert is timing out ** 27 2022-03-11 HV JAZZ-27781 Run PR Process Task can fail silently during Payroll Sampling ** 28 2022-10-25 HV JAZZ-45100 Reuse split by batches functionality in existing procedure ** 29 2023-12-04 ishah JAZZ-62485 Remove @departmentIDs param in procFactPayPeriodYTDPriorYearUpdate_Staging *************************************************************/ CREATE PROC [fw].[procPayrollSampledPayPeriodDetailedInsert] @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0 as print 'Starting calculating staging table --- '+convert(varchar(20),GETDATE(),113) IF OBJECT_ID('tempdb..#PayrollSampledPayPeriodDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledPayPeriodDetailedStaging IF OBJECT_ID('tempdb..#PayrollSampledPayPeriodDetailedPreStaging') IS NOT NULL DROP TABLE #PayrollSampledPayPeriodDetailedPreStaging IF OBJECT_ID('fw.PayrollSampledPayPeriodDetailedStagingWithCalcs') IS NOT NULL DROP TABLE fw.PayrollSampledPayPeriodDetailedStagingWithCalcs IF OBJECT_ID('tempdb..#DepartmentsBudgetAllocations') IS NOT NULL DROP TABLE #DepartmentsBudgetAllocations CREATE table #DepartmentsBudgetAllocations (DepartmentID int) insert into #DepartmentsBudgetAllocations select SourceDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.TargetDepartmentID and d.IsPR = 1 where SourceDepartmentID <> 0 union -- unique select TargetDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.SourceDepartmentID and d.IsPR = 1 -- Filtering all departments that move data FROM selected where TargetDepartmentID <> 0 IF OBJECT_ID('tempdb..#PayPeriodIDs') IS NOT NULL DROP TABLE #PayPeriodIDs CREATE TABLE #PayPeriodIDs (PayPeriodID smallint primary key) insert into #PayPeriodIDs select PayPeriodID from fw.DimPayPeriod where @fiscalYearID = 0 or FiscalYearIDSecond = @fiscalYearID IF OBJECT_ID('tempdb..#PayPeriodsToMonths') IS NOT NULL DROP TABLE #PayPeriodsToMonths CREATE TABLE #PayPeriodsToMonths ( PayPeriodID INT, PayCycleID INT, [PeriodNumber] INT, [FiscalMonthID] INT, [FiscalYearID] INT, [PeriodWeight] NUMERIC(25, 10), DaysinPeriodWeight NUMERIC(25, 10) ) INSERT INTO #PayPeriodsToMonths SELECT [PayPeriodID], PayCycleID, [PeriodNumber], [FiscalMonthIDStart] AS FiscalMonthID, [FiscalYearIDStart] AS FiscalYearID, [PeriodWeightStart] AS PreriodWeight, DaysinPeriodWeightStart as DaysinPeriodWeight FROM [fw].[DimPayPeriod] WHERE [PeriodWeightStart] <> 0.0 UNION ALL SELECT [PayPeriodID], PayCycleID, [PeriodNumber], FiscalMonthIDSecond AS FiscalMonthID, FiscalYearIDSecond AS FiscalYearID, PeriodWeightSecond AS PreriodWeight, DaysinPeriodWeightSecond as DaysinPeriodWeight FROM [fw].[DimPayPeriod] WHERE PeriodWeightSecond <> 0.0 IF OBJECT_ID('tempdb..#PayrollPayPeriodTempTable') IS NOT NULL DROP TABLE #PayrollPayPeriodTempTable CREATE TABLE #PayrollPayPeriodTempTable ( DepartmentID INT, JobCodeID INT, PayCodeID INT, PayCodeGroupID INT, EmployeeID INT, PayPeriodID int, TimeClassID INT, Hours NUMERIC(25, 10), Dollars NUMERIC(25, 10), ApplyDate DATETIME, Src VARCHAR(max) ) --pull new data - data integration create table #PayrollSampledPayPeriodDetailedStaging (DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, EmployeeID int, PayPeriodID int, TimeClassID int, Hours decimal(18, 6), Dollars decimal(18, 6), isDeleted bit default (0), isSystemGenerated bit default(0)) create table #PayrollSampledPayPeriodDetailedPreStaging (DepartmentID int, JobCodeID int, PayCodeID int, PayCodeGroupID int, EmployeeID int, PayPeriodID int, TimeClassID int, Hours decimal(18, 6), Dollars decimal(18, 6), isDeleted bit default (0), isSystemGenerated bit default(0)) insert into #PayrollSampledPayPeriodDetailedPreStaging (DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID, Hours, Dollars) select data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, data.PayPeriodID, data.TimeClassID, sum(case when data.UnitTypeID = 51 then data.Value else 0 end) as Hours, sum(case when data.UnitTypeID = 34 then data.Value else 0 end) as Dollars from int.FactStaffingByPayPeriod data inner join [fw].[DimJobCode] jc on data.JobCodeID = jc.JobCodeID and IsPR = 1 inner join [fw].[DimPayCode] pc on data.PayCodeID=pc.PayCodeID inner join [fw].[DimPayPeriod] pp on data.PayPeriodID = pp.PayPeriodID inner join [fw].[DimDepartment] d on d.DepartmentID = data.DepartmentID where data.PayPeriodID != 0 and data.IsDeleted = 0 and (d.IsPR = 1 or exists (select 1 from #DepartmentsBudgetAllocations dba where dba.DepartmentID = d.DepartmentID)) and TimeClassID = 2 and TimeClassID <> 20 and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) and ((data.UnitTypeID = 51 and pc.IsHoursIgnored = 0) or (data.UnitTypeID = 34 and pc.IsDollarsIgnored = 0)) group by data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, data.PayPeriodID, data.TimeClassID IF OBJECT_ID('tempdb..#DepartmentsBudgetAllocations') IS NOT NULL DROP TABLE #DepartmentsBudgetAllocations -- BudgetAdjustments Start declare @iteration int = 1 DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) and DataType = 1 ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN BEGIN INSERT INTO #PayrollPayPeriodTempTable(DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, PayPeriodID, TimeClassID, Hours, Dollars) SELECT TargetDepartmentID as DepartmentID,TargetJobCodeID as JobCodeID, stt.EmployeeID, stt.PayCodeID, stt.PayCodeGroupID, stt.PayPeriodID, stt.TimeClassID, HOURS = STT.Hours*pptm.DaysinPeriodWeight, Dollars = STT.Dollars*pptm.DaysinPeriodWeight FROM #PayrollSampledPayPeriodDetailedPreStaging STT inner join #PayPeriodsToMonths pptm on pptm.PayPeriodID = stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = pptm.FiscalYearID INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and pptm.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 and Archived = 0 UNION SELECT SourceDepartmentID as DepartmentID,SourceJobCodeID as JobCodeID, stt.EmployeeID, stt.PayCodeID, stt.PayCodeGroupID, stt.PayPeriodID, stt.TimeClassID, HOURS = -STT.Hours*pptm.DaysinPeriodWeight, Dollars = -STT.Dollars*pptm.DaysinPeriodWeight FROM #PayrollSampledPayPeriodDetailedPreStaging STT inner join #PayPeriodsToMonths pptm on pptm.PayPeriodID = stt.PayPeriodID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.FiscalYearID = pptm.FiscalYearID INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and pptm.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and TimeClassID = 2 and DataType = 1 and Archived = 0 END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; -- BudgetAdjustments END --SplittingMonthsToPayPeriod --insert into #PayrollSampledPayPeriodDetailedStaging (DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID, Hours, Dollars) --SELECT fact.DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID, Hours*PeriodWeight, Dollars*PeriodWeight FROM #PayrollSampledMonthlyDetailedStaging fact --INNER JOIN fw.DimDepartment dd on fact.DepartmentID = dd.DepartmentID --INNER JOIN #PayPeriodsToMonths PP ON PP.FiscalYearID = fact.FiscalYearID -- AND pp.FiscalMonthID = fact.FiscalMonthID -- and pp.PayCycleID = dd.PayCycleID IF OBJECT_ID('tempdb..#PayPeriodsToMonths') IS NOT NULL DROP TABLE #PayPeriodsToMonths INSERT INTO #PayrollSampledPayPeriodDetailedStaging (DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID,Hours,Dollars) SELECT DepartmentID,JobCodeID,PayCodeID,PayCodeGroupID,EmployeeID,PayPeriodID,TimeClassID,Hours,Dollars FROM #PayrollPayPeriodTempTable IF OBJECT_ID('tempdb..#PayrollPayPeriodTempTable') IS NOT NULL DROP TABLE #PayrollPayPeriodTempTable insert into #PayrollSampledPayPeriodDetailedStaging (DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID, Hours, Dollars) select data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, data.PayPeriodID, data.TimeClassID, sum(case when data.UnitTypeID = 51 then data.Value else 0 end) as Hours, sum(case when data.UnitTypeID = 34 then data.Value else 0 end) as Dollars from int.FactStaffingByPayPeriod data inner join [fw].[DimJobCode] jc on data.JobCodeID = jc.JobCodeID and IsPR = 1 inner join [fw].[DimPayCode] pc on data.PayCodeID=pc.PayCodeID inner join [fw].[DimPayPeriod] pp on data.PayPeriodID = pp.PayPeriodID inner join [fw].[DimDepartment] d on d.DepartmentID = data.DepartmentID where data.PayPeriodID != 0 and data.IsDeleted = 0 and d.IsPR = 1 and TimeClassID <> 20 and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) and ((data.UnitTypeID = 51 and pc.IsHoursIgnored = 0) or (data.UnitTypeID = 34 and pc.IsDollarsIgnored = 0)) group by data.DepartmentID, data.JobCodeID, data.PayCodeID, pc.PayCodeGroupID, data.EmployeeID, data.PayPeriodID, data.TimeClassID --pull new data - adjustments DECLARE @NonProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdGroupID INT = ( SELECT TOP 1 pcg.PayCodeGroupID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @NonProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Non-Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) DECLARE @ProdPayCodeID INT = ( SELECT TOP 1 pcg.DefaultPayCodeID FROM fw.DimProductiveClass pc INNER JOIN fw.DimPayCodeGroup pcg ON pcg.ProductiveClassID = pc.ProductiveClassID WHERE pc.Name = 'Productive' AND pcg.PayCodeGroupID != 0 ORDER BY pcg.SortOrder) INSERT INTO #PayrollSampledPayPeriodDetailedStaging (DepartmentID, JobCodeID,PayCodeID, PayCodeGroupID, EmployeeID, PayPeriodID, TimeClassID, Hours, Dollars) SELECT Adj.DepartmentID, Adj.JobCodeID, Adj.PayCodeId, Adj.PayCodeGroupID, 0 as EmployeeID, PP.PayPeriodID, 2 AS TimeClassID, -- always Budgeted sum(Adj.Hours * PP.PreriodWeight) AS Hours, 0 AS Dollars FROM ( SELECT b.DepartmentID, b.JobCodeID, @ProdPayCodeID as PayCodeID, @ProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, ba.ProductiveChange AS Hours FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@fiscalYearID = 0 or b.FiscalYearID = @fiscalYearID) and fact.DepartmentID is null and b.Archived = 0 UNION ALL SELECT b.DepartmentID, b.JobCodeID, @NonProdPayCodeID as PayCodeID, @NonProdGroupID AS PayCodeGroupID, b.FiscalYearID, ba.FiscalMonthID, ba.NonProductiveChange AS Hours FROM mr.BudgetPayrollReallocationAdjustment ba INNER JOIN mr.BudgetPayrollReallocation b ON b.BudgetPayrollReallocationGUID = ba.BudgetPayrollReallocationGUID LEFT JOIN (select SourceDepartmentID as DepartmentID, SourceJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 UNION ALL select TargetDepartmentID as DepartmentID, TargetJobCodeID as JobCodeID, FiscalYearID, FiscalMonthID FROM [mr].[BudgetReallocation] b INNER JOIN (select distinct FiscalMonthID,BudgetReallocationGUID from [mr].[BudgetReallocationAdjustment] where change <> 0) ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID WHERE DataType = 1 ) fact on fact.DepartmentID = b.DepartmentID and fact.JobCodeID = b.JobCodeID and fact.FiscalYearID = b.FiscalYearID and fact.FiscalMonthID = ba.FiscalMonthID WHERE (@fiscalYearID = 0 or b.FiscalYearID = @fiscalYearID) and fact.DepartmentID is null and b.Archived = 0 ) AS Adj INNER JOIN fw.DimJobCode jc ON jc.JobCodeID = Adj.JobCodeID and jc.IsPR = 1 INNER JOIN fw.DimDepartment dd on adj.DepartmentID = dd.DepartmentID and dd.IsPR = 1 INNER JOIN ( SELECT [PayPeriodID], PayCycleID, [PeriodNumber], [FiscalMonthIDStart] AS FiscalMonthID, [FiscalYearIDStart] AS FiscalYearID, [PeriodWeightStart] AS PreriodWeight FROM [fw].[DimPayPeriod] WHERE (@fiscalYearID = 0 or [FiscalYearIDSecond] = @fiscalYearID) UNION ALL SELECT [PayPeriodID], PayCycleID, [PeriodNumber], FiscalMonthIDSecond AS FiscalMonthID, FiscalYearIDSecond AS FiscalYearID, PeriodWeightSecond AS PreriodWeight FROM [fw].[DimPayPeriod] WHERE (@fiscalYearID = 0 or [FiscalYearIDSecond] = @fiscalYearID) ) PP ON PP.FiscalYearID = Adj.FiscalYearID AND pp.FiscalMonthID = adj.FiscalMonthID and pp.PayCycleID = dd.PayCycleID GROUP BY Adj.DepartmentID, Adj.JobCodeID, Adj.PayCodeID, Adj.PayCodeGroupID, PP.PayPeriodID --run calculations on staging table exec fw.procFactPayPeriodMergeDuplicates '#PayrollSampledPayPeriodDetailedStaging', 'JobCodeID,PayCodeID,PayCodeGroupID, EmployeeID', 'Dollars,Hours', @fiscalYearID, 0, 0, @departmentIDs exec fw.procFactPayrollSampledPayPeriodDetailedBaselineTargetUpdate @departmentIDs = @departmentIDs, @fiscalYearID = @fiscalYearID exec fw.procFactPayPeriodYTDPriorYearUpdate_Staging 'fw.FactPayrollSampledPayPeriodDetailed','#PayrollSampledPayPeriodDetailedStaging', 'JobCodeID,PayCodeID,PayCodeGroupID, EmployeeID', 'Dollars,Hours', @fiscalYearID, 0, 0 IF OBJECT_ID('tempdb..#PayrollSampledPayPeriodDetailedFTEs') IS NOT NULL DROP TABLE #PayrollSampledPayPeriodDetailedFTEs CREATE TABLE #PayrollSampledPayPeriodDetailedFTEs (DepartmentID int,JobCodeID int,PayCodeID int,PayCodeGroupID int,EmployeeID int,PayPeriodID int,TimeClassID int, FTEs decimal(18, 6), FTEsYTD decimal(18, 6), FTEsPriorYear decimal(18, 6), FTEsPriorYTD decimal(18, 6)) exec client.procFactPayrollSampledPayPeriodDetailedFTEsInsert_Staging @departmentIDs = @departmentIDs, @fiscalYearID = @fiscalYearID --!!!Removing all records where Department is not PR delete fact from fw.PayrollSampledPayPeriodDetailedStagingWithCalcs fact inner join fw.dimDepartment d on d.DepartmentID = fact.DepartmentID and d.isPR = 0 IF @fiscalYearID = 0 and @departmentIDs is null BEGIN DECLARE @BatchSize INT = 50000000 -- Split data into batches IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods CREATE TABLE #inputPayPeriods (PayPeriodID INT, RecordsCount INT, BatchID INT) INSERT INTO #inputPayPeriods EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'PayPeriodID', @tableAlias = 'ps', @fromClause = 'fw.PayrollSampledPayPeriodDetailedStagingWithCalcs ps', @whereClause = '', @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods truncate table fw.FactPayrollSampledPayPeriodDetailed IF @MaxBatchID >= 2 BEGIN CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.PayrollSampledPayPeriodDetailedStagingWithCalcs (PayPeriodID,DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,TimeClassID) END -- Loop thru batches and update data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO fw.FactPayrollSampledPayPeriodDetailed With (TABLOCKX) ( DepartmentID, PayPeriodID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated) SELECT fw.DepartmentID, fw.PayPeriodID, fw.JobCodeID, fw.PayCodeID, fw.PayCodeGroupID, fw.EmployeeID, fw.TimeClassID, fw.Dollars, fw.DollarsYTD, fw.DollarsPriorYear, fw.DollarsPriorYTD, fw.Hours, fw.HoursYTD, fw.HoursPriorYear, fw.HoursPriorYTD, isnull(fte.FTEs,0) as FTEs, isnull(fte.FTEsYTD,0) as FTEsYTD, isnull(fte.FTEsPriorYear,0) as FTEsPriorYear, isnull(fte.FTEsPriorYTD,0) as FTEsPriorYTD, 0 as IsDeleted, isnull(fw.IsSystemGenerated,0) as IsSystemGenerated FROM fw.PayrollSampledPayPeriodDetailedStagingWithCalcs fw inner join [fw].[DimJobCode] jc on fw.JobCodeID = jc.JobCodeID and IsPR = 1 left join #PayrollSampledPayPeriodDetailedFTEs fte on fw.DepartmentID = fte.DepartmentID AND fw.JobCodeID = fte.JobCodeID AND fw.PayCodeID = fte.PayCodeID AND fw.PayCodeGroupID = fte.PayCodeGroupID AND fw.EmployeeID = fte.EmployeeID AND fw.PayPeriodID = fte.PayPeriodID AND fw.TimeClassID = fte.TimeClassID INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = fw.PayPeriodID WHERE IPP.BatchID = @BatchID SET @BatchID = @BatchID + 1 END END ELSE BEGIN CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.PayrollSampledPayPeriodDetailedStagingWithCalcs (DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,PayPeriodID,TimeClassID) BEGIN TRANSACTION Sampling BEGIN TRY WITH TGT AS (SELECT t.* FROM fw.FactPayrollSampledPayPeriodDetailed t With (TABLOCKX) inner join #PayPeriodIDs ppt on t.PayPeriodID = ppt.PayPeriodID ) MERGE TGT AS target USING (select fw.DepartmentID, fw.PayPeriodID, fw.JobCodeID, fw.PayCodeID, fw.PayCodeGroupID, fw.EmployeeID, fw.TimeClassID, fw.Dollars, fw.DollarsYTD, fw.DollarsPriorYear, fw.DollarsPriorYTD, fw.Hours, fw.HoursYTD, fw.HoursPriorYear, fw.HoursPriorYTD, isnull(fte.FTEs,0) as FTEs, isnull(fte.FTEsYTD,0) as FTEsYTD, isnull(fte.FTEsPriorYear,0) as FTEsPriorYear, isnull(fte.FTEsPriorYTD,0) as FTEsPriorYTD, 0 as IsDeleted, isnull(fw.IsSystemGenerated,0) as IsSystemGenerated from fw.PayrollSampledPayPeriodDetailedStagingWithCalcs fw left join #PayrollSampledPayPeriodDetailedFTEs fte on fw.DepartmentID = fte.DepartmentID AND fw.JobCodeID = fte.JobCodeID AND fw.PayCodeID = fte.PayCodeID AND fw.PayCodeGroupID = fte.PayCodeGroupID AND fw.EmployeeID = fte.EmployeeID AND fw.PayPeriodID = fte.PayPeriodID AND fw.TimeClassID = fte.TimeClassID ) AS source ON source.DepartmentID = target.DepartmentID AND source.JobCodeID = target.JobCodeID AND source.EmployeeID = target.EmployeeID AND source.PayCodeID = target.PayCodeID AND source.PayCodeGroupID = target.PayCodeGroupID AND source.PayPeriodID = target.PayPeriodID AND source.TimeClassID = target.TimeClassID AND source.PayCodeID = target.PayCodeID WHEN MATCHED AND (target.Dollars <> source.Dollars or target.DollarsYTD <> source.DollarsYTD or target.DollarsPriorYear <> source.DollarsPriorYear or target.DollarsPriorYTD <> source.DollarsPriorYTD or target.Hours <> source.Hours or target.HoursYTD <> source.HoursYTD or target.HoursPriorYear <> source.HoursPriorYear or target.HoursPriorYTD <> source.HoursPriorYTD or target.FTEs <> source.FTEs or target.FTEsYTD <> source.FTEsYTD or target.FTEsPriorYear <> source.FTEsPriorYear or target.FTEsPriorYTD <> source.FTEsPriorYTD or target.isSystemGenerated <> source.isSystemGenerated) THEN UPDATE SET target.Dollars = source.Dollars, target.DollarsYTD = source.DollarsYTD, target.DollarsPriorYear = source.DollarsPriorYear, target.DollarsPriorYTD = source.DollarsPriorYTD, target.Hours = source.Hours, target.HoursYTD = source.HoursYTD, target.HoursPriorYear = source.HoursPriorYear, target.HoursPriorYTD = source.HoursPriorYTD, target.FTEs = source.FTEs, target.FTEsYTD = source.FTEsYTD, target.FTEsPriorYear = source.FTEsPriorYear, target.FTEsPriorYTD = source.FTEsPriorYTD, target.isSystemGenerated = source.isSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, PayPeriodID, JobCodeID, PayCodeID, PayCodeGroupID, EmployeeID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.PayPeriodID, source.JobCodeID, source.PayCodeID, source.PayCodeGroupID, source.EmployeeID, source.TimeClassID, source.Dollars, source.DollarsYTD, source.DollarsPriorYear, source.DollarsPriorYTD, source.Hours, source.HoursYTD, source.HoursPriorYear, source.HoursPriorYTD, source.FTEs, source.FTEsYTD, source.FTEsPriorYear, source.FTEsPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE THEN DELETE; COMMIT TRANSACTION Sampling END TRY BEGIN CATCH ROLLBACK TRANSACTION Sampling; THROW END CATCH END IF OBJECT_ID('tempdb..#PayrollSampledPayPeriodDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledPayPeriodDetailedStaging IF OBJECT_ID('fw.PayrollSampledPayPeriodDetailedStagingWithCalcs') IS NOT NULL DROP TABLE fw.PayrollSampledPayPeriodDetailedStagingWithCalcs IF OBJECT_ID('tempdb..#PayrollSampledMonthlyDetailedStaging') IS NOT NULL DROP TABLE #PayrollSampledMonthlyDetailedStaging IF OBJECT_ID('tempdb..#PayrollSampledMonthlyDetailedPreStaging') IS NOT NULL DROP TABLE #PayrollSampledMonthlyDetailedPreStaging IF OBJECT_ID('tempdb..#PayPeriodIDs') IS NOT NULL DROP TABLE #PayPeriodIDs GO --------------------------------------------- -- fw.procPayrollSampledPayPeriodInsert /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2013-09-19 AKK 64193 Changing source table to be int.FactStaffingByPayPeriod ** 2 2013-10-03 RA Updating proc to include db setting options ** 3 2014-06-24 JG B-02536 Updating Pay Code to be Pay Code Group ** 4 2014-09-03 MS B-02863 Removing the parameter from the YTD proc call ** 5 2014-11-23 JG Removing Flexing Piece ** 6 2015-02-19 JG Removing differential and non-fte pay code hours from the data ** 7 2015-04-20 MS Adding differential and non-fte pay code hours back. These hours are excluded from standard in pi.procCalculateProductivityMetrics and should be handled in report mappings. ** 8 2015-10-28 MJS D-03587 Added logic to exclude ignored hours and dollars ** 9 2016-02-29 MJS D-04023 Removed update of default payperiod ** 10 2016-04-28 AK B-11864 Added IsPR check ** 11 2016-10-04 MH B-13126 Added procFactPayrollSampledPayPeriodBaselineTargetUpdate ** 12 2017-01-31 AK B-13926 Added department filter ** 13 2017-02-08 GF B-14308 Added year filter ** 14 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling ** 15 2017-02-20 GF D-05613 Prevent zero rows ** 16 2017-02-23 IP B-14063 Added functionality of adding rows with adjustment values to fw.FactPayrollSampledPayPeriod ** 17 2017-02-23 IP TK-39445 Fixed bug with incorrect accounting payperiod which belongs to 2 fiscal years ** 18 2017-03-08 GF B-14693 Fix adjustment records year filter handling ** 19 2017-03-30 IP B-15085 Performace optimization by aggregating "detailed" data ** 20 2017-04-11 IP D-05763 Replaced hardcoded value hours in pay period from 80.00 to (DimPayPeriod.WorkingDays * 8.0) ** 21 2017-05-29 ipetriv B-15994 Refactored sampling process and implemented using of staging tables ** 22 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 23 2017-07-11 IP D-06152 Fixed conditions of merge statement (update part) ** 24 2017-10-04 GF D-06489 Fix pay period select when running all years ** 25 2018-02-02 GF TK-53716 Re-enable calculation of FTEs for non-standart work Weeks ** 26 2019-08-19 vfay D-08311 PR Sampling Proc : removed filtering out 0 Value Rows ** 27 2021-02-18 KF JAZZ-15158 Variable Productive Hours - Detailed Target Spread ** 28 2022-03-11 HV JAZZ-27781 Run PR Process Task can fail silently during Payroll Sampling ** 29 2023-12-04 ishah JAZZ-62485 Remove @departmentIDs param for procFactPayPeriodYTDPriorYearUpdate_AG *************************************************************/ CREATE proc [fw].[procPayrollSampledPayPeriodInsert] @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0, @useTargetOverrides bit = 0 as IF OBJECT_ID('tempdb..#PayrollSampledPayPeriodStaging') IS NOT NULL DROP TABLE #PayrollSampledPayPeriodStaging IF OBJECT_ID('fw.PayrollSampledPayPeriodStagingWithCalcs') IS NOT NULL DROP TABLE fw.PayrollSampledPayPeriodStagingWithCalcs declare @departments table(val int primary key) insert into @departments select val from ConvertCSValuesToTable(@departmentIDs, ',') declare @payperiods table(val smallint primary key) insert into @payperiods select PayPeriodID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID or @fiscalYearID = 0 --run custom scripts exec [client].[procPayrollSampledInsertPreprocess] /*If Target basis is rolling average then we can't calculate baseline as simple sum of detailed table. in his case we should 1)insert summed values for all timeclasses except baseline (TimeClassId = 20) 2)recalculate baseline 3)run stored procedure to update columns YTD, priorYear etc. */ SELECT DepartmentID, JobCodeID, WorkingHoursCoef = cast(dww.Hours AS NUMERIC(20, 6)) / 7 INTO #WorkWeekHours FROM ( SELECT DepartmentID, JobCodeID, WorkWeekID = COALESCE(jc.WorkWeekID, de.WorkWeekID, - 1) FROM ( SELECT dp.DepartmentID, WorkWeekID = CASE WHEN e.WorkWeekID > - 1 THEN e.WorkWeekID ELSE NULL END FROM fw.DimEntity e INNER JOIN fw.DimDepartment dp on e.EntityID = dp.EntityID ) DE CROSS JOIN ( SELECT djc.JobCodeID, djcg.JobCodeGroupID, WorkWeekID = CASE WHEN djc.WorkWeekOverrideID > - 1 THEN djc.WorkWeekOverrideID WHEN djc.WorkWeekOverrideID = - 1 AND djcg.WorkWeekOverrideID > - 1 THEN djcg.WorkWeekOverrideID ELSE NULL END FROM fw.DimJobCode djc INNER JOIN fw.DimJobCodeGroup djcg ON djc.JobCodeGroupID = djcg.JobCodeGroupID ) JC ) DeptJobCode LEFT JOIN fw.DimWorkWeek dww ON DeptJobCode.WorkWeekID = dww.WorkWeekID DECLARE @IsRollingAverage BIT SELECT @IsRollingAverage = CASE WHEN Value = 10 THEN 1 ELSE 0 END from pi.SystemSetting where Name = 'Target Basis' IF (@IsRollingAverage = 1 OR @useTargetOverrides = 1) BEGIN CREATE TABLE #TimeClasses (TimeClassID tinyint Primary Key) INSERT INTO #TimeClasses (TimeClassID) VALUES (1), (2) IF(@IsRollingAverage = 0) BEGIN INSERT INTO #TimeClasses (TimeClassID) VALUES (20) END SELECT fact.DepartmentID, fact.JobCodeID, fact.PayPeriodID, fact.TimeClassID, fact.PayCodeGroupID, fact.IsSystemGenerated, fact.Hours, fact.HoursYTD, fact.HoursPriorYear, fact.HoursPriorYTD, fact.Dollars, fact.DollarsYTD, fact.DollarsPriorYear, fact.DollarsPriorYTD, FTEs = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.Hours AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours per calendar day / WorkingHoursCoef ELSE fact.Hours / (WorkingDays * 8.0) END END, 0), FTEsYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD hours / YTD days / WorkingHoursCoef ELSE fact.HoursYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0), FTEsPriorYear = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYear AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours for Prior Year per calendar day / WorkingHoursCoef ELSE fact.HoursPriorYear / (WorkingDays * 8.0) END END, 0), FTEsPriorYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD for PY hours / YTD days / WorkingHoursCoef ELSE fact.HoursPriorYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0) INTO #PayrollSampledPayPeriodStaging FROM ( SELECT d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID, sum(d.Hours) AS Hours, sum(d.HoursYTD) AS HoursYTD, sum(d.HoursPriorYear) AS HoursPriorYear, sum(d.HoursPriorYTD) AS HoursPriorYTD, sum(d.Dollars) AS Dollars, sum(d.DollarsYTD) AS DollarsYTD, sum(d.DollarsPriorYear) AS DollarsPriorYear, sum(d.DollarsPriorYTD) AS DollarsPriorYTD, IsSystemGenerated = min(cast(IsSystemGenerated AS TINYINT)) FROM fw.FactPayrollSampledPayPeriodDetailed d INNER JOIN [fw].[DimPayPeriod] pp ON d.PayPeriodID = pp.PayPeriodID INNER JOIN #TimeClasses TC ON TC.TimeClassID = d.TimeClassID WHERE (@departmentIDs IS NULL OR d.DepartmentID IN (SELECT val FROM @departments)) AND (@fiscalYearID = 0 OR pp.FiscalYearIDSecond = @fiscalYearID) GROUP BY d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID ) fact LEFT JOIN [fw].[DimPayPeriod] pp ON pp.PayPeriodID = fact.PayPeriodID LEFT JOIN [fw].[DimPayCodeGroup] pcg ON fact.PayCodeGroupID = pcg.PayCodeGroupID LEFT JOIN #WorkWeekHours ww ON ww.DepartmentID = fact.DepartmentID AND ww.JobCodeID = fact.JobCodeID IF(@IsRollingAverage = 1) exec fw.procFactPayrollSampledPayPeriodBaselineTargetUpdate @departmentIDs = @departmentIDs, @fiscalYearID = @fiscalYearID -- recalculate baseline IF(@useTargetOverrides = 1) exec fw.procFactPayrollSampledPayPeriodBaselineTargetOverridesUpdate exec fw.procFactPayPeriodYTDPriorYearUpdate_AG 'fw.FactPayrollSampledPayPeriod','#PayrollSampledPayPeriodStaging','JobCodeID,PayCodeGroupID', 'Dollars,Hours,FTEs', @fiscalYearID, 20, 0 -- recalculate for baseline rows exec client.procFactPayrollSampledPayPeriodFTEsInsert_Staging @departmentIDs = @departmentIDs, @fiscalYearID = @fiscalYearID IF @fiscalYearID = 0 and @departmentIDs is null BEGIN truncate table fw.FactPayrollSampledPayPeriod INSERT INTO fw.FactPayrollSampledPayPeriod With (TABLOCKX) ( DepartmentID, PayPeriodID, JobCodeID, PayCodeGroupID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated) SELECT DepartmentID, PayPeriodID, JobCodeID, PayCodeGroupID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, 0 as IsDeleted, isnull(IsSystemGenerated,0) as IsSystemGenerated FROM fw.PayrollSampledPayPeriodStagingWithCalcs END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.PayrollSampledPayPeriodStagingWithCalcs (DepartmentID,JobCodeID,PayCodeGroupID,PayPeriodID,TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) BEGIN TRANSACTION Sampling BEGIN TRY WITH TGT AS (SELECT t.* FROM fw.FactPayrollSampledPayPeriod t With (TABLOCKX) inner join fw.DimPayPeriod pp on t.PayPeriodId = pp.PayPeriodID where (@fiscalYearID = 0 or t.PayPeriodID in(select val from @payperiods)) and (@departmentIDs is null or DepartmentID in(select val from @departments)) ) MERGE TGT AS target USING fw.PayrollSampledPayPeriodStagingWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.JobCodeID = target.JobCodeID AND source.PayCodeGroupID = target.PayCodeGroupID AND source.PayPeriodID = target.PayPeriodID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND ( target.Dollars <> source.Dollars or target.DollarsYTD <> source.DollarsYTD or target.DollarsPriorYear <> source.DollarsPriorYear or target.DollarsPriorYTD <> source.DollarsPriorYTD or target.Hours <> source.Hours or target.HoursYTD <> source.HoursYTD or target.HoursPriorYear <> source.HoursPriorYear or target.HoursPriorYTD <> source.HoursPriorYTD or target.FTEs <> source.FTEs or target.FTEsYTD <> source.FTEsYTD or target.FTEsPriorYear <> source.FTEsPriorYear or target.FTEsPriorYTD <> source.FTEsPriorYTD or target.isSystemGenerated <> source.isSystemGenerated) THEN UPDATE SET target.Dollars = source.Dollars, target.DollarsYTD = source.DollarsYTD, target.DollarsPriorYear = source.DollarsPriorYear, target.DollarsPriorYTD = source.DollarsPriorYTD, target.Hours = source.Hours, target.HoursYTD = source.HoursYTD, target.HoursPriorYear = source.HoursPriorYear, target.HoursPriorYTD = source.HoursPriorYTD, target.FTEs = source.FTEs, target.FTEsYTD = source.FTEsYTD, target.FTEsPriorYear = source.FTEsPriorYear, target.FTEsPriorYTD = source.FTEsPriorYTD, target.isSystemGenerated = source.isSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, PayPeriodID, JobCodeID, PayCodeGroupID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.PayPeriodID, source.JobCodeID, source.PayCodeGroupID, source.TimeClassID, source.Dollars, source.DollarsYTD, source.DollarsPriorYear, source.DollarsPriorYTD, source.Hours, source.HoursYTD, source.HoursPriorYear, source.HoursPriorYTD, source.FTEs, source.FTEsYTD, source.FTEsPriorYear, source.FTEsPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE THEN DELETE; COMMIT TRANSACTION Sampling END TRY BEGIN CATCH ROLLBACK TRANSACTION Sampling; THROW END CATCH END END ELSE /*Here is inserting aggregated rows in case when "Target Basis" is not rolling average and @useTargetOverrides = 0*/ BEGIN IF @fiscalYearID = 0 and @departmentIDs is null BEGIN truncate table fw.FactPayrollSampledPayPeriod insert into fw.FactPayrollSampledPayPeriod ( DepartmentID, JobCodeID, PayPeriodID, TimeClassID, PayCodeGroupID, IsSystemGenerated, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD ) SELECT fact.DepartmentID, fact.JobCodeID, fact.PayPeriodID, fact.TimeClassID, fact.PayCodeGroupID, fact.IsSystemGenerated, fact.Hours, fact.HoursYTD, fact.HoursPriorYear, fact.HoursPriorYTD, fact.Dollars, fact.DollarsYTD, fact.DollarsPriorYear, fact.DollarsPriorYTD, FTEs = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.Hours AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours per calendar day / WorkingHoursCoef ELSE fact.Hours / (WorkingDays * 8.0) END END, 0), FTEsYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD hours / YTD days / WorkingHoursCoef ELSE fact.HoursYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0), FTEsPriorYear = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYear AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours for Prior Year per calendar day / WorkingHoursCoef ELSE fact.HoursPriorYear / (WorkingDays * 8.0) END END, 0), FTEsPriorYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD for PY hours / YTD days / WorkingHoursCoef ELSE fact.HoursPriorYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0) FROM ( SELECT d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID, sum(d.Hours) AS Hours, sum(d.HoursYTD) AS HoursYTD, sum(d.HoursPriorYear) AS HoursPriorYear, sum(d.HoursPriorYTD) AS HoursPriorYTD, sum(d.Dollars) AS Dollars, sum(d.DollarsYTD) AS DollarsYTD, sum(d.DollarsPriorYear) AS DollarsPriorYear, sum(d.DollarsPriorYTD) AS DollarsPriorYTD, IsSystemGenerated = min(cast(IsSystemGenerated as tinyint)) FROM fw.FactPayrollSampledPayPeriodDetailed d INNER JOIN [fw].[DimPayPeriod] pp on d.PayPeriodID = pp.PayPeriodID WHERE (@departmentIDs is null or d.DepartmentID in(select val from @departments)) and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) GROUP BY d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID ) fact left join [fw].[DimPayPeriod] pp on pp.PayPeriodID=fact.PayPeriodID left join [fw].[DimPayCodeGroup] pcg on fact.PayCodeGroupID = pcg.PayCodeGroupID left join #WorkWeekHours ww on ww.DepartmentID = fact.DepartmentID and ww.JobCodeID = fact.JobCodeID END ELSE WITH TGT AS (SELECT t.* FROM fw.FactPayrollSampledPayPeriod t With (TABLOCKX) inner join fw.DimPayPeriod pp on t.PayPeriodId = pp.PayPeriodID where (@fiscalYearID = 0 or t.PayPeriodID in(select val from @payperiods)) and (@departmentIDs is null or DepartmentID in(select val from @departments)) ) MERGE TGT AS target USING ( SELECT fact.DepartmentID, fact.JobCodeID, fact.PayPeriodID, fact.TimeClassID, fact.PayCodeGroupID, fact.IsSystemGenerated, fact.Hours, fact.HoursYTD, fact.HoursPriorYear, fact.HoursPriorYTD, fact.Dollars, fact.DollarsYTD, fact.DollarsPriorYear, fact.DollarsPriorYTD, FTEs = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.Hours AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours per calendar day / WorkingHoursCoef ELSE fact.Hours / (WorkingDays * 8.0) END END, 0), FTEsYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD hours / YTD days / WorkingHoursCoef ELSE fact.HoursYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0), FTEsPriorYear = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYear AS NUMERIC(20, 6)) / cast(PeriodDays AS NUMERIC(20, 6))) -- fact hours for Prior Year per calendar day / WorkingHoursCoef ELSE fact.HoursPriorYear / (WorkingDays * 8.0) END END, 0), FTEsPriorYTD = isnull(CASE WHEN pcg.ProductiveClassID IN ('3','2') AND pp.PeriodNumber != 0 THEN CASE WHEN WorkingHoursCoef IS NOT NULL THEN (cast(fact.HoursPriorYTD AS NUMERIC(20, 6)) / (cast(PeriodDays AS NUMERIC(20, 6)) * cast(pp.PeriodNumber AS NUMERIC(20, 6)))) -- YTD for PY hours / YTD days / WorkingHoursCoef ELSE fact.HoursPriorYTD / (WorkingDays * 8.0 * pp.PeriodNumber) END END, 0) FROM ( SELECT d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID, sum(d.Hours) AS Hours, sum(d.HoursYTD) AS HoursYTD, sum(d.HoursPriorYear) AS HoursPriorYear, sum(d.HoursPriorYTD) AS HoursPriorYTD, sum(d.Dollars) AS Dollars, sum(d.DollarsYTD) AS DollarsYTD, sum(d.DollarsPriorYear) AS DollarsPriorYear, sum(d.DollarsPriorYTD) AS DollarsPriorYTD, IsSystemGenerated = min(cast(IsSystemGenerated as tinyint)) FROM fw.FactPayrollSampledPayPeriodDetailed d INNER JOIN [fw].[DimPayPeriod] pp on d.PayPeriodID = pp.PayPeriodID WHERE (@departmentIDs is null or d.DepartmentID in(select val from @departments)) and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) GROUP BY d.DepartmentID, d.JobCodeID, d.PayCodeGroupID, d.PayPeriodID, d.TimeClassID ) fact left join [fw].[DimPayPeriod] pp on pp.PayPeriodID=fact.PayPeriodID left join [fw].[DimPayCodeGroup] pcg on fact.PayCodeGroupID = pcg.PayCodeGroupID left join #WorkWeekHours ww on ww.DepartmentID = fact.DepartmentID and ww.JobCodeID = fact.JobCodeID ) AS source ON source.DepartmentID = target.DepartmentID AND source.JobCodeID = target.JobCodeID AND source.PayCodeGroupID = target.PayCodeGroupID AND source.PayPeriodID = target.PayPeriodID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND ( target.Dollars <> source.Dollars or target.DollarsYTD <> source.DollarsYTD or target.DollarsPriorYear <> source.DollarsPriorYear or target.DollarsPriorYTD <> source.DollarsPriorYTD or target.Hours <> source.Hours or target.HoursYTD <> source.HoursYTD or target.HoursPriorYear <> source.HoursPriorYear or target.HoursPriorYTD <> source.HoursPriorYTD or target.FTEs <> source.FTEs or target.FTEsYTD <> source.FTEsYTD or target.FTEsPriorYear <> source.FTEsPriorYear or target.FTEsPriorYTD <> source.FTEsPriorYTD or target.isSystemGenerated <> source.isSystemGenerated) THEN UPDATE SET target.Dollars = source.Dollars, target.DollarsYTD = source.DollarsYTD, target.DollarsPriorYear = source.DollarsPriorYear, target.DollarsPriorYTD = source.DollarsPriorYTD, target.Hours = source.Hours, target.HoursYTD = source.HoursYTD, target.HoursPriorYear = source.HoursPriorYear, target.HoursPriorYTD = source.HoursPriorYTD, target.FTEs = source.FTEs, target.FTEsYTD = source.FTEsYTD, target.FTEsPriorYear = source.FTEsPriorYear, target.FTEsPriorYTD = source.FTEsPriorYTD, target.isSystemGenerated = source.isSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, PayPeriodID, JobCodeID, PayCodeGroupID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.PayPeriodID, source.JobCodeID, source.PayCodeGroupID, source.TimeClassID, source.Dollars, source.DollarsYTD, source.DollarsPriorYear, source.DollarsPriorYTD, source.Hours, source.HoursYTD, source.HoursPriorYear, source.HoursPriorYTD, source.FTEs, source.FTEsYTD, source.FTEsPriorYear, source.FTEsPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE THEN DELETE; END GO --------------------------------------------- -- fw.procPlanTypeCreateMaintenanceCustomScriptStub CREATE proc [fw].[procPlanTypeCreateMaintenanceCustomScriptStub] @schema sysname, @plantypename nvarchar(100) as declare @ptguid uniqueidentifier select @ptguid = plantypeguid from PlanType where Name = @plantypename if @ptguid is null begin print 'invalid plantype name' return end declare @cs1guid uniqueidentifier declare @cs2guid uniqueidentifier declare @cnt int select @cs1guid = cs.CustomScriptGUID, @cs2guid = cs2.CustomScriptGUID, @cnt = case when coalesce(cs.name,cs2.name) = @plantypename + ' Maintenance' then 1 else 0 end from PlanType pt left join CustomScript cs on pt.OnSaveCustomScriptGUID = cs.CustomScriptGUID left join CustomScript cs2 on pt.OnSaveCustomScript2GUID = cs2.CustomScriptGUID where pt.PlanTypeGUID = @ptguid if @cnt > 0 begin print 'maintenance script already exists' return end if not @cs1guid is null and not @cs2guid is null begin print 'no onsave slots left' return end declare @sql nvarchar(max) set @sql = ' create proc [' + @schema + '].[proc' + replace(@plantypename, ' ','') + 'Maintenance] @planguid uniqueidentifier as --do plan maintenance here ' exec (@sql) declare @scriptguid uniqueidentifier set @scriptguid = NEWID() insert into CustomScript ( CustomScriptGUID,Name, ScriptText, IsSynchronous) values (@scriptguid,@plantypename + ' Maintenance', 'exec [' + @schema + '].[proc' + replace(@plantypename, ' ','') + 'Maintenance] @planGuidList',1) if @cs1guid is null begin update PlanType set OnSaveCustomScriptGUID = @scriptguid where plantypeguid = @ptguid end else begin update PlanType set OnSaveCustomScript2GUID = @scriptguid where plantypeguid = @ptguid end set @sql = ' alter proc [' + @schema + '].[proc' + replace(@plantypename, ' ','') + 'Maintenance] @planguid uniqueidentifier as --do plan maintenance here go ' print @sql GO --------------------------------------------- -- fw.procPostDiMergeEncounterBasedStatistics CREATE PROC fw.procPostDiMergeEncounterBasedStatistics @statisticId int, @year int, @months SqlInt32ListTableType READONLY AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToMerge ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToMerge(RowId) INSERT #detailsToMerge (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatistics ebs JOIN fw.DimDate d ON ebs.DateID = d.DateID JOIN @months m ON d.CalendarMonth = m.value WHERE ebs.StatisticID = @statisticId AND d.FiscalYear = @year GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID CREATE TABLE #batch ( DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToMerge WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToMerge WHERE RowId >= @startRowId ORDER BY RowID) as d TRUNCATE TABLE #batch INSERT #batch (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #detailsToMerge ebs WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId UPDATE fw.FactChargeBasedStatistics SET Value = ebs.Value FROM fw.FactChargeBasedStatistics cbs JOIN #batch ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #batch ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatistics cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.DateID = cbs.DateID ) SELECT @startRowId = MIN(d.RowId) FROM #detailsToMerge d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToMerge DROP TABLE IF EXISTS #batch END GO --------------------------------------------- -- fw.procPostDiMergeEncounterBasedStatisticsMonthly CREATE PROC fw.procPostDiMergeEncounterBasedStatisticsMonthly @statisticId int, @year int, @months SqlInt32ListTableType READONLY AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #detailsToMerge CREATE TABLE #detailsToMerge ( FiscalYearID smallint, FiscalMonthID tinyint, DepartmentID int, AccountID int, Value decimal(19, 4) ) INSERT #detailsToMerge (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN @months s ON ebs.FiscalMonthID = s.value WHERE ebs.FiscalYearID = @year AND ebs.StatisticID = @statisticId UPDATE #detailsToMerge SET Value = aggr.AggregatedValue FROM ( SELECT ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID, SUM(ebs.Value) AS AggregatedValue FROM #detailsToMerge d JOIN fw.FactEncounterBasedStatisticsMonthly ebs ON ebs.DepartmentID = d.DepartmentID AND ebs.AccountID = d.AccountID AND ebs.FiscalYearID = d.FiscalYearID AND ebs.FiscalMonthID = d.FiscalMonthID GROUP BY ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID ) aggr JOIN #detailsToMerge det ON aggr.DepartmentID = det.DepartmentID AND aggr.AccountID = det.AccountID AND aggr.FiscalYearID = det.FiscalYearID AND aggr.FiscalMonthID = det.FiscalMonthID UPDATE fw.FactChargeBasedStatisticsMonthly SET Value = ebs.Value FROM #detailsToMerge ebs JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM #detailsToMerge ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatisticsMonthly cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID ) END GO --------------------------------------------- -- fw.procPostDiMergeEncounterBasedStatisticsMonthlyOpt CREATE PROC fw.procPostDiMergeEncounterBasedStatisticsMonthlyOpt AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #detailsToMerge CREATE TABLE #detailsToMerge ( FiscalYearID smallint, FiscalMonthID tinyint, DepartmentID int, AccountID int, Value decimal(19, 4) ) INSERT #detailsToMerge (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN data.EbsPostDiCacheMonthly c ON ebs.StatisticID = c.StatisticID AND ebs.FiscalYearID = c.Year AND ebs.FiscalMonthID = c.Month UPDATE #detailsToMerge SET Value = aggr.AggregatedValue FROM ( SELECT ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID, SUM(ebs.Value) AS AggregatedValue FROM #detailsToMerge d JOIN fw.FactEncounterBasedStatisticsMonthly ebs ON ebs.DepartmentID = d.DepartmentID AND ebs.AccountID = d.AccountID AND ebs.FiscalYearID = d.FiscalYearID AND ebs.FiscalMonthID = d.FiscalMonthID GROUP BY ebs.FiscalYearID, ebs.FiscalMonthID, ebs.DepartmentID, ebs.AccountID ) aggr JOIN #detailsToMerge det ON aggr.DepartmentID = det.DepartmentID AND aggr.AccountID = det.AccountID AND aggr.FiscalYearID = det.FiscalYearID AND aggr.FiscalMonthID = det.FiscalMonthID UPDATE fw.FactChargeBasedStatisticsMonthly SET Value = ebs.Value FROM #detailsToMerge ebs JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM #detailsToMerge ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatisticsMonthly cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID ) END GO --------------------------------------------- -- fw.procPostDiMergeEncounterBasedStatisticsOpt CREATE PROC fw.procPostDiMergeEncounterBasedStatisticsOpt AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToMerge ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToMerge(RowId) INSERT #detailsToMerge (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatistics ebs JOIN fw.DimDate d ON ebs.DateID = d.DateID JOIN data.EbsPostDiCache c ON ebs.StatisticID = c.StatisticID AND d.FiscalYear = c.Year AND d.CalendarMonth = c.Month GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID CREATE TABLE #batch ( DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToMerge WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToMerge WHERE RowId >= @startRowId ORDER BY RowID) as d TRUNCATE TABLE #batch INSERT #batch (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #detailsToMerge ebs WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId UPDATE fw.FactChargeBasedStatistics SET Value = ebs.Value FROM fw.FactChargeBasedStatistics cbs JOIN #batch ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #batch ebs WHERE NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatistics cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.DateID = cbs.DateID ) SELECT @startRowId = MIN(d.RowId) FROM #detailsToMerge d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToMerge DROP TABLE IF EXISTS #batch END GO --------------------------------------------- -- fw.procPostDiRestoreChargeBasedStatistics CREATE PROC fw.procPostDiRestoreChargeBasedStatistics @statisticId int, @year int, @months SqlInt32ListTableType READONLY AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToRestore ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToRestore(RowId) INSERT #detailsToRestore (DepartmentID, AccountID, DateID) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID FROM fw.FactEncounterBasedStatistics ebs JOIN fw.DimDate d ON ebs.DateID = d.DateID JOIN @months m ON d.CalendarMonth = m.value WHERE ebs.StatisticID = @statisticId AND d.FiscalYear = @year GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToRestore WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToRestore WHERE RowId >= @startRowId ORDER BY RowID) as d DELETE cbs FROM fw.FactChargeBasedStatistics cbs JOIN #detailsToRestore ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.DateID, AVG(sgs.Value) FROM fw.FactSystemGeneratedStatistics sgs JOIN #detailsToRestore ebs ON sgs.DepartmentID = ebs.DepartmentID AND sgs.AccountID = ebs.AccountID AND sgs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.DateID SELECT @startRowId = MIN(d.RowId) FROM #detailsToRestore d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToRestore END GO --------------------------------------------- -- fw.procPostDiRestoreChargeBasedStatisticsMonthly CREATE PROC fw.procPostDiRestoreChargeBasedStatisticsMonthly @statisticId int, @year int, @months SqlInt32ListTableType READONLY AS BEGIN SET NOCOUNT ON DELETE cbs FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN @months m ON ebs.FiscalMonthID = m.value JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID WHERE ebs.FiscalYearID = @year AND ebs.StatisticID = @statisticId INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID, AVG(sgs.Value) FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN @months m ON ebs.FiscalMonthID = m.value JOIN fw.FactSystemGeneratedStatisticsMonthly sgs ON ebs.DepartmentID = sgs.DepartmentID AND ebs.AccountID = sgs.AccountID AND ebs.FiscalYearID = sgs.FiscalYearID AND ebs.FiscalMonthID = sgs.FiscalMonthID WHERE ebs.FiscalYearID = @year AND ebs.StatisticID = @statisticId GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID END GO --------------------------------------------- -- fw.procPostDiRestoreChargeBasedStatisticsMonthlyOpt CREATE PROC fw.procPostDiRestoreChargeBasedStatisticsMonthlyOpt AS BEGIN SET NOCOUNT ON DELETE cbs FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN data.EbsPostDiCacheMonthly c ON ebs.StatisticID = c.StatisticID AND ebs.FiscalYearID = c.Year AND ebs.FiscalMonthID = c.Month JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID, AVG(sgs.Value) FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN data.EbsPostDiCacheMonthly c ON ebs.StatisticID = c.StatisticID AND ebs.FiscalYearID = c.Year AND ebs.FiscalMonthID = c.Month JOIN fw.FactSystemGeneratedStatisticsMonthly sgs ON ebs.DepartmentID = sgs.DepartmentID AND ebs.AccountID = sgs.AccountID AND ebs.FiscalYearID = sgs.FiscalYearID AND ebs.FiscalMonthID = sgs.FiscalMonthID GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID END GO --------------------------------------------- -- fw.procPostDiRestoreChargeBasedStatisticsOpt CREATE PROC fw.procPostDiRestoreChargeBasedStatisticsOpt AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToRestore ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToRestore(RowId) INSERT #detailsToRestore (DepartmentID, AccountID, DateID) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID FROM fw.FactEncounterBasedStatistics ebs JOIN fw.DimDate d ON ebs.DateID = d.DateID JOIN data.EbsPostDiCache c ON ebs.StatisticID = c.StatisticID AND d.FiscalYear = c.Year AND d.CalendarMonth = c.Month GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToRestore WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToRestore WHERE RowId >= @startRowId ORDER BY RowID) as d DELETE cbs FROM fw.FactChargeBasedStatistics cbs JOIN #detailsToRestore ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.DateID, AVG(sgs.Value) FROM fw.FactSystemGeneratedStatistics sgs JOIN #detailsToRestore ebs ON sgs.DepartmentID = ebs.DepartmentID AND sgs.AccountID = ebs.AccountID AND sgs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.DateID SELECT @startRowId = MIN(d.RowId) FROM #detailsToRestore d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToRestore END GO --------------------------------------------- -- fw.procPrepareGL /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-03-19 IP D-06997 Replaced table variable by temp tables ** 2 2018-05-15 KF D-07006 Rolling Average method for metric target calculation doesn't include months with 0 values ** 3 2018-05-31 IP TK-58509 reverting part of migrations for D-07006 ** 4 2018-06-04 IP TK-58587 re-applying changes (2018-05-16 D-07187 Budget adjustment effecting historical budget fiscal years) ** 5 2019-09-03 vfay D-08704 Fix incorrectly adding previous year's data into the current year ** 6 2024-06-04 ishah JAZZ-61244 [TrLog][High] Bug - Run Management Reporting Monthly Process (MR Sampling, all years run): Task failed on Inserting GL Sampled. ***************************************************************/ ----- #FactGLStagingValue with specified columns(DepartmentID int, AccountID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(21,6), ApplyDate datetime, Src varchar(max)) should be created before calling the proc CREATE PROCEDURE [fw].[procPrepareGL] @FiscalYearID int = 0 AS BEGIN DECLARE @iteration INT = 1, @batchSize INT, @applyDateString nvarchar(100) = '''' + '1900-01-01' + '''' -- Split by batches EXEC mr.procGetIntBatchSize @DefaultBatchSize = 30000000, @ResultBatchSize = @batchSize OUTPUT IF OBJECT_ID('tempdb..#inputDepartments') IS NOT NULL DROP TABLE #inputDepartments CREATE TABLE #inputDepartments (DepartmentID INT, RecordsCount INT, BatchID INT) DECLARE @fromClause nvarchar(max) = ' ( SELECT stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID FROM int.FactGL stat inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid WHERE stat.IsDeleted = 0 and stat.Value != 0 and (stat.FiscalYearID = ' + cast(@FiscalYearID as nvarchar(100)) + ' or ' + cast(@FiscalYearID as nvarchar(100)) + ' = 0) GROUP BY stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID ) X ' INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #FactGLStagingValue (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, sum(stat.Value) as Amount, cast('1900-01-01' as datetime) as ApplyDate, cast('int_1' as varchar(max))+'V' as src from int.FactGL stat inner join fw.DimDepartment D on D.Departmentid = stat.Departmentid inner join #inputDepartments ID ON ID.DepartmentID = D.DepartmentID where stat.IsDeleted = 0 and stat.Value != 0 and ID.BatchID = @BatchID and (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) Group by stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID SET @BatchID = @BatchID + 1 END DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) PRINT '-------- Vendor Products Report --------'; DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN IF @BudgetReallocationType = 'ReallocateSingle' BEGIN -- Insert rows with "correcting" values UPDATE STT SET Amount = Amount + Change, stt.ApplyDate = b.Date, src = SRC + '[Added_'+cast(Change as varchar(50))+'_from_'+cast(SourceDepartmentID as varchar(10))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID WHERE Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and UnitTypeID = 34 and TimeClassID = 2 and b.Archived = 0 UPDATE STT SET Amount = Amount - Change, stt.ApplyDate = b.Date, src = SRC + '[Removed_'+cast(Change as varchar(50))+'_to_'+cast(TargetDepartmentID as varchar(10))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID WHERE Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and UnitTypeID = 34 and TimeClassID = 2 and b.Archived = 0 INSERT INTO #FactGLStagingValue (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, Change * -1 as Value, b.Date as ApplyDate, 'ra_1_m' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN (select DepartmentID,AccountID,FiscalYearID,FiscalMonthID,max(ApplyDate) as ApplyDate from #FactGLStagingValue where TimeClassID = 2 group by DepartmentID,AccountID,FiscalYearID,FiscalMonthID) STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID where Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and UnitTypeID = 34 and b.Archived = 0 UNION All SELECT b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, Change as Value, b.Date as ApplyDate, 'ra_1_p' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN (select DepartmentID,AccountID,FiscalYearID,FiscalMonthID,max(ApplyDate) as ApplyDate from #FactGLStagingValue where TimeClassID = 2 group by DepartmentID,AccountID,FiscalYearID,FiscalMonthID) STT ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID where Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and UnitTypeID = 34 and b.Archived = 0 END ELSE ---------------------- IF @BudgetReallocationType = 'ReallocateMulti' BEGIN UPDATE STT set STT.Amount = STT.Amount + STT_SRC.Amount, STT.ApplyDate = b.[Date], STT.Src = stt.Src + '[RealMulti_'+cast(stt_src.Amount as varchar(50))+'_from_'+cast(stt_src.DepartmentID as varchar(10))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b on b.TargetDepartmentID = STT.DepartmentID and b.TargetAccountID = STT.AccountID and b.FiscalYearID = STT.FiscalYearID and b.[Date] >= STT.ApplyDate INNER JOIN [mr].[BudgetReallocationAdjustment] ba on ba.BudgetReallocationGUID = b.BudgetReallocationGUID and ba.FiscalMonthID = STT.FiscalMonthID INNER JOIN #FactGLStagingValue STT_SRC on STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.FiscalYearID = b.FiscalYearID and STT_SRC.FiscalMonthID = ba.FiscalMonthID and STT_SRC.TimeClassID = STT.TimeClassID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 34 and ba.Change <> 0 and STT.TimeClassID = 2 and b.Archived = 0 INSERT INTO #FactGLStagingValue (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, ApplyDate, Src) SELECT b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, STT_SRC.Amount as Value, b.[Date] as ApplyDate, 'ReallocateMulti' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID = ba.BudgetReallocationGUID INNER JOIN #FactGLStagingValue STT_SRC on STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.FiscalYearID = b.FiscalYearID and STT_SRC.FiscalMonthID = ba.FiscalMonthID and STT_SRC.TimeClassID = 2 LEFT JOIN #FactGLStagingValue STT on STT.DepartmentID = b.TargetDepartmentID and STT.AccountID = b.TargetAccountID and STT.FiscalYearID = b.FiscalYearID and STT.FiscalMonthID = ba.FiscalMonthID and STT.TimeClassID = 2 where stt.DepartmentID is null and ba.Change <> 0 and ba.UnitTypeID = 34 and b.[Date] >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 UPDATE STT_SRC SET STT_SRC.Amount = 0, STT_SRC.ApplyDate = b.[Date], STT_SRC.Src = stt_src.Src + '[RealMulti_'+cast(stt_src.Amount as varchar(50))+'_to_'+cast(stt.DepartmentID as varchar(10))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b on b.TargetDepartmentID = STT.DepartmentID and b.TargetAccountID = STT.AccountID and b.FiscalYearID = STT.FiscalYearID and b.[Date] >= STT.ApplyDate INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID = ba.BudgetReallocationGUID and ba.FiscalMonthID = STT.FiscalMonthID INNER JOIN #FactGLStagingValue STT_SRC on b.SourceDepartmentID = STT_SRC.DepartmentID and b.SourceAccountID = STT_SRC.AccountID and b.FiscalYearID = STT_SRC.FiscalYearID and ba.FiscalMonthID = STT_SRC.FiscalMonthID and STT_SRC.TimeClassID = 2 where ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 34 and b.Archived = 0 END ELSE IF @BudgetReallocationType = 'AdjustMontly' BEGIN UPDATE STT SET stt.Amount = stt.Amount+Change, stt.ApplyDate = b.Date, stt.Src = stt.Src + '[AdjustMontly_'+cast(Change as varchar(50))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 34 and Change <> 0 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and TimeClassID = 2 and b.Archived = 0 INSERT INTO #FactGLStagingValue (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, Change as Value, b.date as ApplyDate, 'ra_3' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN #FactGLStagingValue STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID and TimeClassID = 2 where Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID =34 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 END ELSE IF @BudgetReallocationType = 'ManualFile' BEGIN UPDATE STT SET stt.Amount = ba.NewSourceValue, stt.ApplyDate = b.Date, stt.Src = stt.Src + '[ManualFile_'+cast(NewSourceValue as varchar(50))+']' FROM #FactGLStagingValue STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.Date >= stt.ApplyDate and b.FiscalYearID = stt.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 34 and TimeClassID = 2 and Change <> 0 and b.Archived = 0 INSERT INTO #FactGLStagingValue (DepartmentID,AccountID,FiscalYearID,FiscalMonthID,TimeClassID,Amount,ApplyDate,Src) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, b.FiscalYearID, ba.FiscalMonthID, 2 as TimeclassID, NewSourceValue as Value, b.date as ApplyDate, 'ManualFile' as src FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID LEFT JOIN #FactGLStagingValue STT ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.FiscalYearID = b.FiscalYearID and stt.FiscalMonthID = ba.FiscalMonthID and TimeClassID = 2 where Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID =34 and b.Date >= isnull(stt.ApplyDate,'1900-01-01') and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; SET @fromClause = ' ( SELECT STT.DepartmentID, STT.AccountID, STT.FiscalYearID, STT.FiscalMonthID, STT.TimeclassID, 0 as Amount, ' + '''' + 'none' + '''' + ' as src FROM int.FactGL STT INNER JOIN fw.DimDepartment D ON D.DepartmentID = STT.DepartmentID LEFT JOIN #FactGLStagingValue fgs ON fgs.DepartmentID = STT.DepartmentID AND fgs.AccountID = STT.AccountID AND fgs.FiscalYearID = STT.FiscalYearID AND fgs.FiscalMonthID = STT.FiscalMonthID AND fgs.TimeClassID = STT.TimeClassID WHERE fgs.DepartmentID IS NULL AND STT.IsDeleted = 0 AND STT.Value != 0 AND (STT.FiscalYearID = ' + cast(@FiscalYearID as nvarchar(100)) + ' or ' + cast(@FiscalYearID as nvarchar(100)) + ' = 0) ) X ' TRUNCATE TABLE #inputDepartments INSERT INTO #inputDepartments EXEC dbo.procGetInputDataByBatches @batchSize = @batchSize, @columnName = 'DepartmentID', @tableAlias = 'X', @fromClause = @fromClause, @whereClause = '', @isDebug = 0 SELECT @MaxBatchID = MAX(BatchID) FROM #inputDepartments SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN INSERT INTO #FactGLStagingValue (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, Src) SELECT stat.DepartmentID, stat.AccountID, stat.FiscalYearID, stat.FiscalMonthID, stat.TimeClassID, 0 as Amount, 'none' as src FROM int.FactGL stat INNER JOIN fw.DimDepartment D ON D.Departmentid = stat.Departmentid LEFT JOIN #FactGLStagingValue fgs ON fgs.DepartmentID = stat.DepartmentID AND fgs.AccountID = stat.AccountID AND fgs.FiscalYearID = stat.FiscalYearID AND fgs.FiscalMonthID = stat.FiscalMonthID AND fgs.TimeClassID = stat.TimeClassID INNER JOIN #inputDepartments ID ON ID.DepartmentID = D.Departmentid WHERE stat.IsDeleted = 0 AND stat.Value != 0 AND (stat.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) AND ID.BatchID = @BatchID AND fgs.DepartmentID IS NULL SET @BatchID = @BatchID + 1 END END GO --------------------------------------------- -- fw.procPreparePayrollByMonth CREATE PROC [fw].[procPreparePayrollByMonth] (@FiscalYearID int =0) as /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-03-19 IP D-06997 Replaced table variable by temp tables ***************************************************************/ IF OBJECT_ID('tempdb.dbo.#StatisticTempTable', 'U') IS NOT NULL DROP TABLE #StatisticTempTable; declare @iteration int = 1 create table #StatisticTempTable ( DepartmentID int, JobCodeID int, EmployeeID int, PayCodeID int, PayCodeGroupID int, FiscalYearID smallint, FiscalMonthID tinyint, TimeClassID tinyint, Hours decimal(18,6), Dollars decimal(18,6), ApplyDate datetime, Src varchar(max) ) INSERT INTO #StatisticTempTable (DepartmentID,JobCodeID,EmployeeID,PayCodeID,PayCodeGroupID,FiscalYearID,FiscalMonthID,TimeClassID,Hours,Dollars,ApplyDate,Src) SELECT pr.DepartmentID, pr.JobCodeID, pr.EmployeeID, pr.PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, SUM(CASE WHEN pr.unittypeID=51 and pc.IsHoursIgnored=0 then value ELSE 0 END) AS Hours, SUM(CASE WHEN pr.unittypeID=34 and pc.IsDollarsIgnored=0 then value ELSE 0 END) AS Dollars, cast('1900-01-01' as date) as ApplyDate, 'int' as Src FROM int.FactStaffing pr INNER JOIN fw.DimPayCode pc on pc.PayCodeID = PR.PayCodeID WHERE pr.FiscalMonthCode not in('', '0') and pr.IsDeleted = 0 and pr.Value != 0 AND (pr.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) GROUP BY pr.DepartmentID, pr.JobCodeID, pr.EmployeeID, pr.PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, pr.PayCodeID DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) PRINT '-------- Vendor Products Report --------'; DECLARE BRA_cursor CURSOR FOR SELECT distinct BudgetReallocationGUID,date,BudgetReallocationType from fw.BudgetReallocationWithDefinedType WHERE (FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ORDER BY date; OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN print @iteration IF @BudgetReallocationType = 'ReallocateMulti' BEGIN UPDATE STT SET stt.DepartmentID = b.TargetDepartmentID, stt.JobCodeID = b.TargetJobCodeID, stt.Src = stt.Src + ';RealMulti' FROM #StatisticTempTable STT INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceJobCodeID = stt.JobCodeID and b.Date >= stt.ApplyDate INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and stt.FiscalMonthID = ba.FiscalMonthID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 34 and change <> 0 and TimeClassID = 2 and DataType = 1 END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; SELECT DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, sum(Hours) as Hours, sum(Dollars) as Dollars FROM ( SELECT DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID, Hours, Dollars from #StatisticTempTable stt UNION ALL SELECT pr.DepartmentID, pr.JobCodeID, pr.EmployeeID, pr.PayCodeID, pc.PayCodeGroupID, PR.FiscalYearID, pr.FiscalMonthID, pr.TimeClassID, 0 AS Hours, 0 AS Dollars FROM int.FactStaffing pr INNER JOIN fw.DimPayCode pc on pc.PayCodeID = PR.PayCodeID WHERE pr.FiscalMonthCode not in('', '0') and pr.IsDeleted = 0 and pr.Value != 0 AND (pr.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) ) SubSelect GROUP BY DepartmentID, JobCodeID, EmployeeID, PayCodeID, PayCodeGroupID, FiscalYearID, FiscalMonthID, TimeClassID GO --------------------------------------------- -- fw.procProviderSampledAdjustedTargetMonthlyInsert /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-10-30 KZ B-20910 Provider - Create adjusted target *************************************************************/ CREATE proc [fw].[procProviderSampledAdjustedTargetMonthlyInsert] (@FiscalYearID int = 0) AS BEGIN DECLARE @IsFlexingEnabled INT = ( SELECT VALUE FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) DECLARE @IsEfficiencyFactorPresent INT = ( SELECT count(*) FROM mr.EfficiencyFactor ) IF @IsEfficiencyFactorPresent > 0 BEGIN DELETE FROM fw.FactProviderSampledMonthly_Pivoted WHERE (@FiscalYearID = FiscalYearID OR @FiscalYearID = 0) and TimeClassID = 22 INSERT INTO fw.FactProviderSampledMonthly_Pivoted (DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, TimeClassID, OBForecastDetailID, Volume, Dollars, Hours, FTEs) SELECT DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, 22, OBForecastDetailID, SUM(Volume), SUM(Dollars), SUM(Hours), SUM(FTEs) FROM fw.FactProviderSampledMonthly_Pivoted fact WHERE ( ( ISNULL(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( ( ISNULL(fact.TimeClassID,0) = 20) AND @IsFlexingEnabled = 0 ) ) AND (fact.FiscalYearID = @FiscalYearID OR @FiscalYearID = 0) GROUP BY DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, TimeClassID, OBForecastDetailID EXEC [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactProviderSampledMonthly_Pivoted', @keyNameCSV = 'OBForecastDetailID,ProviderID', @measureNameCSV = 'Volume,Dollars,Hours,FTEs',@fiscalYearID = @FiscalYearID, @timeClassID = 22, @isDebugOnly = 0 END END GO --------------------------------------------- -- fw.procProviderSampledInsertMonthly /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-12-13 NL B-13759 Adding fiscalYearID param and filtering on it ** 2 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 3 2017-04-11 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactProviderSampledMonthly. ** 4 2017-06-15 IP B-15086 odify SP to use unique temp table ** 5 2018-02-07 IP B-18725 MR - Provider sampling from payroll ** 6 2018-02-08 IP TK-53982 Fixed amount calculated as sum of Hours and Dollars ** 7 2018-02-28 IP B-18946 Update provider payroll sampling to be consistent with OB when there is duplicate data ** 8 2018-06-27 KF B-20195 MR - Provider calculate baseline target ** 9 2018-07-25 KF B-20342 MR - Update provider sampling to be in the appropriate format **10 2018-08-22 KF D-07561 MR Sampling: Provider FTEsYTD values are calculated incorrectly **11 2018-10-30 KF D-07727 MR Provider Sampling: FTEs and FTEsYTD are calculated based on different Work Week overrides **12 2022-03-15 KF JAZZ-27781 Run PR Process Task can fail silently during Payroll Sampling **13 2023-09-12 BS JAZZ-55750 Remove filter to allow other time classes in MR reporting *************************************************************/ CREATE proc [fw].[procProviderSampledInsertMonthly] @fiscalYearID smallint = 0 as IF OBJECT_ID('tempdb..#ProviderSampledStaging') IS NOT NULL DROP TABLE #ProviderSampledStaging IF OBJECT_ID('fw.ProviderSampledStagingWithCalcs') IS NOT NULL DROP TABLE fw.ProviderSampledStagingWithCalcs CREATE TABLE #ProviderSampledStaging (RowID bigint identity(1,1), DepartmentID int, ProviderID int, FiscalYearID int, FiscalMonthID int, OBForecastDetailID int, TimeClassID int, Dollars decimal(18,6), Hours decimal(18,6), Volume decimal(18,6), FTEs decimal(18,6), isDeleted bit, isSystemGenerated bit) --push new data to fact table insert into #ProviderSampledStaging (DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, OBForecastDetailID, TimeClassID, Dollars, Hours, Volume, FTEs) select p.DepartmentID, p.ProviderID, p.FiscalYearID, p.FiscalMonthID, p.OBForecastDetailID, p.TimeClassID, SUM(CASE WHEN fd.UnitTypeID=34 then value ELSE 0 END) AS Dollars, SUM(CASE WHEN fd.UnitTypeID=51 then value ELSE 0 END) AS Hours, SUM(CASE WHEN fd.UnitTypeID=140 then value ELSE 0 END) AS Volume, SUM(CASE WHEN fd.UnitTypeID=144 then value ELSE 0 END) AS FTEs from int.FactImportProvider p INNER JOIN ob.DimOBForecastDetail fd on fd.OBForecastDetailID = p.OBForecastDetailID where p.IsDeleted = 0 and p.Value != 0 AND (p.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) group by p.DepartmentID, p.ProviderID, p.FiscalYearID, p.FiscalMonthID, p.OBForecastDetailID, p.TimeClassID ;with ProviderHours as ( SELECT data.DepartmentID, data.ProviderID, data.FiscalYearID, data.FiscalMonthID, data.TimeClassID, SUM(data.Amount) as Hours FROM mr.viewFactProviderBasedOnPayroll data LEFT JOIN #ProviderSampledStaging pss on pss.DepartmentID = data.DepartmentID and pss.ProviderID = data.ProviderID and pss.FiscalYearID = data.FiscalYearID and pss.FiscalMonthID = data.FiscalMonthID and pss.OBForecastDetailID = 1000 and pss.TimeClassID = data.TimeClassID where data.UnitTypeID=51 --Hours and data.IsProvider = 1 and pss.DepartmentID is null --use the provider import data and ignore the payroll data and data.ProductiveClass in ( 'Productive', 'Productive Non-FTE', 'Non-Productive' ) AND (data.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) group by data.DepartmentID, data.ProviderID, data.FiscalYearID, data.FiscalMonthID,data.TimeClassID ) INSERT INTO #ProviderSampledStaging (DepartmentID, ProviderID, FiscalYearID, FiscalMonthID, OBForecastDetailID, TimeClassID, Dollars, Hours, Volume, FTEs) SELECT vw.DepartmentID, vw.ProviderID, vw.FiscalYearID, vw.FiscalMonthID, vw.OBForecastDetailID, vw.TimeClassID, SUM(vw.Amount) AS Dollars, 0 AS Hours, 0 AS Volume, 0 AS FTEs FROM mr.viewFactProviderBasedOnPayroll vw LEFT JOIN #ProviderSampledStaging pss on pss.DepartmentID = vw.DepartmentID and pss.ProviderID = vw.ProviderID and pss.FiscalYearID = vw.FiscalYearID and pss.FiscalMonthID = vw.FiscalMonthID and pss.OBForecastDetailID = vw.OBForecastDetailID and pss.TimeClassID = vw.TimeClassID --If there is overlap for the same month, year, time class, provider, and forecastdetail between the provider import data and the payroll data, then the system should use the provider import data and ignore the payroll data WHERE IsProvider = 1 and pss.DepartmentID is null --use the provider import data and ignore the payroll data and vw.UnitTypeID=34 --Dollars and vw.Amount != 0 AND (vw.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) GROUP BY vw.DepartmentID, vw.ProviderID, vw.FiscalYearID, vw.FiscalMonthID, vw.OBForecastDetailID, vw.TimeClassID UNION ALL SELECT DepartmentID, ProviderID, FiscalYearID, FiscalMonthID,1000 as OBForecastDetailID, TimeClassID, 0 AS Dollars, Hours, 0 AS Volume, 0 AS FTEs FROM ProviderHours UNION ALL SELECT fact.DepartmentID, fact.ProviderID, fact.FiscalYearID, fact.FiscalMonthID,1001 as OBForecastDetailID, TimeClassID, 0 AS Dollars, 0 AS Hours, 0 AS Volume, fact.Value / (wpmCY.Hours) AS FTEs from int.FactImportProvider fact inner join fw.dimProvider pr on pr.ProviderID = fact.ProviderID inner join fw.DimDepartment D on fact.DepartmentID=D.DepartmentID inner join fw.DimEntity de on de.EntityID = D.EntityID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and fact.FiscalYearID = wpmCY.FiscalYearID and wpmCY.WorkWeekID = case when pr.WorkWeekOverrideID != -1 then pr.WorkWeekOverrideID when pr.WorkWeekOverrideID = -1 AND D.WorkWeekID >= 0 then D.WorkWeekID else de.WorkWeekID end where fact.IsDeleted = 0 and fact.Value != 0 AND (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) and 1000 = fact.OBForecastDetailID UNION ALL --Provider SELECT fact.DepartmentID, fact.ProviderID, fact.FiscalYearID, fact.FiscalMonthID,1001 as OBForecastDetailID, TimeClassID, 0 AS Dollars, 0 AS Hours, 0 AS Volume, fact.Hours / (wpmCY.Hours) AS FTEs from ProviderHours fact inner join fw.dimProvider pr on pr.ProviderID = fact.ProviderID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID AND fact.FiscalYearID = wpmCY.FiscalYearID and wpmCY.WorkWeekID=pr.WorkWeekOverrideID where pr.WorkWeekOverrideID!=-1 UNION ALL --Department SELECT fact.DepartmentID, fact.ProviderID, fact.FiscalYearID, fact.FiscalMonthID,1001 as OBForecastDetailID, TimeClassID, 0 AS Dollars, 0 AS Hours, 0 AS Volume, fact.Hours / (wpmCY.Hours) AS FTEs from ProviderHours fact inner join fw.dimProvider pr on pr.ProviderID = fact.ProviderID inner join fw.DimDepartment D on fact.DepartmentID=D.DepartmentID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and fact.FiscalYearID = wpmCY.FiscalYearID and wpmCY.WorkWeekID=D.WorkWeekID where pr.WorkWeekOverrideID=-1 AND D.WorkWeekID >= 0 UNION ALL --Entity SELECT fact.DepartmentID, fact.ProviderID, fact.FiscalYearID, fact.FiscalMonthID,1001 as OBForecastDetailID, TimeClassID, 0 AS Dollars, 0 AS Hours, 0 AS Volume, fact.Hours / (wpmCY.Hours) AS FTEs from ProviderHours fact inner join fw.dimProvider pr on pr.ProviderID = fact.ProviderID inner join fw.DimDepartment D on fact.DepartmentID=D.DepartmentID inner join fw.DimEntity de on de.EntityID = D.EntityID inner join [client].[viewFactWorkingHoursPerMonthWithYTDHoursPerMonth] wpmCY on fact.FiscalMonthID=wpmCY.FiscalMonthID and fact.FiscalYearID = wpmCY.FiscalYearID and wpmCY.WorkWeekID=de.WorkWeekID where pr.WorkWeekOverrideID=-1 AND D.WorkWeekID < 0 --run calculations exec fw.procFactMonthlyMergeDuplicates '#ProviderSampledStaging', 'ProviderID,OBForecastDetailID', 'Dollars,Hours,Volume,FTEs', @fiscalYearID, 0, 0 exec fw.procFactProviderSampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactProviderSampledMonthly_Pivoted','#ProviderSampledStaging','ProviderID,OBForecastDetailID', 'Dollars,Hours,Volume,FTEs', @fiscalYearID, 0, 0 exec client.procFactProviderSampledMonthlyDetailedFTEsInsertStaging @fiscalYearID = @fiscalYearID print 'finish staging calculations --- '+convert(varchar(20),GETDATE(),113) IF @fiscalYearID = 0 BEGIN truncate table fw.FactProviderSampledMonthly_Pivoted INSERT INTO fw.FactProviderSampledMonthly_Pivoted With (TABLOCKX) ( DepartmentID, FiscalMonthID, FiscalYearID, ProviderID, OBForecastDetailID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Volume, VolumeYTD, VolumePriorYear, VolumePriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) SELECT DepartmentID, FiscalMonthID, FiscalYearID, ProviderID, OBForecastDetailID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Volume, VolumeYTD, VolumePriorYear, VolumePriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, 0 as IsDeleted, isnull(IsSystemGenerated,0) as IsSystemGenerated FROM fw.ProviderSampledStagingWithCalcs END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.ProviderSampledStagingWithCalcs (DepartmentID,FiscalMonthID,FiscalYearID,ProviderID,OBForecastDetailID,TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) BEGIN TRANSACTION Sampling BEGIN TRY MERGE fw.FactProviderSampledMonthly_Pivoted With (TABLOCKX) AS target USING fw.ProviderSampledStagingWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.ProviderID = target.ProviderID AND source.FiscalYearID = target.FiscalYearID AND source.FiscalMonthID = target.FiscalMonthID AND source.TimeClassID = target.TimeClassID AND source.OBForecastDetailID = target.OBForecastDetailID WHEN MATCHED AND NOT (target.Dollars = source.Dollars and target.DollarsYTD = source.DollarsYTD and target.DollarsPriorYear = source.DollarsPriorYear and target.DollarsPriorYTD = source.DollarsPriorYTD and target.Hours = source.Hours and target.HoursYTD = source.HoursYTD and target.HoursPriorYear = source.HoursPriorYear and target.HoursPriorYTD = source.HoursPriorYTD and target.Volume = source.Volume and target.VolumeYTD = source.VolumeYTD and target.VolumePriorYear = source.VolumePriorYear and target.VolumePriorYTD = source.VolumePriorYTD and target.FTEs = source.FTEs and target.FTEsYTD = source.FTEsYTD and target.FTEsPriorYear = source.FTEsPriorYear and target.FTEsPriorYTD = source.FTEsPriorYTD) THEN UPDATE SET target.Dollars = source.Dollars, target.DollarsYTD = source.DollarsYTD, target.DollarsPriorYear = source.DollarsPriorYear, target.DollarsPriorYTD = source.DollarsPriorYTD, target.Hours = source.Hours, target.HoursYTD = source.HoursYTD, target.HoursPriorYear = source.HoursPriorYear, target.HoursPriorYTD = source.HoursPriorYTD, target.Volume = source.Volume, target.VolumeYTD = source.VolumeYTD, target.VolumePriorYear = source.VolumePriorYear, target.VolumePriorYTD = source.VolumePriorYTD, target.FTEs = source.FTEs, target.FTEsYTD = source.FTEsYTD, target.FTEsPriorYear = source.FTEsPriorYear, target.FTEsPriorYTD = source.FTEsPriorYTD WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, ProviderID, FiscalMonthID, FiscalYearID, OBForecastDetailID, TimeClassID, Dollars, DollarsYTD, DollarsPriorYear, DollarsPriorYTD, Hours, HoursYTD, HoursPriorYear, HoursPriorYTD, Volume, VolumeYTD, VolumePriorYear, VolumePriorYTD, FTEs, FTEsYTD, FTEsPriorYear, FTEsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.ProviderID, source.FiscalMonthID, source.FiscalYearID, source.OBForecastDetailID, source.TimeClassID, source.Dollars, source.DollarsYTD, source.DollarsPriorYear, source.DollarsPriorYTD, source.Hours, source.HoursYTD, source.HoursPriorYear, source.HoursPriorYTD, source.Volume, source.VolumeYTD, source.VolumePriorYear, source.VolumePriorYTD, source.FTEs, source.FTEsYTD, source.FTEsPriorYear, source.FTEsPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE AND Target.FiscalYearID = @fiscalYearID THEN DELETE; COMMIT TRANSACTION Sampling END TRY BEGIN CATCH ROLLBACK TRANSACTION Sampling; THROW END CATCH END IF OBJECT_ID('tempdb..#ProviderSampledStaging') IS NOT NULL DROP TABLE #ProviderSampledStaging IF OBJECT_ID('fw.ProviderSampledStagingWithCalcs') IS NOT NULL DROP TABLE fw.ProviderSampledStagingWithCalcs GO --------------------------------------------- -- fw.procRefreshEncounterBasedStatistics CREATE PROC fw.procRefreshEncounterBasedStatistics @departmentIds nvarchar(MAX) = NULL AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #departments SELECT val AS DepartmentId INTO #departments FROM ConvertCSValuesToTable(@departmentIds, ',') DROP TABLE IF EXISTS #detailsToMerge CREATE TABLE #detailsToMerge ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int, Value decimal(19, 4) ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToMerge(RowId) IF (@departmentIds IS NULL) BEGIN INSERT #detailsToMerge (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatistics ebs INNER JOIN fw.DimAccount a ON a.AccountID = ebs.AccountID INNER JOIN fw.DimDepartment dep ON dep.DepartmentID = ebs.DepartmentID GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID END ELSE BEGIN INSERT #detailsToMerge (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatistics ebs INNER JOIN fw.DimAccount a ON a.AccountID = ebs.AccountID INNER JOIN fw.DimDepartment dep ON dep.DepartmentID = ebs.DepartmentID INNER JOIN #departments d ON ebs.DepartmentID = d.DepartmentId GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID END DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToMerge WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToMerge WHERE RowId >= @startRowId ORDER BY RowID) AS d UPDATE fw.FactChargeBasedStatistics SET Value = ebs.Value FROM #detailsToMerge ebs INNER JOIN fw.FactChargeBasedStatistics cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.DateID = cbs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID, ebs.Value FROM #detailsToMerge ebs WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId AND NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatistics cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.DateID = cbs.DateID ) SELECT @startRowId = MIN(d.RowId) FROM #detailsToMerge d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #departments DROP TABLE IF EXISTS #detailsToMerge END GO --------------------------------------------- -- fw.procRefreshEncounterBasedStatisticsMonthly CREATE PROC fw.procRefreshEncounterBasedStatisticsMonthly @fiscalYearId smallint = 0 AS BEGIN SET NOCOUNT ON DROP TABLE IF EXISTS #detailsToMerge CREATE TABLE #detailsToMerge ( RowID bigint identity(1,1), FiscalYearID smallint, FiscalMonthID tinyint, DepartmentID int, AccountID int, Value decimal(19, 4) ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToMerge(RowId) INSERT #detailsToMerge (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, SUM(ebs.Value) FROM fw.FactEncounterBasedStatisticsMonthly ebs INNER JOIN fw.DimAccount a ON a.AccountID = ebs.AccountID INNER JOIN fw.DimDepartment dep ON dep.DepartmentID = ebs.DepartmentID WHERE ebs.FiscalYearID = @fiscalYearId OR @fiscalYearId = 0 GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToMerge WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToMerge WHERE RowId >= @startRowId ORDER BY RowID) AS d UPDATE fw.FactChargeBasedStatisticsMonthly SET Value = ebs.Value FROM #detailsToMerge ebs INNER JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT ebs.DepartmentID, ebs.AccountID, ebs.FiscalYearID, ebs.FiscalMonthID, ebs.Value FROM #detailsToMerge ebs WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId AND NOT EXISTS ( SELECT cbs.RowID FROM fw.FactChargeBasedStatisticsMonthly cbs WHERE ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID ) SELECT @startRowId = MIN(d.RowId) FROM #detailsToMerge d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToMerge END GO --------------------------------------------- -- fw.procRestoreChargeBasedStatistics CREATE PROC fw.procRestoreChargeBasedStatistics @statisticID int AS BEGIN SET NOCOUNT ON CREATE TABLE #detailsToRestore ( RowID bigint identity(1,1), DateID int, DepartmentID int, AccountID int ) CREATE CLUSTERED INDEX CNU_RowId ON #detailsToRestore(RowId) INSERT #detailsToRestore (DepartmentID, AccountID, DateID) SELECT ebs.DepartmentID, ebs.AccountID, ebs.DateID FROM fw.FactEncounterBasedStatistics ebs WHERE ebs.StatisticID = @statisticID GROUP BY ebs.DepartmentID, ebs.AccountID, ebs.DateID DECLARE @startRowId bigint, @maxRowId bigint, @endRowId bigint SELECT @startRowId = MIN(RowId), @maxRowId = MAX(RowId) FROM #detailsToRestore WHILE (@startRowId <= @maxRowId) BEGIN SELECT @endRowId = MAX(d.RowId) FROM (SELECT TOP 1000000 RowId FROM #detailsToRestore WHERE RowId >= @startRowId ORDER BY RowID) as d DELETE cbs FROM fw.FactChargeBasedStatistics cbs JOIN #detailsToRestore ebs ON cbs.DepartmentID = ebs.DepartmentID AND cbs.AccountID = ebs.AccountID AND cbs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId INSERT fw.FactChargeBasedStatistics (DepartmentID, AccountID, DateID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.DateID, AVG(sgs.Value) FROM fw.FactSystemGeneratedStatistics sgs JOIN #detailsToRestore ebs ON sgs.DepartmentID = ebs.DepartmentID AND sgs.AccountID = ebs.AccountID AND sgs.DateID = ebs.DateID WHERE ebs.RowId >= @startRowId AND ebs.RowId <= @endRowId GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.DateID SELECT @startRowId = MIN(d.RowId) FROM #detailsToRestore d WHERE RowId > @endRowId END DROP TABLE IF EXISTS #detailsToRestore END GO --------------------------------------------- -- fw.procRestoreChargeBasedStatisticsMonthly CREATE PROC fw.procRestoreChargeBasedStatisticsMonthly @statisticID int AS BEGIN SET NOCOUNT ON DELETE cbs FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN fw.FactChargeBasedStatisticsMonthly cbs ON ebs.DepartmentID = cbs.DepartmentID AND ebs.AccountID = cbs.AccountID AND ebs.FiscalYearID = cbs.FiscalYearID AND ebs.FiscalMonthID = cbs.FiscalMonthID WHERE ebs.StatisticID = @statisticID INSERT fw.FactChargeBasedStatisticsMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value) SELECT sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID, AVG(sgs.Value) FROM fw.FactEncounterBasedStatisticsMonthly ebs JOIN fw.FactSystemGeneratedStatisticsMonthly sgs ON ebs.DepartmentID = sgs.DepartmentID AND ebs.AccountID = sgs.AccountID AND ebs.FiscalYearID = sgs.FiscalYearID AND ebs.FiscalMonthID = sgs.FiscalMonthID WHERE ebs.StatisticID = @statisticID GROUP BY sgs.DepartmentID, sgs.AccountID, sgs.FiscalYearID, sgs.FiscalMonthID END GO --------------------------------------------- -- fw.procSampleChargeBasedStatistics /************************************************************ ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-04-12 GF B-11831 Add fiscalyear to mapping join ** 2 2017-01-31 AK B-13926 Added department filter ** 3 2018-05-04 IPetriv B-17037 PR - Set Global Weights for Charge Codes - PR Stats ** 4 2019-05-08 OV B-22974 Performance improvements for fw.procSampleChargeBasedStatistics ** 5 2024-01-08 OK JAZZ-63102 Add EBS statistic support ** 6 2024-05-17 OK JAZZ-71350 Always fill out fw.SystemGeneratedStatistics *************************************************************/ CREATE PROCEDURE [fw].[procSampleChargeBasedStatistics] @departmentIDs NVARCHAR(max) = NULL AS BEGIN IF OBJECT_ID('tempdb..#SampleChargeBasedStatisticsDepts') IS NOT NULL DROP TABLE #SampleChargeBasedStatisticsDepts SET NOCOUNT ON CREATE TABLE #SampleChargeBasedStatisticsDepts (val INT PRIMARY KEY) INSERT INTO #SampleChargeBasedStatisticsDepts SELECT val FROM ConvertCSValuesToTable(@departmentIDs, ',') CREATE TABLE #DepartmentChargeCodeStatisticMapping ( [FiscalYearID] SMALLINT ,[DepartmentID] INT ,[ChargeCodeID] INT ,[PatientTypeRollupID] INT ,[AccountID] INT ,[Weight] DECIMAL(19, 8) ,[IsReviewed] BIT ,[PriorityOrder] BIGINT ) CREATE CLUSTERED INDEX BASE ON #DepartmentChargeCodeStatisticMapping ( DepartmentID ,ChargeCodeID ,FiscalYearID ,PatientTypeRollupID ) INSERT INTO #DepartmentChargeCodeStatisticMapping SELECT [FiscalYearID] ,[DepartmentID] ,[ChargeCodeID] ,[PatientTypeRollupID] ,[AccountID] ,[Weight] ,[IsReviewed] ,[PriorityOrder] FROM fw.viewDepartmentChargeCodeStatisticMapping IF (@departmentIDs IS NULL) BEGIN TRUNCATE TABLE fw.FactChargeBasedStatistics INSERT INTO fw.FactChargeBasedStatistics ( AccountID ,DepartmentID ,DateID ,Value ) SELECT map.AccountID ,bl.DepartmentID ,bl.ServiceDateID ,SUM(bl.UnitsOfService * map.Weight) AS Value FROM [dss].[FactPatientBillingLineItemDetail] bl INNER JOIN clientdss.FactPatientEncounterSummary es ON bl.EncounterID = es.EncounterID INNER JOIN fw.DimPatientType pt ON es.PatientTypeID = pt.PatientTypeID INNER JOIN #DepartmentChargeCodeStatisticMapping map ON bl.DepartmentID = map.DepartmentID AND bl.ChargeCodeID = map.ChargeCodeID AND pt.PatientTypeRollupID = map.PatientTypeRollupID AND map.FiscalYearID = bl.FiscalYearID WHERE map.AccountID <> 0 AND map.Weight <> 0 GROUP BY map.AccountID ,bl.DepartmentID ,bl.ServiceDateID END ELSE BEGIN WHILE EXISTS ( SELECT NULL FROM fw.FactChargeBasedStatistics(NOLOCK) WHERE DepartmentID IN ( SELECT val FROM #SampleChargeBasedStatisticsDepts ) ) BEGIN DELETE TOP (10000) FROM fw.FactChargeBasedStatistics WHERE DepartmentID IN ( SELECT val FROM #SampleChargeBasedStatisticsDepts ) END INSERT INTO fw.FactChargeBasedStatistics ( AccountID ,DepartmentID ,DateID ,Value ) SELECT map.AccountID ,bl.DepartmentID ,bl.ServiceDateID ,SUM(bl.UnitsOfService * map.Weight) AS Value FROM [dss].[FactPatientBillingLineItemDetail] bl INNER JOIN clientdss.FactPatientEncounterSummary es ON bl.EncounterID = es.EncounterID INNER JOIN fw.DimPatientType pt ON es.PatientTypeID = pt.PatientTypeID INNER JOIN #DepartmentChargeCodeStatisticMapping map ON bl.DepartmentID = map.DepartmentID AND bl.ChargeCodeID = map.ChargeCodeID AND pt.PatientTypeRollupID = map.PatientTypeRollupID AND map.FiscalYearID = bl.FiscalYearID WHERE map.AccountID <> 0 AND map.Weight <> 0 AND map.DepartmentID IN ( SELECT val FROM #SampleChargeBasedStatisticsDepts ) GROUP BY map.AccountID ,bl.DepartmentID ,bl.ServiceDateID END DROP TABLE #DepartmentChargeCodeStatisticMapping DROP TABLE #SampleChargeBasedStatisticsDepts EXEC fw.procCopySystemGeneratedStatistics @departmentIDs IF EXISTS (SELECT 1 FROM dss.SystemSetting WHERE Name = 'Enable Persistent Encounter-based Statistics' AND Value = 1) BEGIN EXEC fw.procRefreshEncounterBasedStatistics @departmentIDs END END GO --------------------------------------------- -- fw.procSampleChargeBasedStatisticsMonthly /************************************************************ ** Author: unknown ** Create Date: unknown ** Description: Translates DS charge units into account-based statistics for use throughout StrataJazz system ** Last Modified: 2015-12-17 ** GM Release: 2016.2 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-05-04 IPetriv B-19365 PR - Set Global Weights for Charge Codes - MR Stats ** 2 2018-07-09 IPetriv esc-09659 relace direct join to view to temptable ** 3 2021-01-19 BS JAZZ-10854 MR - Charge Based Statistics Flag ** 4 2024-01-08 OK JAZZ-63102 Add EBS statistic support ** 5 2024-05-17 OK JAZZ-71350 Always fill out fw.SystemGeneratedStatisticsMonthly *************************************************************/ CREATE proc [fw].[procSampleChargeBasedStatisticsMonthly] @fiscalYearID smallint = 0 AS BEGIN IF (@fiscalYearID = 0) BEGIN TRUNCATE TABLE fw.FactChargeBasedStatisticsMonthly END ELSE BEGIN WHILE EXISTS(SELECT NULL FROM fw.FactChargeBasedStatisticsMonthly (nolock) WHERE FiscalYearID = @fiscalYearID) DELETE top (1000000) fw.FactChargeBasedStatisticsMonthly WHERE FiscalYearID = @fiscalYearID END IF (CAST((SELECT Value FROM mr.SystemSetting WHERE Name = 'Monthly Charged Based Statistics Enabled') AS bit) = 1) BEGIN exec [dbo].[procSysDropTempTable] '#Map' SELECT * INTO #Map FROM fw.viewDepartmentChargeCodeStatisticMapping map WHERE map.AccountID <> 0 AND map.Weight <> 0 AND ( FiscalYearID = @fiscalYearID OR @fiscalYearID = 0 ) IF (CAST((SELECT Value FROM fw.SystemSetting WHERE Name = 'Charge Statistics Use Post Date') AS bit) = 1) BEGIN --use post date INSERT INTO fw.FactChargeBasedStatisticsMonthly (AccountID, DepartmentID, FiscalYearID, FiscalMonthID, Value) SELECT map.AccountID, bl.DepartmentID, d.FiscalYear, d.CalendarMonth, SUM(bl.UnitsOfService * map.Weight) AS Value FROM dss.[FactPatientBillingLineItemDetail] bl INNER JOIN fw.DimDate d WITH (READUNCOMMITTED) ON d.DateID = bl.PostDateID INNER JOIN clientdss.FactPatientEncounterSummary es WITH (READUNCOMMITTED) ON bl.EncounterID = es.EncounterID INNER JOIN fw.DimPatientType pt WITH (READUNCOMMITTED) ON es.PatientTypeID = pt.PatientTypeID INNER JOIN #Map map WITH (READUNCOMMITTED) ON bl.DepartmentID = map.DepartmentID AND bl.ChargeCodeID = map.ChargeCodeID AND pt.PatientTypeRollupID = map.PatientTypeRollupID AND map.FiscalYearID = d.FiscalYear GROUP BY map.AccountID, bl.DepartmentID, d.FiscalYear, d.CalendarMonth END ELSE BEGIN --use service date INSERT INTO fw.FactChargeBasedStatisticsMonthly (AccountID, DepartmentID, FiscalYearID, FiscalMonthID, Value) SELECT map.AccountID, bl.DepartmentID, d.FiscalYear, d.CalendarMonth, SUM(bl.UnitsOfService * map.Weight) AS Value FROM dss.[FactPatientBillingLineItemDetail] bl INNER JOIN fw.DimDate d WITH (READUNCOMMITTED) ON d.DateID = bl.ServiceDateID INNER JOIN clientdss.FactPatientEncounterSummary es WITH (READUNCOMMITTED) ON bl.EncounterID = es.EncounterID INNER JOIN fw.DimPatientType pt WITH (READUNCOMMITTED) ON es.PatientTypeID = pt.PatientTypeID INNER JOIN #Map map WITH (READUNCOMMITTED) ON bl.DepartmentID = map.DepartmentID AND bl.ChargeCodeID = map.ChargeCodeID AND pt.PatientTypeRollupID = map.PatientTypeRollupID AND map.FiscalYearID = d.FiscalYear GROUP BY map.AccountID, bl.DepartmentID, d.FiscalYear, d.CalendarMonth END exec [dbo].[procSysDropTempTable] '#Map' END EXEC fw.procCopySystemGeneratedStatisticsMonthly @fiscalYearID IF EXISTS (SELECT 1 FROM dss.SystemSetting WHERE Name = 'Enable Persistent Encounter-based Statistics' AND Value = 1) BEGIN EXEC fw.procRefreshEncounterBasedStatisticsMonthly @fiscalYearID END END GO --------------------------------------------- -- fw.procScoreFillinSetYears --/****** Object: StoredProcedure [dbo].[procCustomEMFSetYearFillins] Script Date: 11/09/2009 17:17:57 ******/ --SET ANSI_NULLS ON --GO --SET QUOTED_IDENTIFIER ON --GO CREATE proc [fw].[procScoreFillinSetYears] @planguid uniqueidentifier ,@PHSectionGUID uniqueidentifier ,@FIDimensionGUID uniqueidentifier ,@newFirstValue int ,@newNumMembers int ,@datatableGUIDList varchar(max) as --set @datatableGUIDList = '47413A00-1994-4606-8948-2BDFEDAC1FB9,63A2935D-EDB8-4DAF-863F-677831C6AC4E' --set @planguid = 'DC0BC93A-F1D3-4BD1-B684-29DA5CBB8EEB' --set @FIDimensionGUID = 'B383B29F-087E-4450-A216-3A3F03BB08D3' --set @PHSectionGUID = '7696E505-7372-4D53-B6D5-5C8F95319C44' --set @newFirstValue = 2009 --set @newNumMembers= 5 --record current first value for this section declare @oldFirstValue int declare @oldNumMembers int select @oldFirstValue = MIN(fy.fiscalyearid), @oldNumMembers= COUNT(distinct fy.fiscalyearid) from ScoreFillin fi inner join fw.DimFiscalYear fy on fi.FillinMemberGUID = fy.MemberGUID where fi.PlaceholderSectionMemberGUID = @PHSectionGUID and fi.ModelGUID = @planguid if @oldFirstValue = @newFirstValue and @newNumMembers= @oldNumMembers begin print 'Already set correctly.' return end --clear fillins for this section delete from ScoreFillin where PlaceholderSectionMemberGUID = @PHSectionGUID and ModelGUID = @planguid --set fillins for this section insert into ScoreFillin (modelguid, PlaceholderSectionMemberGUID, PlaceholderIndex, FillinMemberGUID, FillinMemberName) select @planguid, @PHSectionGUID, ROW_NUMBER() over (order by fiscalyearid) - 1, MemberGUID, FiscalYearID from fw.DimFiscalYear where FiscalYearID between @newFirstValue and @newFirstValue + @newNumMembers- 1 order by FiscalYearID declare @offset int set @offset = @newfirstvalue - @oldFirstValue declare @planDimensionGUID uniqueidentifier select @planDimensionGUID = dimensionguid from PlanType where PlanTypeGUID = (select PlanTypeGUID from XPlan where PlanGUID = @planguid) declare @planDimensionSchema nvarchar(max) declare @planDimensionObject nvarchar(max) declare @planDimensionKeyColumnName nvarchar(max) select @planDimensionSchema = sd.SQLSchemaName ,@planDimensionObject = sd.SQLObjectName ,@planDimensionKeyColumnName = dk.SQLColumnName --this is a touch hacky as it assumes default key is whats in the data tables from ScoreDimension sd inner join ScoreAttribute dk on sd.DefaultKeyGUID = dk.AttributeGUID where sd.DimensionGUID = @planDimensionGUID declare @FIDimensionKeyColumnName nvarchar(max) select @FIDimensionKeyColumnName = dk.SQLColumnName --this is a touch hacky as it assumes default key is whats in the data tables from ScoreDimension sd inner join ScoreAttribute dk on sd.DefaultKeyGUID = dk.AttributeGUID where sd.DimensionGUID = @FIDimensionGUID declare @sql nvarchar(max) set @sql = ' declare @offset int set @offset = ' + cast(@offset as varchar(max)) + ' declare @planguid uniqueidentifier set @planguid = ''' + cast(@planguid as varchar(36)) + ''' --update data across all composites that use the specified placeholder dimension, and the specified plan dimension update [{schema}].[{object}] set [' + @FIDimensionKeyColumnName + '] = [' + @FIDimensionKeyColumnName + '] + @offset where [' + @planDimensionKeyColumnName + '] = (select [' + @planDimensionKeyColumnName + '] from [' + @planDimensionSchema + '].[' + @planDimensionObject + '] where MemberGUID = @planguid) and [' + @FIDimensionKeyColumnName + '] <> 0 and isdeleted = 0 --delete data where value is not in correct range (and is not unspecified year) update [{schema}].[{object}] set isdeleted = 1 where [' + @planDimensionKeyColumnName + '] = (select [' + @planDimensionKeyColumnName + '] from [' + @planDimensionSchema + '].[' + @planDimensionObject + '] where MemberGUID = @planguid) and [' + @FIDimensionKeyColumnName + '] <> 0 and not [' + @FIDimensionKeyColumnName + '] between ' + cast(@newFirstValue as varchar(36)) + ' and ' + cast(@newFirstValue + @newNumMembers - 1 as varchar(max)) + ' ' declare @where varchar(max) set @where = 'where datatableguid in (select guid from dbo.CSVGuidsToTable(''' + @datatableguidlist + '''))' exec [procScoreRunForManyStructures] @sql, @where,1,0 --set @FirstMemberGUID = dbo.GetModelFirstFillInSection(@planguid, @phsectionguid) --if @FirstMemberGUID = '00000000-0000-0000-0000-000000000000' begin -- exec procEMFFillInAddToEndSection @phsectionguid, @targetfirstmemberguid, @planguid -- set @firstmemberguid = @targetfirstmemberguid --end --DECLARE @OFFSET Int --SELECT @OFFSET = tfm.DisplayOrder - fm.DisplayOrder --FROM -- SecureListMember fm -- inner join SecureListMember tfm on fm.ListMemberGUID = @FirstMemberGUID and tfm.ListMemberGUID = @TargetFirstMemberGUID --if @OFFSET is null return --DECLARE @ONEGUID UniqueIdentifier --SET @ONEGUID = '11111111-1111-1111-1111-111111111111' --declare @PHDimGUID uniqueidentifier --SELECT @PHDimGUID = listguid from SecureListMember where ListMemberGUID = @PHSectionGUID --if @PHDimGUID is null return --declare @fidimguid uniqueidentifier --select @fidimguid = fillindimensionguid from SecureList where ListGUID = @PHDimGUID --if @fidimguid is null return --declare @higuid uniqueidentifier --declare @cnt int --exec procLogObjectHistory @PlanGUID, 'Changing base fill-in', 0, @higuid output ----FIX FILLINS --UPDATE EMFFillIn SET FilledInMemberGUID = dbo.GetSecureListOffsetMember(FilledInMemberGUID,@offset) --WHERE -- ModelGUID = @PlanGUID -- AND PlaceholderMemberGUID IN (SELECT ListMemberGUID FROM SecureListMember WHERE ParentListMemberGUID = @PHSectionGUID) ----DELETE FILLINS PUSHED OFF THE END of possible members --DELETE FROM EMFFillIn WHERE -- MODELGUID = @PLANGUID -- and FilledInMemberGUID = @ONEGUID ----DELETE FILLINS PUSHED OFF THE END of # of members --DELETE FROM EMFFillIn WHERE ModelGUID = @PlanGUID AND FilledInMemberGUID IN (SELECT GUID FROM dbo.getFillinMembersPastMaxIndex(@PLANGUID, @PHDimGUID, @NumMembers)) ----add FILLINS to equal # of members --exec procEMFFillInAdd @planguid, @PHDimGUID, @NumMembers --declare @sql varchar(max) --declare @mdTableName varchar(max) --declare @phDimColumnName varchar(max) --set @phDimColumnName = 'G' + REPLACE(cast(@phdimguid as varchar(36)),'-','_') --set @sql = ' --declare @msg varchar(max) --declare @cnt int --declare @planguid uniqueidentifier --set @planguid = ''' + cast(@planguid as varchar(36))+ ''' --declare @fidimguid uniqueidentifier --set @fidimguid = ''' + cast(@fidimguid as varchar(36))+ ''' --declare @PHSectionGUID uniqueidentifier --set @PHSectionGUID = ''' + cast(@PHSectionGUID as varchar(36))+ ''' --declare @oneguid uniqueidentifier --set @oneguid = ''11111111-1111-1111-1111-111111111111'' --declare @higuid uniqueidentifier --set @higuid = ''' + cast(@higuid as varchar(36)) + ''' --UPDATE zzemfmodeldata_{mdcguidfriendly} --SET -- zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' = dbo.GetSecureListOffsetMember(zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ',' + cast(@offset as varchar(4)) + ') -- ,HISTORYITEMGUID = @higuid --WHERE -- MODELGUID = @planguid -- --ONLY Update data who was previously assigned to a member that was filling in the section we are updating, altho this could cause a duplicate issue -- AND zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' -- IN ( SELECT FI.FilledInMemberGUID FROM EMFFillIn FI WHERE FI.PlaceholderMemberGUID -- IN (SELECT ListMemberGUID FROM SecureListMember WHERE ParentListMemberGUID = @PHSectionGUID)) --DELETE FROM zzemfmodeldata_{mdcguidfriendly} WHERE VALUE = 0 AND MODELGUID = @PLANGUID and zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' = @ONEGUID --DELETE FROM zzemfmodeldata_{mdcguidfriendly} WHERE MODELGUID = @PLANGUID and (zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' = @ONEGUID -- OR ( -- not zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' in (select filledinmemberguid from emffillin where modelguid = @planguid) --orphan cause not filled in -- and -- not zzemfmodeldata_{mdcguidfriendly}.' + @phDimColumnName + ' = ''00000000-0000-0000-0000-000000000000'' --not orphaned because emptyguid is ok -- ) -- ) --set @cnt = @@rowcount --if @cnt > 0 begin -- set @msg = ''Cleared orphaned nonzero cells from {mdcname} while changing Year configuration'' -- exec procLogObjectHistory @PlanGUID, @msg, @cnt, @higuid --end --' --declare @mtguid uniqueidentifier --select @mtguid = modeltemplateguid from XPlan where PlanGUID = @PLANGUID ----FOR EACH MD TABLE USED BY THIS PLAN --declare @where varchar(max) --set @where = 'where modeldataconfigguid in (select modeldataconfigguid from viewEMFModelTemplateMDCs where modeltemplateguid = ''' + cast(@mtguid as varchar(36)) + ''') -- and modeldataconfigguid in (select modeldataconfigguid from emfmodeldataconfigdimensionlink where dimensionguid = ''' + cast(@PHDimGUID as varchar(36)) + ''') --' --exec procEMFRunForManyStructures @sql, @where, 1 GO --------------------------------------------- -- fw.procSetCurrentDataPayPeriodID CREATE proc [fw].[procSetCurrentDataPayPeriodID] as declare @currentPP int; set @currentPP = ( select MAX(pr.PayPeriodID) from fw.FactPayrollSampledPayPeriod pr inner join fw.DimPayPeriod pp on pp.PayPeriodID = pr.PayPeriodID where pr.TimeClassID=1 and (pr.Dollars <> 0 or pr.Hours <> 0) and pp.PayCycleID=0 ) if (@currentPP is null) set @currentPP = 0 exec procChangeDBSetting 'Current_Payroll_PayPeriodID', @currentPP --Update Default Report Parameter-------------------------------------------------------------- exec [pi].[procReportDefaultParameterUpdateToCurrent] GO --------------------------------------------- -- fw.procStatisticPrimarySampledAdjustedTargetMonthlyInsert CREATE PROCEDURE [fw].[procStatisticPrimarySampledAdjustedTargetMonthlyInsert] (@FiscalYearID int = 0) AS BEGIN /* Proposal If the client is not using flexing, this will be the target plus the efficiency factor This should work regardless of the target basis (i.e. rolling avg or budget) The factor will be applied after the inversion If the factor type is percentage, the adjusted target will be the target*(1+factor) i.e. if my target is 100 and my factor is 5%, the adjusted target will be 100*(1+0.05)=105 i.e. if my target is 100 and my factor is -5%, the adjusted target will be 100*(1+-0.05)=95 If the factor type is value, the adjusted value will be target + factor i.e. if my target is 1000 and my factor is 200, the adjusted target will be will be 1000+200=1200 i.e. if my target is 1000 and my factor is -200, the adjusted target will be 1000-200=800 If there is more than one factor impacting a department and account or job code/pay code group combination, then the factors should layer on top of each other based on history order If an efficiency factor does not exist for a particular account/job code, then the value in the new time class will be either flex or baseline target if flex is not used This will happen after Flex is calculated Include integration tests */ /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-08-23 BC JAZZ-11498 Change Table Variable to Temporary Tables ************************************************************ */ DECLARE @IsFlexingEnabled INT = ( SELECT VALUE FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope CREATE TABLE #EfficiencyFactorScope ( EfficiencyFactorGUID [uniqueidentifier] NOT NULL ,[DepartmentID] [int] NOT NULL ,[AccountID] [int] NOT NULL ,[FiscalYearID] [smallint] NOT NULL ,[FiscalMonthID] [tinyint] NOT NULL ,Value NUMERIC(25, 6) NOT NULL ,Type TINYINT ,FactorType CHAR(1) ,DateCreated DATETIME ,UNIQUE CLUSTERED ( FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) ); IF EXISTS (SELECT TOP 1 * FROM [mr].[EfficiencyFactor]) BEGIN WITH EfficiencyFactorScope AS ( SELECT * ,rn = ROW_NUMBER() OVER ( PARTITION BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ORDER BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) FROM ( SELECT DISTINCT ef.EfficiencyFactorGUID ,ef.FiscalYearID ,efgd.FiscalMonthID ,efd.DepartmentID ,isnull(efgd.AccountID, da.AccountID) AS AccountID ,CASE WHEN isnull(efgd.AccountID, - 999) = da.AccountID THEN 0 ELSE efgd.Value END AS Value ,ef.Type ,ef.FactorType ,ef.DateCreated FROM mr.EfficiencyFactor ef INNER JOIN mr.EfficiencyFactorDepartment efd ON ef.EfficiencyFactorGUID = efd.EfficiencyFactorGUID INNER JOIN mr.EfficiencyFactorGLDetails efgd ON efgd.EfficiencyFactorGUID = ef.EfficiencyFactorGUID LEFT JOIN fw.DimAccount da ON efgd.OBFinancialReportingID = da.OBUnitsFinancialReportingID and efgd.AccountID IS NULL LEFT JOIN mr.EfficiencyFactorGLDetails efgd_exist ON efgd.EfficiencyFactorGUID = efgd_exist.EfficiencyFactorGUID and efgd_exist.AccountID = da.AccountID and efgd_exist.FiscalMonthID = efgd.FiscalMonthID WHERE (@FiscalYearID = ef.FiscalYearID or @FiscalYearID = 0) and (efgd_exist.AccountID is null or da.AccountID is null) AND ef.Type = 1 AND isnull(efgd.AccountID, da.AccountID) IS NOT NULL ) X ) INSERT INTO #EfficiencyFactorScope ( EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated ) SELECT EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated FROM EfficiencyFactorScope WHERE RN = 1 DELETE FROM fw.FactStatisticPrimarySampledMonthly WHERE (@FiscalYearID = FiscalYearID or @FiscalYearID = 0) and TimeClassID = 22 INSERT INTO fw.FactStatisticPrimarySampledMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, IsDeleted, Amount) SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,22 as TimeClassID ,0 as IsDeleted ,SUM(Amount) as Amount FROM ( SELECT isnull(fact.DepartmentID,ToApply.DepartmentID) as DepartmentID ,isnull(fact.AccountID,toApply.AccountID) as AccountID ,isnull(fact.FiscalYearID,toApply.FiscalYearID) as FiscalYearID ,isnull(fact.FiscalMonthID,toApply.FiscalMonthID) as FiscalMonthID ,Amount = CASE WHEN FactorType = 'P' THEN isnull(fact.Amount,0.0) * isnull(Value,0.0) / 100 WHEN FactorType = 'V' THEN isnull(Value,0.0) ELSE 0 END FROM #EfficiencyFactorScope ToApply INNER JOIN (SELECT distinct DepartmentID,AccountID from fw.FactStatisticPrimarySampledMonthly) GenCand on GenCand.DepartmentID = ToApply.DepartmentID AND GenCand.AccountID = ToApply.AccountID FULL JOIN fw.FactStatisticPrimarySampledMonthly fact ON fact.DepartmentID = ToApply.DepartmentID AND fact.AccountID = ToApply.AccountID AND fact.FiscalYearID = ToApply.FiscalYearID AND fact.FiscalMonthID = ToApply.FiscalMonthID WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) UNION ALL SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,Amount FROM fw.FactStatisticPrimarySampledMonthly fact WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) X GROUP BY DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID exec [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactStatisticPrimarySampledMonthly',@keyNameCSV = 'AccountID',@measureNameCSV = 'Amount',@fiscalYearID = 0,@timeClassID = 22,@isDebugOnly = 0 END END IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope GO --------------------------------------------- -- fw.procStatisticPrimarySampledInsertMonthly /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-09-03 MS B-02863 Removing the parameter from the YTD proc call ** 2 2016-09-22 AK B-11845 procFactStatisticPrimarySampledBaselineTargetUpdate ** 3 2016-12-13 NL B-13759 Adding fiscalYearID param and filtering ** 4 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 5 2017-03-06 GF B-14693 Added baseline target year filter ** 6 2017-04-11 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.procStatisticPrimarySampledInsertMonthly ** 7 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 8 2017-07-19 IP TK-45395 added isSystemGenerated to merge statement ** 9 2017-07-26 ipetriv B-16752 Added units Budget Adjustment ** 10 2017-08-29 ip B-16798 Add using of Budget Adjustment. ** 11 2022-03-15 KF JAZZ-27781 Run PR Process Task can fail silently during Payroll Sampling *************************************************************/ CREATE proc [fw].[procStatisticPrimarySampledInsertMonthly] @fiscalYearID smallint = 0 as IF OBJECT_ID('tempdb..#StatisticPrimarySampledStaging') IS NOT NULL DROP TABLE #StatisticPrimarySampledStaging IF OBJECT_ID('fw.StatisticPrimarySampledStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticPrimarySampledStagingWithCalcs CREATE TABLE #StatisticPrimarySampledStaging (RowID bigint identity(1,1),AccountID int, DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(19,4), isDeleted bit, isSystemGenerated bit) insert into #StatisticPrimarySampledStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) exec fw.PrepareStatistics @FiscalYearID,1 --run calculations exec fw.procFactMonthlyMergeDuplicates 'fw.FactStatisticPrimarySampledMonthly', 'AccountID', 'Amount', @fiscalYearID, 0, 0 exec fw.procFactStatisticPrimarySampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactStatisticPrimarySampledMonthly','#StatisticPrimarySampledStaging', 'AccountID', 'Amount', @fiscalYearID, 0, 0 IF @fiscalYearID = 0 BEGIN truncate table fw.FactStatisticPrimarySampledMonthly INSERT INTO fw.FactStatisticPrimarySampledMonthly With (TABLOCKX) ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, 0 as IsDeleted, isnull(IsSystemGenerated,0) as IsSystemGenerated FROM fw.StatisticPrimarySampledStagingWithCalcs END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.StatisticPrimarySampledStagingWithCalcs (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) BEGIN TRANSACTION Sampling BEGIN TRY MERGE fw.FactStatisticPrimarySampledMonthly With (TABLOCKX) AS target USING fw.StatisticPrimarySampledStagingWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.AccountID = target.AccountID AND source.FiscalYearID = target.FiscalYearID AND source.FiscalMonthID = target.FiscalMonthID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND (target.Amount <> source.Amount or target.AmountYTD <> source.AmountYTD or target.AmountPriorYear <> source.AmountPriorYear or target.AmountPriorYTD <> source.AmountPriorYTD or target.IsSystemGenerated <> source.IsSystemGenerated ) THEN UPDATE SET target.Amount = source.Amount, target.AmountYTD = source.AmountYTD, target.AmountPriorYear = source.AmountPriorYear, target.AmountPriorYTD = source.AmountPriorYTD, target.IsSystemGenerated = source.IsSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.AccountID, source.FiscalYearID, source.FiscalMonthID, source.TimeClassID, source.Amount, source.AmountYTD, source.AmountPriorYear, source.AmountPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE AND Target.FiscalYearID = @fiscalYearID THEN DELETE; COMMIT TRANSACTION Sampling END TRY BEGIN CATCH ROLLBACK TRANSACTION Sampling; THROW END CATCH END IF OBJECT_ID('tempdb..#StatisticPrimarySampledStaging') IS NOT NULL DROP TABLE #StatisticPrimarySampledStaging IF OBJECT_ID('fw.StatisticPrimarySampledStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticPrimarySampledStagingWithCalcs GO --------------------------------------------- -- fw.procStatisticSampledAdjustedTargetMonthlyInsert CREATE PROCEDURE [fw].[procStatisticSampledAdjustedTargetMonthlyInsert] (@FiscalYearID int = 0) AS BEGIN /* Proposal If the client is not using flexing, this will be the target plus the efficiency factor This should work regardless of the target basis (i.e. rolling avg or budget) The factor will be applied after the inversion If the factor type is percentage, the adjusted target will be the target*(1+factor) i.e. if my target is 100 and my factor is 5%, the adjusted target will be 100*(1+0.05)=105 i.e. if my target is 100 and my factor is -5%, the adjusted target will be 100*(1+-0.05)=95 If the factor type is value, the adjusted value will be target + factor i.e. if my target is 1000 and my factor is 200, the adjusted target will be will be 1000+200=1200 i.e. if my target is 1000 and my factor is -200, the adjusted target will be 1000-200=800 If there is more than one factor impacting a department and account or job code/pay code group combination, then the factors should layer on top of each other based on history order If an efficiency factor does not exist for a particular account/job code, then the value in the new time class will be either flex or baseline target if flex is not used This will happen after Flex is calculated Include integration tests */ /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-08-23 BC JAZZ-11498 Change Table Variable to Temporary Tables ************************************************************ */ DECLARE @IsFlexingEnabled INT = ( SELECT VALUE FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope CREATE TABLE #EfficiencyFactorScope ( EfficiencyFactorGUID [uniqueidentifier] NOT NULL ,[DepartmentID] [int] NOT NULL ,[AccountID] [int] NOT NULL ,[FiscalYearID] [smallint] NOT NULL ,[FiscalMonthID] [tinyint] NOT NULL ,Value NUMERIC(25, 6) NOT NULL ,Type TINYINT ,FactorType CHAR(1) ,DateCreated DATETIME ,UNIQUE CLUSTERED ( FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) ); IF EXISTS (SELECT TOP 1 * FROM [mr].[EfficiencyFactor]) BEGIN WITH EfficiencyFactorScope AS ( SELECT * ,rn = ROW_NUMBER() OVER ( PARTITION BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ORDER BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) FROM ( SELECT DISTINCT ef.EfficiencyFactorGUID ,ef.FiscalYearID ,efgd.FiscalMonthID ,efd.DepartmentID ,isnull(efgd.AccountID, da.AccountID) AS AccountID ,CASE WHEN isnull(efgd.AccountID, - 999) = da.AccountID THEN 0 ELSE efgd.Value END AS Value ,ef.Type ,ef.FactorType ,ef.DateCreated FROM mr.EfficiencyFactor ef INNER JOIN mr.EfficiencyFactorDepartment efd ON ef.EfficiencyFactorGUID = efd.EfficiencyFactorGUID INNER JOIN mr.EfficiencyFactorGLDetails efgd ON efgd.EfficiencyFactorGUID = ef.EfficiencyFactorGUID LEFT JOIN fw.DimAccount da ON efgd.OBFinancialReportingID = da.OBUnitsFinancialReportingID and efgd.AccountID IS NULL LEFT JOIN mr.EfficiencyFactorGLDetails efgd_exist ON efgd.EfficiencyFactorGUID = efgd_exist.EfficiencyFactorGUID and efgd_exist.AccountID = da.AccountID and efgd_exist.FiscalMonthID = efgd.FiscalMonthID WHERE (@FiscalYearID = ef.FiscalYearID or @FiscalYearID = 0) and (efgd_exist.AccountID is null or da.AccountID is null) AND ef.Type = 1 AND isnull(efgd.AccountID, da.AccountID) IS NOT NULL ) X ) INSERT INTO #EfficiencyFactorScope ( EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated ) SELECT EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated FROM EfficiencyFactorScope WHERE RN = 1 DELETE FROM fw.FactStatisticSampledMonthly WHERE (@FiscalYearID = FiscalYearID or @FiscalYearID = 0) and TimeClassID = 22 INSERT INTO fw.FactStatisticSampledMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, IsDeleted, Amount) SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,22 as TimeClassID ,0 as IsDeleted ,SUM(Amount) as Amount FROM ( SELECT isnull(fact.DepartmentID,ToApply.DepartmentID) as DepartmentID ,isnull(fact.AccountID,toApply.AccountID) as AccountID ,isnull(fact.FiscalYearID,toApply.FiscalYearID) as FiscalYearID ,isnull(fact.FiscalMonthID,toApply.FiscalMonthID) as FiscalMonthID ,Amount = CASE WHEN FactorType = 'P' THEN isnull(fact.Amount,0.0) * isnull(Value,0.0) / 100.00 WHEN FactorType = 'V' THEN isnull(Value,0) ELSE 0 END FROM #EfficiencyFactorScope ToApply INNER JOIN (SELECT distinct DepartmentID,AccountID from fw.FactStatisticSampledMonthly) GenCand on GenCand.DepartmentID = ToApply.DepartmentID AND GenCand.AccountID = ToApply.AccountID FULL JOIN fw.FactStatisticSampledMonthly fact ON fact.DepartmentID = ToApply.DepartmentID AND fact.AccountID = ToApply.AccountID AND fact.FiscalYearID = ToApply.FiscalYearID AND fact.FiscalMonthID = ToApply.FiscalMonthID WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) UNION ALL SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,Amount FROM fw.FactStatisticSampledMonthly fact WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) X GROUP BY DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID exec [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactStatisticSampledMonthly',@keyNameCSV = 'AccountID',@measureNameCSV = 'Amount',@fiscalYearID = 0,@timeClassID = 22,@isDebugOnly = 0 END END IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope GO --------------------------------------------- -- fw.procStatisticSampledInsertDaily /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-07-11 gforeman B-12396 Handle stats that exist in multiple data sources (dupe handling) ** 2 2016-09-16 gforeman D-04861 Skip calculating actuals in certain cases ** 3 2016-10-12 mholov B-12970 Pull from Baseline Target time class ** 4 2016-12-13 mholov B-13783 Reversed actuals sampling order ** 5 2016-12-17 mholov B-13509 Pull Budgeted amounts from monthly table ** 6 2017-01-13 apukii D-05426 Removed filtering departments by mappings ** 7 2017-01-31 akozlov B-13926 Added department filter ** 8 2017-02-08 gforeman B-14308 Added year filter ** 9 2017-03-06 gforeman B-14693 Cancel sampling if daily disabled ** 10 2017-05-01 gforeman B-15551 Include non-PR driver departments in sampling ** 11 2017-05-02 gforeman B-15551 Remove primary statistics join so that all statistics are sampled ** 12 2017-06-14 ipetriv Added additional filter on values to omit 0 rows ** 13 2017-08-29 ipetriv B-16798 Add using of Budget Adjustment. ** 14 2018-02-22 ipetriv D-06786 add department calculation for TC = 2 if dept is not in PR , Dept is in Budget Allocation ** 15 2018-03-08 ipetriv B-18793 PR - Daily processing post action 2 week run ** 16 2018-03-08 ipetriv D-07329 removed part of code, that delete non PR department from staging table ** 17 2018-06-04 ipetriv TK-58558 added "distinct" selection of dates in case of recalcu;lation for 2 weeks ** 18 2018-10-18 OV D-07753 fix: daily and charged-based queries filtered by @dates (removed @FiscalYearID filter) ** 19 2018-10-23 OV D-07753 fix: PR fails to populate daily charge-based statistics on the first pay period of the fiscal year ** 20 2019-02-20 OV D-08116 fix: PR delete part ton filtered by PayPeriod ** 21 2019-03-12 OV TK-71197 Table variables replaced with temp tables ** 22 2019-04-23 OV B-20579 Allow clients to input daily budget - Statistics ** 23 2019-04-25 OV B-20579 sampled 0 data for Statistic (except actual) ** 24 2019-07-16 OV B-23482 Use Budget Adjustments for Daily and PayPeriod ** 25 2019-08-08 vfay D-08668 Add Joins on DateID in budget reallocation part ** 26 2020-01-28 IH TK-82833 Increase a deletion size from 10K to 100K ** 27 2020-03-10 HV D-09170 fw.procStatisticSampledInsertDaily is filling log file in tempdb caused by the use of temp variables ** 28 2020-03-18 HV TK-84583 PR Statistics Daily sampling: data is sampling incorrectly for first Pay Period days in some cases D-09470 PR Statistics Daily sampling: budget adjustments are not applied for first Pay Period days if it belongs to 2 months TK-84785 Statistics Sampling daily: Baseline Target values are calculated incorrectly for combinations with budget adjustments ** 29 2020-11-25 BS JAZZ-6398 PR Process is timing out due to long running proc fw.procStatisticSampledInsertDaily ** 30 2022-11-22 HV JAZZ-44508 Automated Daily PR processing doesn't calculate future target, when system center processing does ** 31 2023-02-03 KF JAZZ-48413 Charge Based Statistics Modals Performance Improvement- Bug Fixing ** 32 2023-02-21 KF JAZZ-50593 MBPR PHPUOS: Accounts with 0 charge based UOS are shown with link ** 33 2024-02-23 HV JAZZ-67657 [RowId] Convert fw.FactStatisticSampledDaily.Rowid to bigint *************************************************************/ CREATE proc [fw].[procStatisticSampledInsertDaily] @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0, @isCalcDaily bit = 0, @isPrMetricConfigurationOn bit = 0 with recompile as IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope DECLARE @currentDateOverride nvarchar(max) = (SELECT Value FROM [pi].[SystemSetting] WHERE Name = 'Current Date Override') DECLARE @currentDate date = CASE WHEN @currentDateOverride = '' THEN CAST(GETDATE() AS DATE) ELSE CAST (@currentDateOverride AS DATE) END DECLARE @yesterday_date date = DATEADD(DAY, - 1, @currentDate) create table #DailyCalcPeriodsScope (PayPeriodID int primary key,PayCycleID int,PeriodStartCalendarDate date,PeriodEndCalendarDate date) insert into #DailyCalcPeriodsScope (PayPeriodID,PayCycleID,PeriodStartCalendarDate,PeriodEndCalendarDate) select PayPeriodID,PayCycleID,PeriodStartCalendarDate,PeriodEndCalendarDate from fw.DimPayPeriod where (@isCalcDaily = 1 and @yesterday_date BETWEEN PeriodStartCalendarDate and PeriodEndCalendarDate) or (@isCalcDaily = 0 and (FiscalYearIDSecond = @fiscalYearID or @fiscalYearID = 0)) IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations create table #departmentsBudgetAllocations (val int primary key) IF OBJECT_ID('tempdb..#FDPSD') IS NOT NULL DROP TABLE #FDPSD CREATE TABLE #FDPSD (DepartmentID int primary key) insert into #FDPSD select distinct DriverDepartmentID as DepartmentID from client.FactDepartmentPrimaryStatisticConfigurationDriverDepartmentCache insert into #departmentsBudgetAllocations (val) select SourceDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.TargetDepartmentID and d.IsPR = 1 where SourceDepartmentID <> 0 and r.Archived = 0 union -- unique select TargetDepartmentID as DepartmentID from mr.BudgetReallocationAdjustment a inner join mr.BudgetReallocation r on r.BudgetReallocationGUID=a.BudgetReallocationGUID inner join FW.DimDepartment d on d.DepartmentID = r.SourceDepartmentID and d.IsPR = 1 -- Filtering all departments that move data FROM selected where TargetDepartmentID <> 0 and r.Archived = 0 --delete existing data if (@fiscalYearID = 0 and @isCalcDaily = 0) begin truncate table fw.FactStatisticSampledDaily end else begin while exists(select null from fw.FactStatisticSampledDaily fssd (nolock) inner join #DailyCalcPeriodsScope ps on fssd.PayPeriodID = ps.PayPeriodID) begin delete top (500000) fssd from fw.FactStatisticSampledDaily fssd inner join #DailyCalcPeriodsScope ps on fssd.PayPeriodID = ps.PayPeriodID end DECLARE @nextRowID BIGINT SELECT @nextRowID = ISNULL((SELECT MAX(RowID) FROM fw.FactStatisticSampledDaily), 1) DBCC CHECKIDENT('fw.FactStatisticSampledDaily','RESEED', @nextRowID); end --cancel if not using daily if (not exists(select 1 from pi.SystemSetting where Name = 'PR Daily Enabled' and Value = '1')) begin return end --pull new data - daily statistics IF OBJECT_ID('tempdb..#TEMPSTATISTIC') IS NOT NULL DROP TABLE #TEMPSTATISTIC create table #TEMPSTATISTIC (DepartmentID int, AccountID int, PayPeriodID int, DateID int, TimeClassID int, Units money) insert into #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select stat.DepartmentID, stat.AccountID, PP.PayPeriodID, stat.DateID, stat.TimeClassID, SUM(STAT.Value) as Units from [int].[FactSharedImportDailyStatistics] stat inner join [fw].[DimDate] DATE on stat.DateID=DATE.DateID inner join [fw].[DimDepartment] D on D.Departmentid = STAT.DepartmentID inner join [fw].[DimPayPeriod] PP on D.PayCycleID=PP.PayCycleID and DATE.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID and ((date.CalendarDateTime <= @yesterday_date and @isCalcDaily = 1) or @isCalcDaily = 0) left join #FDPSD FDPSD on FDPSD.DepartmentID = STAT.DepartmentID where PP.PayPeriodID != 0 and STAT.Isdeleted = 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null) and stat.DepartmentID != 0 and stat.TimeClassID = 1 group by stat.DepartmentID, stat.AccountID, PP.PayPeriodID, stat.DateID, stat.TimeClassID --pull new data - charge-based actuals where not already sampled insert into #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select STAT.DepartmentID, STAT.AccountID, pp.PayPeriodID, STAT.DateID, 1 as TimeClassID, SUM(STAT.Value) AS Units from [fw].[FactChargeBasedStatistics] STAT inner join [fw].[DimDate] DATE on STAT.DateID=DATE.DateID inner join [fw].[DimDepartment] DEPT on STAT.DepartmentID=DEPT.DepartmentID inner join [fw].[DimPayPeriod] PP on DEPT.PayCycleID=PP.PayCycleID and DATE.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID and ((date.CalendarDateTime <= @yesterday_date and @isCalcDaily = 1) or @isCalcDaily = 0) left join #FDPSD FDPSD on FDPSD.DepartmentID = STAT.DepartmentID left join #TEMPSTATISTIC ex ON ex.DepartmentID = STAT.DepartmentID and ex.AccountID = STAT.AccountID and ex.PayPeriodID = PP.PayPeriodID and ex.DateID = STAT.DateID and ex.TimeClassID = 1 where PP.PayPeriodID != 0 and STAT.IsDeleted = 0 and (DEPT.IsPR = 1 or FDPSD.DepartmentID is not null) and STAT.DepartmentID != 0 and ex.DepartmentID IS NULL group by STAT.DepartmentID, STAT.AccountID, PP.PayPeriodID, STAT.DateID; IF OBJECT_ID('tempdb..#StatisticSampledMonthlyStaging') IS NOT NULL DROP TABLE #StatisticSampledMonthlyStaging CREATE TABLE #StatisticSampledMonthlyStaging (RowID bigint identity(1,1),AccountID int, DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(19,4), isDeleted bit, isSystemGenerated bit) IF OBJECT_ID('tempdb..#StatisticsDaily') IS NOT NULL DROP TABLE #StatisticsDaily select FACT.DepartmentID, FACT.AccountID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, SUM(FACT.Value) AS Units into #StatisticsDaily from int.FactSharedImportDailyStatistics FACT inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join [fw].[DimDate] DT on DT.DateID = FACT.dateID inner join [fw].[DimPayPeriod] PP on pp.PayCycleID = d.PayCycleID and dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = FACT.DepartmentID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where DT.FiscalMonth != 0 and DT.FiscalYear != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null or dba.val is not null) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 group by FACT.DepartmentID, FACT.AccountID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID ------------------------------------------------------------------------------------------------------------------------------------ insert into #StatisticsDaily select FACT.DepartmentID, FACT.AccountID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID, SUM(FACT.Value/PCC.PeriodDays) AS Units from int.FactStatisticsByPayPeriod FACT inner join [fw].[DimDepartment] D on D.Departmentid = FACT.DepartmentID inner join fw.DimPayPeriod pp on pp.PayPeriodID = FACT.PayPeriodID inner join [fw].[DimDate] DT on dt.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate left join #StatisticsDaily spp on SPP.PayPeriodID = FACT.PayPeriodID and SPP.AccountID = FACT.AccountID and SPP.DepartmentID = FACT.DepartmentID and SPP.TimeClassID = FACT.TimeClassID inner join fw.DimPayCycle PCC on PCC.PayCycleID = PP.PayCycleID inner join #DailyCalcPeriodsScope dcp on pp.PayPeriodID = dcp.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = FACT.DepartmentID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where spp.DepartmentID IS NULL and DT.FiscalMonth != 0 and FACT.FiscalYearID != 0 and FACT.IsDeleted = 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null or dba.val is not null) and FACT.TimeClassID = 2 and FACT.DepartmentID != 0 group by FACT.DepartmentID, FACT.AccountID, DT.DateID, FACT.TimeClassID, PP.PayPeriodID -------------------------------------------------------------------------------------------------------------------- insert into #StatisticsDaily select STAT.DepartmentID, STAT.AccountID, DT.DateID, STAT.TimeClassID, DPC.PayPeriodID, SUM(STAT.Value/ dbo.GetDaysInMonth(DT.CalendarDateTime)) AS Units from int.FactStatistic STAT inner join [fw].[DimDepartment] D on D.Departmentid = STAT.Departmentid inner join [fw].[DimDate] DT on DT.CalendarMonth = STAT.FiscalMonthID and DT.FiscalYear = STAT.FiscalYearID inner join #DailyCalcPeriodsScope dpc on dpc.PayCycleID = d.PayCycleID and dt.CalendarDateTime between dpc.PeriodStartCalendarDate and dpc.PeriodEndCalendarDate left join #StatisticsDaily spp on SPP.PayPeriodID = DPC.PayPeriodID and SPP.AccountID = STAT.AccountID and SPP.DepartmentID = STAT.DepartmentID and SPP.TimeClassID = STAT.TimeClassID left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where spp.DepartmentID is null and STAT.FiscalMonthID != 0 and STAT.FiscalYearID != 0 and STAT.isDeleted = 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null or dba.val is not null) and STAT.TimeClassID = 2 and STAT.DepartmentID != 0 group by STAT.DepartmentID, STAT.AccountID, DT.DateID, STAT.TimeClassID, DPC.PayPeriodID insert into #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select G.DepartmentID, AccountID, G.PayPeriodID, G.DateID, G.TimeClassID, G.Units from #StatisticsDaily G --------------------------------------------------------------------------------------------------------------------- declare @iteration int = 1 DECLARE @BudgetReallocationGUID uniqueidentifier,@date datetime,@BudgetReallocationType varchar(50) PRINT '-------- Vendor Products Report --------'; DECLARE BRA_cursor CURSOR FOR SELECT DISTINCT BudgetReallocationGUID,date,BudgetReallocationType FROM fw.BudgetReallocationWithDefinedType BR INNER JOIN [fw].[DimDate] DD ON DD.CalendarMonth = BR.FiscalMonthID AND DD.FiscalYear = BR.FiscalYearID INNER JOIN #DailyCalcPeriodsScope DCPS ON DD.CalendarDateTime BETWEEN DCPS.PeriodStartCalendarDate AND DCPS.PeriodEndCalendarDate WHERE BR.BudgetReallocationType IS NOT NULL ORDER BY date OPEN BRA_cursor FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType WHILE @@FETCH_STATUS = 0 BEGIN IF @BudgetReallocationType = 'ReallocateSingle' BEGIN -- Insert rows with "correcting" values UPDATE STT SET Units = STT.Units + Change/dbo.GetDaysInMonth(dd.CalendarDateTime) ---------------------- FROM #TEMPSTATISTIC STT INNER JOIN fw.dimDate dd on stt.DateID = dd.DateID INNER JOIN [mr].[BudgetReallocation] b ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and b.FiscalYearID = dd.FiscalYear INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and ba.FiscalMonthID = dd.CalendarMonth WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and STT.TimeClassID = 2 and b.Archived = 0 UPDATE STT SET Units = STT.Units - Change/dbo.GetDaysInMonth(dd.CalendarDateTime) --------------------------- FROM #TEMPSTATISTIC STT INNER JOIN fw.dimDate dd on stt.DateID = dd.DateID INNER JOIN [mr].[BudgetReallocation] b ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.FiscalYearID = dd.FiscalYear INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and ba.FiscalMonthID = dd.CalendarMonth WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and STT.TimeClassID = 2 and b.Archived = 0 INSERT INTO #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, pp.PayPeriodID as PayPeriodID, dd.DateID as DateID, 2 as TimeClassID, SUM((Change/dbo.GetDaysInMonth(dd.CalendarDateTime)) * -1) as Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDate] dd on dd.FiscalYear = b.FiscalYearID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN [fw].[DimDepartment] dep on b.SourceDepartmentID = dep.DepartmentID INNER JOIN [fw].[DimPayPeriod] pp on pp.PayCycleID = dep.PayCycleID and dd.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = pp.PayPeriodID LEFT JOIN #TEMPSTATISTIC stt on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.TimeClassID = 2 and stt.DateID = dd.DateID WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID, dd.DateID UNION All SELECT b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, pp.PayPeriodID as PayPeriodID, dd.DateID as DateID, 2 as TimeClassID, sum(Change/dbo.GetDaysInMonth(dd.CalendarDateTime)) as Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDate] dd on dd.FiscalYear = b.FiscalYearID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN [fw].[DimDepartment] dep on b.TargetDepartmentID = dep.DepartmentID INNER JOIN [fw].[DimPayPeriod] pp on pp.PayCycleID = dep.PayCycleID and dd.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = pp.PayPeriodID LEFT JOIN #TEMPSTATISTIC stt ON b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and stt.TimeClassID = 2 and stt.DateID = dd.DateID WHERE ba.Change <> 0 and b.BudgetReallocationGUID = @BudgetReallocationGUID and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.Archived = 0 group by b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID, dd.DateID ------------------ END IF @BudgetReallocationType = 'ReallocateMulti' BEGIN Update stt set stt.Units = stt_src.Units + stt.Units FROM #TEMPSTATISTIC STT inner join fw.DimDate dd on dd.DateID = stt.DateID INNER JOIN [mr].[BudgetReallocation] b on b.TargetDepartmentID = stt.DepartmentID and b.TargetAccountID = stt.AccountID and b.FiscalYearID = dd.FiscalYear INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN #TEMPSTATISTIC STT_SRC ON STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and stt.TimeClassID = stt_src.TimeClassID and STT_SRC.DateID = stt.DateID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and ba.Change <> 0 and stt.TimeClassID = 2 and b.Archived = 0 INSERT INTO #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) SELECT --'Y', b.TargetDepartmentID as DepartmentID, b.TargetAccountID as AccountID, pp.PayPeriodID as PayPeriodID, dd.DateID as DateID, 2 as TimeClassID, SUM(STT_SRC.Units) as Units ----------------- FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDate] dd on dd.FiscalYear = b.FiscalYearID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN [fw].[DimDepartment] dep on b.TargetDepartmentID = dep.DepartmentID INNER JOIN [fw].[DimPayPeriod] pp on pp.PayCycleID = dep.PayCycleID and dd.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = pp.PayPeriodID INNER JOIN #TEMPSTATISTIC STT_SRC ON STT_SRC.DepartmentID = b.SourceDepartmentID and STT_SRC.AccountID = b.SourceAccountID and STT_SRC.TimeClassID = 2 and STT_SRC.DateID = dd.DateID LEFT JOIN #TEMPSTATISTIC STT ON STT.DepartmentID = b.TargetDepartmentID and STT.AccountID = b.TargetAccountID and STT.TimeClassID = 2 and STT.DateID = dd.DateID where stt.DepartmentID is null and ba.Change <> 0 and ba.UnitTypeID = 145 and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 GROUP BY b.TargetDepartmentID, b.TargetAccountID, pp.PayPeriodID, dd.DateID UPDATE STT_SRC SET stt_src.Units = 0 FROM #TEMPSTATISTIC STT_SRC INNER JOIN fw.DimDate dd on dd.DateID = STT_SRC.DateID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = STT_SRC.DepartmentID and b.SourceAccountID = STT_SRC.AccountID and dd.FiscalYear = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and ba.FiscalMonthID = dd.CalendarMonth LEFT JOIN #TEMPSTATISTIC STT ON STT.DepartmentID = b.TargetDepartmentID and STT.AccountID = b.TargetAccountID and STT.TimeClassID = 2 and STT.DateID = STT_SRC.DateID where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and Change <> 0 and b.Archived = 0 END -- ELSE IF @BudgetReallocationType = 'AdjustMontly' BEGIN UPDATE STT SET stt.Units = stt.Units+Change/dbo.GetDaysInMonth(dd.CalendarDateTime) FROM #TEMPSTATISTIC STT inner join fw.DimDate dd on dd.DateID = stt.DateID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and dd.FiscalYear = b.FiscalYearID INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and ba.FiscalMonthID = dd.CalendarMonth where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and ba.Change <> 0 and TimeClassID = 2 and b.Archived = 0 INSERT INTO #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, pp.PayPeriodID as PayPeriodID, dd.DateID as DateID, 2 as TimeClassID, SUM(Change/dbo.GetDaysInMonth(dd.CalendarDateTime)) as Units FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDate] dd on dd.FiscalYear = b.FiscalYearID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN [fw].[DimDepartment] dep on b.SourceDepartmentID = dep.DepartmentID INNER JOIN [fw].[DimPayPeriod] pp on pp.PayCycleID = dep.PayCycleID and dd.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = pp.PayPeriodID LEFT JOIN #TEMPSTATISTIC stt ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.TimeClassID = 2 and stt.DateID = dd.DateID where ba.Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID, dd.DateID END IF @BudgetReallocationType = 'ManualFile' BEGIN UPDATE STT SET stt.Units = ba.NewSourceValue/dbo.GetDaysInMonth(dd.CalendarDateTime) FROM #TEMPSTATISTIC STT inner join fw.Dimdate dd on STT.DateID = dd.DateID INNER JOIN [mr].[BudgetReallocation] b on b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and b.FiscalYearID = dd.FiscalYear INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID and ba.FiscalMonthID = dd.CalendarMonth where b.BudgetReallocationGUID = @BudgetReallocationGUID and ba.UnitTypeID = 145 and b.Archived = 0 and STT.TimeClassID = 2 and ba.Change <> 0 INSERT INTO #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) SELECT b.SourceDepartmentID as DepartmentID, b.SourceAccountID as AccountID, pp.PayPeriodID as PayPeriodID, dd.DateID as DateID, 2 as TimeClassID, SUM(NewSourceValue/dbo.GetDaysInMonth(dd.CalendarDateTime)) as Value --------------------------- FROM [mr].[BudgetReallocation] b INNER JOIN [mr].[BudgetReallocationAdjustment] ba on b.BudgetReallocationGUID=ba.BudgetReallocationGUID INNER JOIN [fw].[DimDate] dd on dd.FiscalYear = b.FiscalYearID and dd.CalendarMonth = ba.FiscalMonthID INNER JOIN [fw].[DimDepartment] dep on b.SourceDepartmentID = dep.DepartmentID INNER JOIN [fw].[DimPayPeriod] pp on pp.PayCycleID = dep.PayCycleID and dd.CalendarDateTime between pp.PeriodStartCalendarDate and pp.PeriodEndCalendarDate INNER JOIN #DailyCalcPeriodsScope dcp on dcp.PayPeriodID = pp.PayPeriodID LEFT JOIN #TEMPSTATISTIC stt ON b.SourceDepartmentID = stt.DepartmentID and b.SourceAccountID = stt.AccountID and stt.TimeClassID = 2 and stt.DateID = dd.DateID where ba.Change <> 0 and stt.DepartmentID is null and ba.UnitTypeID = 145 and b.BudgetReallocationGUID = @BudgetReallocationGUID and b.Archived = 0 GROUP BY b.SourceDepartmentID, b.SourceAccountID, pp.PayPeriodID, dd.DateID END set @iteration = @iteration +1 FETCH NEXT FROM BRA_cursor INTO @BudgetReallocationGUID,@date,@BudgetReallocationType END CLOSE BRA_cursor; DEALLOCATE BRA_cursor; --calculate baseline target declare @targetType int = (select Value from pi.SystemSetting where Name = 'Target Basis') if (@targetType = 2) begin --baseline target is based on budget, pull from monthly data insert into #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select DepartmentID, AccountID, PayPeriodID, DateID, 20, Units from #TEMPSTATISTIC where TimeClassID = 2 end else if(@targetType = 10) begin --baseline target is based on rolling period average, pull from pay period data with groupedBaselineTargetStats as( select STAT.DepartmentID, STAT.AccountID, STAT.PayPeriodID, DT.DateID, STAT.TimeClassID, SUM(STAT.Units) AS Units from fw.FactStatisticSampledPayPeriod STAT inner join [fw].[DimPayPeriod] PP on PP.PayPeriodID = STAT.PayPeriodID inner join [fw].[DimDate] DT on DT.CalendarDateTime between PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate inner join [fw].[DimDepartment] D on D.DepartmentID = STAT.DepartmentID inner join #DailyCalcPeriodsScope DCPS on DCPS.PayPeriodID = PP.PayPeriodID left join #FDPSD FDPSD ON FDPSD.DepartmentID = STAT.DepartmentID left join #departmentsBudgetAllocations dba on dba.val = d.DepartmentID where STAT.PayPeriodID != 0 and STAT.IsDeleted = 0 and (D.IsPR = 1 or FDPSD.DepartmentID is not null or dba.val is not null) and stat.TimeClassID = 20 and stat.DepartmentID != 0 group by STAT.DepartmentID, STAT.AccountID, STAT.PayPeriodID, DT.DateID, STAT.TimeClassID ) insert into #TEMPSTATISTIC (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select DepartmentID, AccountID, G.PayPeriodID, DateID, TimeClassID, Units / PP.PeriodDays from groupedBaselineTargetStats G inner join fw.DimPayPeriod PP on PP.PayPeriodID = G.PayPeriodID end IF OBJECT_ID('tempdb..#departmentsBudgetAllocations') IS NOT NULL DROP TABLE #departmentsBudgetAllocations -- Fill Charge Based Statistics Sampled Keys IF @isPrMetricConfigurationOn = 1 BEGIN IF @FiscalYearID = 0 AND @yesterday_date IS NULL BEGIN TRUNCATE TABLE fw.FactChargeBasedStatisticsDailyKeys END ELSE BEGIN DELETE F FROM fw.FactChargeBasedStatisticsDailyKeys F INNER JOIN #DailyCalcPeriodsScope PP ON PP.PayPeriodID = F.PayPeriodID END INSERT INTO fw.FactChargeBasedStatisticsDailyKeys (DepartmentID, AccountID, PayPeriodID, DateID) SELECT DISTINCT CB.DepartmentID, CB.AccountID, PP.PayPeriodID, CB.DateID FROM fw.FactChargeBasedStatistics CB INNER JOIN fw.DimDate DT ON DT.DateID = CB.DateID INNER JOIN fw.DimDepartment DEPT ON DEPT.DepartmentID = CB.DepartmentID INNER JOIN #DailyCalcPeriodsScope PP ON PP.PayCycleID = DEPT.PayCycleID AND DT.CalendarDateTime BETWEEN PP.PeriodStartCalendarDate and PP.PeriodEndCalendarDate LEFT JOIN int.FactSharedImportDailyStatistics DS ON DS.DepartmentID = CB.DepartmentID AND DS.AccountID = CB.AccountID AND DS.DateID = CB.DateID AND DS.TimeClassID = 1 LEFT JOIN #FDPSD FDPSD on FDPSD.DepartmentID = CB.DepartmentID WHERE CB.IsDeleted = 0 AND CB.DepartmentID != 0 AND PP.PayPeriodID != 0 AND CB.Value != 0 AND DS.RowID IS NULL AND (DEPT.IsPR = 1 OR FDPSD.DepartmentID IS NOT NULL) END IF OBJECT_ID('tempdb..#DailyCalcPeriodsScope') IS NOT NULL DROP TABLE #DailyCalcPeriodsScope IF OBJECT_ID('tempdb..#TEMPFINAL') IS NOT NULL DROP TABLE #TEMPFINAL begin SELECT DepartmentID, AccountID, TimeClassID, SUM(Units) as Units ,DateID, PayPeriodID into #TEMPFINAL FROM ( SELECT stt.DepartmentID,stt.AccountID,DateID,TimeClassID,Units, stt.PayPeriodID from #TEMPSTATISTIC stt UNION ALL SELECT stat.DepartmentID,stat.AccountID, stat.DateID, stat.TimeClassID, 0 as Units, stat.PayPeriodID from #StatisticsDaily stat WHERE stat.Units != 0 ) SubSelect GROUP BY DepartmentID,AccountID,TimeClassID, DateID, PayPeriodID end --push to fact table insert into fw.FactStatisticSampledDaily (DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, Units) select DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID, SUM(Units) from #TEMPFINAL temp WHERE TimeClassID IS NOT NULL group by DepartmentID, AccountID, PayPeriodID, DateID, TimeClassID delete from fw.FactStatisticSampledDaily where TimeClassID = 1 and Units = 0 IF OBJECT_ID('tempdb..#TEMPSTATISTIC') IS NOT NULL DROP TABLE #TEMPSTATISTIC IF OBJECT_ID('tempdb..#StatisticsDaily') IS NOT NULL DROP TABLE #StatisticsDaily IF OBJECT_ID('tempdb..#TEMPFINAL') IS NOT NULL DROP TABLE #TEMPFINAL GO --------------------------------------------- -- fw.procStatisticSampledInsertMonthly /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-09-03 MS B-02863 Removing the parameter from the YTD proc call ** 2 2014-09-24 MS B-02191 Removing the IsStat=1 filter so that Units loaded on GL accounts shared with Dollars can be pulled in ** 3 2014-10-15 GF B-02951 Rollback CID 1 for backwards compatibility ** 4 2014-10-15 GF B-02951 Re-apply CID 1 only if latest data model for MR ** 5 2016-08-09 AK B-12405 Added merge with FactChargeBasedStatisticsByPostDate ** 6 2016-09-07 MH B-12791 Updated FactChargeBasedStatisticsByPostDate table name to FactChargeBasedStatisticsMonthly ** 7 2016-09-22 AK B-11845 Added procFactStatisticSampledBaselineTargetUpdate ** 8 2016-10-11 MH TK-33892 Fixed merge statement ** 9 2016-12-13 NL B-13759 Added fiscalYearID param and filtering ** 10 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 11 2017-03-06 GF B-14693 Added baseline target year filter ** 12 2017-05-24 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactStatisticSampledMonthly. ** 13 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 14 2017-07-19 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 15 2017-27-26 IP B-16752 Added units Budget Adjustment ** 16 2017-08-02 IP D-06232 Fixed generated stats for MR (include charge-based statistics) ** 17 2017-08-29 ip B-16798 Add using of Budget Adjustment. ** 18 2017-08-29 ip D-06508 Preventing appearing duplicate rows in staging table *************************************************************/ CREATE proc [fw].[procStatisticSampledInsertMonthly] @fiscalYearID smallint = 0 as IF OBJECT_ID('tempdb..#StatisticSampledMonthlyStaging') IS NOT NULL DROP TABLE ##StatisticSampledMonthlyStaging IF OBJECT_ID('fw.StatisticSampledMonthlyStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSampledMonthlyStagingWithCalcs --run custom scripts exec client.procStatisticSampledInsertMonthlyPreprocess --push new data to fact table: statistics CREATE TABLE #StatisticSampledMonthlyStaging (RowID bigint identity(1,1),AccountID int, DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(19,4), isDeleted bit, isSystemGenerated bit) insert into #StatisticSampledMonthlyStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) exec fw.PrepareStatistics @FiscalYearID,0 --push new data to fact table: charge-based statistics merge #StatisticSampledMonthlyStaging as fact using (select DepartmentID, AccountID, FiscalYearID, FiscalMonthID, Value from fw.FactChargeBasedStatisticsMonthly where IsDeleted = 0 and Value != 0 and (FiscalYearID = @fiscalYearID OR @fiscalYearID = 0)) as source -- CID 9, added fiscalYearID filter on fact.DepartmentID = source.DepartmentID and fact.AccountID = source.AccountID and fact.FiscalYearID = source.FiscalYearID and fact.FiscalMonthID = source.FiscalMonthID and fact.TimeClassID = 1 and (fact.FiscalYearID = @fiscalYearID OR @fiscalYearID = 0) -- CID 9, added fiscalYearID filter when not matched then insert (FiscalYearID, FiscalMonthID, DepartmentID, AccountID, TimeClassID, Amount) values (source.FiscalYearID, source.FiscalMonthID, source.DepartmentID, source.AccountID, 1, source.Value); --run calculations exec fw.procFactMonthlyMergeDuplicates '#StatisticSampledMonthlyStaging', 'AccountID', 'Amount', @fiscalYearID, 0, 0 exec fw.procFactStatisticSampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactStatisticSampledMonthly','#StatisticSampledMonthlyStaging', 'AccountID', 'Amount', @fiscalYearID, 0, 0 IF @fiscalYearID = 0 BEGIN truncate table fw.FactStatisticSampledMonthly INSERT INTO fw.FactStatisticSampledMonthly With (TABLOCKX) ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount=SUM(Amount), AmountYTD=SUM(AmountYTD), AmountPriorYear=SUM(AmountPriorYear), AmountPriorYTD=SUM(AmountPriorYTD), 0 as isDeleted, isSystemGenerated=min(isnull(isSystemGenerated,0)) FROM fw.StatisticSampledMonthlyStagingWithCalcs GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.StatisticSampledMonthlyStagingWithCalcs (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) ;With src as ( SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount=SUM(Amount), AmountYTD=SUM(AmountYTD), AmountPriorYear=SUM(AmountPriorYear), AmountPriorYTD=SUM(AmountPriorYTD), isSystemGenerated=min(isSystemGenerated), FTEs=SUM(FTEs), FTEsYTD=SUM(FTEsYTD), FTEsPriorYear=SUM(FTEsPriorYear), FTEsPriorYTD=SUM(FTEsPriorYTD) FROM fw.StatisticSampledMonthlyStagingWithCalcs GROUP BY DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID ) MERGE fw.FactStatisticSampledMonthly With (TABLOCKX) AS target USING src AS source ON source.DepartmentID = target.DepartmentID AND source.AccountID = target.AccountID AND source.FiscalYearID = target.FiscalYearID AND source.FiscalMonthID = target.FiscalMonthID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND (target.Amount <> source.Amount or target.AmountYTD <> source.AmountYTD or target.AmountPriorYear <> source.AmountPriorYear or target.AmountPriorYTD <> source.AmountPriorYTD or target.IsSystemGenerated <> source.IsSystemGenerated) THEN UPDATE SET target.Amount = source.Amount, target.AmountYTD = source.AmountYTD, target.AmountPriorYear = source.AmountPriorYear, target.AmountPriorYTD = source.AmountPriorYTD, target.IsSystemGenerated = source.IsSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.AccountID, source.FiscalYearID, source.FiscalMonthID, source.TimeClassID, source.Amount, source.AmountYTD, source.AmountPriorYear, source.AmountPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE AND Target.FiscalYearID = @fiscalYearID THEN DELETE; END IF OBJECT_ID('tempdb..##StatisticSampledMonthlyStaging') IS NOT NULL DROP TABLE ##StatisticSampledMonthlyStaging IF OBJECT_ID('fw.StatisticSampledMonthlyStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSampledMonthlyStagingWithCalcs GO --------------------------------------------- -- fw.procStatisticSampledInsertPayPeriod /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2013-10-03 RA Changing source table to be [int].[FactStatisticsbyPayPeriod] ** and removing unnecessary lines ** 2 2014-08-20 JG Adding year filters for performance ** 3 2014-09-03 MS B-02863 Removing the parameter from the YTD proc call ** 4 2015-02-11 JG Adding Daily statistics ** 5 2016-01-22 MS D-03856 Calculate PayPeriodID in Daily section ** 6 2016-01-22 MS B-11082 Pull in Charge-based and Aggregated daily statistics and exclude GL statistics for these departments ** 7 2016-03-23 MS B-11274 Exclude list of departments in charge-based mapping table when AccountID=0 and Weight=0 ** 8 2016-04-28 AK B-11864 Added IsPR check ** 9 2016-07-11 GF B-12396 Handle stats that exist in multiple data sources (dupe handling) ** 10 2016-10-04 MH B-13126 Added procFactStatisticSampledPayPeriodBaselineTargetUpdate ** 11 2016-12-13 MH B-13783 Reversed actuals sampling order ** 12 2017-01-31 AK B-13926 Added department filter ** 13 2017-02-08 GF B-14308 Added year filter ** 14 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling ** 15 2017-05-01 GF B-15551 Include non-PR driver departments in sampling ** 16 2017-05-02 GF B-15551 Remove primary statistics join so that all statistics are sampled ** 17 2017-05-29 ipetriv B-15994 Refactored sampling process and implemented using of staging tables ** 18 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 19 2017-07-19 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 20 2017-27-26 IP B-16752 Added units Budget Adjustment ** 21 2017-08-29 ip B-16798 Add using of Budget Adjustment. ** 22 2017-10-04 GF D-06489 Fix pay period select when running all years ** 23 2017-10-04 IP D-06489 Fix departments scope for cases when procedure run for one department (but adjustments could require more) ** 24 2018-02-22 IP D-06786 add department calculation for TC = 2 if dept is not in PR , Dept is in Budget Allocation ** 25 2018-05-17 IP D-07329 Returning fuctionality to include stats for departments using non-PR driver departments ** 26 2019-04-19 OV B-20579 Filtered by new column 'TimeClassID' from int.FactSharedImportDailyStatistics ** 27 2020-03-20 vfay D-08997 [fw].[PrepareStatisticsPayPeriod] is reporting incorrect adjustment amounts ** 28 2020-07-30 HV JAZZ-2302 YTD PR Calculations Incorrect when Processing Current Year Only ** 29 2020-11-26 KF JAZZ-7886 Stored procedure fw.procStatisticSampledInsertPayPeriod is timing out ** 30 2023-04-11 HV JAZZ-52032 Create and fill caching table for charge-based statistics pay period data ** 31 2023-12-04 ishah JAZZ-62485 Remove @departmentIDs param for procFactPayPeriodYTDPriorYearUpdate_Staging *************************************************************/ CREATE proc [fw].[procStatisticSampledInsertPayPeriod] @fiscalYearID int = 0, @isPrMetricConfigurationOn BIT = 0 with recompile as IF OBJECT_ID('fw.StatisticSampledPayPeriodWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSampledPayPeriodWithCalcs IF OBJECT_ID('tempdb..#StatisticSampledPayPeriod') IS NOT NULL DROP TABLE #StatisticSampledPayPeriod create table #StatisticSampledPayPeriod (DepartmentID int, AccountID int, PayPeriodID int, TimeClassID int, Units decimal(18, 6), isDeleted bit default 0, isSystemGenerated bit default 0) create clustered columnstore index cci on #StatisticSampledPayPeriod insert into #StatisticSampledPayPeriod (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) exec fw.PrepareStatisticsPayPeriod @FiscalYearID,null,0,@isPrMetricConfigurationOn -- Adding Adjustments! --run calculations exec fw.procFactPayPeriodMergeDuplicates '#StatisticSampledPayPeriod', 'AccountID', 'Units', @fiscalYearID, 0, 0, null exec fw.procFactStatisticSampledPayPeriodBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactPayPeriodYTDPriorYearUpdate_Staging 'fw.FactStatisticSampledPayPeriod','#StatisticSampledPayPeriod','AccountID', 'Units', @fiscalYearID, 0, 0 --Commented out due to D-07329 /* --!!!Removing all records where Department is not PR delete fact from fw.StatisticSampledPayPeriodWithCalcs fact inner join fw.dimDepartment d on d.DepartmentID = fact.DepartmentID and d.isPR = 0 */ IF @fiscalYearID = 0 BEGIN truncate table fw.FactStatisticSampledPayPeriod INSERT INTO fw.FactStatisticSampledPayPeriod With (TABLOCKX) ( DepartmentID, AccountID, PayPeriodID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, IsDeleted, IsSystemGenerated ) SELECT DepartmentID, AccountID, PayPeriodID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, 0 as IsDeleted, isnull(IsSystemGenerated,0) as IsSystemGenerated FROM fw.StatisticSampledPayPeriodWithCalcs END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.StatisticSampledPayPeriodWithCalcs (DepartmentID, AccountID, PayPeriodID, TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) ;WITH TGT AS (SELECT t.* FROM fw.FactStatisticSampledPayPeriod t With (TABLOCKX) inner join fw.DimPayPeriod pp on t.PayPeriodId = pp.PayPeriodID and (@fiscalYearID = 0 or pp.FiscalYearIDSecond = @fiscalYearID) and TimeclassID in (1,2,20) ) MERGE TGT AS target USING fw.StatisticSampledPayPeriodWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.AccountID = target.AccountID AND source.PayPeriodID= target.PayPeriodID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND (target.Units <> source.Units or target.UnitsYTD <> source.UnitsYTD or target.UnitsPriorYear <> source.UnitsPriorYear or target.UnitsPriorYTD <> source.UnitsPriorYTD or target.IsSystemGenerated <> source.IsSystemGenerated) THEN UPDATE SET target.Units = source.Units, target.UnitsYTD = source.UnitsYTD, target.UnitsPriorYear = source.UnitsPriorYear, target.UnitsPriorYTD = source.UnitsPriorYTD, target.IsSystemGenerated = source.IsSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, AccountID, PayPeriodID, TimeClassID, Units, UnitsYTD, UnitsPriorYear, UnitsPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.AccountID, source.PayPeriodID, source.TimeClassID, source.Units, source.UnitsYTD, source.UnitsPriorYear, source.UnitsPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE THEN DELETE; END IF OBJECT_ID('fw.StatisticSampledPayPeriodWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSampledPayPeriodWithCalcs IF OBJECT_ID('tempdb..#StatisticSampledPayPeriod') IS NOT NULL DROP TABLE #StatisticSampledPayPeriod GO --------------------------------------------- -- fw.procStatisticSecondarySampledAdjustedTargetMonthlyInsert CREATE PROCEDURE [fw].[procStatisticSecondarySampledAdjustedTargetMonthlyInsert] (@FiscalYearID int = 0) AS BEGIN /* Proposal If the client is not using flexing, this will be the target plus the efficiency factor This should work regardless of the target basis (i.e. rolling avg or budget) The factor will be applied after the inversion If the factor type is percentage, the adjusted target will be the target*(1+factor) i.e. if my target is 100 and my factor is 5%, the adjusted target will be 100*(1+0.05)=105 i.e. if my target is 100 and my factor is -5%, the adjusted target will be 100*(1+-0.05)=95 If the factor type is value, the adjusted value will be target + factor i.e. if my target is 1000 and my factor is 200, the adjusted target will be will be 1000+200=1200 i.e. if my target is 1000 and my factor is -200, the adjusted target will be 1000-200=800 If there is more than one factor impacting a department and account or job code/pay code group combination, then the factors should layer on top of each other based on history order If an efficiency factor does not exist for a particular account/job code, then the value in the new time class will be either flex or baseline target if flex is not used This will happen after Flex is calculated Include integration tests */ /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-08-23 BC JAZZ-11498 Change Table Variable to Temporary Tables ************************************************************ */ DECLARE @IsFlexingEnabled INT = ( SELECT VALUE FROM [mr].[SystemSetting] WHERE NAME = 'Is Target Flexed' ) IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope CREATE TABLE #EfficiencyFactorScope ( EfficiencyFactorGUID [uniqueidentifier] NOT NULL ,[DepartmentID] [int] NOT NULL ,[AccountID] [int] NOT NULL ,[FiscalYearID] [smallint] NOT NULL ,[FiscalMonthID] [tinyint] NOT NULL ,Value NUMERIC(25, 6) NOT NULL ,Type TINYINT ,FactorType CHAR(1) ,DateCreated DATETIME ,UNIQUE CLUSTERED ( FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) ); IF EXISTS (SELECT TOP 1 * FROM [mr].[EfficiencyFactor]) BEGIN WITH EfficiencyFactorScope AS ( SELECT * ,rn = ROW_NUMBER() OVER ( PARTITION BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ORDER BY FiscalYearID ,FiscalMonthID ,DepartmentID ,AccountID ,EfficiencyFactorGUID ) FROM ( SELECT DISTINCT ef.EfficiencyFactorGUID ,ef.FiscalYearID ,efgd.FiscalMonthID ,efd.DepartmentID ,isnull(efgd.AccountID, da.AccountID) AS AccountID ,CASE WHEN isnull(efgd.AccountID, - 999) = da.AccountID THEN 0 ELSE efgd.Value END AS Value ,ef.Type ,ef.FactorType ,ef.DateCreated FROM mr.EfficiencyFactor ef INNER JOIN mr.EfficiencyFactorDepartment efd ON ef.EfficiencyFactorGUID = efd.EfficiencyFactorGUID INNER JOIN mr.EfficiencyFactorGLDetails efgd ON efgd.EfficiencyFactorGUID = ef.EfficiencyFactorGUID LEFT JOIN fw.DimAccount da ON efgd.OBFinancialReportingID = da.OBUnitsFinancialReportingID and efgd.AccountID IS NULL LEFT JOIN mr.EfficiencyFactorGLDetails efgd_exist ON efgd.EfficiencyFactorGUID = efgd_exist.EfficiencyFactorGUID and efgd_exist.AccountID = da.AccountID and efgd_exist.FiscalMonthID = efgd.FiscalMonthID WHERE (@FiscalYearID = ef.FiscalYearID or @FiscalYearID = 0) and (efgd_exist.AccountID is null or da.AccountID is null) AND ef.Type = 1 AND isnull(efgd.AccountID, da.AccountID) IS NOT NULL ) X ) INSERT INTO #EfficiencyFactorScope ( EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated ) SELECT EfficiencyFactorGUID ,[DepartmentID] ,[AccountID] ,[FiscalYearID] ,[FiscalMonthID] ,Value ,Type ,FactorType ,DateCreated FROM EfficiencyFactorScope WHERE RN = 1 DELETE FROM fw.FactStatisticSecondarySampledMonthly WHERE (@FiscalYearID = FiscalYearID or @FiscalYearID = 0) and TimeClassID = 22 INSERT INTO fw.FactStatisticSecondarySampledMonthly (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, IsDeleted, Amount) SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,22 as TimeClassID ,0 as IsDeleted ,SUM(Amount) as Amount FROM ( SELECT isnull(fact.DepartmentID,ToApply.DepartmentID) as DepartmentID ,isnull(fact.AccountID,toApply.AccountID) as AccountID ,isnull(fact.FiscalYearID,toApply.FiscalYearID) as FiscalYearID ,isnull(fact.FiscalMonthID,toApply.FiscalMonthID) as FiscalMonthID ,Amount = CASE WHEN FactorType = 'P' THEN isnull(fact.Amount,0.0) * isnull(Value,0.0) / 100.00 WHEN FactorType = 'V' THEN isnull(Value,0.0) ELSE 0.0 END FROM #EfficiencyFactorScope ToApply INNER JOIN (SELECT distinct DepartmentID,AccountID from fw.FactStatisticSecondarySampledMonthly) GenCand on GenCand.DepartmentID = ToApply.DepartmentID AND GenCand.AccountID = ToApply.AccountID FULL JOIN fw.FactStatisticSecondarySampledMonthly fact ON fact.DepartmentID = ToApply.DepartmentID AND fact.AccountID = ToApply.AccountID AND fact.FiscalYearID = ToApply.FiscalYearID AND fact.FiscalMonthID = ToApply.FiscalMonthID WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) UNION ALL SELECT DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID ,Amount FROM fw.FactStatisticSecondarySampledMonthly fact WHERE ( ( isnull(fact.TimeClassID,0) = 4 AND @IsFlexingEnabled = 1 ) OR ( isnull(fact.TimeClassID,0) = 20 AND @IsFlexingEnabled = 0 ) ) and (fact.FiscalYearID = @FiscalYearID or @FiscalYearID = 0) ) X GROUP BY DepartmentID ,AccountID ,FiscalYearID ,FiscalMonthID exec [fw].[procFactMonthlyYTDPriorYearUpdate] @factTableName = 'fw.FactStatisticSecondarySampledMonthly',@keyNameCSV = 'AccountID',@measureNameCSV = 'Amount',@fiscalYearID = 0,@timeClassID = 22,@isDebugOnly = 0 END END IF OBJECT_ID('tempdb..#EfficiencyFactorScope') IS NOT NULL DROP TABLE #EfficiencyFactorScope GO --------------------------------------------- -- fw.procStatisticSecondarySampledInsertMonthly /************************************************************* ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2014-09-03 MS B-02863 Removing the parameter from the YTD proc call ** 2 2016-09-22 AK B-11845 Added procFactStatisticSecondarySampledBaselineTargetUpdate ** 3 2016-12-13 NL B-13759 Adding fiscalYearID param and filtering ** 4 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling + general cleanup ** 5 2017-03-07 GF B-14693 Added baseline target year filter ** 6 2017-05-24 IP B-15086 Sampling Performance Improvements. Using temp tables insead of fw.FactPayrollSampledMonthlyDetailed. ** 7 2017-06-15 IP B-15086 Modify SP to use unique temp table ** 8 2017-07-19 IP TK-45395 Fixed conditions of merge statement (include isSystemGenerated column) ** 9 2017-27-26 ipetriv B-16752 Added units Budget Adjustment ** 10 2017-08-29 ip B-16798 Add using of Budget Adjustment. *************************************************************/ CREATE proc [fw].[procStatisticSecondarySampledInsertMonthly] @fiscalYearID smallint = 0 as IF OBJECT_ID('tempdb..#StatisticSecondarySampledMonthlyStaging') IS NOT NULL DROP TABLE #StatisticSecondarySampledMonthlyStaging IF OBJECT_ID('fw.StatisticSecondarySampledMonthlyStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSecondarySampledMonthlyStagingWithCalcs CREATE TABLE #StatisticSecondarySampledMonthlyStaging (RowID bigint identity(1,1),AccountID int, DepartmentID int, FiscalYearID int, FiscalMonthID int, TimeClassID int, Amount decimal(19,4), isDeleted bit, isSystemGenerated bit) --push new data to fact table insert into #StatisticSecondarySampledMonthlyStaging (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount) exec fw.PrepareStatistics @fiscalYearID,@StatisticType = 2 --run calculations exec fw.procFactMonthlyMergeDuplicates '#StatisticSecondarySampledMonthlyStaging', 'AccountID', 'Amount', @fiscalYearID, 0, 0 exec fw.procFactStatisticSecondarySampledBaselineTargetUpdate @fiscalYearID = @fiscalYearID exec fw.procFactMonthlyYTDPriorYearUpdateStaging 'fw.FactStatisticSecondarySampledMonthly','#StatisticSecondarySampledMonthlyStaging','AccountID', 'Amount', @fiscalYearID, 0, 0 IF @fiscalYearID = 0 BEGIN truncate table fw.FactStatisticSecondarySampledMonthly INSERT INTO fw.FactStatisticSecondarySampledMonthly With (TABLOCKX) ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) SELECT DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, 0 as IsDeleted, isnull(IsSystemGenerated,0) as IsSystemGenerated FROM fw.StatisticSecondarySampledMonthlyStagingWithCalcs END ELSE BEGIN print 'Starting creating index --- '+convert(varchar(20),GETDATE(),113) CREATE CLUSTERED INDEX IDX_TempPayrollWithCalcs on fw.StatisticSecondarySampledMonthlyStagingWithCalcs (DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID) print 'Starting transaction --- '+convert(varchar(20),GETDATE(),113) MERGE fw.FactStatisticSecondarySampledMonthly With (TABLOCKX) AS target USING fw.StatisticSecondarySampledMonthlyStagingWithCalcs AS source ON source.DepartmentID = target.DepartmentID AND source.AccountID = target.AccountID AND source.FiscalYearID = target.FiscalYearID AND source.FiscalMonthID = target.FiscalMonthID AND source.TimeClassID = target.TimeClassID WHEN MATCHED AND (target.Amount <> source.Amount or target.AmountYTD <> source.AmountYTD or target.AmountPriorYear <> source.AmountPriorYear or target.AmountPriorYTD <> source.AmountPriorYTD or target.IsSystemGenerated <> source.IsSystemGenerated) THEN UPDATE SET target.Amount = source.Amount, target.AmountYTD = source.AmountYTD, target.AmountPriorYear = source.AmountPriorYear, target.AmountPriorYTD = source.AmountPriorYTD, target.IsSystemGenerated = source.IsSystemGenerated WHEN NOT MATCHED BY TARGET THEN INSERT ( DepartmentID, AccountID, FiscalYearID, FiscalMonthID, TimeClassID, Amount, AmountYTD, AmountPriorYear, AmountPriorYTD, IsDeleted, IsSystemGenerated ) VALUES ( source.DepartmentID, source.AccountID, source.FiscalYearID, source.FiscalMonthID, source.TimeClassID, source.Amount, source.AmountYTD, source.AmountPriorYear, source.AmountPriorYTD, 0, isnull(IsSystemGenerated,0) ) WHEN NOT MATCHED BY SOURCE AND Target.FiscalYearID = @fiscalYearID THEN DELETE; END IF OBJECT_ID('tempdb..#StatisticSecondarySampledMonthlyStaging') IS NOT NULL DROP TABLE #StatisticSecondarySampledMonthlyStaging IF OBJECT_ID('fw.StatisticSecondarySampledMonthlyStagingWithCalcs') IS NOT NULL DROP TABLE fw.StatisticSecondarySampledMonthlyStagingWithCalcs GO --------------------------------------------- -- fw.procStatisticSecondarySampledInsertPayPeriod /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2016-04-28 AK B-11864 Added IsPR check ** 2 2017-01-31 AK B-13926 Added department filter ** 3 2017-02-08 GF B-14308 Added year filter ** 4 2017-02-20 GF D-05545 Move duplicate record handling from YTD into sampling ** 5 2017-10-04 GF D-06489 Fix pay period select when running all years *************************************************************/ CREATE proc [fw].[procStatisticSecondarySampledInsertPayPeriod] @isCalculatedYearMonth as bit = 1, @departmentIDs nvarchar(max) = null, @fiscalYearID int = 0 with recompile as declare @departments table(val int primary key) insert into @departments select val from ConvertCSValuesToTable(@departmentIDs, ',') declare @payperiods table(val smallint primary key) insert into @payperiods select PayPeriodID from fw.DimPayPeriod where FiscalYearIDSecond = @fiscalYearID or @fiscalYearID = 0 if @isCalculatedYearMonth = 1 begin --delete existing data if (@departmentIDs is null and @fiscalYearID = 0) begin truncate table fw.FactStatisticSecondarySampledbyPayPeriod end else begin while exists(select null from fw.FactStatisticSecondarySampledbyPayPeriod (nolock) where (@departmentIDs is null or DepartmentID in(select val from @departments)) and (@fiscalYearID = 0 or PayPeriodID in(select val from @payperiods))) begin delete top (10000) from fw.FactStatisticSecondarySampledbyPayPeriod where (@departmentIDs is null or DepartmentID in(select val from @departments)) and (@fiscalYearID = 0 or PayPeriodID in(select val from @payperiods)) end end --sample rows with a valid pay period code, spreading across months insert into [fw].[FactStatisticSecondarySampledbyPayPeriod] (DepartmentID, AccountID, PayPeriodID, TimeClassID, Units) select STAT.DepartmentID, STAT.AccountID, STAT.PayPeriodID, STAT.TimeClassID, SUM(STAT.Value) AS Units from [int].[FactStatisticsbyPayPeriod] STAT inner join fw.DimAccount A on A.Accountid = STAT.Accountid inner join fw.DimDepartment D on D.Departmentid = STAT.Departmentid inner join [fw].[viewStatisticSecondaryConfiguration] V on V.AccountID=stat.AccountID and V.DepartmentID=stat.DepartmentID where STAT.Value != 0 and STAT.Isdeleted = 0 and STAT.PayPeriodID != 0 and A.IsStat=1 and D.IsPR = 1 and (@departmentIDs is null or STAT.DepartmentID in (select val from @departments)) and (@fiscalYearID = 0 or STAT.PayPeriodID in(select val from @payperiods)) group by STAT.DepartmentID, STAT.AccountID, STAT.PayPeriodID, STAT.TimeClassID end else begin print 'NOT SUPPORTED YET' end --run calculations exec fw.procFactPayPeriodMergeDuplicates 'fw.FactStatisticSecondarySampledbyPayPeriod', 'AccountID', 'Units', @fiscalYearID, 0, 0, @departmentIDs exec fw.procFactPayPeriodYTDPriorYearUpdate 'fw.FactStatisticSecondarySampledbyPayPeriod', 'AccountID', 'Units', @fiscalYearID, 0, 0, @departmentIDs GO --------------------------------------------- -- fw.procTemplatePublishRequest_Insert /************************************************************************************************************************ ** Author: cbecker ** Create Date: 2016-01-14 ** Description: Inserts template publish request and removes duplicates requests ** Last Modified: 2016-01-14 ** GM Release: 2016.1.3 ************************************************************************************************************************** ** Change History ************************************************************************************************************************** ** CID Date Author WI Description ** 01 2016-03-15 cbb n/a Delete duplicate publish requests ** 02 2017-04-24 gjf n/a Trigger profile rebuilds on publish ** 03 2019-03-18 gjf B-22412 Option to include template file *************************************************************************************************************************/ CREATE proc [fw].[procTemplatePublishRequest_Insert] @frameworkID nvarchar(16)=0, @includeTemplates bit=0, @IsDebugOnly bit=0 as begin -------------------------------------------------------------------------------------------------- -- Logging -------------------------------------------------------------------------------------------------- declare @logdesc nvarchar(100) select @logdesc = case @IsDebugOnly when 1 then 'Debug only - Insert template publish request for ' else 'Insert template publish request for ' end +fw.Name from [fw].[DimFramework] fw where FrameworkID=@frameworkID declare @higuid uniqueidentifier exec procLogScript @logdesc, @higuid output print N'select * from [dbo].[HistoryItem] where HISTORYITEMGUID=''' +cast(@higuid as varchar(36)) +N'''' -------------------------------------------------------------------------------------------------- -- Set @sql string for inserting template publish request -------------------------------------------------------------------------------------------------- declare @RequestGUID nvarchar(36) = newid() declare @IssuedAt nvarchar(36) = getdate() declare @sql nvarchar(max) = ' --Remove duplicate template publish requests with duplicates as ( select RequestGUID, FrameworkID, Num = row_number() over (PARTITION BY FrameworkID order by IssuedAt) from [dbo].[TemplatePublishRequest] ) delete from duplicates where Num>1 --Insert template publish request if not exists ( select 1 from [dbo].[TemplatePublishRequest] where FrameworkID=' + @frameworkID + ' ) begin insert into [dbo].[TemplatePublishRequest] ([RequestGUID], [IssuedAt], [FrameworkID]) values (''' + @RequestGUID + ''', ''' + @IssuedAt + ''', ' + @frameworkID +') end ' -------------------------------------------------------------------------------------------------- -- Ensure that OB publishes do a full rebuild on expansion profiles -------------------------------------------------------------------------------------------------- if (@frameworkID = 2) begin set @sql = @sql + ' --Ensure that OB publishes do a full rebuild on expansion profiles update ob.SystemSetting set Value = ''1'' where Name = ''Template Publish Create Profiles''; ' end -------------------------------------------------------------------------------------------------- -- Optionally include template files -------------------------------------------------------------------------------------------------- if (@includeTemplates = 1) begin set @sql = @sql + ' --Include template files insert into TemplatePublishRequestData (RequestGUID, ModelTemplateGUID, LastModified, Data) select ''' + @RequestGUID + ''', mt.ModelTemplateGUID, getdate(), dp.Data from EMFModelTemplate mt inner join DataPathFile_ModelTemplate dp on dp.FileName = cast(mt.ModelTemplateGUID as nvarchar(36)) + ''.xlsx.TAWithMappingFormulas'' where ' + @frameworkID + ' = (case when mt.Name like ''CAP %'' then 1 when mt.Name like ''OB %'' then 2 when mt.Name like ''SP %'' then 4 else 0 end) and mt.ModelTemplateGUID not in(select ChildModelTemplateGUID from MEScoreExpansionProfile) ' end -------------------------------------------------------------------------------------------------- -- Print or execute @sql -------------------------------------------------------------------------------------------------- if @IsDebugOnly=1 begin print(@sql) end else begin exec(@sql) end end GO --------------------------------------------- -- fw.procTransferStaffingToStaffingByPayPeriodCurrentYear /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-08-07 VO B-20238 Added condition where TimeClassID = 2 ** 2 2020-01-27 IH TK-82801 Increase a deletion size from 10K to 100K ** 3 2020-10-02 HV JAZZ-1487 MR "Transfer Budget Data" filtering on currently year, not transferring correctly to first/last pay periods ** 4 2022-12-12 BK JAZZ-47041 MR "Transfer Budget Data" increase temp table column size to prevent failing when int.FactStaffing EmployeeCode is longer than 50 characters ** 5 2024-06-14 SM JAZZ-71536 change JobCodeID from smallint to int ** 6 2024-09-13 SF JAZZ-72743 PayCode from varchar(50) to varchar(100) - Extend Field String Limit for Pay Code for Kaiser EPMS *************************************************************/ -- !!! If you modifying this proc, check [int].[procTransferStaffingToStaffingByPayPeriodFiscalYear] for updates !!! CREATE proc [fw].[procTransferStaffingToStaffingByPayPeriodCurrentYear] as /******** Variable Declaration **********/ declare @TransactionID int = 1 DECLARE @FiscalYearId INT = ( SELECT setting FROM dbsetting WHERE NAME = 'Current_GL_YearID' ) /******** Build Rows to Insert **********/ CREATE TABLE #TEMPSTAFFINGPAYPERIOD ( [DepartmentID] [int] NOT NULL, [DepartmentCode] [varchar](50) NOT NULL, [JobCodeID] [int] NOT NULL, [JobCode] [varchar](50) NOT NULL, [PayCodeID] [smallint] NOT NULL, [PayCode] [varchar](100) NOT NULL, [FiscalYearID] [smallint] NOT NULL, [FiscalYearCode] [varchar](20) NOT NULL, [TimeClassID] [tinyint] NOT NULL, [TimeClassCode] [varchar](20) NOT NULL, [UnitTypeID] [smallint] NOT NULL, [UnitType] [varchar](20) NOT NULL, [PayPeriodID] [smallint] NOT NULL, [PayPeriodCode] [varchar](20) NOT NULL, [Value] [decimal](19, 4) NOT NULL, [EmployeeID] [int] NOT NULL, [Employeecode] [varchar](2000) NOT NULL, [TransactionID] [int] NULL ) insert into #TEMPSTAFFINGPAYPERIOD ([DepartmentID], [DepartmentCode], [JobCodeID], [JobCode], [PayCodeID], [PayCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [UnitTypeID], [UnitType], [PayPeriodID], [PayPeriodCode], [Value], [EmployeeID], [Employeecode], [TransactionID]) select fact.[DepartmentID], fact.[DepartmentCode], fact.[JobCodeID], fact.[JobCode], fact.[PayCodeID], fact.[PayCode], PP.[FiscalYearIDSecond], PP.[FiscalYearIDSecond], fact.[TimeClassID], fact.[TimeClassCode], fact.[UnitTypeID], fact.[UnitType], pp.[PayPeriodID], pp.[PayPeriodCode], SUM(cast(fact.value * PP.PeriodWeightStart as money)) AS Value, fact.[EmployeeID], fact.[Employeecode], 1 as TransactionID from [int].[FactStaffing] fact inner join [fw].[DimDepartment] D on fact.DepartmentID=D.DepartmentID inner join [fw].[DimPayPeriod] PP on fact.FiscalMonthID = PP.FiscalMonthIDStart and fact.FiscalYearID = PP.FiscalYearIDStart and PP.PayCycleID=D.PayCycleID where fact.value != 0 and fact.TimeclassID = 2 and PP.PeriodDaysStart > 0 and fact.IsDeleted = 0 --============= BEGIN CID 2 ================= and fact.TransactionID<>@TransactionID --============= END CID 2 =================== and PP.FiscalYearIDSecond = @FiscalYearId GROUP BY fact.[DepartmentID], fact.[DepartmentCode], fact.[JobCodeID], fact.[JobCode], fact.[PayCodeID], fact.[PayCode], PP.[FiscalYearIDSecond], fact.[TimeClassID], fact.[TimeClassCode], fact.[UnitTypeID], fact.[UnitType], fact.[EmployeeID], fact.[Employeecode], pp.[PayPeriodID], pp.[PayPeriodCode] insert into #TEMPSTAFFINGPAYPERIOD ([DepartmentID], [DepartmentCode], [JobCodeID], [JobCode], [PayCodeID], [PayCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [UnitTypeID], [UnitType], [PayPeriodID], [PayPeriodCode], [Value], [EmployeeID], [Employeecode], [TransactionID]) select fact.[DepartmentID], fact.[DepartmentCode], fact.[JobCodeID], fact.[JobCode], fact.[PayCodeID], fact.[PayCode], fact.[FiscalYearID], fact.[FiscalYearCode], fact.[TimeClassID], fact.[TimeClassCode], fact.[UnitTypeID], fact.[UnitType], pp.[PayPeriodID], pp.[PayPeriodCode], SUM(cast(fact.value * PP.PeriodWeightSecond as money)) AS Value, fact.[EmployeeID], fact.[Employeecode], 1 as TransactionID from [int].[FactStaffing] fact inner join [fw].[DimDepartment] D on fact.DepartmentID=D.DepartmentID inner join [fw].[DimPayPeriod] PP on fact.FiscalMonthID = PP.FiscalMonthIDSecond and fact.FiscalYearID = PP.FiscalYearIDSecond and PP.PayCycleID=D.PayCycleID where fact.value != 0 and fact.TimeclassID = 2 and PP.PeriodDaysSecond > 0 and fact.IsDeleted = 0 --============= BEGIN CID 2 ================= and fact.TransactionID<>@TransactionID --============= END CID 2 =================== and PP.FiscalYearIDSecond = @FiscalYearId GROUP BY fact.[DepartmentID], fact.[DepartmentCode], fact.[JobCodeID], fact.[JobCode], fact.[PayCodeID], fact.[PayCode], fact.[FiscalYearID], fact.[FiscalYearCode], fact.[TimeClassID], fact.[TimeClassCode], fact.[UnitTypeID], fact.[UnitType], fact.[EmployeeID], fact.[Employeecode], pp.[PayPeriodID], pp.[PayPeriodCode] /******** Delete previous transfered data **********/ --============= BEGIN CID 3 ================= while exists (select null from [int].[FactStaffingByPayPeriod] where TransactionID=@TransactionID and FiscalYearID = @FiscalYearId and TimeClassID = 2) delete top (100000) from [int].[FactStaffingByPayPeriod] where TransactionID=@TransactionID and FiscalYearID = @FiscalYearId and TimeClassID = 2 --============= END CID 3 =================== /******** Insert into destination table *************/ insert into [int].[FactStaffingByPayPeriod] ([DepartmentID], [DepartmentCode], [JobCodeID], [JobCode], [PayCodeID], [PayCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [UnitTypeID], [UnitType], [PayPeriodID], [PayPeriodCode], [Value], [EmployeeID], [Employeecode], [TransactionID]) select [DepartmentID], [DepartmentCode], [JobCodeID], [JobCode], [PayCodeID], [PayCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [UnitTypeID], [UnitType], [PayPeriodID], [PayPeriodCode], SUM([Value]) AS VALUE, [EmployeeID], [Employeecode], 1 as TransactionID from #TEMPSTAFFINGPAYPERIOD group by [DepartmentID], [DepartmentCode], [JobCodeID], [JobCode], [PayCodeID], [PayCode], [FiscalYearID], [FiscalYearCode], [TimeClassID], [TimeClassCode], [UnitTypeID], [UnitType], [PayPeriodID], [PayPeriodCode], [EmployeeID], [Employeecode] -- alter index all on [int].[FactStaffingbyPayPeriod] REBUILD WITH (FILLFACTOR=80) -- update statistics [int].[FactStaffingbyPayPeriod] WITH FULLSCAN --cleanup DROP TABLE #TEMPSTAFFINGPAYPERIOD /******** Update record in IntTransaction **********/ --TODO: Make the way it inserts to the IntTranaction much better; GO --------------------------------------------- -- fw.procTransferStatisticsMonthlyToPayPeriodCurrentYear /************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2018-08-07 VO B-20238 added condition where TimeClassID = 2 ** 2 2020-10-02 HV JAZZ-1487 MR "Transfer Budget Data" filtering on currently year, not transferring correctly to first/last pay periods *************************************************************/ CREATE proc [fw].[procTransferStatisticsMonthlyToPayPeriodCurrentYear] as /******** Variable Declaration **********/ declare @TransactionID int = 1 DECLARE @FiscalYearId INT = ( SELECT setting FROM dbsetting WHERE NAME = 'Current_GL_YearID' ) /******** Build Rows to Insert **********/ CREATE TABLE #TEMPSTATISTICS ( [AccountID] [int] NOT NULL, [DepartmentID] [int] NOT NULL, [FiscalYearID] [smallint] NOT NULL, [PayPeriodID] [smallint] NOT NULL, [TimeClassID] [tinyint] NOT NULL, [Value] [decimal](19, 4) NOT NULL, [AccountCode] [nvarchar](100) NOT NULL, [DepartmentCode] [nvarchar](100) NOT NULL, [FiscalYearCode] [nvarchar](100) NOT NULL, [PayPeriodCode] [nvarchar](100) NOT NULL, [TimeClassCode] [nvarchar](100) NOT NULL, [TransactionID] [int] NOT NULL, ) insert into #TEMPSTATISTICS (DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, PayPeriodID, PayPeriodCode, TimeClassID, TimeClassCode, Value, TransactionID) select fact.DepartmentID, fact.DepartmentCode, fact.AccountID, fact.AccountCode, PP.FiscalYearIDSecond, PP.FiscalYearIDSecond, PP.PayPeriodID, PP.PayPeriodCode, fact.TimeClassID, fact.TimeClassCode, SUM(cast(fact.value * PP.PeriodWeightStart as money)) AS Value, 1 as TransactionID from [int].[FactStatistic] fact inner join [fw].[DimDepartment] D on fact.DepartmentID=D.DepartmentID inner join fw.DimPayPeriod PP on PP.FiscalMonthIDStart = fact.FiscalMonthID and PP.FiscalYearIDStart = fact.FiscalYearID and PP.PayCycleID=D.PayCycleID where fact.value != 0 and fact.TimeClassID = 2 and PP.PeriodDaysStart > 0 --============= BEGIN CID 2 ================= and fact.TransactionID<>@TransactionID --============= END CID 2 =================== and PP.FiscalYearIDSecond = @FiscalYearId GROUP BY fact.DepartmentID, fact.DepartmentCode, fact.AccountID, fact.AccountCode, PP.FiscalYearIDSecond, PP.PayPeriodID, PP.PayPeriodCode, fact.TimeClassID, fact.TimeClassCode insert into #TEMPSTATISTICS (DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, PayPeriodID, PayPeriodCode, TimeClassID, TimeClassCode, Value, TransactionID) select fact.DepartmentID, fact.DepartmentCode, fact.AccountID, fact.AccountCode, fact.FiscalYearID, fact.FiscalYearCode, PP.PayPeriodID, PP.PayPeriodCode, fact.TimeClassID, fact.TimeClassCode, SUM(cast(fact.value * PP.PeriodWeightSecond as money)) AS Value, 1 as TransactionID from [int].[FactStatistic] fact inner join [fw].[DimDepartment] D on fact.DepartmentID=D.DepartmentID inner join fw.DimPayPeriod PP on PP.FiscalMonthIDSecond = fact.FiscalMonthID and PP.FiscalYearIDSecond = fact.FiscalYearID and PP.PayCycleID=D.PayCycleID where fact.value != 0 and fact.TimeClassID = 2 and PP.PeriodDaysSecond > 0 --============= BEGIN CID 2 ================= and fact.TransactionID<>@TransactionID --============= END CID 2 =================== and fact.FiscalYearID = @FiscalYearId GROUP BY fact.DepartmentID, fact.DepartmentCode, fact.AccountID, fact.AccountCode, fact.FiscalYearID, fact.FiscalYearCode, PP.PayPeriodID, PP.PayPeriodCode, fact.TimeClassID, fact.TimeClassCode /******** Delete previous transfered data **********/ delete from [int].[FactStatisticsbyPayPeriod] where TransactionID=@TransactionID and FiscalYearID = @FiscalYearId and TimeClassID = 2 /******** Insert into destination table *************/ insert into [int].[FactStatisticsbyPayPeriod] (DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, PayPeriodID, PayPeriodCode, TimeClassID, TimeClassCode, Value, TransactionID) select DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, PayPeriodID, PayPeriodCode, TimeClassID, TimeClassCode, sum(value), TransactionID from #TEMPSTATISTICS group by DepartmentID, DepartmentCode, AccountID, AccountCode, FiscalYearID, FiscalYearCode, PayPeriodID, PayPeriodCode, TimeClassID, TimeClassCode, TransactionID alter index all on [int].[FactStatisticsbyPayPeriod] REBUILD WITH (FILLFACTOR=80) update statistics [int].[FactStatisticsbyPayPeriod] WITH FULLSCAN /******** Update record in IntTransaction **********/ --TODO: Make the way it inserts to the IntTranaction much better GO --------------------------------------------- -- fw.procUpdateClientReportSectionAttributeFilter_PayPeriod --Proc to set section attribute filter for Pay Periods-------------------------- CREATE PROC [fw].[procUpdateClientReportSectionAttributeFilter_PayPeriod] @TopCount int, @MaxPayPeriodID int, @ClientReportSectionAttributeGUID uniqueidentifier AS BEGIN CREATE TABLE #TempPeriods (PayPeriodID smallint, PayPeriodCode nvarchar(8)) INSERT INTO #TempPeriods (PayPeriodID, PayPeriodCode) SELECT TOP (@TopCount) PayPeriodID, PayPeriodCode FROM [fw].[DimPayPeriod] WHERE PayPeriodID <= @MaxPayPeriodID ORDER BY PayPeriodID DESC DECLARE @FilterMember nvarchar(100) SET @FilterMember = ( SELECT STUFF(( select ','+ PayPeriodCode from #TempPeriods order by PayPeriodID asc FOR XML PATH('') ) ,1,1,'') AS SortOrder ) UPDATE [dbo].[REClientReportSectionAttribute] SET FilterMemberCSV=@FilterMember, SortOrderValue='-1' WHERE ClientReportSectionAttributeGUID = @ClientReportSectionAttributeGUID DROP TABLE #TempPeriods END GO --------------------------------------------- -- fw.procUpdateDataStudio20ViewYearStructure CREATE procedure [fw].[procUpdateDataStudio20ViewYearStructure] ( @FrameworkSchema Nvarchar(10) = 'sp', @YearShift int = 1, @isExecuting bit = 0 --Schema= 'sp' or 'ob' (select SchemaName from fw.dimframework), YearShift #of Years to rollforward (positive integer) / back (negative integer), isExecuting 0 = print sql 1 = exec sql ) AS /************************************************************ ** Author: blewis ** Create Date: 2015-01-23 ** Description: Rolls SP / OB DS2.0 Views forward and backward ** Last Modified: 2015-01-23 ** GM Release: 2015.2 ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** *************************************************************/ DECLARE TableEditorConfigGUID CURSOR FOR select distinct st.TableEditorConfigGUID from [dbo].[ScoreTableEditorConfig] st inner join [dbo].[ScoreComposite] sc on st.DataSourceGUID=sc.CompositeGUID inner join [dbo].[ScoreTableEditorColumn] ec on st.TableEditorConfigGUID=ec.TableEditorConfigGUID inner join [fw].[DimFramework] fw on fw.FrameworkID=sc.FrameworkID where fw.FrameworkSchemaName=@FrameworkSchema and ec.Type=2 Declare @TableEditorConfig Nvarchar(200) open TableEditorConfigGUID FETCH NEXT FROM TableEditorConfigGUID INTO @TableEditorConfig WHILE (@@FETCH_STATUS = 0) BEGIN Declare @DSViewName Nvarchar(400) = (select '--' + FriendlyName from [dbo].[ScoreTableEditorConfig] where TableEditorConfigGUID=@TableEditorConfig) Print'' Print'-------------------------------------------------------------------------------------------------------------------------------------------' PRINT '--' + @DSViewName PRINT '--'''+@TableEditorConfig+''' -TableEditorConfigGuid' Print'-------------------------------------------------------------------------------------------------------------------------------------------' DECLARE @sqli varchar(max) DECLARE @TableEditorFirstColumnGuid Nvarchar(200) = (select TableEditorColumnGUID from [dbo].[ScoreTableEditorColumn] where TableEditorConfigGUID=@TableEditorConfig and DisplayOrder= (select Min(DisplayOrder) from [dbo].[ScoreTableEditorColumn] where Type=2 and TableEditorConfigGUID=@TableEditorConfig)) DECLARE @XML Nvarchar(MAX) = (Select Cast(MetaData as nvarchar(max)) from [dbo].[ScoreTableEditorColumn] where TableEditorColumnGUID=@TableEditorFirstColumnGuid) DECLARE @Start int = (select CharIndex('FISCAL_YEARFiscalYearID',@XML) + Len('FISCAL_YEARFiscalYearID')+1) DECLARE @FiscalYear NvarChar(4) = Substring(@XML,@Start,4) IF IsNull( (Select Case When CharIndex('.', @FiscalYear) > 0 Then Case When Convert(int, ParseName(@FiscalYear, 1)) <> 0 Then 0 Else 1 End Else 1 End Where IsNumeric(@FiscalYear + 'e0') = 1), 0) = 1 Begin DECLARE TableEditorColumns CURSOR FOR select TableEditorColumnGUID from [dbo].[ScoreTableEditorColumn] e where e.TableEditorConfigGUID=@TableEditorConfig and e.Type=2 order by e.DisplayOrder Declare @TableEditorCol Nvarchar(200) open TableEditorColumns FETCH NEXT FROM TableEditorColumns INTO @TableEditorCol WHILE (@@FETCH_STATUS = 0) BEGIN TRY SET @sqli = 'Update [dbo].[ScoreTableEditorColumn] set DisplayName=Replace(DisplayName,'+Cast(@FiscalYear as Nvarchar(4))+','+Cast((@FiscalYear + @YearShift) as Nvarchar(4))+'), MetaData = Replace(Cast(Metadata as Nvarchar(max)),' + Cast(@FiscalYear as Nvarchar(4)) + ','+ Cast((@FiscalYear + @YearShift) as Nvarchar(4))+') where TableEditorColumnGUID=''' + @TableEditorCol +'''' SET @FiscalYear= (Select @FiscalYear + 1) if @isExecuting = 1 begin exec(@sqli) end else begin print @sqli end FETCH NEXT FROM TableEditorColumns INTO @TableEditorCol END TRY Begin Catch PRINT '--Error' PRINT @sqli PRINT '''' + @TableEditorCol +'''' +'--ErrorColumnGUID' PRINT '' End Catch CLOSE TableEditorColumns DEALLOCATE TableEditorColumns SET @sqli = 'Update [dbo].[ScoreTableEditorFilter] set HierarchyPath = Replace(HierarchyPath,Cast(RIGHT(HierarchyPath,4)as INT),Cast(RIGHT(HierarchyPath,4)as INT)+' + Cast(@YearShift as Nvarchar(4)) + '), FriendlyName=Replace(FriendlyName,Cast(RIGHT(FriendlyName,4)as INT),Cast(RIGHT(FriendlyName,4)as INT)+' + Cast(@YearShift as Nvarchar(4)) + ') where TableEditorConfigGUID='''+@TableEditorConfig+''' and KeyGUID=''84f7adb1-e680-4a23-b1ea-638120fbeadb''' if @isExecuting = 1 begin exec(@sqli) end else begin print @sqli end End FETCH NEXT FROM TableEditorConfigGUID INTO @TableEditorConfig END CLOSE TableEditorConfigGUID DEALLOCATE TableEditorConfigGUID GO --------------------------------------------- -- fw.procUpdateMinimumStaffingFlexPayrollSampledDaily CREATE PROCEDURE [fw].[procUpdateMinimumStaffingFlexPayrollSampledDaily] @fiscalYearID smallint = 0, @onePayPeriodOnlyDate datetime = null AS /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2022-08-05 BS JAZZ-41378 Daily Flexing - Payroll Minimum Staffing ************************************************************ */ IF OBJECT_ID('tempdb..#inputPayPeriods') IS NOT NULL DROP TABLE #inputPayPeriods SELECT fp.PayPeriodID, COUNT(*) AS RecordsCount, 0 AS BatchID INTO #inputPayPeriods FROM fw.FactPayrollSampledDaily fp INNER JOIN pi.MinimumStaffingFlex ms ON fp.DepartmentID = ms.DepartmentID AND fp.JobCodeID = ms.JobCodeID AND fp.PayCodeGroupID = ms.PayCodeGroupID INNER JOIN fw.DimPayPeriod pp ON fp.PayPeriodID = pp.PayPeriodID WHERE fp.TimeClassID = 4 AND fp.Hours < ms.Hours AND ((@onePayPeriodOnlyDate IS NOT NULL AND @onePayPeriodOnlyDate BETWEEN pp.PeriodStartCalendarDate AND pp.PeriodEndCalendarDate) OR (@onePayPeriodOnlyDate IS NULL AND (pp.FiscalYearIDSecond = @fiscalYearID OR @fiscalYearID = 0))) GROUP BY fp.PayPeriodID DECLARE @BatchSize INT = 30000000 -- Split data into batches WHILE EXISTS (SELECT TOP 1 1 FROM #inputPayPeriods WHERE BatchID = 0) BEGIN ;WITH PayPeriodInfo AS ( SELECT DM.PayPeriodID, ROW_NUMBER() OVER (ORDER BY DM.PayPeriodID) AS RowNumber, SUM(RecordsCount) OVER (ORDER BY DM.PayPeriodID) AS Total, M.MaxBatchID+1 AS BatchID FROM #inputPayPeriods IPP INNER JOIN fw.DimPayPeriod DM ON DM.PayPeriodID = IPP.PayPeriodID CROSS JOIN (SELECT MAX(BatchID) AS MaxBatchID FROM #inputPayPeriods) M WHERE IPP.BatchID = 0 ) UPDATE IPP SET IPP.BatchID = MI.BatchID FROM #inputPayPeriods IPP INNER JOIN PayPeriodInfo MI ON MI.PayPeriodID = IPP.PayPeriodID WHERE MI.Total <= @BatchSize OR MI.RowNumber = 1 END DECLARE @BatchID INT, @MaxBatchID INT SELECT @MaxBatchID = MAX(BatchID) FROM #inputPayPeriods -- Loop thru batches and insert data SET @BatchID = 1 WHILE @BatchID <= @MaxBatchID BEGIN UPDATE fp SET Hours = h.Hours FROM fw.FactPayrollSampledDaily fp INNER JOIN pi.MinimumStaffingFlex h ON fp.DepartmentID = h.DepartmentID AND fp.JobCodeID = h.JobCodeID AND fp.PayCodeGroupID = h.PayCodeGroupID INNER JOIN #inputPayPeriods IPP ON IPP.PayPeriodID = fp.PayPeriodID WHERE fp.TimeClassID = 4 AND IPP.BatchID = @BatchID AND fp.Hours < h.Hours SET @BatchID = @BatchID + 1 END GO --------------------------------------------- -- fw.procUpdateMinimumStaffingFlexPayrollSampledPayPeriod CREATE PROCEDURE [fw].[procUpdateMinimumStaffingFlexPayrollSampledPayPeriod] @fiscalYearID smallint = 0 AS /* ************************************************************** ** Change History ************************************************************** ** CID Date Author WI Description ** 1 2020-10-27 HV JAZZ-8174 PR | Minimum Staffing Flex ************************************************************ */ ;WITH PayPeriodHours AS ( SELECT fp.DepartmentID, fp.JobCodeID, fp.PayCodeGroupID, fp.PayPeriodID, fp.TimeClassID, ms.Hours * pc.PeriodDays AS PayPeriodHours FROM fw.FactPayrollSampledPayPeriod fp INNER JOIN pi.MinimumStaffingFlex ms ON fp.DepartmentID = ms.DepartmentID AND fp.JobCodeID = ms.JobCodeID AND fp.PayCodeGroupID = ms.PayCodeGroupID INNER JOIN fw.DimPayPeriod pp ON fp.PayPeriodID = pp.PayPeriodID INNER JOIN fw.DimPayCycle pc ON pc.PayCycleID = pp.PayCycleID WHERE fp.TimeClassID = 4 AND (pp.FiscalYearIDSecond = @fiscalYearID OR @fiscalYearID = 0) ) UPDATE fp SET Hours = h.PayPeriodHours FROM fw.FactPayrollSampledPayPeriod fp INNER JOIN PayPeriodHours h ON fp.DepartmentID = h.DepartmentID AND fp.JobCodeID = h.JobCodeID AND fp.PayCodeGroupID = h.PayCodeGroupID AND fp.PayPeriodID = h.PayPeriodID AND fp.TimeClassID = h.TimeClassID WHERE fp.Hours < h.PayPeriodHours GO --------------------------------------------- -- fw.procValidateClientSchema CREATE proc fw.procValidateClientSchema as exec procValidateColumnsExists 'client', 'viewFactGLImport', 'DepartmentCode' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'AccountCode' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'FiscalYearID' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'FiscalMonthCode' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'TimeClassCode' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'Dollars' exec procValidateColumnsExists 'client', 'viewFactGLImport', 'Units' /* create view client.viewFactStatisticImportMonthly as select DepartmentCode, AccountCode, FiscalYearID, FiscalMonthCode, TimeClassCode, Amount from client.FactStatisticImportMonthly */ exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'DepartmentCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'AccountCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'FiscalYearID' exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'FiscalMonthCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'TimeClassCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportMonthly', 'Amount' /* create view client.viewFactStatisticImportPayPeriod as select DepartmentCode, AccountCode, PayPeriodCode, TimeClassCode, ChargeCode, PayCode, FiscalYearID, FiscalMonthCode, Amount from client.FactStatisticImportPayPeriod */ exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'DepartmentCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'AccountCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'PayPeriodCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'TimeClassCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'ChargeCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'PayCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'FiscalYearID' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'FiscalMonthCode' exec procValidateColumnsExists 'client', 'viewFactStatisticImportPayPeriod', 'Amount' /* create view client.viewFactPayrollImport as select DepartmentCode, JobCode, PayCode, PayPeriodCode, TimeClassCode, Hours, Dollars from client.FactPayrollImport */ exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'DepartmentCode' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'JobCode' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'PayCode' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'PayPeriodCode' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'TimeClassCode' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'Hours' exec procValidateColumnsExists 'client', 'viewFactPayrollImport', 'Dollars' GO --------------------------------------------- --------------------------------------------- -- FUNCTIONS --------------------------------------------- -- fw.GetCurrentDataPayPeriodID CREATE FUNCTION [fw].[GetCurrentDataPayPeriodID]() RETURNS smallint AS BEGIN declare @currentPayPeriod int; declare @currentPayPeriodStr nvarchar(4000); set @currentPayPeriodStr = ( select setting from dbsetting where name = 'Current_Payroll_PayPeriodID' ) if ((@currentPayPeriodStr = '') or (@currentPayPeriodStr is null)) set @currentPayPeriod = 0 else set @currentPayPeriod = ( select cast(@currentPayPeriodStr as int)) return @currentPayPeriod END GO --------------------------------------------- -- fw.GetCurrentGLMonthID CREATE FUNCTION [fw].[GetCurrentGLMonthID]() RETURNS int AS BEGIN declare @currentMonth int; declare @currentMonthStr nvarchar(4000); set @currentMonthStr = ( select setting from dbsetting where name = 'Current_GL_MonthID' ) if ((@currentMonthStr = '') or (@currentMonthStr is null)) set @currentMonth = 0 else set @currentMonth = ( select cast(@currentMonthStr as int)) return @currentMonth END GO --------------------------------------------- -- fw.GetCurrentGLYearID CREATE FUNCTION [fw].[GetCurrentGLYearID]() RETURNS int AS BEGIN declare @currentYear int; declare @currentYearStr nvarchar(4000); set @currentYearStr = ( select setting from dbsetting where name = 'Current_GL_YearID' ) if ((@currentYearStr = '') or (@currentYearStr is null)) set @currentYear = 0 else set @currentYear = ( select cast(@currentYearStr as int)) return @currentYear END GO --------------------------------------------- -- fw.GetCurrentPayPeriodID CREATE FUNCTION [fw].[GetCurrentPayPeriodID]() RETURNS smallint AS BEGIN declare @Today datetime; set @Today = GETDATE(); declare @CurrentPayPeriod smallint; select @CurrentPayPeriod = PayPeriodID from fw.DimPayPeriod where @Today > PeriodStartCalendarDate and @Today < PeriodEndCalendarDate order by PeriodStartCalendarDate DESC if (@CurrentPayPeriod is null) set @CurrentPayPeriod = 0; return @CurrentPayPeriod END GO --------------------------------------------- -- fw.GetPayPeriodSamplingYear /*************************************************************** ** CID Date Author WI Description ** 1 2018-09-11 kzhuk D-07649 PR Daily custom action calls procedures for wrong year **************************************************************/ CREATE FUNCTION [fw].[GetPayPeriodSamplingYear](@fiscalYearID int, @isCalcDaily bit) RETURNS int AS BEGIN declare @previousDay DATE = DATEADD(DAY,-1,CAST(GETDATE() as DATE)) declare @yearOfSampling int = CASE WHEN @isCalcDaily = 0 then @fiscalYearID else (SELECT MAX(FiscalYearIDSecond) FROM fw.dimPayPeriod WHERE DATEADD(DAY,-1,CAST(GETDATE() as DATE)) BETWEEN PeriodStartCalendarDate and @previousDay) END /* @isCalcDaily = 0 & @fiscalYearID int = 0 == > @yearOfSampling = 0 @isCalcDaily = 1 & @fiscalYearID int = 0 == > @yearOfSampling = 'CalendarYear' @isCalcDaily = 1 & @fiscalYearID int = '1234' == > @yearOfSampling = 'CalendarYear' @isCalcDaily = 0 & @fiscalYearID int = '1234' == > @yearOfSampling = '1234' */ RETURN @yearOfSampling END GO --------------------------------------------- -- fw.GetUserRoleAssignmentCSV CREATE FUNCTION [fw].[GetUserRoleAssignmentCSV] ( @LootID nvarchar(200), @RoleID int) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @csv NVARCHAR(MAX) SET @csv = '' DECLARE @count int SET @count = 0 declare crsCursor CURSOR LOCAL FAST_FORWARD FOR select distinct UP.NameFull from S3RoleAssignment RA (readuncommitted) inner join S3IdentityLink IL (readuncommitted) on RA.IdentityGUID = IL.GroupingGUID inner join UserProfile UP (readuncommitted) on IL.MemberGUID = UP.UserGUID where RA.RoleID = @RoleID and RA.LootGroupID = @LootID order by NameFull open crsCursor; DECLARE @NameFull nvarchar(100) FETCH NEXT FROM crsCursor into @NameFull WHILE (@@FETCH_STATUS = 0) BEGIN IF (@count = 0) BEGIN select @csv = @csv + @NameFull END ELSE BEGIN select @csv = @csv + '; ' + @NameFull END set @count = @count +1 FETCH NEXT FROM crsCursor into @NameFull END close crsCursor; DEALLOCATE crsCursor; RETURN @csv END GO --------------------------------------------- -- fw.GetYTDDaysInMonth CREATE FUNCTION [fw].[GetYTDDaysInMonth](@monthID int) RETURNS int AS BEGIN declare @sortOrder int = (select sortOrder from fw.dimfiscalmonth where FiscalMonthID = @monthID) declare @ytdDays int = (select sum(DaysInMonth) from fw.dimfiscalmonth where sortorder <= @sortOrder) return @ytdDays END GO ---------------------------------------------