SSIS处理CUbe-动态

场景:由SSIS动态生成的分区,在使用SSIS动态执行这些分区!

  

 

 一、我们知道执行某个分区的时候,其实是由脚本去调用和配置的:

脚本的内容:

<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <ErrorConfiguration 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" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300">
    <KeyErrorLimit>-1</KeyErrorLimit>
    <KeyNotFound>IgnoreError</KeyNotFound>
  </ErrorConfiguration>
  <Parallel>
    <Process 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" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300">
      <Object>
        <DatabaseID>Drug_SSAS</DatabaseID>
        <CubeID>Drug DW</CubeID>
        <MeasureGroupID>Fact OP Fee Detail</MeasureGroupID>
        <PartitionID>Fact OP Fee Detail 201702</PartitionID>
      </Object>
      <Type>ProcessData</Type>
      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
    </Process>
  </Parallel>
</Batch>
View Code

我们只需要将脚本内的值,动态的赋值,即可按照我们的配置进行执行分区或者度量值组。

二、使用SSIS执行指定的分区(当前时间的前2个月的分区):

 

最终效果

 

参数准备:

2.1 、执行SQL任务:主要是将执行cube所需的参数构造并传递出去:

SELECT 'Drug_SSAS'                                                         AS DatabaseID,

       'Drug DW'                                                                       AS CubeID,

       'Fact OP Fee Detail '                                                          AS MeasureGroupID,

       'Fact OP Fee Detail ' + CONVERT(VARCHAR(6), Dateadd(month, -1, Getdate()), 112) AS PartitionID

UNION

SELECT 'Drug_SSAS'                                      AS DatabaseID,

       'Drug DW'                                                   AS CubeID,

       'Fact OP Fee Detail '                                       AS MeasureGroupID,

      'Fact OP Fee Detail ' + CONVERT(VARCHAR(6), Getdate(), 112) AS PartitionID
View Code

语句执行结果:

 

2.2 、Foreach 循环容器遍历SQL任务的结果集:     

2.3 、执行脚本任务,处理Foreach 循环容器的每条结果:   

点击“编辑脚本”:

#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
#endregion

namespace ST_679fffc011334d1cb4eae175a9221ba1
{
    
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        public void Main()
        {
            // TODO: Add your code here

            String sDatabaseID = Dts.Variables["User::DatabaseID"].Value.ToString();          
            String sCubeID = Dts.Variables["User::CubeID"].Value.ToString();         
            String sMeasureGroupID = Dts.Variables["User::MeasureGroupID"].Value.ToString().Trim();

            String sPartitionID = Dts.Variables["User::PartitionID"].Value.ToString().Trim();
         
            Dts.Variables["User::Xmla_Script"].Value = 
                    "<Batch xmlns=\"http://schemas.microsoft.com/analysisservices/2003/engine\">"
                    + "<ErrorConfiguration 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\" xmlns:ddl300=\"http://schemas.microsoft.com/analysisservices/2011/engine/300\" xmlns:ddl300_300=\"http://schemas.microsoft.com/analysisservices/2011/engine/300/300\">"
                    + "<KeyErrorLimit>-1</KeyErrorLimit>"
                    + "<KeyNotFound>IgnoreError</KeyNotFound>"
                    + "<NullKeyNotAllowed>IgnoreError</NullKeyNotAllowed>"
                    + "</ErrorConfiguration>"
                    + "<Parallel>"
                    + "<Process 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\" xmlns:ddl300=\"http://schemas.microsoft.com/analysisservices/2011/engine/300\" xmlns:ddl300_300=\"http://schemas.microsoft.com/analysisservices/2011/engine/300/300\">"
                    + "<Object>"
                    + "<DatabaseID>" + sDatabaseID + "</DatabaseID>"
                    + "<CubeID>"+sCubeID+"</CubeID>"
                    + "<MeasureGroupID>" + sMeasureGroupID + "</MeasureGroupID>"
                    + "<PartitionID>" + sPartitionID + "</PartitionID>"
                    + "</Object>"
                    + "<Type>ProcessFull</Type>"
                    + "<WriteBackTableCreation>UseExisting</WriteBackTableCreation>"
                    + "</Process>"
                    + "</Parallel>"
                    + "</Batch>";
                  Dts.TaskResult = (int)ScriptResults.Success;
        }

        #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
        };
        #endregion

    }
}
View Code

2.4 、我们知道脚本中是有参数传出来的,使用Analysis Services 执行 DDL 任务接受参数,执行cube处理:    

2.5 、执行SSIS任务:   

 

   

 

    

    

   

posted @ 2017-02-28 17:38  ABO-阿博  阅读(486)  评论(0编辑  收藏  举报