上一篇中简单的介绍了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变量
首先来看下面的代码:$mydate=ssas powershell
这里我们创建了一个名字为$mydate的变量,$前缀表名这是一个变量,然后给这个变量赋一个值ssas powershell。
如果需要显示变量$mydte的值只需要把变量的名字敲出来然后按enter。$mydate
接下来把当前日期赋给这个变量。$mydate=get-date
通过get-date方法获取到当前日期,并且将其赋给$mydate变量。powershell是不需要为变量指定类型的:
默认显示的日期类型是长类型的,并且格式会遵从服务器的配置格式。通过下面的命令可以将其转换成yyyyddmm的格式:$mydate=get-date –format yyyyddmm
mm在这里是大写主要是为了跟分钟的小写mm区分开。
验证下格式:$mydate
这样我们就获取到了一个格式为yyyyddmm的保存有当前日期的变量。
接下来需要做的就是根据这个当前时间来创建备份。backup-asdatabase d:\awdb-$mydate.abf adventureworksdw2012multidimensional-ee -allowoverwrite –applycompression
这样一个待用当前时间编辑的文件名备份就被创建在了d盘上。同样在上面的这个命令中,指派了数据库的名称,允许覆盖标记以及是否启用压缩。
使用powershell处理ssas的一个分区
跟上一篇的不同,这里我们用一个变量名引入到命令中,来实现动态的分区处理。
首先我们来关注下ssas的分区,查看下图,我们可以看到ssas数据库的层级极结构:
接下来我们要处理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脚本
xmla最主要的一个用途就是创建和处理ssas对象。在这个示例中我们生成一个脚本来创建分区,然后在powershell里执行它。首先,创建一个生成分区internet_orders_2008的脚本。
然后,对这个xmla脚本进行修改,找到标识分区名称为2008的地方,将其改成2009。
[译注]:原文这里没有提到,就是下面的querydefinition对应的那段sql代码也是需要修改的,所以实际项目中,需要根据实际情况,name和querydefinition都需要修改,这里的修改跟ui界面中的都能对应的上,所以这里不做详细介绍。
将这段脚本保存下来,比如: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查询
首先生成一段mdx查询,在ssms中浏览adventure works立方体。
拖拽internet order count度量值到查询面板中。
点击设计模式图标就可以看到对应的mdx脚本。
把脚本拷贝出来然后保存到文本文件中,比如d:\powershell2\ directory。用如下命令运行这个mdx脚本。invoke-ascmd -database adventureworksdw2012multidimensional-ee -inputfile:d:\powershell2\mymdx.mdx| out-file d:\results\xmlaqueryoutput.xml
这里我们所做的就是在adventureworksdw2012multidimensional数据库中运行这个mdx查询,查询结果以xml的方式显示在文件xmlaqueryoutput.xml中。
查询的结果可以在xml文件中找到。
[译注]
原文介绍的都是很简单的操作,但是对于自动化任务来说还是很方便的,不如动态创建分区,动态处理分区等等,变量的引入可以加入更多的程序流程在里面,从而实现更复杂的功能。