Вы можете создавать виды из UNION ALL
данных из всех магазинов в один объект - по одному для каждой таблицы, к которой вы хотите получить доступ. Эти представления могут быть созданы программно, если структура базы данных каждого магазина идентична и может находиться на одном экземпляре SQL Server, который ваш отчет мог бы подключить через свой Источник данных.
В качестве примера, давайте представим, что ваши базы данных имеют только две таблицы:
CREATE TABLE sales (
SaleID INT,
CustomerID INT,
Amount DECIMAL(19,4)
)
CREATE TABLE staff (
StaffID INT,
Name VARCHAR(50),
YearsService INT
)
и давайте предположим, что у вас есть только три магазина, каждый с SQL, например, вы можете подключиться с вашего центрального местоположения (установлен как Связанные серверы), содержащие базу данных CompanyData
:
SELECT * FROM Store1.CompanyData.dbo.sales
SELECT * FROM Store2.CompanyData.dbo.sales
SELECT * FROM Store3.CompanyData.dbo.sales
Вы можете запустить курсор как и следующий, чтобы генерировать CREATE VIEW
сценарии для двух таблиц в базах данных:
DECLARE @SalesSQL VARCHAR(MAX) = 'CREATE VIEW dbo.GlobalSales AS '
DECLARE @StaffSQL VARCHAR(MAX) = 'CREATE VIEW dbo.GlobalStaff AS '
DECLARE @currentServer NVARCHAR(128)
DECLARE allServers CURSOR FOR
SELECT name
FROM SYS.SERVERS
WHERE is_linked = 1
OPEN allServers
FETCH NEXT FROM allServers INTO @currentServer
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SalesSQL = @SalesSQL + ' SELECT ''' + @currentServer + ''' AS [Server], SaleId, CustomerID, Amount FROM ' + QUOTENAME(@currentServer) + '.CompanyData.dbo.Sales UNION ALL'
SET @StaffSQL = @StaffSQL + ' SELECT ''' + @currentServer + ''' AS [Server], StaffId, Name, YearsService FROM ' + QUOTENAME(@currentServer) + '.CompanyData.dbo.Staff UNION ALL'
FETCH NEXT FROM allServers INTO @currentServer
END
CLOSE allServers
DEALLOCATE allServers
SET @SalesSQL = LEFT(@SalesSQL,LEN(@SalesSQL)-6)
SET @StaffSQL = LEFT(@StaffSQL,LEN(@StaffSQL)-6)
EXEC sp_executesql @SalesSQL
EXEC sp_executesql @StaffSQL
Это будет оставить вас с двумя видами GlobalSales
и GlobalStaff
, которые сидят на том же SQL Server и могут быть подключены к с одного источника данных из отчета SSRS.
Если у вас очень много таблиц в ваших базах данных, вы можете дополнительно автоматизировать процесс, динамически извлекая детали каждой соответствующей таблицы в базах данных, вместо того, чтобы явно указывать их, как я уже говорил выше.
Имеет ли компания стратегию отчетности для этого? Я буду удивлен, если у компании с 2000 розничными точками нет достойной стратегии централизованной отчетности. Вероятно, уже существует некоторая регулярная работа, выполняемая для извлечения данных или репликации, которые могут помочь вам избежать этой проблемы. –