SSAS 2005 的 "OSQL 工具"





3.00/5 (2投票s)
一个脚本,允许您将许多 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
部署
最困难的部分是配置。以下是步骤
- 设置对 SQL Server 2005 Analysis Services 的 HTTP 访问:http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx。
- 确保 XMLA 虚拟目录设置为仅基本身份验证。请注意,您也可以使用匿名访问(使用具有 SSAS 服务器管理员访问权限的用户),但此选项安全性较低。
- 更改配置文件 (xmlaConfig.xml) 以指向您的 XMLA 提供程序(例如 http://MyServer/xmla/msmdpump.dll)。设置具有 SSAS 服务器管理员访问权限的 Windows 用户名(域\用户名)和密码。
- 将您的 XMLA 文件拖放到脚本文件 (xmla.vbs) 上
- 可选地,您可以在与脚本文件相同的文件夹中创建一个名为 XMLA 的子文件夹。脚本文件将查找 XMLA 子文件夹并在其中运行所有 XMLA 文件。
关注点
这是我之前编写的一个代码,用于使用 OSQL 实用工具对 SQL Server 数据库运行多个 SQL 文件:http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=1087&lngWId=5。