背景

在上篇内容中,我们从SaaS各种功能的角度为大家介绍了在数据处理中SaaS的巨大价值,而本次我们将用实例将为大家展示SaaS与BI间的碰撞又会产生怎样的火花。

BI与SaaS集成示例

通常BI分析工具都提供了对于数据库的丰富接口,用以更加快捷高效地处理数据。此处我们以一具体工具实例作为演示内容,它提供基于GraphQL的丰富的API接口,可以通过API和动态参数来根据用户上下文信息获取相应的数据和生成文档。具体嵌入方式可以根据SaaS系统情况进行合理调整。

1、创建数据源

对于多租户的场合,通常会基于用户进行分库处理,这种情况可以通过用户上下文信息,创建动态数据源:

1.1 添加扩展参数,增加用户上下文的数据库信息

1.2 创建用户时,绑定上该用户的数据库信息

1.3 创建数据源时,使用动态参数配置

2、创建角色和用户 (使用内置用户)

2.1创建角色名:

POST /api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"query":"mutation { addRole( roleName: \"2\" ) { name } }"}

2.2 POST提交:

POST /admin/api/accountmanagement/api/v1/roles?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"Name":"2"}

2.3为角色分配权限:

POST
/admin/api/accountmanagement/api/v1/roles/3f497dc1-66a6-45cb-a999-6c7f4b1bb15f/permissions?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"Permissions":["create-data-source","create-semantic-model","create-dataset","create-dashboard","view-dashboard","create-report","view-report","schedule-reports","create-input-form","view-revision","allow-sharing"]}

2.4 创建用户,并分配角色

POST /admin/api/accountmanagement/api/v1/users/?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"username":"2","email":"123@123.com","mobile":"","firstName":"","lastName":"","fullName":null,"password":"2","confirmPassword":"2","roles":["2"],"customizePropertyInfo":{"DBName":["Test"],"Password":["mAbQ5mlMDWck_xysj3rQ"],"Port":["3306"],"ServerIP":["192.168.32.100"],"Uid":["root"]}}

3、API生成Token

生成Token的API接口,除此之外所有的API调用都需要Token参数才能正确访问

POST /connect/token
Content-Type: application/x-www-form-urlencoded grant_type=password&username=admin&password=admin&client_id=integration&client_secret=eunGKas3Pqd6FMwx9eUpdS7xmz&access-token-lifetime=86400

* 注意申请token时应使用access-token-lifetime参数限制token的有效时长,单位为秒,长期无限制地使用永久Token,将可能由于Token堆积而影响登录性能 (永久Token可通过清理wynis数据库中grants表中的数据进行处理)

4、创建门户目录

4.1 获取最大分类ID

POST /api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"query":"query { tags (type: \"system\") { id, parentId, order, name, url, color, iconCssClass, isFavorites } }"}

4.2 新建门户分类(order等于第一步返回值的最大值+1)

var order = Math.max(...res.data.tags.map((item) => item.order)) + 1;
POST
/api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
Content-Type: application/json {"query":"mutation { addTag(name:\"2\", urlName:\"2\", order: 1961, iconCssClass: \"mdi mdi-folder\", grant: [ {role:\"Everyone\", ops:[Read]} ] , color: \"null\", parentId: \"null\" ) { id } }"}

5、复制文档并上传(可选)

根据实际的业务场景,如果需要给每个用户增加 可单独编辑保存的 默认文档

可以通过以下2种方式进行处理:

  1. 利用Wyn Tools或其他工具复制文档并按租户重命名
  2. 批量上传文档(手动上传)

* 也可以通过角色权限分配的方式,将某个文档共享给某角色下的所有用户进行浏览

6、API分类

6.1 获取分类ID

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query":"query { tags { id, name}}"}

6.2获取文档ID

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}

6.3给文档设置分类(请求参数的分类id和文档id来自前两步)

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query":"mutation { tagDocument(tagId: \"eafd31d7-7aad-40b7-9206-f4866127a853\", documentId: \"f30ce97b-7369-424e-8b39-8ffa6b305838\") }"}

7、API文档授权

7.1 获取文档ID

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}

7.2获取角色名称

GET /admin/api/accountmanagement/api/v1/roles?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7

7.3给文档分享角色权限

(参数用到第一步返回的报表ID,以及第二步要分享的角色名称)

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query":"mutation {\n\t\t\tupdatePermissions( documentId: \"f30ce97b-7369-424e-8b39-8ffa6b305838\" , grant: [ { role:\"1\", ops: [ Read, Update ]}] )\n\t\t}"}

如需通过带Token的URL进行集成,可继续参考以下步骤。

8、拼接URL

8.1 获取文档ID

POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}

8.2 生成Token (参考3 生成Token的内容中 关于参数的定义)

POST /connect/token?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/x-www-form-urlencoded grant_type=password&username=admin&password=admin&client_id=integration&client_secret=eunGKas3Pqd6FMwx9eUpdS7xmz&access-token-lifetime=86400

8.3 拼接生成URL

http://localhost:51980/dashboards/view/【报表ID】?theme=default&lng=zh-CN&token=【TOKEN】

9、用户身份信息集成 (单点登录)

对于SaaS平台通常都有独立的用户认证体系,而利用BI分析工具,我们可以直接实现用户信息集成,实现多个平台账户统一身份认证,统一管理,以下是关于单点登录的介绍:

9.1整体流程

(图片来源于网络)

9.2 自定义安全提供程序简介

在Wyn提供的自定义安全提供程序接口中,我们需要根据调用时请求的token,完成相应的认证与授权逻辑,这个token根据业务需要,可以来源于一个统一的身份认证平台,或是由某个加密协议,将用户信息保存在token中实现权限的传递。

而如何解析这个token,并实现用户的授权,就是需要在安全提供程序中实现的内容。

9.3 自定义安全提供程序-用户校验

当用户从画面上登录,或者通过前述的connect/token api调用获取登录token时,会使用GenerateTokenAsync方法,实现用户的校验

而对于集成了自定义安全提供程序的SaaS平台,我们可以将当前使用者的token作为用户名和密码,发起登录请求:



可以看到在SaaS平台中用户的token就传递到了Wyn的认证程序中,而这个token又是哪个角色,拥有哪些权限,可以通过向认证平台发起请求的方式获取。

9.4 自定义安全提供程序-上下文授权

上文中说明了如何实现用户的认证及登录,而对于SaaS平台,每个用户的上下文信息(数据库连接信息,角色等)就需要从统一身份认证的接口中提供,我们既可以将它在token中加密保存,也可以根据获取到的token动态从身份认证接口中获取:

GetUserInfo接口:

登录成功:

这样我们就可以通过在用户认证服务中集中配置,配合单点登录组件的认证逻辑,实现对各个租户的数据库及权限的统一管控。

总结

本文为大家详细介绍了BI与SaaS的碰撞,大家如果在操作过程中遇到什么问题可以在评论中提出。

今后也会为大家带来更多有趣内容,如果想要了解更多BI相关知识内容,可以访问:

https://gcdn.grapecity.com.cn/forum.php?mod=forumdisplay&fid=225&filter=typeid&typeid=273

文字版链接:搜索葡萄城公开课

BI与SaaS碰撞,让数据处理更加轻松(下)的更多相关文章

  1. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍

    在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...

  2. 拖拽碰撞效果,高级浏览器下全部搞定(ie6-8还没有搞定)

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  3. 2021年国内BI厂商推荐_大数据分析工具

    随着互联网大数据时代的不断发展,BI让企业的工作效率变得更高效.BI的功能也随着需求的增长不断地丰富,例如,数据可视化大屏.可视化表格.商业化数据分析.数据地图等.国外的厂商在很多场景下无法满足国内的 ...

  4. 展望 2017年商业智能BI 发展的趋势

    在展望2017年商业智能 BI 发展趋势前,我们先来了解一下商业智能 BI 发展的几个重要阶段. 传统 BI 和新型 BI 的分水岭(2013年) 大背景 在2013年以前相当长的一个周期(2005年 ...

  5. 观未见,行不止 —— Power BI 两周年技术和方案交流圆桌会议纪实

    作者:陈希章 发表于 2017年8月13日 2017年8月11日下午两点,Power BI 两周年技术和方案交流圆桌会议如期举行.线上和线下约有100位朋友参加了由我组织和主持的本次活动,在两个小时的 ...

  6. 金融BI是什么?为什么金融同行都在讨论这个!

    最近,我和金融行业的几位朋友聚会,觥筹交错之间听到最多的竟然是「金融BI」这个词!这可触及到我的知识盲区了,到底什么是金融BI呢? 朋友向我解释:BI商业智能是一种提高企业智能化的手段和工具,既可以满 ...

  7. 口碑最好的五款BI工具都在这了

    目前,无论是大企业还是小企业,都面临着数字化转型的挑战.在这个过程中,BI工具起到了举足轻重的作用.市面上打着BI的旗号,实际却只是单纯数据工具的产品不少,客户在进行BI 选型时,眼花缭乱,不知所措. ...

  8. 自助BI工具:Tableau和Smartbi的对比(下)

    上一篇我们已经将Tableau和Smartbi的自助功能分析了一部分,本文已3个重要的因素进行对比.分别从数据处理.数据可视化以及性价比方面进行分析.我们一起来看看这两个平台是各方面怎么样,帮助大家挑 ...

  9. SaaS系列介绍之二: SaaS介绍

    1 引言 横看成岭侧成峰,远近高低各不同. 不识庐山真面目, 只缘身在此山中.                                                  ________苏轼, ...

随机推荐

  1. c++对c的拓展_编译检测的增强

    一:全局变量检测增强:c++编译对全局变量的声明定义有严格区别 //c中全局变量的声明及定义         //c++中全局变量的声明及定义        //c++全局变量写成下列形式则报错 in ...

  2. layui下拉框渲染问题,以及回显问题

    最近实习公司给的新人练手项目用的layui,layui之前自己也接触过但是也就是用了用table组件,没有用过layer弹层这些东西,所以就了解了一下. 首先遇到的一个问题就是下拉框没有样式,然后加样 ...

  3. kali下安装docker

    前期准备 物理机:win10 虚拟机:kali 2021 网络连接方式:桥接 一.简介 Vulhub: 是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译.运行一个完整的漏洞 ...

  4. Hyperledger Fabric节点的动态添加和删除

    前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织.本文将在其基础上,详细介绍了如何在 soft 组织上添加新的 peer2 节点,并 ...

  5. AcWing周赛43

    AcWing周赛43 题源:https://www.acwing.com/activity/content/1233/ 4314. 三元组 直接暴力做就是了,我一开始还在找规律..悲 我滴代码 #in ...

  6. 如何调试手机上的网页以及基于Cordova/Phonegap的Hybrid应用

    开发手机页面以及Hybird应用时,调试曾经是个老大难问题,不时需要用写log等方式曲线救国. 实际上,Chrome和Android(需要4.4+版本)已经提供了不亚于电脑版本的调试功能,只是看样子还 ...

  7. 在 WinForms 项目中使用全局快捷键

    借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Windows API 打交道.本文就交你如何使用 Win ...

  8. python基础练习题(题目 文本颜色设置)

    day23 --------------------------------------------------------------- 实例035:设置输出颜色 题目 文本颜色设置. 分析:不会, ...

  9. SerialPort-4.0.+ 使用说明(Kotlin版本)

    SerialPort-4.0.+ 项目官网 Java版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让 ...

  10. 杭电2091空心三角形Java(AC)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2091 把三角形写入二维数组里,然后输出出来 注意事项: 1.三角形后面没有空格(每一层的后面) 2.三角形 ...