SSIS添加分区-动态

主要参考:动态分区

一、前提准备:

1、一个日期存储过程,注意代码可以得到一个月中的最后一天,最终生成时间维度。

USE [DrugDW]
GO
/****** Object:  StoredProcedure [dbo].[PROC_DATETIME]    Script Date: 2/28 星期二 14:16:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER PROCEDURE [dbo].[PROC_DATETIME]AS
BEGIN/****** Object:  StoredProcedure [dbo].[proc_Dim_date]    Script Date: 05/20/2016 11:35:58 ******/IF OBJECT_ID('dbo.Dim_Date') IS NOT NULLDROP TABLE dbo.[Dim_Date]CREATE TABLE [dbo].[Dim_Date]([DateKey] [int] NULL,[Date] [datetime] NULL,[Year] [float] NULL,[Month] [float] NULL,[Month EN] [nvarchar](50) NULL,[Month Short EN] [nvarchar](50) NULL,[Month CN] [nvarchar](50) NULL,[Day] [float] NULL,[Quarter] [float] NULL,[Quarter EN] [nvarchar](50) NULL,[Quarter CN] [nvarchar](50) NULL,[Weekday] [float] NULL,[Weekday CN] [nvarchar](50) NULL,[Weekday Short EN] [nvarchar](50) NULL,[Week of Year] [float] NULL,[Day of Year] [float] NULL,[SemiYearly] [nvarchar](50) NULL,[Period of Ten Days] [nvarchar](10) NULL,[Period of Index] [nvarchar](2) NULL,[Weekend] [nvarchar](5) NULL
) ON [PRIMARY]SET DATEFIRST 7 --设周日为每周的第一天--向日期表插入数据
DECLARE @b1 DATETIME
set @b1='2015-01-01'     --设置起始日期 WHILE @b1< dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))   --设置截止日期
BEGININSERT INTO dbo.[Dim_Date] ([DateKey],[Date], [Year],[Month],[Month EN],[Month Short EN],[Month CN],[Day],[Quarter],[Quarter EN],[Quarter CN],[Weekday],[Weekday CN],[Weekday Short EN],[Week of Year],[Day of Year],[SemiYearly],[Period of Ten Days],[Period of Index] ,[Weekend]) VALUES( CONVERT(NVARCHAR(10),@b1,112),  --DateKey 1@b1, --Date 2DATEPART(year, @b1), --Year 3DATEPART(month, @b1), --Month 4CASE --Month EN 5when (DATEPART(month, @b1))='1' then 'January' when (DATEPART(month, @b1))='2' then 'February'when (DATEPART(month, @b1))='3' then 'March'when (DATEPART(month, @b1))='4' then 'April'when (DATEPART(month, @b1))='5' then 'May'when (DATEPART(month, @b1))='6' then 'June'when (DATEPART(month, @b1))='7' then 'July'when (DATEPART(month, @b1))='8' then 'August'when (DATEPART(month, @b1))='9' then 'September'when (DATEPART(month, @b1))='10' then 'October'when (DATEPART(month, @b1))='11' then 'November'else 'December'END, CASE --Month Short En 6when (DATEPART(month, @b1))='1' then 'Jan' when (DATEPART(month, @b1))='2' then 'Feb'when (DATEPART(month, @b1))='3' then 'Mar'when (DATEPART(month, @b1))='4' then 'Apr'when (DATEPART(month, @b1))='5' then 'May'when (DATEPART(month, @b1))='6' then 'Jun'when (DATEPART(month, @b1))='7' then 'Jul'when (DATEPART(month, @b1))='8' then 'Aug'when (DATEPART(month, @b1))='9' then 'Sep'when (DATEPART(month, @b1))='10' then 'Oct'when (DATEPART(month, @b1))='11' then  'Nov'else 'Dec'END,CASE --Month CN 7when (DATEPART(month, @b1))='1' then N'一月' when (DATEPART(month, @b1))='2' then N'二月'when (DATEPART(month, @b1))='3' then N'三月'when (DATEPART(month, @b1))='4' then N'四月'when (DATEPART(month, @b1))='5' then N'五月'when (DATEPART(month, @b1))='6' then N'六月'when (DATEPART(month, @b1))='7' then N'七月'when (DATEPART(month, @b1))='8' then N'八月'when (DATEPART(month, @b1))='9' then N'九月'when (DATEPART(month, @b1))='10' then N'十月'when (DATEPART(month, @b1))='11' then  N'十一月'else N'十二月'END,DATEPART(day, @b1),--day  8DATEName (qq, @b1),--quarter 9CASE   --quarter en  10when DATEName (qq, @b1)='1' then 'Q1'when DATEName (qq, @b1)='2' then 'Q2' when DATEName (qq, @b1)='3' then 'Q3'else  'Q4'END,CASE  --quarter cn  11when DATEName (qq, @b1)='1' then N'一季度'when DATEName (qq, @b1)='2' then N'二季度' when DATEName (qq, @b1)='3' then N'三季度'else  N'四季度'END,    DATEPART(dw, @b1),--Weekday 12CASE --Weekday CN  13when DATEPART(dw, @b1)=1 then  N'星期日'when DATEPART(dw, @b1)=2 then  N'星期一'when DATEPART(dw, @b1)=3 then  N'星期二'when DATEPART(dw, @b1)=4 then  N'星期三'when DATEPART(dw, @b1)=5 then  N'星期四'when DATEPART(dw, @b1)=6 then  N'星期五'  else N'星期六'END,CASE --Weekday Short EN 14  --注意,周日是第一天.when DATEPART(dw, @b1)='1' then 'Sun'when DATEPART(dw, @b1)='2' then 'Mon'when DATEPART(dw, @b1)='3' then 'Tue'when DATEPART(dw, @b1)='4' then 'Wed'when DATEPART(dw, @b1)='5' then 'Thu'when DATEPART(dw, @b1)='6' then 'Fri'else 'Sat'END, DATEName (wk, @b1),--week of year 15DATEName (dy, @b1),--day of year  16CASE --SemiYearly 17when DATEPART(month, @b1)<=6 then N'上半年'else N'下半年'END,CASE  --Period of Ten Days 18when DATEName (dd, @b1)<=10 then N'上旬' when DATEName (dd, @b1)>20  then N'下旬'else N'中旬'END,CASE  --Period of Ten Days 19when DATEName (dd, @b1)<=10 then N'1' when DATEName (dd, @b1)>20  then N'3'else N'2'END,CASE --Is it Weekend? 20when DATEPART(dw, @b1)='1' then '周末'when DATEPART(dw, @b1)='7' then '周末'else '平时'END 
)
--日期加1天set @b1=DATEADD(day, 1, @b1)
END
end
View Code

2、一个事实表:

 3、构建好的Cube,并且无分区(有分区也无妨,这里只是排除干扰,容易理解):

4、准备SSIS参数:

  二、利用SSIS动态构建分区

最终效果

 最终效果

   2.1 、执行SQL任务        

 

SQLStatement代码:

SELECT 'DrugDW'                                                    AS DataSoureID,--数据源'Drug DW'                                                       AS CubeName,--分区来自哪一个cube'Drug DW'                                                       AS CubeID,'Fact OP Fee Detail'                                           AS MeasureGroup,--指定是一个度量值组'Fact OP Fee Detail'                                      AS MeasureGroupID,'Fact OP Fee Detail ' + Cast(MonthInfo.YearMonth AS VARCHAR(6)) AS Partition,--分区名称=度量值组名称+年月'SELECT *  FROM [dbo].[Fact_OPFeeDetail]    where_clause'   AS SQL,--要进行分区的SQLcast(MinDateKey as varchar(8)) as MinDateKey,--最小datekeycast(MaxDateKey as varchar(8)) as MaxDateKey--最大datekeyFROM   (SELECT t1.YearMonth,(SELECT Min(datekey)   FROM   dim_date t2 WHERE  CONVERT(VARCHAR(6), t2.Date, 112) = t1.YearMonth) AS MinDateKey,(SELECT Max(datekey) FROM   dim_date t2 WHERE  CONVERT(VARCHAR(6), t2.Date, 112) = t1.YearMonth) AS MaxDateKeyFROM  (SELECT DISTINCT CONVERT(VARCHAR(6), Date, 112) AS YearMonth   FROM   dim_date) AS t1)MonthInfoWHERE  EXISTS(SELECT *   FROM   [dbo].[Fact_OPFeeDetail]   WHERE [VisitDateID] BETWEEN MonthInfo.MinDateKey AND MonthInfo.MaxDateKey)
View Code

SQLStatement执行结果:

设置结果集:

2.2、Foreach 循环容器便利结果集    

 

 2.3、编写脚本任务,处理每次的遍历结果:        

2.4、 点击“编辑脚本”:  引用:Analysis Management Obejcts包  

 

 脚本代码(在SQL SERVER 2008请使用语句:(String)Dts.Variables["Partition"].Value;进行强制,不要使用Dts.Variables["User::Partition"].Value.ToString(); ):  

 

#region Help:  Introduction to the script task
/* The Script Task allows you to perform virtually any operation that can be accomplished in* a .Net application within the context of an Integration Services control flow. * * Expand the other regions which have "Help" prefixes for examples of specific ways to use* Integration Services features within this script task. */
#endregion#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using Microsoft.AnalysisServices;
#endregionnamespace ST_4038a8110570463994b546d9f7d48b3d
{[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase{#region ScriptResults declaration/// <summary>/// This enum provides a convenient shorthand within the scope of this class for setting the/// result of the script./// /// This code was generated automatically./// </summary>enum ScriptResults{Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure};#endregionpublic void Main(){// TODO: Add your code hereString sPartition = Dts.Variables["User::Partition"].Value.ToString();     String sCubeName = Dts.Variables["User::CubeName"].Value.ToString();String sMeasureGroup = Dts.Variables["User::MeasureGroup"].Value.ToString();          String sServer = "localhost";String sDataBaseID = Dts.Variables["User::DatabaseID"].Value.ToString();           String sCubeID = Dts.Variables["User::CubeID"].Value.ToString();         String sMeasureGroupID = Dts.Variables["User::MeasureGroupID"].Value.ToString();         String sDataSoureID = Dts.Variables["User::DataSoureID"].Value.ToString();String sSQL = Dts.Variables["User::SQL"].Value.ToString();String sMaxDateKey = Dts.Variables["User::MaxDateKey"].Value.ToString();        String sMinDateKey = Dts.Variables["User::MinDateKey"].Value.ToString();String aSql = sSQL.Replace("where_clause", "where VisitDateID  &gt;=" + sMinDateKey + " and VisitDateID &lt;=" + sMaxDateKey);ConnectionManager cm = Dts.Connections.Add("MSOLAP100");cm.ConnectionString = "Provider=MSOLAP.4;Data Source=localhost;IntegratedSecurity=SSPI;Initial Catalog=" + sDataBaseID;Microsoft.AnalysisServices.Server aServer = new Server();            aServer.Connect(sServer);           Microsoft.AnalysisServices.Database aDatabase = aServer.Databases.FindByName(sDataBaseID);       CubeCollection cubeCollection = aDatabase.Cubes;foreach (Cube item in cubeCollection){string name = item.Name;}Microsoft.AnalysisServices.Cube aCube = aDatabase.Cubes.FindByName(sCubeName);Microsoft.AnalysisServices.MeasureGroup aMeasureGroup;try{MeasureGroupCollection collection = aCube.MeasureGroups;aMeasureGroup = collection.FindByName(sMeasureGroup);}catch (Exception ex){throw ex;}if (aMeasureGroup.Partitions.Contains(sPartition)){Dts.Variables["User::IsNotePresent"].Value = false;Dts.Variables["User::Xmla_script"].Value = "";Dts.TaskResult = (int)ScriptResults.Success;}else{Dts.Variables["User::IsNotePresent"].Value = true;Dts.Variables["User::Xmla_script"].Value ="<Create xmlns=\"http://schemas.microsoft.com/analysisservices/2003/engine\">"+ "<ParentObject>"+ "<DatabaseID>" + sDataBaseID + "</DatabaseID>"+ "<CubeID>" + sCubeID + "</CubeID>"+ "<MeasureGroupID>" + sMeasureGroupID + "</MeasureGroupID>"+ "</ParentObject>"+ "<ObjectDefinition>"+ "<Partition xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ddl2=\"http://schemas.microsoft.com/analysisservices/2003/engine/2\" xmlns:ddl2_2=\"http://schemas.microsoft.com/analysisservices/2003/engine/2/2\" xmlns:ddl100_100=\"http://schemas.microsoft.com/analysisservices/2008/engine/100/100\" xmlns:ddl200=\"http://schemas.microsoft.com/analysisservices/2010/engine/200\" xmlns:ddl200_200=\"http://schemas.microsoft.com/analysisservices/2010/engine/200/200\">"+ "<ID>" + sPartition + "</ID>"+ "<Name>" + sPartition + "</Name>"+ "<Source xsi:type=\"QueryBinding\">"+ "<DataSourceID>" + sDataSoureID + "</DataSourceID>"+ "<QueryDefinition>" + aSql + "</QueryDefinition>"+ "</Source>"+ "<StorageMode>Molap</StorageMode><ProcessingMode>Regular</ProcessingMode>"+ "<ProactiveCaching><SilenceInterval>-PT1S</SilenceInterval><Latency>-PT1S</Latency><SilenceOverrideInterval>-PT1S</SilenceOverrideInterval><ForceRebuildInterval>-PT1S</ForceRebuildInterval>"+ "<Source xsi:type=\"ProactiveCachingInheritedBinding\" /></ProactiveCaching>"+ "</Partition>"+ "</ObjectDefinition>"+ "</Create>";Dts.TaskResult = (int)ScriptResults.Success;}}}
}
View Code

 处理脚本返回值:如果@IsNotePresent是ture:就会将参数Xmla_script中的字符串传给下面的"Analysis Services 执行DDL任务"由它为度量值组生成分区;如果是false就返回null,不生成分区;

2.5、添加Analysis Services 执行 DDL 任务,处理返回值(即为度量值组生成分区): 

2.6、执行SSIS任务,查看分区生成情况:    

 

 

转载于:https://www.cnblogs.com/java-oracle/p/6478853.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canvas 实现图片局部模糊_小技巧!H5使用Html2Canvas实现自动截屏(下)

上文写到使用html2Canvas实现截屏。上次留了一个问题&#xff0c;如果当前dom元素对象比较大&#xff0c;比如包含一个比较大的图片等&#xff0c;在将dom序列化成字符串时&#xff0c;极易导致字符串超长。对于超长的内容&#xff0c;后台程序将获取不到参数&#xff0c;那么怎…

getjson php 函数,PHP读写JSON文件以及jQuery的getJSON函数用法

在写的音乐网站中用到保存用户歌单功能,即用户登录后可以显示该用户之前保存的歌单,开始的思路是使用数据库来保存,后来为了方便于是考虑使用json数据格式来保存歌单,这样也和播放器插件的json参数比较契合.读取JSON文件<?php $filename "chation99.json";$json…

悬而未决的AI竞赛:全球企业人工智能发展现状

来源&#xff1a;德勤,智东西随着企业领袖逐渐将人工智能视为下一轮经济大扩张的重要推动力量&#xff0c;一种担忧错失良机的情绪在全球范围内日益蔓延。许多国家纷纷制定人工智能战略&#xff0c;通过资金投入、政策激励、人才发展和风险管理推进技术能力的发展。人工智能对于…

Science揭示:身体如何应对细菌的“群体感应”

电子显微镜下的假单胞菌细菌。图片来源&#xff1a;MPIIB / Volker Brinkmann来源&#xff1a;中国生物技术网众所周知&#xff0c;细菌感染并不会马上导致疾病&#xff0c;只有在它们大量出现时才会对身体造成威胁。近日&#xff0c;发表在《Science》上的一项研究中&#xff…

百度:2020年十大科技趋势

来源&#xff1a;6G俱乐部图片来源&#xff1a;百度2019&#xff0c;关于科技的鲜活记忆&#xff0c;正在快速变成时间洪流的一部分&#xff0c;也变成了我们读懂未来的钥匙。过去一年中&#xff0c;多技术融合正在加快&#xff0c;AI开发的门槛在迅速降低&#xff0c;产业智能…

美国计划让“人工智能”去搜寻外星人!

来源&#xff1a;科学解码据美国太空网近日报道&#xff0c;美国国家航空航天局&#xff08;NASA&#xff09;官员称&#xff0c;他们希望利用人工智能&#xff08;例如机器学习&#xff09;技术&#xff0c;分析大型望远镜等收集的数据&#xff0c;从而帮助搜寻外星生命&#…

三宝机器人怎么充电_巨人通力导致吉祥三宝+36号故障怪现象的又一因素

想必大家都有过这样的经历&#xff1a;在电梯故障频繁出现时&#xff0c;明明可以判断是哪里的问题&#xff0c;但事实却是让你感觉不可思议&#xff0c;并且排查过程颇为周折。今天和大家分享一下我经历的巨人通力GPS30K电梯出现的吉祥三宝故障的排查过程。下图为电梯控制柜铭…

《自然》展望2020年重大科学事件!中国有两个大计划安排上了

来源&#xff1a;科技日报图片来源&#xff1a;Nature官网&#xff08;不包括标注了来源的图片&#xff09;“千门万户曈曈日&#xff0c;总把新桃换旧符”&#xff01;在辞旧迎新之际&#xff0c;我们除了要埋头梳理过去一年的悲欢得失&#xff0c;也应抬头眺望新一年的星辰大…

vue aplayer 进度条无法拖动_Vue-rideo-player视频播放插件的使用

***** git项目地址&#xff1a; https://github.com/surmon-china/vue-video-player***** 参考文章&#xff1a; https://www.jianshu.com/p/532fc1d8c90c使用安装&#xff1a; npm install vue-video-player --save2. 在main.js入口文件中引入import VideoPlayer from vue-vid…

php流程控制作业题,php流程控制

一、get传值我们请求服务器下一步操作啊&#xff0c;都是用get进行传值&#xff0c;然后服务器用预定义变量数组$_GET&#xff0c;接受。二、流程控制1 三元运算符 ? :逻辑很简单&#xff0c;就是设置条件&#xff0c;条件成立就执行“&#xff1f;” 。条件不成立就执行”:…

JS中的call()和apply()方法(转)

转自&#xff1a;http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类&#xff1a; JS1、方法定义 call方法: 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象…

中国AI芯片产业发展白皮书:未来三年年均增长率超50%

来源&#xff1a;赛迪顾问《中国AI芯片产业发展白皮书》从AI芯片的定义及分类、发展过程与现状、应用机会、竞争格局、发展趋势等多角度全面剖析AI芯片的发展新态势、 技术演进及行业格局&#xff0c;旨在为业内相关企业把握行业发展动态、挖掘市场机遇&#xff0c;提供借鉴与参…

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源&#xff1a; IEEE电气电子工程师尽管大肆宣传&#xff0c;人工智能仍需数年时间才能显著提高经济生产力。2016年&#xff0c;总部位于伦敦的Alphabet&#xff08;也是谷歌的母公司&#xff09;的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…

张恭庆院士:数学的意义(最全最牛的解释)

来源&#xff1a;数学严老师北京大学数学科学学院教授、中国科学院院士、第三世界科学院院士数学既是一种文化、一种“思想的体操”&#xff0c;更是现代理性文化的核心。马克思说&#xff1a;“一门科学只有当它达到了能够成功地运用数学时&#xff0c;才算真正发展了。”在前…

oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件

最近有需求要导出一个专业的详单&#xff0c;用于倒入sqlserver系统&#xff0c;要求用分隔符隔开各字段。一开始准备用toad查询出来在save as&#xff0c;但发现表太多&#xff0c;要一张一张表盯着&#xff0c;而且由于详单数据量大&#xff0c;查询导出占用了大量的客户端内…

vue mxgraph渲染xml页面_Vue的两个版本

Vue.js分为两个版本&#xff0c;简单来说就是一个是完整版vue.js&#xff0c;一个是非完整版vue.runtime.js&#xff1a;1. HTML的书写位置不同完整版&#xff1a;完整版的HTML书写的位置有两个&#xff0c;一个是直接在 *.html 文件中使用 Vue 语法&#xff0c;如下所示&#…

美智库发布报告:《美国在人工智能时代的行动蓝图》

来源&#xff1a;新美国安全中心12月17日&#xff0c;新美国安全中心发布报告《美国人工智能世纪&#xff1a;行动蓝图》&#xff0c;指出先进计算、量子科学、人工智能、合成生物学、5G、增材制造等技术的快速进步正在改变技术运行机制&#xff0c;其中人工智能将产生最广泛的…

四则运算01

编写随机生成30道小学数学题目&#xff1a; 源代码&#xff1a; package test; public class lianxi {String f(){int i (int)(Math.random()*10);int j (int)(Math.random()*10);if(i>j){int temp i;i j;j temp;}return ("("i"/"j")")…

2019-2021年中国AI芯片市场预测与展望数据

来源&#xff1a;赛迪顾问预计未来三年AI芯片市场规模仍将保持50%以上的增长速度&#xff0c;到2019年中国AI芯片市场规模将达到124.1亿元。从细分市场结构来看&#xff0c;云端训练芯片的比例仍然最大&#xff0c;但增速最慢&#xff0c;云端推断芯片与终端推断芯片市场在未来…