[譯]SSAS下玩轉PowerShell(二)

哥本哈士奇(aspnetx)發表於2014-05-25

上一篇中簡單的介紹了SSAS下的PowerShell,這一篇會演示更多的操作,比如根據當前時間建立備份,使用變數去指定處理哪一個分割槽,以及用XMLA指令碼去建立分割槽,和在PowerShell中呼叫PowerShell指令碼。

 

原文地址:

http://www.mssqltips.com/sqlservertip/2939/automate-sql-server-analysis-services-tasks-with-powershell--part-2/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=20140328

 

 

在SSAS下使用PowerShell變數

  1. 首先來看下面的程式碼:

    $mydate="ssas powershell"

    這裡我們建立了一個名字為$mydate的變數,$字首表名這是一個變數,然後給這個變數賦一個值"ssas powershell"。

  2. 如果需要顯示變數$mydte的值只需要把變數的名字敲出來然後按ENTER。

    $mydate

  3. 接下來把當前日期賦給這個變數。

    $mydate=Get-Date

    通過Get-Date方法獲取到當前日期,並且將其賦給$mydate變數。PowerShell是不需要為變數指定型別的:

  4. 預設顯示的日期型別是長型別的,並且格式會遵從伺服器的配置格式。通過下面的命令可以將其轉換成yyyyddMM的格式:

    $mydate=Get-Date –format yyyyddMM

    MM在這裡是大寫主要是為了跟分鐘的小寫mm區分開。

  5. 驗證下格式:

    $mydate

    這樣我們就獲取到了一個格式為yyyyddMM的儲存有當前日期的變數。

  6. 接下來需要做的就是根據這個當前時間來建立備份。

    backup-asdatabase d:\awdb-$mydate.abf "AdventureWorksDW2012Multidimensional-EE" -AllowOverwrite –ApplyCompression

    這樣一個待用當前時間編輯的檔名備份就被建立在了d盤上。同樣在上面的這個命令中,指派了資料庫的名稱,允許覆蓋標記以及是否啟用壓縮。

 

使用PowerShell處理SSAS的一個分割槽

跟上一篇的不同,這裡我們用一個變數名引入到命令中,來實現動態的分割槽處理。

  1. 首先我們來關注下SSAS的分割槽,檢視下圖,我們可以看到SSAS資料庫的層級極結構:

  2. 接下來我們要處理Internet_Orders_2008這個分割槽。跟上一篇不同我們通過變數的方式$myyear傳送2008這個值到命令中然後處理相應的分割槽。

    $myyear=2008

    Invoke-ProcessPartition -Name "Internet_Orders_"+$myyear -MeasureGroupname "Internet Orders" -CubeName "Adventure Works" -database "AdventureWorksDW2012Multidimensional-EE" -ProcessType "ProcessFull"

    在上面的命令中,變數"Internet_Orders_$myyear"對應的就是分割槽名"Internet_Orders_2008"。度量值組是"Internet Orders",CubeName是"Adventure Works"。

 

 

通過PowerShell呼叫XMLA指令碼

  1. XMLA最主要的一個用途就是建立和處理SSAS物件。在這個示例中我們生成一個指令碼來建立分割槽,然後在PowerShell裡執行它。首先,建立一個生成分割槽"Internet_Orders_2008"的指令碼。

  2. 然後,對這個XMLA指令碼進行修改,找到標識分割槽名稱為2008的地方,將其改成2009。

    [譯註]:原文這裡沒有提到,就是下面的QueryDefinition對應的那段SQL程式碼也是需要修改的,所以實際專案中,需要根據實際情況,Name和QueryDefinition都需要修改,這裡的修改跟UI介面中的都能對應的上,所以這裡不做詳細介紹。

  3. 將這段指令碼儲存下來,比如:d:\powershell2\createPartition.xmla目錄,然後用PowerShell的Invoke-ASCMD命令執行這個指令碼。

    Invoke-ASCmd -InputFile:"d:\powershell2\createPartition.xmla"

    Invoke-ASCMD命令用於在PowerShell中執行SSAS命令,比如XMLA指令碼,應用立方體的MDX指令碼以及應用資料探勘的DMX指令碼。如果此時在SSMS中重新整理一下SSAS例項,可以看到新建立的分割槽。

 

在PowerShell中執行MDX查詢

  1. 首先生成一段MDX查詢,在SSMS中瀏覽Adventure Works立方體。

  2. 拖拽Internet Order Count度量值到查詢皮膚中。

  3. 點選設計模式圖示就可以看到對應的MDX指令碼。

  4. 把指令碼拷貝出來然後儲存到文字檔案中,比如d:\powershell2\" directory。
  5. 用如下命令執行這個mdx指令碼。

    Invoke-ASCmd -Database "AdventureWorksDW2012Multidimensional-EE" -InputFile:"d:\powershell2\mymdx.mdx"| Out-file d:\Results\XMLAQueryOutput.xml

    這裡我們所做的就是在AdventureWorksDW2012Multidimensional資料庫中執行這個MDX查詢,查詢結果以XML的方式顯示在檔案XMLAQueryOutput.xml中。

  6. 查詢的結果可以在XML檔案中找到。

 

 

[譯註]

原文介紹的都是很簡單的操作,但是對於自動化任務來說還是很方便的,不如動態建立分割槽,動態處理分割槽等等,變數的引入可以加入更多的程式流程在裡面,從而實現更復雜的功能。

相關文章