zoukankan      html  css  js  c++  java
  • BI笔记之SSAS库Process的几种方案

    本文综合描述SSAS库的处理的几种方案,并简单介绍各种方案的应用场景。

    环境约定:SQL Server 2008

    示例库:Adventure Works DW

    方式一:直接在项目中Process

    这种方法在开发阶段和测试阶段是经常使用的。

    如图这种处理方式通常是第一次的全量处理,如果SSAS库犹更新的话会提示先部署。

    可以看到在出现的Process界面中处理的级别是Database。

    同时也可以直接点击cube(或者是挖掘结构)单独处理它们:

    如果是处理Cube的话也会有很多种方式:

    同时维度也是可以单独处理的:

    还有,分区也是可以单独处理的(如果存在分区的话),不过就不是在Solution界面了,而是得打开Cube设计视图,然后点分区:

    关于处理增量的选项,在SSAS库刚部署好的时候是没有的,只有在处理过一次SSAS库之后这个处理选项才会存在。

    这个方法是最基本的方法,毕竟SSAS库本身诞生于此。适用于开发和测试阶段及生产和开发不是隔离,对安全要求不是很高的情况。

    方式二:在SSIS包中Process

    这个方法的优点是定义很方便。

    在BIDS中直接新建项目,选择商业智能下的集成服务项目:

    里面有一个模块式专门用来处理SSAS库。

    可以看到在每一个模块中可以分别定义都处理什么内容。

    通常,都是先处理维度,然后再处理Cube的。

    同样,在这里可以自己设计增量方案。如果定义好了增量方案的话,按照这种方案走的BI方案就成型了。最后需要做的就是,将SSIS包部署到集成服务上,然后设置好Job和Schedule。

    关于如何部署和发布SSIS包,可以参考下面两个链接:

    http://msdn.microsoft.com/zh-cn/library/ms137592.aspx

    http://msdn.microsoft.com/zh-cn/library/ms365338.aspx

    关于Cube的增量处理方案,可以参考我的这篇文章:BI笔记之---增量方式处理多维数据集

    这种方法应该算是微软产品线中最标准的方法。适用范围很广。

    方式三:代码中Process

    代码的处理方式虽然比较复杂,但还是比较灵活的,主要还是调用AMO对象来实现。

    这里只简单介绍如何处理Database级别的逻辑。(通过枚举AMO下的Server对象的各子对象可以很简单的定义每个SSAS对象的处理)

    Server _server = new Server();

    _server.Connect("localhost");

    Database _db = _server.Databases["Adventure Works DW 2008"];

    //generate xmla command.

    _server.CaptureXml = true;

    //process command.

    _db.Process();

    _server.CaptureXml = false;

    //out put xmla.

    foreach (string item in _server.CaptureLog)

    {

    Console.WriteLine(item);

    }

    Console.WriteLine("Processing");

    //execute

    XmlaResultCollection _result = _server.ExecuteCaptureLog(true,true);

    Console.WriteLine("Process finished");

    //out put result

    foreach (XmlaResult r in _result)

    {

    foreach (XmlaMessage m in r.Messages)

    {

    Console.WriteLine(m.Description);

    }

    }

    Console.WriteLine("Finished");

    Console.ReadLine();

    [2011-03-26补充]:另附Powershell版的Process

    [void][reflection.assembly]::LoadFile("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.AnalysisServices.dll")

    $server=New-Object Microsoft.AnalysisServices.Server

    $server.Connect("localhost")
    $db=$server.Databases.GetByName("Adventure Works DW 2008R2")

    $server.CaptureXml=$true
    $db.Process()
    $server.CaptureXml=$false

    write-output "Processing..."

    $result = $server.ExecuteCaptureLog($true,$true)
    foreach ($r in $result)
    {
        foreach ($m in $r.Messages)
        {
            write-output $m.Description
        }
    }

    write-output "Done"

    留意代码的_server.CaptureXml部分,由于我们要处理的是Database,所以直接枚举到Database的时候直接调用Process方法,其相关的XMLA指令就会保存在_Server的CaptureLog属性中。代码的第一个foreach就是现实生成的XMLA命令的部分。

    另:也可以通过ASCMD来处理Cube,关于如何操作ASCMD,请参考上一篇:

    BI笔记之--- SSAS部署的几种方式

    中关于如何以ascmd.exe部署SSAS库的描述。

    通过代码能处理的SSAS粒度很细,参看本文中截图中的Add Analysis Services Object可以看到能枚举到的都有哪些对象,另外通过下列代码,也可以把这些对象都枚举出来:

    Server _server = new Server();

    _server.Connect("localhost");

    foreach (Database _db in _server.Databases)

    {

    Console.WriteLine("Database:" + _db.Name);

    foreach (Cube _cube in _db.Cubes)

    {

    Console.WriteLine("--Cube:" + _cube.Name);

    foreach (MeasureGroup _mg in _cube.MeasureGroups)

    {

    Console.WriteLine("----Measure Group:" + _mg.Name);

    foreach (Partition _pt in _mg.Partitions)

    {

    Console.WriteLine("------Partition:" + _pt.Name);

    }

    }

    foreach (CubeDimension _dm in _cube.Dimensions)

    {

    Console.WriteLine("----Dimension:" + _dm.Name);

    }

    }

    }

    以下是运行结果:

    可以看出一个SSAS库基本上是这样一个结构:

    上图省略了挖掘结构中的相应部分。

    实际处理 cube的时候,就可以在枚举的过程中,加入自己的逻辑来判断这个SSAS对象是否需要被处理,如果需要被处理的话,调用其Process方法就可以。

    通过这种方法也可以间接的实现一种增量方案,不过需要数据仓库端实体设计上的一些配合,具体方案已经超出本文范围,但将在后续内容提到。

  • 相关阅读:
    .net core 经典面试题
    面试常问概念类问题
    常见 .net 面试题目
    Linux 最常用150个命令汇总
    .net core 国际化(web通用版)
    vim 命令合集
    解决Mariadb安装时的Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-qenllaxj/mysqlclient/报错
    正则表达式
    python中的JWT
    chapter2.3、react高阶组件,装饰器
  • 原文地址:https://www.cnblogs.com/aspnetx/p/1817032.html
Copyright © 2011-2022 走看看