利用ADOMD.NET查询Analysis Servies中多维数据集

本文内容
1.        ADOMD NET 查询Analysis Servies中多维数据集

2.       把查询返回来的单元集合转化为DataTable

查询内容:

 2004年四个季度的分销商配额与销售额,所对应的MDX

select {[Measures].[Reseller Sales-Sales Amount] ,[Measures].[Sales Amount Quota] } on columns, {[Date].[Fiscal Quarter].Members} on rows

 from [Analysis Services Tutorial]

 where [Date].[Fiscal Year].&[2004]"

数据集:联机帮助文档自带教程完成第七课后,布署后的多维数据集Analysis Services Tutorial

查询轴:

    列轴:分销商配额与销售额对应的度量值[Measures].[Reseller Sales-Sales Amount] ,[Measures].[Sales Amount Quota]

    行轴:时间维度的季度所有成员[Fiscal Quarter].Members

切片轴:时间维度中年份级别中的2004年面员

数据结构的转化

 ADOMD.NET查询返回的单元格集合CellSet的信息其中包插查询轴(列轴与行轴)和度量值集合(如图一),但客户端应用程序显示数据需要表的数据结构,列与行组成.数据结构的转化细节请看代码中的注释.

             
(图一)

(2)

代码:


using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  Microsoft.AnalysisServices.AdomdClient;
namespace  winAl
{
    
public partial class Form1 : Form
    
{
        
public Form1()
        
{
            
            InitializeComponent();
        }

        
public void Adomd()
        
{
            
//连接的字符串
            string conStr = "provider=msolap ;Integrated Security =SSPI ;Data Source= localhost ;Catalog =Analysis Services Tutorial ;";
            
//创建个连接对象
            AdomdConnection con = new AdomdConnection();            
            con.ConnectionString 
= conStr;
            con.Open();  
            
// 创建个命令
            AdomdCommand cmm =con.CreateCommand();
            
            cmm.CommandText 
= @" select {[Measures].[Reseller Sales-Sales Amount] ,[Measures].[Sales Amount Quota] } on columns,
            {[Date].[Fiscal Quarter].Members} on rows 
            from [Analysis Services Tutorial]
 
            where [Date].[Fiscal Year].&[2004]
";
            
//执行命令返回单元集合
            CellSet result = cmm.ExecuteCellSet();
            
this.dataGridView1.DataSource = CellSetToTable(result);
            con.Close();
            
        }


        
private DataTable CellSetToTable(CellSet cellset)
        
{
            
            DataTable table 
= new DataTable("cellset");   

          
            Axis columns
=cellset.Axes[0] ;//获取列轴
            Axis rows=cellset.Axes[1] ; //获取行轴
            CellCollection valuesCell = cellset.Cells;//获取度量值单元集合
            
//行轴的级别标题为表的第一列
            table.Columns.Add(rows.Set.Hierarchies[0].Caption);
            
//行轴的成各个成员的标题变成表的列
            for(int i=0 ;i<columns.Set.Tuples.Count ;i++)
            
{
             table.Columns.Add(
new DataColumn(columns.Set.Tuples[i].Members[0].Caption)) ;
            }

            
int valuesIndex=0;
            DataRow row 
= null;
            
//向表中填充数据
            for (int i = 0; i < rows.Set.Tuples.Count;i++ )
            
{
                row 
= table.NewRow();
                
//表所有行的第一列值为相应行轴的成标题
                row[0= rows.Set.Tuples[i].Members[0].Caption;
                
for (int k = 1; k <= columns.Set.Tuples.Count;k++ )
                
{   //按顺序把度量值单元集合的值填充到表中
                    row[k] = valuesCell[valuesIndex].Value;
                    valuesIndex
++;
                }

                table.Rows.Add(row);
            }


            
return table;
            
        
        }
     

        
private void button1_Click(object sender, EventArgs e)
        
{
            Adomd();
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值