在PowerBIDeskTop开启的SSAS服务,和Sqlserver所开启的一个本质的区别是,前者其端口号是随机生成的,即上一次打开获得的端口号,下一次关闭后再打开,系统分配给它新的端口号,而后者因为是服务器版的,服务器的SSAS端口号是固定的,且服务器一般都是长期打开的,不存在端口号变化引起数据连接字符串要变更的情况。
此篇对应功能实现出自:第3波-与PowerbiDesktop互通互联(Excel透视表连接PowerbiDesktop数据模型)https://www.jianshu.com/p/e05460ad407d
Excel连接PowerBIDeskTop端口号更改了怎么办?
因为这个问题,必须在Excel上对其端口号进行重新更新操作,才可以保证再次打开PowerBIDeskTop的SSAS服务后,原来存储在Excel上的通过连接字符串引用到的数据结果仍然可以保持和SSAS模型有连接关系 。
所以就出现了更新连接字符串的功能需求,当然尽可能地减少用户的操作,让更友好的界面来引导用户作必要的识别重新匹配。
Excel与PowerBIDeskTop连接,是用工作薄连接来承接的,所以只需遍历工作薄连接,将其展现给用户。
private void formPbidUpdateConnect_Load(object sender, EventArgs e)
{
foreach (Excel.WorkbookConnection wkbCnn in Common.ExcelApp.ActiveWorkbook.Connections)
{
if (wkbCnn.Description == "pbidConnection")
{
int rowIndex = this.dataGridView1.Rows.Add();
this.dataGridView1.Rows[rowIndex].Cells[0].Value = wkbCnn.Name;
}
}
this.fileName.Width = this.workbookConnect.Width + 50;
this.Width = this.fileName.Width * 2 + 80;
pbidPortTittleMappings = PbidConnection.GetPbidPortTittleMappings();
this.fileName.Items.AddRange(pbidPortTittleMappings.Select(s => s.FileName + "|" + s.Port).ToArray());
}
最终Excel工作薄连接,只需要用下正则表达式,将原来的端口号给替换一下即可。
private void btnEnter_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
if (row.Cells[1].Value!=null)
{
Excel.WorkbookConnection wkbCnn = Common.ExcelApp.ActiveWorkbook.Connections[row.Cells[0].Value];
int newport = int.Parse(row.Cells[1].Value.ToString().Split(new char[] { '|' })[1]);
string newDbName = pbidPortTittleMappings.Where(s => s.Port == newport)
.Select(t => t.DbName).FirstOrDefault();
string newModelName = pbidPortTittleMappings.Where(s => s.Port == newport)
.Select(t => t.ModelName).FirstOrDefault();
string wkbcnnString = wkbCnn.OLEDBConnection.Connection;
wkbcnnString = Regex.Replace(wkbcnnString, @"(?<=localhost:)d+", newport.ToString());
wkbcnnString = Regex.Replace(wkbcnnString, @"(?<=Initial Catalog=)[^;]+", newDbName);
wkbCnn.OLEDBConnection.Connection = wkbcnnString;
wkbCnn.OLEDBConnection.CommandText = newModelName;
}
}
this.Close();
}
结语
在Excel、PowerBIDeskTop、.Net编程三者知识的融合下,打造出来最精彩的Excel催化剂功能应用,出自国人之手,并且无论在功能实现还是原始代码都无私奉献给PowerBI社区,供应社区繁荣。
若你也受感动,何不尽一己微博之力,加入到分享Excel催化剂的行列当中?
技术交流QQ群
QQ群名:Excel催化剂开源讨论群, QQ群号:788145319
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。
最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!
关于Excel催化剂作者
姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)
技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。
擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。
2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。
和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。