微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver2005的KPI展示控件开发详解

 

注意:这篇文章其实在几天前我已经写过,但是那是我的第一片文章

写的相当粗糙,很多东西都没有写详细,只是草草的提供了源码的下载

,看到我的那篇<数据挖掘控件研究>点击量有点大,给了我不少安慰,

因此决定重写KPI展示这片文章。没有深入了解过的朋友请继续往下看。

关于sqlserver2005中的KPI特性,相信接触过sqlserver2005的BI的平台

的朋友都有所耳闻。并且跟数据挖掘查看器一样,微软只在

sqlserver2005客户端里面提供了展示界面,并没有把展示的编程接口提

供给我们。所以这些工作只有我们coder自己来做了。


sqlserver2005里的KPI,创建的时候需要设置KPI名称,值表达式,目标

表达式,状态指示器,状态表达式,走向指示器,走向表达式等。

后来通过google得知,原来sqlserver2005自带的那个KPI的查看器,实

现原理是这样的。微软先做了n张图片图片的路径在(注意:我的

sqlserver2005是安装在D盘的)
D:/Program Files/Microsoft sql Server/90

/Tools/Binn/VSShell/Common7

/IDE/DataWarehouseDesigner/KPIsbrowserPage/Images

然后,通过状态表达式和走向表达式返回不同的值来决定显示哪张图片

原理还是非常简单,还好它没有采用GDI把这些图片画出来,呵呵,不然

小弟只有罢手了。接下来,我们开始coding吧。

step1.定义一个DataGridViewStatusCell(从DataGridViewImageCell继

承)和DataGridViewStatusColumn(从DataGridViewImageColumn继承)

,用于显示状态指示器。

 

Code

 

DataGridViewStatusColumn定义


step2.定义一个DataGridViewTrendColumn(从DataGridViewImageCell

继承)和DataGridViewStatusColumn(从DataGridViewImageColumn继承

),用于显示走向指示器。

DataGridViewTrendCell定义

 

DataGridViewTrendColumn定义


step3.取得analysis services 中的定义的KPI的信息和KPI的值。

  /// <summary>

        
/// 展示结果

        
/// </summary>

         public   void  display()

        
{


            AdomdConnection myKPIConnection 
= new AdomdConnection(_connectString);


            _kpiDataSet 
= new KPIDataSet();


            KPIDataSet.KPIModelRow kpiRow;


            
try

            
{

                myKPIConnection.open();

                Cubedef myCubedef 
= myKPIConnection.Cubes[this._cubeName];

                AdomdCommand myKPICommand;


                
foreach (Kpi k in myCubedef.Kpis)

                
{


                    myKPICommand 
= new AdomdCommand();


                    myKPICommand.Connection 
= myKPIConnection;

                   

                    StringBuilder sb 
= new StringBuilder();

                    sb.Append(
"SELECT { ");

                    sb.Append(
"KPIValue(/"" + k.Name + "/"), ");

                    sb.Append(
"KPIGoal(/"" + k.Name + "/"), ");

                    sb.Append(
"KPIStatus(/"" + k.Name + "/"), ");

                    sb.Append(
"KPITrend(/"" + k.Name + "/")");

                    sb.Append(
"} ON COLUMNS FROM ["+this._cubeName+"]");


                    myKPICommand.CommandText 
= sb.ToString();


                    CellSet cellset 
= myKPICommand.ExecuteCellSet();


                    
string kpiName = k.Name;

                    
string kpiValue = cellset.Cells[0].FormattedValue;

                    
string kpiGoal = cellset.Cells[1].FormattedValue;

                    
string kpiStatus = cellset.Cells[2].FormattedValue;

                    
string kpiTrend = cellset.Cells[3].FormattedValue;

                    
string kpiStatusGraph = k.StatusGraphic;

                    
string kpiTrendGraph = k.TrendGraphic;


                    kpiRow 
= this._kpiDataSet.KPIModel.NewKPIModelRow();


                    kpiRow.Name 
= kpiName;

                    kpiRow.Value 
= Convert.ToDecimal(kpiValue);

                    kpiRow.Goal 
= Convert.ToDecimal(kpiGoal);

                    kpiRow.Status 
= kpiStatusGraph + "," + kpiStatus;

                    kpiRow.Trend 
= kpiTrendGraph + "," + kpiTrend;


                    
this._kpiDataSet.KPIModel.AddKPIModelRow(kpiRow);

                }

            }

            
catch (AdomdErrorResponseException myException)

            
{

                MessageBox.Show(
this"连接Analysis Service服务器出错!""错误", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

            }

            
catch (Exception ex)

            
{

                MessageBox.Show(
this"未知错误!", MessageBoxDefaultButton.Button1);

            }

            
finally

            
{

                myKPIConnection.Close();

            }



step4.绑定到DataGridView。
 this.kpiDataGridView1.DataSource = this._kpiDataSet.KPIModel;

step5.搞定,运行。



完整代码下载地址:
KPIDisplayer.rar

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐