2017-08-16 68 views
0

我的公司從無法以任何直接格式提供數據的客戶端接收數據,因此我們必須導入多個報告,這些報告採用如下所示的分組佈局。我們必須開發內部方法來取消分組報告,然後導入數據以獲取我們需要的所有數據。目前,我的團隊中的成員正在使用MS Access/VBA生成所需的詳細記錄,但我想將其移至基於服務器的自動化過程。我們正在使用SQL Server 2008R2進行存儲,並且我想使用SSIS來完成任務。有誰知道我可以生成詳細記錄並將數據直接導入SQL Server的方式嗎?將分組報告數據導入數據庫

enter image description here

+0

我不明白的問題。你問如何取消在SQL Server中的數據分組?如何使用SSIS將MS Access導入到SQL中?如何將原始報告導入SQL Server?請澄清。 –

+0

我更新了一下這個問題。我正在尋找一種方法來編程生成詳細記錄並將它們導入SQL服務器。我想完全消除MS Access組件。 –

+0

這很難做,除非您可以提供數據樣本,因爲它是分組的,然後是未分組數據的樣本。即使這樣,除非我們有數據如何分組的方法,否則很難做到,但如果我們需要這些數據,直到我們看到數據時纔會說出來。我不確定你附加的圖像代表了什麼。數據是否也以csv格式發佈給您?你能提供這些細節嗎?謝謝 –

回答

1

嗯 - 嗯,你一定要做數據設置爲組日期添加到詳細信息行的一些計劃調整。我不確定你將如何導入xlsx,但我會建議首先使用SSIS包,然後在腳本任務中進行調整,作爲完成此操作的「最佳」方法。有關如何在SSIS腳本任務中處理Excel,請參見here

如果你不知道SSIS或者特別是編程,那麼你最好下注(我認爲)只是將數據導入臨時表,使用T-SQL進行操作,然後插入該表進入你的主表。我做了這個here的SQL小提琴。

CREATE TABLE ActivitySummary 
(
    id int identity(1,1), 
    activity_date date, 
    activity varchar(100), 
    paid_time decimal(5,2), 
    unpaid_time decimal(5,2), 
    total_time decimal(5,2) 
) 

CREATE TABLE ActivitySummary_STG 
(
    id int identity(1,1), 
    activity_date date, 
    activity varchar(100), 
    paid_time decimal(5,2), 
    unpaid_time decimal(5,2), 
    total_time decimal(5,2) 
) 
GO 

-- Simulate import of Excel sheet into staging table 
truncate table ActivitySummary_STG; 
GO 

INSERT INTO ActivitySummary_STG (activity_date, activity, paid_time, unpaid_time, total_time) 
select '8/14/17',null,null,null,null 
UNION ALL 
select null,'001 Lunch',0,4.4,4.4 
UNION ALL 
select null,'002 Break',4.2,0,4.2 
UNION ALL 
select null,'007 System Down',7.45,0,7.45 
UNION ALL 
select null,'019 End of Work Day',0.02,0,0.02 
UNION ALL 
select '8/15/17',null,null,null,null 
UNION ALL 
select null,'001 Lunch',0,4.45,4.45 
UNION ALL 
select null,'002 Break',6.53,0,6.53 
UNION ALL 
select null,'007 System Down',0.51,0,0.51 
UNION ALL 
select null,'019 End of Work Day',0.02,0,0.02 
GO 

-- Code to massage data 
declare @table_count int = (select COALESCE(count(id),0) from ActivitySummary_STG); 
declare @counter int = 1; 

declare @activity_date date, 
     @current_date date; 

WHILE (@table_count > 0 AND @counter <= @table_count) 
BEGIN 
    select @activity_date = activity_date 
    from ActivitySummary_STG 
    where id = @counter; 

    if (@activity_date is not null) 
    BEGIN 
     set @current_date = @activity_date; 

     delete from ActivitySummary_STG 
     where id = @counter; 
    END 
    else 
    BEGIN 
     update ActivitySummary_STG SET 
     activity_date = @current_date 
     where id = @counter; 
    END 

    set @counter += 1; 
END 

INSERT INTO ActivitySummary (activity_date, activity, paid_time, unpaid_time, total_time) 
select activity_date, activity, paid_time, unpaid_time, total_time 
from ActivitySummary_STG; 

truncate table ActivitySummary_STG; 
GO 

select * from ActivitySummary; 
1

我會做一個腳本組件。

總數據流:

ExcelSource - >腳本組件(穿越 - ) - >條件拆分 - > SQL目的地

在腳本組件:在InputColumns

檢查AccountSummary的

將ActivityDate添加爲輸出列。

打開腳本:

你行處理之外。

地址:

public datetime dte; 

內排處理:

if (DateTime.TryParse(Row.ActivitySummary.ToString())) 
{dte=DateTime.Parse(Row.ActivitySummary.ToString());} 
else 
{Row.ActivityDate = dte;} 

然後添加一個條件性拆分刪除空活動日期