通过Powershell检查cube中每个度量是否都有值

浏览: 2172

[void][reflection.assembly]::LoadFile("C:\Program Files\Microsoft.NET\ADOMD.NET\100\Microsoft.AnalysisServices.AdomdClient.dll") 

$conn = New-object Microsoft.AnalysisServices.AdomdClient.AdomdConnection;

 

write-host "Server(default localhost):"
$strServer= read-host
write-host "Database(default DBName):"
$strDatabase = read-host
write-host "Cube(default CubeName, press 'a' for ALL):"
$strCube=read-host

if ([System.String]::IsNullOrEmpty($strServer))
{
    $strServer="localhost\r2"
}
if ([System.String]::IsNullOrEmpty($strDatabase))
{
    $strDatabase="DBName"
}
if ([System.String]::IsNullOrEmpty($strCube))
{
    $strCube="CubeName"
}

write-host "Connect server:" $strServer ", database:" $strDatabase ",cube:" $strCube

$conn.ConnectionString = "Provider=MSOLAP.3;Persist Security Info=True;Data Source= " + $strServer + " ;Initial Catalog= " +$strDatabase;
$conn.Open();

write-output "Opened."

foreach ($cu in $conn.Cubes)
{
    if ($cu.Type -eq [Microsoft.AnalysisServices.AdomdClient.CubeType]::Cube)
    {   
        if (($cu.Name -eq $strCube) -or ($strCube.ToUpper() -eq "A"))
        {
            write-output "---------------------------------------"
            write-output "Cube:" $cu.Name;
            write-output "---------------------------------------"
            
            $total=0
            $zero=0
            
            foreach ($m in $cu.Measures)
            {
                $total++
                
                $strMDX = "SELECT " + $m.UniqueName + " ON 0 FROM [" + $cu.Name + "]"
                #write-host $strMDX
                
                $comm=$conn.CreateCommand()
                $comm.CommandText=$strMDX
                $reader=$comm.ExecuteReader()
                $t = $reader.Read()
                
                $result=0
                
                if ($reader[0] -eq $null)
                {
                    $result=0
                }
                else
                {
                    $result = [System.Convert]::ToDouble($reader[0])
                    $reader.Close()
                    
                    if ($result -gt 0)
                    {
                        #write-output $result
                        $zero++
                        continue
                    }
                }
                
                $name=$m.Name
                write-output "$name : $result"
                
                #write-output $m.Name
                $reader.Close()
            }
            
            write-output "------------------------------------$zero/$total"
        }
    }
}

 

Keypoints:

如何在powershell引入并且使用adomd.net对象。

如何声明一个.net对象。

如何使用.net枚举。

如何使用.net下实例或者静态方法。

 

推荐 0
本文由 哥本哈士奇 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册