加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver2005的KPI展示控件开发详解

发布时间:2020-12-12 15:47:28 所属栏目:MsSql教程 来源:网络整理
导读:? 注意:这篇文章其实在几天前我已经写过,但是那是我的第一片文章, 写的相当粗糙,很多东西都没有写详细,只是草草的提供了源码的下载 ,看到我的那篇数据挖掘控件研究点击量有点大,给了我不少安慰, 因此决定重写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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读