65.9K
CodeProject 正在变化。 阅读更多。
Home

SSAS 2005 的 "OSQL 工具"

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2008 年 6 月 18 日

CPOL

2分钟阅读

viewsIcon

30328

downloadIcon

106

一个脚本,允许您将许多 XMLA 文件运行到 SSAS 2005 数据库。

引言

Microsoft Analysis Services 2005 的一个很酷的功能是,它允许您编写脚本执行许多管理任务(例如角色创建和立方体处理)。这些脚本文件以 XMLA 扩展名保存,并以 Analysis Services Scripting Language (ASSL) 格式编写。

当您需要将大量(100+)这些文件运行到 SSAS 数据库时,问题就出现了。不幸的是,我找不到一个以编程方式运行这些文件的实用工具。本文描述了如何创建一个 VBS 脚本文件,以将许多 XMLA 文件运行到 SSAS。

背景

诀窍是使用 HTTP 访问发送 Execute XMLA 请求到 SSAS。执行请求,除了允许您发送 MDX 命令外,还允许您发送 ASSL 命令。

Using the Code

这是 VBS 脚本文件的代码

Const ForAppending = 8
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim sFolder: sFolder = fso.GetParentFolderName(WScript.ScriptFullName)
Dim oLogFile: Set oLogFile = _
    fso.CreateTextFile(WScript.ScriptFullName & ".log", True)
Dim sUrl
Dim sUserName
Dim sPassword


LoadConfigFile

If WScript.Arguments.Count = 0 Then
 ProcessFolder sFolder & "\XMLA"
Else
 For i = 0 to WScript.Arguments.Count -1
  ProcessFile WScript.Arguments(i)
 Next 
End If

Log "Done!"
oLogFile.Close

'===================================================================

Sub ProcessFolder(sMyFolder)
 If Not fso.FolderExists(sMyFolder) Then
  Log "Folder does not exist: " & sMyFolder
  Exit Sub
 End If
 
 Dim oFolder, oFile
 Set oFolder = fso.GetFolder(sMyFolder)
    For Each oFile In oFolder.Files
        If LCase(Right(oFile.Name, 5)) = ".xmla" Then
   ProcessFile oFile.Path 
        End If
    Next
End Sub

Sub LoadConfigFile()
 Dim sConfigFile: sConfigFile = sFolder & "\XmlaConfig.xml"
 If Not fso.FileExists(sConfigFile) Then
  Log "Configuration file does not exist: " & sConfigFile
  WScript.Quit
 End If
 
 Dim oDoc: Set oDoc = CreateObject("MSXML2.DOMDocument")
 If Not oDoc.Load(sConfigFile) Then
  Log "Configuration file could not be loaded: " & _
      sConfigFile & " " & oDoc.parseError.reason
  WScript.Quit
 End If
 sUrl = oDoc.SelectSingleNode("settings/url").Text
 sUserName = oDoc.SelectSingleNode("settings/user").Text
 sPassword = oDoc.SelectSingleNode("settings/password").Text
End Sub

Sub ProcessFile(sFilePath)
 If Not fso.FileExists(sFilePath) Then
  Log ("File does not exist: " & sFilePath)
  Exit Sub
 End If
 Log "Executing: " & sFilePath
 Dim sConents: sConents = GetFileContents(sFilePath)
 Dim strQuery: strQuery = EncloseTag("Command", sConents)
 Dim strProps: strProps = EncloseTag("Properties", _
     "<PropertyList><Timeout>0</Timeout></PropertyList>")
 Dim sNS: sNS = " xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" 
     xmlns:xsi = ""http://www.w3.org/2001/XMLSchema-instance"" 
     xmlns:xsd=""http://www.w3.org/2001/XMLSchema"""
 Dim sPayload: sPayload = "<?xml version='1.0'?>" & _
   "<SOAP-ENV:Envelope " & sNS & ">" & _
   "<SOAP-ENV:Body>" & _
   " <Execute xmlns=""urn:schemas-microsoft-com:xml-analysis"" >" & _
   strQuery + strProps & _
   " </Execute>" & _
   "</SOAP-ENV:Body>" & _
   "</SOAP-ENV:Envelope>"
 Log PostData(sUrl, sPayload, sUserName, sPassword)
 Log ""
End Sub

Private Sub Log(sLine)
 oLogFile.WriteLine sLine
 'WScript.Echo sLine
End Sub

Private Function EncloseTag(sTag, sValue)
 EncloseTag = "<" & sTag & ">" & sValue & "</" & sTag & ">"
End Function

Private Function PostData(sUrl, sData, sUserName, sPassword)
 Dim oHttp
 'Set oHttp = CreateObject("Microsoft.XMLHTTP")
 Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
    oHttp.setTimeouts 0, 0, 0, 0
 
 oHttp.Open "POST", sUrl, False, sUserName, sPassword
 oHttp.setRequestHeader "SOAPAction", _
       """urn:schemas-microsoft-com:xml-analysis:Execute"""
 oHttp.Send sData
 PostData = oHttp.responseText
 Set oHttp = Nothing
End Function

Public Function GetFileContents(sFilePath)
 Dim sContents
 Const ForReading = 1
 Const TristateMixed = -2
 Set oTextFile = fso.OpenTextFile(sFilePath, ForReading, False, TristateMixed)
 Do While Not oTextFile.AtEndOfStream
  sContents = sContents & oTextFile.ReadLine
 Loop
 oTextFile.Close
 GetFileContents = sContents
End Function

部署

最困难的部分是配置。以下是步骤

  1. 设置对 SQL Server 2005 Analysis Services 的 HTTP 访问:http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx
  2. 确保 XMLA 虚拟目录设置为仅基本身份验证。请注意,您也可以使用匿名访问(使用具有 SSAS 服务器管理员访问权限的用户),但此选项安全性较低。
  3. 更改配置文件 (xmlaConfig.xml) 以指向您的 XMLA 提供程序(例如 http://MyServer/xmla/msmdpump.dll)。设置具有 SSAS 服务器管理员访问权限的 Windows 用户名(域\用户名)和密码。
  4. 将您的 XMLA 文件拖放到脚本文件 (xmla.vbs) 上
  5. 可选地,您可以在与脚本文件相同的文件夹中创建一个名为 XMLA 的子文件夹。脚本文件将查找 XMLA 子文件夹并在其中运行所有 XMLA 文件。

关注点

这是我之前编写的一个代码,用于使用 OSQL 实用工具对 SQL Server 数据库运行多个 SQL 文件:http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=1087&lngWId=5

© . All rights reserved.