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的更多相关文章

  1. 使用PowerShell为SSAS Role添加Membership

    PowerShell, SSAS, Role, Membership 上篇随笔使用PowerShell创建SSAS Role贴出了如何使用PowerShell批量创建Role,由于个人项目需求,创建R ...

  2. Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机

    <Windows Azure Platform 系列文章目录> 本文介绍的是国外的Azure Global.如果是国内由世纪互联运维的Azure China,请参考这篇文档: Azure ...

  3. [Redis]如何通过Powershell创建Redis服务

    目前Redis在中国上线了,不过只是预览版而且不能通过Portal进行操作,不过可以通过Powershell创建,具体如下: 下载最新的Powershell SDK:http://www.window ...

  4. SharePoint 2013 使用PowerShell创建State Service

    今天,搞SPD配置的sp2010wf迁移到sp2013环境上去,发布解决方案都很正常,给列表添加wf的时候报错“该表单无法显示,可能是由于 Microsoft SharePoint Server St ...

  5. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  6. 采用powershell创建project网站集(摘抄自https://www.cnblogs.com/jindahao/p/5855668.html)

    采用powershell创建project网站集,具体步骤如下 1.输入License Enable-ProjectServerLicense –Key "23CB6-N4X8Q-WWD7M ...

  7. Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  8. Azure VMSS ---- PowerShell创建标准镜像的VMSS集群

    VMSS的创建可以采用Portal.Powershell.Azure CLI或者Template. 但目前Portal创建有很多限制,本文将介绍如何用PowerShell来创建VMSS的集群. 具体的 ...

  9. 在Azure上通过Powershell创建多Interface的Cisco CSR路由器

    前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...

随机推荐

  1. org.springframework.dao.CannotAcquireLockException解决

    java.sql.SQLException: Lock wait timeout exceeded 该异常为一个service中调用了另一个service,两个service对同一表进行操作,造成事务 ...

  2. java.lang.IllegalStateException: Cannot call sendError() after the response has been committed解读

    源代码: @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Ob ...

  3. 弹性盒子模型display:flex

    1.div上下左右居中 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. CSS3-渐变这个属性2

    渐变 有了渐变再也不用去切1px的图再重复了.. -webkit- 是浏览器前缀, 表示特定浏览器对一个属性还在实验阶段, 在这里顺便写下各个浏览器的前缀: chrome/ safari     -w ...

  5. 安装gensim报错:Original error was: DLL load failed: 找不到指定的模块。 Command "python setup.py egg_info" failed with error code 1 in C:\Users\xubing\AppData\Local\Temp\pip-install-nta89iep\gensim\

    1.pip install --upgrade setuptools #安装或升级 2.如果是基于numpy的python 包,升级numpy pip install -U numpy 3.重新pip ...

  6. sql注入实例详解(二)

    前言 这篇文章就是一个最基本的SQl手工注入的过程了.基本上在sqlilabs上面的实验,如果知道了其中的全部知识点,都可以通过以下的步骤进行脱裤.下面的这个步骤也是其他的脱裤手段的基础.如果想要精通 ...

  7. IOS----UIScrollerView的使用

    刚刚遛狗回来,前段时间创建的这篇博客一直没有填充内容,今天把scrollerview正好整理一下. 1.scrollerview的主要作用:当界面显示不开要显示的内容,scrollerview提供了滑 ...

  8. 编译原理(一)绪论概念&文法与语言

    绪论概念&文法与语言 以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 绪论基本概念 1. 低级语言:字位码.机器语言.汇编语言.与特定的机器有关,功效高,但使用复杂.繁琐.费时 ...

  9. 常用的re正则

    常用的正则表达式: 用户名:/^[a-z0-9_-]{3,16}$/ 密码:/^[a-z0-9_-]{6,18}$/ 十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/ 电子邮 ...

  10. np.array()和np.mat()区别

    1. 生成数组所需格式不同 mat可以从字符串或列表中生成:array只能从列表中生成 2. 生成的数组计算方式不同 array生成数组,用np.dot()表示矩阵乘积,(*)号或np.multipl ...