使用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 ...
随机推荐
- django drf 权限permission
https://www.django-rest-framework.org/api-guide/permissions/#custom-permissions from django.shortcut ...
- vs 你不得不会的调试方式
常规调试F5 一般情况下,我们在使用vs的jdk调试程序,通常是使用F5这种常规编译方式,很方便 but,编译的速度是so慢,慢的让人无法忍受,通常一个稍大一点的项目跑起来就需要一分钟,甚至两分钟,作 ...
- unity 移动物体的方式
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- 【OCP-12c】2019年CUUG OCP 071考试题库(76题)
76.View the exhibit and examine the description of the DEPARTMENTSand EMPLOYEEStables. The retrieve ...
- 【OCP|052】OCP最新题库解析系列-3
3.Which structure can span multiple data files?❑ A) a permanent tablespace❑ B) a bigfile tablespace❑ ...
- poj 3133 Manhattan Wiring
http://poj.org/problem?id=3133 考虑插头 dp 用四进制表示一个插头的状态,0 表示没有插头,2 表示这个插头是连接两个 2 的,3 同理 然后就是大力分类讨论了 这题还 ...
- HBase二级索引的设计
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...
- 定期删除Azure存储账号下N天之前的数据文件-ASM
######RemoveStorageBlob*DaysOld##### <# .SYNOPSIS Remove all blob contents from one storage accou ...
- 使用python 模仿mybinlog 命令 二进制分析mysql binlog
出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该声明. ...
- i2c_smbs 函数
i2c_smbus系列函数有: s32 i2c_smbus_read_byte(const struct i2c_client *client); s32 i2c_smbus_write_byte(c ...