使用PowerShell创建SSAS Role
PowerShell, SSAS, Role, DatabasePermission, Cube, Dimension, CubePermission, CubeDimensionCube
在SSAS中创建Role是一个比较繁琐的操作,一般都会涉及到如下操作:创建Role、选择Database Permission、添加Memeberships、选择Cube的Access权限、Cell Data、选择Dimension的Access权限以及DimensionData中Attribute的Allowed/Denied Set.
个人结合工作中的实际情况,通过Poweshell完成了Role的创建,代码如下:
.CSV格式
# ---------------------------------------------------------
# AUTHOR: Niko / hewuquan@outlook.com / 2016-10-18
# For XX BI Project - Create Roles In SSAS
# Steps: Start-Commands => Create-Roles => Insert-Role
# Param: RoleList.csv (DealerNo, DealerName, CompanyID)
# Function: Create 3 Roles for each dealer
# --------------------------------------------------------- # ---------------------------------------------------------
# Load Assemblys And Modules
# ---------------------------------------------------------
If (![System.reflection.Assembly]::LoadWithPartialName(“Microsoft.AnalysisServices”))
{
Write-Host "[ERROR] Microsoft.AnalysisServices Assembly couldn't be loaded. Script will stop!"
Exit 1
}
If (![System.reflection.Assembly]::LoadWithPartialName(“System.IO”))
{
Write-Host "[ERROR] System.IO Assembly couldn't be loaded. Script will stop!"
Exit 1
} # ---------------------------------------------------------
# Static Variables
# ---------------------------------------------------------
$path = Split-Path -parent $MyInvocation.MyCommand.Definition
$newpath = $path + "\RoleList.csv"
$log = $path + "\Log.txt"
$date = Get-Date
$iRow = 1
$logMsg $server = New-Object Microsoft.AnalysisServices.Server
$server.Connect("Put You Server Instance Here")
$dbName = "Put You SSAS Database Name Here"
$database = $server.Databases.Item($dbName) # ---------------------------------------------------------
# Start Function
# ---------------------------------------------------------
Function Start-Commands
{
Create-Roles
} # ---------------------------------------------------------
# Function to Log
# ---------------------------------------------------------
Function Write-Log
{
$logMsg = "{0}: {1}" -f $date.ToString("yyyy-MM-dd hh:mm:ss"),$logMsg
Write-Host $logMsg
$logMsg | Out-File $log -Append
} # ---------------------------------------------------------
# Detail: Create Role In SSAS
# Check Role If Exists => Crate Role => Grant Database Access
# => Grant Cube Access Pemission
# => Grant Dimension Permission
# ---------------------------------------------------------
Function Insert-Role
{
param
(
[String] $RoleName,
[Int] $iRow,
[Int] $CompanyID,
[String] $RoleType #All, Parts, Service
)
begin
{
Write-Host "`r`n"
$logMsg = "[INFO] Processing Role $($RoleName)..."
Write-Log
}
process
{
# Check If Exists
If ( $database.Roles.FindByName($RoleName) )
{
#Write-Host $RoleName, $iRow, $CompanyID
$logMsg = "[WARN] Role $($roleName) is already exists in database. Processing skipped for line $($iRow)"
Write-Log
Return
}
# Create Role
$RoletoCreate = New-Object Microsoft.AnalysisServices.Role($RoleName)
Try
{
$database.Roles.Add($RoletoCreate)
$RoletoCreate.Update()
$logMsg = "[INFO] Creat Role ($($RoleName)) Succeed."
Write-Log
}
Catch
{
$logMsg = "[ERROR] Create Role ($($RoleName)) Failed. $($_.Exception.Message)"
Write-Log
Return
}
# Grant Database Access Permission
Try
{
$dbPermission = $database.DatabasePermissions.Add($RoletoCreate.ID)
$dbPermission.ReadDefinition = [Microsoft.AnalysisServices.ReadDefinitionAccess]::Allowed
$dbPermission.Update()
$logMsg = "[INFO] Grant Role ($($RoleName)) Database Access Permission Succeed."
Write-Log
}
Catch
{
$logMsg = "[ERROR] Grant Role ($($RoleName)) Database Access Permission Failed. $($_.Exception.Message)"
Write-Log
}
# Grant Cube Access Pemission
Foreach($cubeItem in $database.Cubes)
{
Try
{
$cubePermission = $cubeItem.CubePermissions.Add( $RoletoCreate.ID )
$cubePermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed # Grant Dimension Permission
# Parts & Service: (Company, Dealer); Clocking (Company); Sales: (Dealer)
if ( $cubeItem.Name -eq "Parts" -Or $cubeItem.Name -eq "Service")
{
$dimItem = $database.Dimensions.FindByName("Company")
$attItem = $dimItem.Attributes.FindByName("BICompany")
$cubeDimPermission = $cubePermission.DimensionPermissions.Add( $dimItem.ID )
$cubeDimPermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$attPermission = $cubeDimPermission.AttributePermissions.Add( $attItem.ID )
$attPermission.AllowedSet = "{[Company].[BICompany].&[$($CompanyID)]}" $dimItem = $database.Dimensions.FindByName("Dealer")
$attItem = $dimItem.Attributes.FindByName("BICompany")
$cubeDimPermission = $cubePermission.DimensionPermissions.Add( $dimItem.ID )
$cubeDimPermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$attPermission = $cubeDimPermission.AttributePermissions.Add( $attItem.ID )
$attPermission.AllowedSet = "{[Dealer].[BICompany].&[$($CompanyID)]}"
}
if ( $cubeItem.Name -eq "Clocking")
{
$dimItem = $database.Dimensions.FindByName("Company")
$attItem = $dimItem.Attributes.FindByName("BICompany")
$cubeDimPermission = $cubePermission.DimensionPermissions.Add( $dimItem.ID )
$cubeDimPermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$attPermission = $cubeDimPermission.AttributePermissions.Add( $attItem.ID )
$attPermission.AllowedSet = "{[Company].[BICompany].&[$($CompanyID)]}"
}
if ( $cubeItem.Name -eq "Sales")
{
$dimItem = $database.Dimensions.FindByName("Dealer")
$attItem = $dimItem.Attributes.FindByName("BICompany")
$cubeDimPermission = $cubePermission.DimensionPermissions.Add( $dimItem.ID )
$cubeDimPermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$attPermission = $cubeDimPermission.AttributePermissions.Add( $attItem.ID )
$attPermission.AllowedSet = "{[Dealer].[BICompany].&[$($CompanyID)]}"
} #1,All: All Cubes; 2,Parts: Parts Cube; 3,Service: Service Cube
If ( $RoleType -eq "All" -Or ( $RoleType -eq "Parts" -and $cubeItem.Name -eq "Parts" ) -Or ( $RoleType -eq "Service" -and $cubeItem.Name -eq "Service" ) )
{
$cubePermission.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
}
else
{
$cubePermission.Read = [Microsoft.AnalysisServices.ReadAccess]::None
}
$cubePermission.Update() $logMsg = "[INFO] Grant Cube ($($cubeItem.Name)) Read Permission To ($($RoleName)) Succeed."
Write-Log
}
Catch
{
$logMsg = "[ERROR] Grant Cube ($($cubeItem.Name)) Read Permission To ($($RoleName)) Failed. $($_.Exception.Message)"
Write-Log
Return
}
}
# Grant Dimension Permission
}
} # ---------------------------------------------------------
# Read CSV to Create SSAS Roles
# Read CSV => Create 3 Role for each row
# ---------------------------------------------------------
Function Create-Roles
{
$logMsg = "[INFO] Processing started"
Write-Log Import-Csv $newpath | ForEach-Object{
If ( ($_.DealerNo -eq "") -Or ($_.DealerName -eq "") -Or ($_.CompanyID -eq "") )
{
$logMsg = "[ERROR] Please provide valid DealerNo, DealerName and CompanyID. Processing skipped for line $($iRow)"
Write-Log
}
Else
{
$roleName = $_.DealerNo + " " + $_.DealerName # Role 1
$roleNameParts = $roleName + " Parts" # Role Parts
$roleNameService = $roleName + " Services" # Role Service Insert-Role $roleName $iRow $_.CompanyID "All"
Insert-Role $roleNameParts $iRow $_.CompanyID "Parts"
Insert-Role $roleNameService $iRow $_.CompanyID "Service"
}
$iRow ++
} $server.Disconnect() Write-Host "`r`n"
$logMsg = "[INFO] Processing stopped"
Write-Log
} Start-Commands
Write-Host -NoNewline "Press [Enter] to Exit..."
Read-Host
使用PowerShell创建SSAS Role的更多相关文章
- 使用PowerShell为SSAS Role添加Membership
PowerShell, SSAS, Role, Membership 上篇随笔使用PowerShell创建SSAS Role贴出了如何使用PowerShell批量创建Role,由于个人项目需求,创建R ...
- Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机
<Windows Azure Platform 系列文章目录> 本文介绍的是国外的Azure Global.如果是国内由世纪互联运维的Azure China,请参考这篇文档: Azure ...
- [Redis]如何通过Powershell创建Redis服务
目前Redis在中国上线了,不过只是预览版而且不能通过Portal进行操作,不过可以通过Powershell创建,具体如下: 下载最新的Powershell SDK:http://www.window ...
- SharePoint 2013 使用PowerShell创建State Service
今天,搞SPD配置的sp2010wf迁移到sp2013环境上去,发布解决方案都很正常,给列表添加wf的时候报错“该表单无法显示,可能是由于 Microsoft SharePoint Server St ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection
通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...
- 采用powershell创建project网站集(摘抄自https://www.cnblogs.com/jindahao/p/5855668.html)
采用powershell创建project网站集,具体步骤如下 1.输入License Enable-ProjectServerLicense –Key "23CB6-N4X8Q-WWD7M ...
- Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群
前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...
- Azure VMSS ---- PowerShell创建标准镜像的VMSS集群
VMSS的创建可以采用Portal.Powershell.Azure CLI或者Template. 但目前Portal创建有很多限制,本文将介绍如何用PowerShell来创建VMSS的集群. 具体的 ...
- 在Azure上通过Powershell创建多Interface的Cisco CSR路由器
前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...
随机推荐
- WPF自定义滚动条
我修改了一些地方,部分代码参考了博主 https://www.cnblogs.com/xiaomingg/ <!-- ScrollViewer 滚动条 --> <Style x:Ke ...
- JavaScript多个音频audio标签,点击其中一个播放时,其他的停止播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java中将图片保存到数据库中
在实际的开发中,我们可能需要将图片.影音等文件直接保存到数据库中,然后通过编程方式将数据读出进行使用.例如将读出的图片数据显示出来,将读出的电影文件播放出来. 二进制数据直接保存到文件和从文件中读出非 ...
- mangodb的存储
mongodb基本命令 mongo #进入mongo命令行show dbs #查看所有数据库 use tutorial #切换到名为tutorial的数据库 show collections #查看数 ...
- pandas.concat连接dataframe
https://blog.csdn.net/stevenkwong/article/details/52528616
- 关于类的成员,public,private修饰符
类的成员要:属性,方法 属性:是它本身所居有的东西,比如人的特征,也可以这样理解属性是静态状态 方法:是这些属性通过方法行为发生改变,也就是方法是动态,可以对属性进行更新 public 公共的,可以被 ...
- 递归实现快速幂(C++版)
快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 就以a的b次方来介绍: 把b转换成二进制数,该二进制数第i位的权为 ...
- QuantLib 金融计算——基本组件之 DateGeneration 类
目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...
- Linux Shell编程、变量、控制语句
为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...
- Python基础部分的疑惑解析——运算符和数据类型(3)
补充上一篇: #! /user/bin/env python 代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...