PBI催化剂较Tabular Editor好用易用之处
bigegpt 2024-10-12 05:21 8 浏览
相信近期Powerbi推出的外部工具功能,越来越多的PowerBI爱好者开始尝试下载Tabular Editor来玩弄一把,特别是现阶段,如果需要做度量值计算组功能,也只有Tabular Editor可以胜任,甚至连原生的PowerBIDeskTop都不支持。
诚然Tabular Editor已经非常优秀且具有非常丰富的扩展接口,供高级用户使用,为何还需要PBI催化剂的存在呢?本篇暂且不说PBI催化剂有而Tabular Editor没有的功能,仅对两者共有,都能实现的一些高级应用特别是批量性应用来作对比,告诉大家PBI催化剂有其更大的易用性和强大性。
背景介绍
Tabular Editor是一款独立的软件,Winform架构,同时亦兼有命令行访问方式,并且作者还打造了一个Wrapper轮子,使.NET程序更简单方便地调用SSAS接口。
其github开源地址为: https://github.com/otykier/TabularEditor,若仅需要下载其最新版本,可跳转到此网址去下载: https://github.com/otykier/TabularEditor/releases 。每次到此网址去查看更新日志,都会让笔者感到兴奋不已,随着软件的更新,功能更强大,稳定性越来越好,特别是最近修复了中文字符显示的问题,太让笔者感到开心。
难能可贵的是,这样一款非常小众的开源软件,作者把wiki介绍做得非常完善,PBI催化剂很多灵感都是从其现有功能及介绍而来,特别是其脚本功能,网址为: https://github.com/otykier/TabularEditor/wiki/Useful-script-snippets
PBI催化剂大量的功能实现的底层代码,借且于Tabular Editor的开源代码参考及其Wrapper轮子TOMWrapper实现,在此真的非常感谢Tabular Editor的作者的无私奉献。
功能对比
在Tabular Editor里,其高级的功能,多数在于使用高级脚本的方式来扩展实现的,但能够使用脚本,必须会一些C#的编程技术,否则可能只能借助其Wiki上写的例子简单操作下,很难有能力驾驭住,当然有了PBI催化剂后,当有共性且高频使用的,笔者也已经将其封装起来,实现更为友好地界面式操作,无感底层的代码级别的复杂度。
一、批量导出导入模型属性数据
在Tabular Editor里,其实现方式,使用高级脚本来访问数据模型。如下图所示:
具体可参考其文档: https://github.com/otykier/TabularEditor/wiki/Useful-script-snippets#export-object-properties-to-a-file
除了上述说到的需要掌握C#语言才能编写外,退一万步,就算已经掌握了语言,在Tabular Editor作者所使用的方式中,他没有将数据导出到Excel文件,而是使用tsv格式(以制表符为分隔符的文本文件,类似以逗号分隔的csv文件)。
此方法天然地对导出数据中的万一包含制表符换行符等符号时,非常容易产生数据错乱问题。
因为这个问题,我还曾经在github上向作者发出一条issues反映这个问题。https://github.com/otykier/TabularEditor/issues/307
同样一个问题是,在导出的对象属性过程中,不知道该对象有什么属性,就难于对其进行导出,只能查明此对象具体有有些属性,再通过传入属性字符串名称的方式才能拿到最终此属性的信息。
针对上述提到的三大痛点问题,且看在PBI催化剂中如何将其一一破解,带出一个超级棒的操作流程与体验。
- PBI催化剂中,无需任何代码,即可界面方式完成所需导出的对象的选择及其对应的属性的进一步细分选择。
如下图的红框3部分,想要什么属性,就勾选什么属性,如果固定化需要哪些属性,也可以自行字符串拼接完成。
- 导出的数据结果是在Excel表格内,不受换行符、制表符等影响错位问题。
数据在Excel表格里,下一步进行查看、编辑也带来无限地便利,就算上述导出许多不相关的属性也不必介怀,简单删除或隐藏某些属性列即可,整个过程非常流畅。
- 除了导出功能外,导入功能同样体验更佳
因为没有制表符、换行符等问题,在Excel表格上快速加工好自己想整理的属性数据如显示文件夹、数字显示格式等。只需反向操作,更新属性时,选择当前修改好的属性信息,即可完成导入更新操作。
相对来说,Tabular Editor还要按要求加工好数据,再导出为tsv格式,再进行导入,过程非常麻烦。且存在换行符、制表符错乱问题,导出的数据需要整理很长时间,导入数据时,如果需要修改DAX表达式等含有换行符、制表符的,最终只能得到错误的结果。
- 在新建、删除操作上PBI催化剂体验亦更好
上述导出的对象属性清单,在PBI催化剂中,甚至可以复用此清单,只需进行Excel环境的筛选、删除、新增操作,最终确定需要新建或删除的记录,直接一键完成对模型对象的新增或删除操作。
而对应的Tabular Editor来说,实现这些效果,要写很长的代码段来完成。
二、批量格式化DAX表达式
在Tabular Editor里,有一个很好的交互效果,程序可识别当前界面选择的对象如度量值、计算列等对象。可以多选。最终通过遍历的方式拿到选择的清单如:Selected.Columns、Selected.Measures等。
诚然,这些为批量性操作带来了可能,但单从界面操作来说,还是不能直接零代码实现,就算使用了高级脚本的代码编写操作,因为其Selected对象不能跨文件夹选择对象的原因(多个显示文件夹里的多个度量值不能同时选定,只能某个显示文件夹里的度量值可批量选定),也是不能真正一次性选择到自己想格式化的完整 清单。
这些种种的缺陷和弊端,在PBI催化剂里,都已经不是问题,将DAX表格式清单导出Excel后,然后简单进行筛选操作,即可完成需要格式化的清单选择,然后下一步骤就是耐心等待格式化的完成(调用的是DaxFormatter的网站接口,国外网站访问有些慢)。
三、按关键词查找某个对象信息
当模型越来越复杂后,想查找某个对象时,已经不能仅仅凭记忆来完成此事,搜索功能是必然需要的。
在Tabular Editor的界面来说,其提供了Filter的功能,可以在下图红框处输入关键字,然后对模型进行检索,返回包含关键字的对象信息。
上述所示的结果,其搜索的范围仅为对象的Name属性如度量值的名称,但如果需要搜索的是其他属性时,其使用的方式就变得复杂许多,同样需要用到C#语言的知识,如果不懂C#将难以操作。
例如要查看度量值的表达式内容包含SUM关键字::Expression.ToUpper().Contains("SUM"),编写不容易,修改也很不容易。
具体的方式可参阅以下网址:
https://github.com/otykier/TabularEditor/wiki/Advanced-Filtering-of-the-Explorer-Tree
在PBI催化剂里,特别对于高频的DAX表达式(度量值、计算列、计算表),采用名称和表达式关键词一并查询,全程界面操作,体验也是非常棒。查询到结果后,对其结果进行编辑后的保存、删除及对应的依赖与反依赖关键都在同一界面完成,也是非常流畅符合实际的操作流程。
当然其他更为复杂的属性搜索,可以重新回到遍历属性功能里,将所有属性都遍历导出到Excel中,再从Excel中简单的查找、筛选功能,发现最终想找到的对象及其信息。如下图中的partition对象,将其所属的表信息、对应的原始查询信息,都轻松地查询得到。如果让TabularEditor通过其界面来完成,将是非常复杂的过程。
四、批量生成扩展度量值
在Tabular Editor的高级脚本Wiki中,也提到这个使用场景,的确非常刚需,能够一次性批量生成众多度量值,这个功能在实际项目里,太让人喜爱了。
在PBI催化剂里,最起码的提升是零代码化了,整个操作体验,更符合使用工具人的习惯。
结语
Tabular Editor无疑是一款非常优秀的PowerBI建模辅助工具,特别对于企业级PowerBI项目来说,面对复杂的数据模型,没有工具的提升,单纯使用微软原生的开发工具,效率非常低。
而在Tabular Editor之上,PBI催化剂虽然技术含量不高,但论及其使用友好度,也是较Tabular Editor更胜一筹,青出于蓝。
同时也因为两者的开发者知识体系及面对的服务群体不同,PBI催化剂,更适用于没有.NET语言基础的纯工具使用群体,特别是从Excel用户过渡而来的PowerBI爱好者。
在批量性操作方面,相信PBI催化剂不会令任何一位PowerBI资深爱好者失望,你们苦苦找的外部工具本土化的就是PBI催化剂莫属了。
相关推荐
- Go语言泛型-泛型约束与实践(go1.7泛型)
-
来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...
- golang总结(golang实战教程)
-
基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...
- Go 官宣:新版 Protobuf API(go pro版本)
-
原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...
- Golang开发的一些注意事项(一)(golang入门项目)
-
1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...
- golang 托盘菜单应用及打开系统默认浏览器
-
之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...
- golang标准库每日一库之 io/ioutil
-
一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...
- 文件类型更改器——GoLang 中的 CLI 工具
-
我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...
- Go (Golang) 中的 Channels 简介(golang channel长度和容量)
-
这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...
- Golang引入泛型:Go将Interface「」替换为“Any”
-
现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...
- 一文带你看懂Golang最新特性(golang2.0特性)
-
作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...
- Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移
-
以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...
- Golang使用grpc详解(golang gcc)
-
gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...
- Etcd服务注册与发现封装实现--golang
-
服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...
- Golang:将日志以Json格式输出到Kafka
-
在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...
- 如何从 PHP 过渡到 Golang?(php转golang)
-
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)