一种通用的数据归集方法

文档序号:6597103阅读:535来源:国知局

专利名称::一种通用的数据归集方法
技术领域
:本发明涉及一种计算机应用技术,是面向非专业或专业技术人员使用的,可以迅速高效开发数据归集査询报表的一项技术。
背景技术
:企业已经进行了基础的信息化的建设,积累了很多业务数据,很多人员却没有及时享用信息化成果,数据利用停留在数据统计,缺乏对数据的进一步加工处理。
发明内容本发明的目的是将企业信息化数据,进行分析整理,提供一种数据归集的方法。本发明的目的是按以下方式实现的1、按照业务类别如销售订单、销售发票、釆购入库等抽取关键字段如日期、数量、金额等关键字段数据归集到中间表;2、通过参数传递方式将分析依据、分析类别、分析对象、分析期间、分析跨度等参数传递到数据査询过程中实现不同角度的分析展现。主要技术操作有1)完成数据中心存储环境建立。2)分散数据存储数据连接,用于指向各分数据存储。3)数据授权,各操作用户对4)数据校验关系配置。5)数据中心存储建立标准编码与名称建立。6)分散数据存储有选择引用数据中心编码。本发明的具有功能和有益效果1.面向使用人员,从各种角度对同一事务进行分析,使得数据对企业业务的诠释更加完整。2.通过技术中的引用规则,可以充分利用企业业务数据,通过系统的整理与过滤,可以有效的建立统一数据展示中心。具体实施例方式操作人员通过安装采用此技术的软件,通过界面操作的方式,实现相应的操作,主要技术步骤有1.完成数据中心存储环境建立。2.分散数据存储数据连接,用于指向各分数据存储。3.数据授权,各操作用户对4.数据校验关系配置。5.数据中心存储建立标准编码与名称建立。6.分散数据存储有选择引用数据中心编码。主要程序组件有数据査询展现过程UP—WDDSS—QTJ>公共方式CreatePROCEDUREUP_WDDSS_CXTJ(@PS_FXLBvarchar(100),/*1.分析类别简单列示、增长分析、构成分析、因素分析*/@PS—BeginDatcvarchar(8),/*2.开始日期*/@PS_EndDatevarchar(8),/*3.结束日期*/@PS—TableVARCHAR(200),/*4.数据来源表名*/@PS—TjLmVARCHAR(200),/*5.统计列名*/@PS—SjLmVARCHAR(200),/*6.数据列名*/@PS—SILmVARCHAR(200),/*7.数量列名*/@PS—RqLmVARCHAR(200),/*8.日期列名*/@PS—TjFsVARCHAR(200),/*9.统计方式Sum、Avg、Min、Max*/@PS—ConsVARCHAR(2000),/*10.条件串(A.列名形式)*/@PS—Periodvarchar(200),/*11.分析期间*/@PS—Spanvarchar(200)/*12.同期比跨度年、季度、月、周*/WITHENCRYPTIONAS/*---------------------------------------------------------------------------简单列示、增长分析、构成分析、因素分析----------------------------------------------------------------------------*declare@sqllvarchar(8000)declare@sql2varchar(8000)declare@sql3varchar(8000)declare@sql4varchar(8000)declare@sql5varchar(8000)declare@sql6varchar(8000)declare@sql7varchar(8000)declare@sql8varchar(8000)declare@sql9varchar(8000)declare通sqllOvarchar(8000)declare@sqlllvarchar(8000)declare@sqll2varchar(8000)declare@vsSQLvarchar(8000)declarecurrent—period—startaschar(8)declarecurrent—period—nextstartaschar(8)declare@last—period—startaschar(8)declare@last—period_nextstartaschar(8)declarecorresponding—period—startaschar(8)/*--当期开始日期*//*一当期结束日期*//*一上期开始日期*//*一上期结束闩期*//*一上阶段同期开始日期*/declare@corresponding_pe:riod—nextstartaschar(8)/*—上阶段同期结束日期*//*处理年、月*/ifLen(@PS—BeginDate)=4—开始日期如果是年,则取年的第一天Set@PS—BeginDate=Convert(char(8),DATEADD(yy,DATEDIFF(yy,0,@PS—BeginDate+'0101'),0),112)ifLen(@PS—BeginDate)=6--开始日期如果是月,则取月的第一天Set@PS_BeginDate=Convert(char(8),DATEADD(month,DATEDIFF(month,0,@PS—BeginDate+'01'),0),112)ifLen(@PS—EndDate)=4—截至日期如果是年,则取年的最后一天Set@PS_EndDate=Convert(char(8),dateadd(dd,-1,DATEADD(yy,DATEDIFF(yy,0,@PS—EndDate+'0101')+l,0)),112)ifLen(@PS—EndDate)=6—截至日期如果是月,则取月的最后一天Set@PS—EndDate=Convert(char(8),dateadd(ms,-3,DATEADD(month,DATEDIFF(month,0,@PS—EndDate+'01')+l,O)),112)DATEDIFF(yy,0,@PS—EndDate),0),112)A--本期结束日期一一年的最后一天VSet@current—period—nextstart=Convert(char(8),dateadd(dd,-l,DATEADD(yy:DATEDIFF(yy,0,@PS—EndDate)+1,0)),112)Begin日期的处理/氺__*_—求/if@PS—Period='—年(截止日期所在的自然年)'Begin/沐一yeaxl*//*一本期开始日期一一年的第一天*/Set@current_period—start二Convert(char(8),DATEADD(yy:/*一上一年开始日期*/Se〔@1asL_peri()d—start=Convert(char(8),dateadd(year,-1,current—period—start),112)/*--上一年结束日期*/Set@last—period—nextstart=Convert(char(8),dateadd(year,-1,@current—period—nextstart),112)End/氺一—yeaxl氺/if@PS_Period='—年(从起始日期开始的一年)'Begin/沐一一year2水//*一本期开始日期*/Setcurrent—period—start=@PS—BeginDate/*一本期结束日期=开始日期加一年,再减去一天*/Set@current—period—nextstart=Convert(char(8),dateaidd(year,1,current—period_start)-1,112)/*-—上一年开始日期*/Sct@last—period—start=Convert(char(8),dateadd(year,-l,current—period—start),112)上一年结束日期氺/Set砂last一period—nextstart=Convert(char(8),dateadd(year,一l,current—period—nextsta_rt),112)End/氺——year2氺/if@PS_Period二,年中(从年初到截止日期),Begin/氺一一year3氺//*一本期开始日期*/Set@current—period—start=Convert(char(8),DATEADD(yy,DATEDIFF(yy,0,@PS_EndDate)0),112)/*--本期结束日期*/Set@current—period—nextstarL二@PS—EndDaLe/*--上一年开始日期*/Set@last_period—start=Convert(char(8),dateadd(year,_1,current—period—start),112)/*--上一年结束日期*/Set@last—period—nextstart=Convert(char(8),dateadd(year,—1,current—period—nextstaxt),112)End/承_—year3氺//*—季度一*/if@PS_Period='—季度(截止日期所在的季度)'Begin/*--Quarterl*//*—本期开始日期一季度的第一天*/Set@current_period—start=Convert(char(8),DATEADD(quarter,DATRDTFF(qq,0,@PS—EndDate),0),112)/*—本期结束日期一季度的最后一天*/Set@cuirent—period—nextstart二Convert(char(8),dateadd(day,_1,dateadd(quarter,1,DATEADD(quarter,DATEDIFF(quarter,0,@PS_EndDate),0))),112)/*--上一季度开始日期沐/Set@last—period—start=Convert(char(8),dateadd(quarter,_1,current—period—start),112)/*--上一季度结束日期*/Set@last_period—nextstart二Convert(char(8),dateadd(quarter,-l,@current—period_nextstart),112)End—Quarterl*/if@PS—Period='—季度(从起始日期开始的一季度)'Begin/*—Quarter2*〃*—本期开始日期*/Setcurrent—period—start二@PS—BeginDaLe/*—本期结束日期*/Set@current—period—nextstart二Convert(char(8),dateadd(quarter,1,current—period—start)-1,112)/*--上一季度开始日期*/Set@last—period—start二Convert(char(8),dateadd(quarter,-1,current—period—start),112)A—上一季度结束日期VSet@last_period—nextstaxt=Convert(char(8),dateadd(quarter,-1,current—period—nextstart),112)End/氺一一QuELrter2承/if@PS—Period='季度中(从季度初到截止日期)'BeginA—Quarter3氺//*一本期开始日期*/Set@current—period一start二Convert(char(8),DATEADD(quarter,DATEDIFF(qq,0,@PS—EndDate),0),112)/*--本期结束日期*/Setcurrent—period—nextstart=@PS—EndDate/*—上一季度开始日期*/Set@last—period—stai:t=Convert(char(8),dateadd(quarter,_1,current—period一start),112)/*一上一季度结束日期*/Set@last—period—nextstart二Convert(char(8),dateadd(quarter,-l,current—period一nextstart),112)End/*—Quarter3*//*—月度一*/if@PS_Period='—个月(截止日期所在的自然月),Begin/承__Monthl氺//*一本期开始日期--月的第一天*/Set@current—period_start=Convert(char(8),DATEADD(month,DATEDIFF(month,0,@PS_EndDate),0),112)/*一本期结束日期一月的最后一天*/Setcurrent—period—nextstart=Convert(char(8),dateadd(ms,-3,DATEADD(month,DATEDIFF(month,0,@PS—EndDate)+1,0)),112)/*--上一月开始日期*/Set@last—period—start=Convert(char(8),dateadd(month,-1,current—period—start),112)/*一上一月结束日期*/Set@last—period—nextstart二Convert(char(8),dateadd(month,-l,current—period—nextstart),112)EndA—Monthl木/if@PS—Period=,一个月(从起始日期开始的一个月),Begin/*-_Month2*〃*--本期开始日期*/Set@current—period_start=@PS—BeginDate本期结束日期*/Set@current_period—nextstart二Convert(char(8),dateadd(month,1,current—period—start)-l,112)/*一上一月开始日期*/Set@last_period—start=Convert(char(8),dateadd(month,-1,@current_period_start),112)/*一上一月结束日期*/Set@last—period—nextstart=Convert(char(8),dateadd(month,-1,@current_period—nextstart),112)End/*—Month2*/if@PS_Period='月中(从月初到截止日期)'Begin/*--Month3*//*--本期开始日期*/Set@cuirent_period_start=Convert(char(8),DATEADD(month,DATEDIFF(month,0,@PS_EndDate),0),112)/*—本期结束日期*/Set@current—period_nextstart=@PS_EndDate/氺_一上一月开々台日其月承/Set@last_period—staxt二Convert.(char(8),dateadd(month,-l,@current_period_staxt),112)/*--上一月结束日期*/Set@last_period—nextstart二Convert(char(8),dateadd(month,-1,current—period—nextstart),112)End/*—Month3*〃*--周--*/if@PS_Period='—周(从起始日期开始的一个周)'Begin/*—Weekl*//*—本期开始日期*/Setcurrent—periodstart=@PS—BeginDateA—本期结束日期-本期开始日期加6天*/Set@current—period—nextstart=Convert(char(8),dateadd(day,6,current—period—start),112)/*一上一周开始日期*/Set@last—period_start=Convert(char(8),dateadd(week,_1,current—period—start),112)/*一上一周结朿日期*/Set@last_period—nextstart=Convert(char(8),dateadd(week,_1,@current_period_nextstart),112)End/*—Weekl*/if@PS—Period=,一周(截至日期所在的一个周),BeginA--Weekl宋/A—本期开始日期周一*/Set@current—period—start二Convert(char(8),DATEADD(Day,-(DATEPART(Weekday,@PS—EndDate)十鹏DATEF1RST-2)%7,@PS—EndDate),112)_-@PS—BeginDateA—本期结束日期=开始日期加6天*/Set@current—period—nextstart二Convert(char(8),dateadd(day,6,current—period_start),112)/*—上一周开始日期*/Set@last—period—start二Convert(char(8),DATEADD(Day,-7,current—period—start),112)--Convert(char(8),dateadd(week,-l,current—period_start),112)/*一上一周结束日期*/Set@last—period—nextstart二Convert(char(8),dateadd(week,_1,current—period—nextstart),112)End/*—Weekl*//*—上一阶段同期--*/Setcorresponding—period—start二case@PS_Spanwhen'年'thenconvert(char(8),dateadd(year,-l,convert(datetime,current—period—start)),112)when'季度'thenconvert(char(8),dateadd(quarter,-1,convert(datetime,current—period—start)),112)when'月'thenconvert(char(8),dateadd(month,-1,convert(datetime,current—period—start)),112)when'周'thenconvert(char(8),dateadd(week,-1,convert(datetime,current—period—start)),112)endSetcorresponding—period—nextstart=case@PS—Spanwhen'年'thenconvert(char(8),dateadd(year,-l,convert(datetime,current—period—nextstart)),112)when'季度'thenconvert(char(8),dateadd(quarter,-1,convert(datetime,current—period—nextstart)),112)when'月'thenonvert(char(8),dateadd(month,_1,convert(datetime,@current_period—nextstart)),112)when'周'thenconvert(char(8),dateadd(week,-1,convert(datetime,current—period—nextstart)),112)end/*----------------------------------------------------------------------------End日期的处理/*一统计方式:求和、平均、最小、最大*/Set@PS—TjFs=Upper(RTrim(LTrim(@PS—TjFsif@PS—TjFsO'SUM'AND@PS_TjFs<>'AVG,AND@PS—TjFsO'MIN'AND@PS—TjFs<>,MAX'Set@PS—TjFs='SUM'SET通sqll二'A.'+@PS—Tjlm/*—@SQL2代表本期数据*/Set@sql2='LEFTJOIN(SELECTB.YJB''+@PS—TjFs+'(B.'+@PS_SjLm+')SJFROMB.'+@PS—Rqlm+'>='''+@current—per〗od—start+'''B.'+@PS—Rqlm+'〈='''+@current—period—nextstart+'/*其他过滤条件*/if@Ps—Cons<>''Set@sql2=@sql2+'AND'+Replace(@PS—Cons,'A.+r^place(@PS—Tjlm,'A.'''B.')+''+@PS—Table+'BWHEREANDB.'),'C.')+,WHEREANDD.')+'WHEREANDSet@sql2=@sql2+'GROUPBYB.,屮r印lace(断S一Tjlm,','B.')十')BQONBQ.YJB=A.'+@PS—Tjlm+''/*—feql3代表上期数据VSet@sql3='LEFTJOIN(SELECTC.'十r印lace(@PS—Tjlm,'A.YJC,'+@PS—TjFs+'(C.'+@PS—SjLm+')SJFROM'+@PS—Table+'CC.'+@PS—Rqlm+'〉=',,+@last_period—start+'''C.'+@PS—Rqlm+'〈='''+@last_period—nextstart+''''A其他过滤条件Vif@Ps—Cons<〉''Set@sql3=@sql3+'AND,屮R印lace(@PS—Cons,'A.','C.,)Set@sql3=@sqI3+'GROUPBYC.'屮r印lace(@PS—Tjlm,'A.','C.')+')SQONSQ.YJC=A.'+@PS—Tjlm+''A—feql4代表上一阶段同期数据*/Set@sql4='LEFTJOIN(SELECTD.'+replace(@PS—Tjlm,'A.YJD,'+@PS—TjFs+'(D.'+@PS—SjLm+')SJFROM'+@PS—Table+'DD.'+@PS_Rqlm+'〉='''+@corresponding—period_start+'''D.'+@PS—Rqlm+'<='''+@corresponding—period一nextstart+''''/*其他过滤条件*/if@Ps—Cons<>''Set@sql4=@sql4+'AND'十R印lace(@PS—Cons,'A.','D.')Set@sql4=@sql4+'GROUPBYD.'十r印lace(@PS—Tjlm,'A.','D.')+')LQONLQ.YJD=A.'+@PS—Tjlm+''/*--SQL5代表本期总数,用来计算各分析依据所占的百分比*/Set@sql5='isNull((SELECT'+@PS—TjFs+'(E.'+@PS—SjLm+')WHEREE.'+@PS—Rqlm+,>=,''+@current—period—start+'''E.'+@PS_Rqlm+'〈='''+@current—period—nextstaxt+''''/*其他过滤条件*/if@Ps—Cons<〉''Set@sql5=@sql5+'AND'+Replace(@PS—Cons,,A.','E.,)Set@sql5=@sq15+'),0)'/*--SQL6上期总数,用来计算各分析依据所占的百分比*/Set@sql6=,isNull((SELECT,+@PS—TjFs+'(F.'+@PS_SjLm+,)WHEREF.'+@PS_Rqlm+'〉='''+@last—period—start+'''F.,+@PS—Rqlm+'<='''+@last_period_nextstert+''''/*其他过滤条件*/FROM'+@PS—Table+'EANDFROM'+@PS—Table+'FAND11if@Ps—Cons<>''Set@sql6二@sql6+'AND'十R印lace(@PS—Cons,'A.','F.')Set@sql6=@sql6+'),0)'A—SQL7同期总数,用来计算各分析依据所占的百分比VSet@sql7='isNull((SELECT'+@PS—TjFs+,(G.'+@PS—SjLm+')FROM'+@PS_Tab1c+,GWHEREG.'+@PS—Rqlm+'>='''+@corresponding—period—start+'''ANDG.'+@PS—Rqlm+'〈='''+@corresponding—period—nextstart+''''/*其他过滤条件*/if@Ps—Cons<〉''Set@sql7=@sql7+'AND'屮R印lace(@PS—Cons,'A.','G.')Set@sql7=@sql7+'),0)'/*—来源表*/set@sql8=,FROM'+@PS—Table+,A'/*一日期区间条件*//*--日期条件:本期开始、本期结束日期VSet@sqll2='A.'+@PS—Rqlm+'〉='''+@current_period—start+'''ANDA.'+@PS_Rqlm+'<='''+@current—period—nextstart+''''/*_-日期条件:上一阶段同期开始、本期结束日期*/Set@sqll2='A.'+@PS—Rqlm+'>='''+@corresponding—period—start+"'ANDA.'+@PS—Rqlm+,<='''+@current—period—nextstart+''''/*---------------------------------------------------*//*增长分析*/---------------------------------------------------if@PS—FXLB='增长分析'Begin/*2008.05.30Modifybywangbo*/Set@vsSql='SELECTA.TJYJAS分析依据,A.BQSJAS本期,A.SQSJAS上期,casewhenA.SQSJ=0then''''elseSUBSTRING(''卜f'',CAST(SIGN(A.BQSJ—A.SQSJ)ASINT)+2,1)+CAST(CAST(ABS(A,BQSJ-A.SQSJ)*100/A.SQSJASdecimal(10,2))asvarchar)+''%''endAS比上期增长,A.LQSJAS上'+@PS—Span+'同期,casewhenA.LQSJ=0then,'''elseSUBSTRING(''卜t'',CAST(SIGN(A.BQSJ—A.LQSJ)ASINT)+2,l)十CAST(CAST(ABS(A.BQSJ—A.LQSJ)*100/A.LQSJASdecimal(10,2))asvarchar)+,'%''endAS比上'+@PS—Span+'同期增长FROM,Set@vsSql=@vsSql+'(SELECT'+I^place(@PS—Tjlm,'A.','')+'ASTJYJ,isNull('+@PS—TjFs+'(casewhen'+@PS—Rqlm+'〉='''+@current—period—start+'''AND'+@PS—Rqlm+'<='''+@current—period—nextstart+'''then'+@PS—Sjbn+'end),0)ASBQSJ,isNull('+@PS—TjFs+'(casewhen'+@PS_Rqlm+,〉='''+@last—period一start十'''AND'+@PS—Rqlm+'<='''+@last—period—隨tstart+'''then'+@PS—Sjbn+'end),0)ASSQSJ,isNull('+@PS—TjFs+'(casewhen'+@PS—Rqlm+'〉='''+@co:rresponding—period—start+'''AND'+@PS—Rqlm+'<='''+@corresponding—period—nextstart+'''then,+@PS—Sjljn+'end),0)ASLQSJFROM'+@PS—Tab1e/*日期区间*/Set@vsSql=@vsSql+'WHERE'十R印lace(@Sqll2,,A.','')/*其他过滤条件*/if@Ps—Cons〈〉"Set@vsSql=@vsSql+'AND'十R印lace(@PS—Cons,'A.','')Set@vsSql=@vsSql+'GROUPBY'+@PS—Tjlm+')A'EXEC(@vsSQL)if,Error〈>0beginrollbacktranRAISERR0R('警告:执行[增长分析]错误,当前执行的SQL语句是%s.',16,1,'')Print(@vsSQL)rsturnendEndSls6---------------------------------------------------/*构成分析*/---------------------------------------------------if@PS—FXLB='构成分析'Begin/*-sql9.10.11分别代表本期、上期、同期的比例*/Set@sql9='(casewhen'+@sql5+'<>0thenCAST(isNull(BQ.SJ'0)/'+@sql5+'*100.00ASdecimal(10,2))else0end)'Set@sqll0=,(casewhen,+@sql6+'<〉0thenCAST(isNull(SQ.S丄0)/'+@sql6+,*100.00ASdecimal(10,2"else0end)'Set@sqlll='(casewhen'+@sql7+,〈〉0thenCAST(isNull(LQ.SJ,0)/'+@sql7+'*100.00ASdecimal(10,2))else0end)'Set@vsSql=,selectDISTINCT'+@sqll+'AS分析依据,isNull(BQ.SJ,0)AS本期,CAST('+@sql9+'ASVARCHAR)+''%''AS本期结构比,isNull(SQ.SJ,O)AS上期,CAST('+@sqllO+'ASVARCHAR)+,'%',AS上期结构比,SUBSTRINGSi—t'',CAST(SIGN('+@sql9+'」+@sql10+')ASINT)+2,1)+CAST(ABS('+@sql9+,-'+@sql10+')ASVARCHAR)+'''AS比上期结构变化,isNull(LQ.SJ,)AS上'+@PS_Span+,同期,CAST('+@sqlll+,ASVARCHAR)+',%,'AS上'+@PS—Span+'同期结构比,SUBSTRING(',4—t'',CAST(SIGN('+@sql9+'-'+@sqlll+')ASINT)+2,1)+CAST(ABS('+@sql9+'-'+@sql11+')ASVARCHAR)+''%,'AS比上'+@PS—Span+'同期结构变化'+@Sql8+@sql2+@sql3+@sql4Set@vsSql=@vsSql+'WHERE'+@Sqll2if@Ps—Cons<〉''Set@vsSql=@vsSql+'AND'+@PS—ConsEXEC(@vsSQL)if鹏Error〈>0beginrollbacktranRAISERROR('警告执行[构成分析]错误,当前执行的SQL语句是%s.',16,1,'')Print(@vsSQL)rsturnendEndSls6---------------------------------------------------/*因素分析*/^---------------------------------------------------if@PS_FXLB='因素分析,BeginSet@sql2='LEFTJOIN(SELECTB.'十r印lace(@PS—Tjlm,'A.','B.')+'YJB,'+@PS—TjFs+'(B.'+@PS—SjLm+')SJ,'+@PS—TjFs+,(B.'+@PS—SLLM+')SL,casewhen'+@PS_TjFs+,(B.'+@PS—SLLM+')〈〉0then,+@PS_TjFs+,(B.'+@PS_SjLm+')/'+@PS—TjFs+'(B.'+@PS_SLLM+')else0endDJFROM'+@PS_Table+'BWHEREB.'+@PS—Rqlm+'>='''+@current—period—start+'''ANDB.'+@PS_Rqlm+'〈='''+@current—period—nextstart+''''/*其他过滤条件*/if@Ps_Cons<>''Set@sql2=@sql2+'AND'屮R印lace(@PS—Cons,'A.','B.')Set@sql2=@sql2+'GROUPBYB.'十r印lace(@PS—Tjlm''A.','B.')+')BQONBQ.YJB=A.'+@PS_Tjlm+,'A—feql3代表上期数据(金额、数量、平均单价)*/Set@sql3='LEFTJOIN(SELECTC.,+replace(@PS—Tjlm,'A.,,'C.')+'YJC,'+@PS_TjFs+,(C.'+@PS_SjLm+')SJ,'+@PS_TjFs+,(C.'+@PS_SLLM+')SL,casewhen'+@PS—TjFs+'(C.,+@PS_SLLM+,)〈>0then'+@PS—TjFs+'(C.'+@PS_SjLm+')/'+@PS_TjFs+,(C.'+@PS—SLLM+')else0endDJFROM,+@PS_Table+,CWHEREC.'+@PS_Rqlm+,>=',,+@last_periocLstart+'''ANDC.'+@PS_Rqlm+'<='''+@last—period一證tstart+''''/*其他过滤条件*/if@Ps—Cons<〉''Set@sql3=@sql3+'AND'十R印lace(@PS—Cons,'A.','C.')Set@sql3=@sql3+'GROUPBYC.'十r印lace(@PS_Tjlm,'A.,,'C.')+')SQONSQ.YJC=A.'+@PS—Tjlm+''A—feql4代表上一阶段同期数据(金额、数量、平均单价)*/Set@sql4='LEFTJOIN(SELECTD.,十r印lace(@PS_Tjlm,'A.,,'D.')+'YJD,'+@PS_TjFs+'(D.'+@PS_SjLm+,)SJ,'+@PS—TjFs+,(D.'+@PS—SLLM+')SL,casewhen'+@PS_TjFs+'(D.'+@PS—SLLM+')<〉0then,+@PS_TjFs+,(D.,+@PS_SjLm+')/'+@PS—TjFs+'(D.'+@PS—SLLM+')else0endDJFROM'+@PS—Table+'DWHERED.'+@PS_Rqlm+'〉='''+@corresponding_period—start+'''ANDD.'+@PS—Rqlm+'<=,,'+@corresponding_period_nextstart+',''/*其他过滤条件*/if@PsCons〈〉''Set@sql4=@sql4+'AND,屮R印lace(@PS—Cons,'A.','il')Set@sql4=@sql4+'GROUPBYD.'十r印lace(@PS_Tjlm,'A.','D.')+')LQONLQ.YJD:A.'+@PS—Tjlm+''Set@vsSql='selectDISTINCT'+@sqll+,AS分析依据,isNull(BQ.SJ,O)AS本期,(isNull(BQ.SJ,O)—isNull(SQ.SJ,O))AS比上期增加,'+'isNull(BQ.SL,0)*isNull(SQ.DJ,0)—isNull(SQ.SJ,0)as来自数量因素,'+'(isNull(BQ.SJ,O)-(isNull(BQ.SL,0)*isNull(SQ.DJ,O)))as来自价格因素,'+'(isNull(BQ.S丄0)-isNull(LQ.SJ,O))AS比上'+@PS—Span+'同期增长,'+'isNull(BQ.SL,0)*isNull(LQ.DJ,0)-isNull(LQ.SJ,0)as来自于数量因素,'+'(isNull(BQ.SJ,0)—(isNull(BQ.SL,0)*isNull(LQ.DJ,O)))as来自于价格因素'+@Sql8+@sql2+@sql3+@sql4Set@vsSql=@vsSql+'WHERE,+@Sqll2if@Ps—Cons〈〉''Set@vsSql=@vsSql+'AND'+@PS—ConsEXEC(@vsSQL)if,Error〈>0beginrollbacktranRAISERROR('警告执行[因素分析]错误,当前执行的SQL语句是%s.',16,1,'')Print(@vsSQL)returnendEndelse---------------------------------------------------/*简单列示*/---------------------------------------------------if@PS—FXLB='简单列示'一按开始、结束日期统计BeginSet@vsSql='select'+@PS—Tjlm+'AS分析依据,'+@PS—TjFs+,('+@PS—SjLm+')as数值FROM'+@PS—Table+'AWHERE'+@PS—Rqlm+'〈='''+@PS—EndDate+'''AND'+@PS—Rqlm+'〉='''+@PS—BeginDate+''''if@Ps—C。ns<>''Set@vsSql=@vsSql+'AND'+@PS—ConsSet齒vsSql二@vsSql+'GROUPBY,+@PS—TjlmEXEC(@vsSQL)if嗍Error<〉0beginrollbacktranRAISRRROR('警告:执行[简单列示]错误,当前执行的SQL语句是%s.',16,1,'')Print(OvsSQL)returnendEndEndgo>相应的数据表4分析期间createtableWDDSS—PUB—PERIOD(F—BHCHAR(2)NOTNULL,F一MCVARCHAR(255)NOTNULL)godeletefromWDDSS—PUB—PERIODgoinsertWDDSS—PUB—PERIODvaluesgoinsertWDDSS—PUB—PERIODvaluesgoinsertWDDSS—PUB—PERIODvaluesgoinsertWDDSS—PUB—PERIODvaluesgoinsertWDDSS—PUB—PERIODvaluesgoinsertWDDSS_PUB—PERIODvaluesgoinsertWDDSS—PUB—PERIODvalues('Ol','一个月(截止日期所在的自然月)')('02','一个月(从起始日期开始的一个月)')('03','月中(从月初到截止日期)')('04','一周(从起始日期开始的一个周)')('05','—周(截至日期所在的一个周)')('06',,一天')('07','—季度(截止日期所在的季度)')goinsertWDDSS—PUB—PERIODvalues('08','—季度(从起始日期开始的一季度),)goinsertWDDSS—PUB—PERIODvalues('09','季度屮(从季度初到截止日期)')goinsertWDDSS—PUB—PERIODvalues('10','—年(截止Id期所在的自然年)')goinsertWDDSS—PUB—PERIODvalues('ll','一年(从起始日期开始的一年)')goinsertWDDSS_PUB—PERIODvalues('12','年中(从年初到截止日期)')go4存储同期分析的跨度createtableWDDSS—PUB—HOW—LONG(F—BHCHAR(l)NOTNULL,F—MCCHAR(2)NOTNULL)godeletefromWDDSS—PUB—HOW—LONGgoinsertTODSS—PUB—HOW—LONGvalues('Y','年')goinsertWDDSS—PUB—HOW—LONGvalues('Q','季')goinsertWDDSS—PUB—HOW—LONGvalues('M','月')goinsertWDDSS—PUB—HOW—LONGvalues('W','周')goinsertWDDSS—PUB—HOW—LONGvalues('D','日')go本发明有效的解决了企业信息归纳、分析和展示应用的要求,应用此技术后的管理操作流程通畅,使用方便,同时充分利用了原有单企业管理软件的优势,具有良好的应用前景。实施例本发明的方法己经成功试用于浪潮ERP经营视窗产品,通过实施该技术,使得产品的整体编码结构得到极大的优化,开发效率提高一倍以上,并留下了良好的系统扩展接口。权利要求1.一种通用的数据归集方法,其特征在于按照业务类别如销售订单、销售发票、采购入库等抽取关键字段如日期、数量、金额等关键字段数据归集到中间表;然后,通过参数传递方式将分析依据、分析类别、分析对象、分析期间、分析跨度等参数传递到数据查询过程中实现不同角度的分析展现,操作步骤如下1)建立数据中心存储环境;2)分散数据存储数据连接,用于指向各分数据存储;3)数据授权,各操作用户对;4)数据校验关系配置;5)数据中心存储建立标准编码与名称建立;6)分散数据存储有选择引用数据中心编码。全文摘要本发明提供一种通用的数据归集方法,是按照业务类别如销售订单、销售发票、采购入库等抽取关键字段如日期、数量、金额等关键字段数据归集到中间表;然后,通过参数传递方式将分析依据、分析类别、分析对象、分析期间、分析跨度等参数传递到数据查询过程中实现不同角度的分析展现,该面向使用人员,从各种角度对同一事务进行分析,使得数据对企业业务的诠释更加完整,通过技术中的引用规则,可以充分利用企业业务数据,通过系统的整理与过滤,可以有效的建立统一数据展示中心。文档编号G06Q10/00GK101441746SQ20081023783公开日2009年5月27日申请日期2008年12月2日优先权日2008年12月2日发明者刘清华,斌安,波王申请人:浪潮集团山东通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1