有数对外定制化开发文档说明
- 有数对外定制化开发文档(2024 Q2)
- 目录
- 相对上一个稳定版新增内容
- API接口列表
- 单点登录说明
- 集成页面说明
- 功能介绍
- 集成页面的特点
- 集成页面列表
- 目前有数提供的集成页面
- 报告预览集成页面:/dash/integration/:projectId
- 大屏预览集成页面:/dash/screenIntegration/:projectId
- 新大屏预览集成页面:/dash/newScreen/integration/view/:sid
- 权限管理集成页面:/dash/permission/:projectId/role
- 报告导出管理集成页面
- 移动端页面集成
- 报告页集成(/dash/integration/:projectId)
- 报告页特定报表的显示
- 驾驶舱集成
- 驾驶舱集成页面(/dash/cockpitIntegration)
- 数据填报集成页面
- 数据填报数据管理页面
- 数据填报表单填写、数据管理页面(支持切换模式)
- 报告编辑集成页面
- ChatBI集成页面
- 取数主页集成页面
- 可视化取数编辑集成页面
- Sql取数编辑集成页面
- 数据模型集成页面
- 数据表格集成页面
- ChatBI单会话集成页面
- 用户自定义数据连接说明
- 配置说明
- Webhook接口设计
有数对外定制化开发文档(2024 Q2)
目录
相对上一个稳定版新增内容
- 生成 token 接口支持项目粒度的管理员权限
API接口列表
- 见pdf目录
API接口说明
所有接口调用失败返回结果
字段名称 | 参数类型 | 参数说明 |
---|---|---|
code | Int | 错误码(非200) |
message | String | 失败原因 |
关于数据权限传递参数详细说明
因为有多个接口使用到数据权限,这里的参数比较复杂,所以在这里单独说明一下,数据权限是根数据连接绑定的,用于控制用户在某个数据连接的某张表下看到的数据信息,数据权限分为行权限和列权限两种。
行权限
一个数据权限所用到的字段如下:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
dataConnectionId | Int | 数据链接id |
database | String(Optional) | 数据库名称是否传递是由数据连接的类型决定的,也就是由在编辑数据模型时需不需要选择database决定的 |
tableName | String(Optional) | 表名,表名一般情况下必须传,如果不传表名,需要确保该连接下所有表名都有相同的字段 |
filterType | String | 筛选器类型, listFilter表示是列表筛选,treeFilter表示的是树状筛选 |
selectType | String | 筛选类型,表示是排除选择内容(unselect)还是保留选择内容(select) |
filter | Object | 具体的筛选信息,树状筛选器和列表筛选器的具体信息不一致,看下面的说明 |
- dataConnectionId的获取:
- 内置连接: 数据准备的输出表, 可以在浏览器控制台查看:
store.current.config
(其他类型的表也可以用这种方法)
dataConnectionId: 内置连接ID
database: 线上模式数据准备ID
tableName: 线上模式输出节点ID
- filter筛选器的具体内容
//关于一张表下面某个字段的信息
{
"field": "地区", //字段名称
"dataType": "String" //字段类型("Whole","Decimal","DateTime","String","Date","Time","Boolean")
}
//列表筛选器对应的filter字段内容如下:
{
"dim": { //列表筛选对应的字段
"field": "地区",
"dataType": "String"
},
"select": [ //列表筛选所选择内容
"东北",
"华北"
]
}
//树状筛选器对应的filter字段内容如下:
{
"or": [ //"or"表示多个条件是或的关系,"and"表示多个条件是与的关系
{
"dims": [ //dims表示树状筛选所选择的维度字段成员信息
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": { //cond表示的是筛选条件
"inlist": [ //inlist表示是选择,excludelist表示排除
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
列权限
一个列权限所用到的字段如下: | 字段名称 | 参数类型 | 参数说明 | |------------------|------------------|-----------------------------------------------------| | database | String(Optional) | 数据库名称是否传递是由数据连接的类型决定的,也就是由在编辑数据模型时需不需要选择database决定的 | | tableName | String | 表名 | | tableExprId | Number(Optional) | 如果限制的字段来自于自定义SQL,需要配置自定义sql的id | | tableAlias | String(Optional) | 自定义sql的场景下,需要传 | type | String | 列权限类型:dataLevel(禁止查看) 或者 presentationLevel(数据脱敏) | | dataMasks | Array | 具体的权限配置,见下方说明 |
- dataMasks 筛选器内容
// 对订单表的地区地段设置禁止查看 { "tableName": "订单", "type": "dataLevel", "dataMasks": [{ "field": "地区", "dataType": "String", "applyRange": ["view", "export"] //对查看报告和导出的时候设置该列禁止查看 }] }
token 相关
生成token接口
接口说明:
token主要是为了用户在使用集成页面时作登录和权限验证,如果用户想集成我们有数的报告和大屏,必须在有数环境中有一个可使用的账号。
基本信息:
属性 | 值 |
---|---|
API | /api/dash/util/genToken |
Method | POST |
请求参数:
- 用户名密码方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'userPassword' |
String | 账户账号,如果邮箱唯一,就是邮箱,否则是uniqueId | |
password | String | 账户密码 |
- tokenKey 方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'tokenKey' |
key | String | 使用用户生成的 token key |
- 单点登录方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'custom' |
uniqueId | String(Optional) | 账户账号,如果不提供,则使用 integrateToken 获取用户身份 |
integrateToken | String | 单点登录鉴权token,需要定制化开发对接 |
_ 其余可选参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
authUniqueId | String(Optional) | 最终需要生成的鉴权帐号,如果不传就是用户名密码对应的用户本身,只有超管可以生成其它账号的鉴权token,别人只能生成自己的鉴权token |
relationWithSystemPermission | String(Optional) | 只有 authUniqueId 配置的情况下且 openRp = true 时才生效,表示 resourcePermissions 字段与 authUniqueId 对应在 BI 系统里的资源权限关系,'or' 表示取并集,'and' 表示取交集,'ignore' 表示忽略 BI 系统中的权限,默认为 'or' |
enableWatermark | Bool(Optional) | 是否开启水印信息,只有开启的情况下 watermark 参数才生效 |
watermark | String(Optional) | 水印信息,必须提供uniqueId字段 |
filterMap | Object(Optional) | 数据筛选条件(每个数据连接下对应的各个表字段的数据权限),详见上文中关于数据权限传递参数详细说明行权限部分 |
columnFilterMap | Object(Optional) | 数据筛选列权限(每个数据连接下对应的各个表字段的列权限),详见上文中关于数据权限传递参数详细说明列权限部分 |
tableFilterMap | Object(Optional) | 数据表筛选条件(表示能看到某个数据连接下面的哪些表),主要用于模型集成时使用,具体看用例 |
pillFieldMap | Object(Optional) | 更改指定pill下的某些字段 |
tableExprMap | Object(Optional) | 更改指定自定义sql的表达式 |
parameterMap | Object(Optional) | 动态更改全局参数和报告参数的值 |
expiryTime | Int(Optional) | token的过期时间(单位为s),默认为86400 * 30(一天) |
resourcePermissions | Arr(Optional) | 设置用户可以访问的资源权限,这个权限与用户当前拥有的角色权限取交集 |
openRp | Bool(Optional) | 默认为false,表示是否开启资源权限过滤,只有等于true的情况下,resourcePermissions才起作用 |
clientSetting | Object(Optional) | 原先在url配置的一些显示参数可以放到token,加强安全性 |
useType | String(Optional) | token的使用场景,主要是用于删除token时,需要传'deleteToken',而且只有超管才能删除token |
once | Bool(Optional) | 默认false,表示该token是否只允许某一个人访问,第一个人访问后,其它再访问将失效 |
domainId | Number(Optional) | 域ID,企业域用户可指定 |
autoRenew | Object(Optional) | 是否启动配置token自动续期,每次访问时自动续期当前token,该参数只有在 once =true的时候生效 |
applyScope | String(Optional) | 生成的权限范围, applyScope=Manage 表示包含了管理权限,比如可以做一些删除用户等操作;applyScope=Resource,表示只包含资源相关的预览、导出等权限;applyScope=Project,表示项目粒度的资源权限,只有项目管理员才能指定 Project,此时relationWithSystemPermission必须等于"ignore",并必须指定 authUniqueId或者authUserId,并且必须指定resourcePermissions;applyScope=Domain,表示域主可以生成其他人的token,此时必须指定 authUniqueId 或者 authUserId,且当前账号必须为域主,默认值是 Manage |
projectId | Number(Optional) | 项目ID,只有 applyScope=Project 时才需要指定,而且必须指定,表示是哪个项目的管理权限 |
enableDefaultBookmark | Bool(Optional) | 通过token访问集成报告时是否开启默认书签,true表示开启,false表示不开启,默认false |
parameterAliasMap | Object(Optional) | 用于修改报告中用到的参数值,和 parameterMap 功能类似,不过这个参数是根据参数名称修改的,具体可以看下面用例 |
reportDataFilters | Arr(Optional) | 用于控制某几个报告的数据权限的能力,通过指定报告、报告依赖的模型、报告依赖模型的表及字段等信息进行行权限和列权限的数据权限过滤,这个参数会严格校验每个参数,模型、表。字段、数据连接只要一个出现不匹配将无法使用该token集成报告。 |
uvId | String(Optional) | 用户在集成页面时统计用户的访问uv数据,如果使用管理员生成其他用户的token时,尤其是不在系统中的用户时,客户可以指定这个字段来统计到底最后是访问的这个集成链接,最终可以查看业务表 report_recent_visit.uv_id 获取该访问记录 |
**5.2 对于 filterMap 的参数结构作了相应修改,支持权限的与或规则,兼容旧的数据结构,旧的数据结构默认是and的关系**
{
"email": "zhangsan@163.com",
"password": "123456",
"authUniqueId": "lisi@163.com",
"watermark": {
"email": "zhangsan@163.com",
"uniqueId": "zhangsan@163.com",
"nick": "张三"
},
"enableDefaultBookmark": true, // 开启默认书签
"expireTime": 1000,
"pillFieldMap": {
"123": { //数据模型id
"12": { //该数据模型下某个pill的fieldId
"expr": "12" //需要替换的pill的一些属性
}
}
},
"tableExprMap": {
"123": "select * from dev_online.bigviz_user" //自定义sql的id对应的修改内容,id可以去对应的数据连接下的表信息->自定义sql处获取
},
"autoRenew": {
"expiryTime": 20 //每次访问时自动续期 20 s,这个访问是指有接口访问到后端服务
},
"once": true,
"parameterMap": {
"123": "地区" //key 为参数对应的fieldId, value 为参数的值,fieldId 需要去页面上开发者模式中查看
},
"uvId": "zhangsan", //用于统计zhangsan的访问记录
"parameterAliasMap": { //key表示参数名称
"全局参数-字符串": {
"from": "global", //from有三个取值:all表示既可以是报告粒度的参数也可以是全局参数,优先匹配全局参数,report表示报告中的参数,global表示全局参数
"value": "helloworld" //value就是该参数被替换的值,可以根据参数的类型和场景使用不同的类型的数值。
},
"报告-字符串": {
"from": "report",
"value": "helloworld-报告"
},
"全局参数-字符串-1": {
"from": "all",
"value": "helloworld-报告"
}
},
"clientSetting": {
"integrate": { //integrate字段表示是报告集成页面配置
"ignoreSearch": true, //表示是否忽略url中的search部分,默认为false
"mode": "simple", //集成模式
"toolbar": ["export"], //打印,刷新,导出选项等
"side": true, //是否需要侧边栏
"hidePublic": true, //是否展示公共文件夹
"hidePrivate": true, //是否展示私人文件夹
"hideTitle": true, //是否隐藏标题栏
"hideScaleBar": true, //是否隐藏tab页面区域缩放栏
"tabColor": "red", // tab页面颜色设置
"hidePageBar": true, //整个报告底部工具栏隐藏
"enableReportDetail": true, //报告详情展示
"hideProgressBar": true, //顶部进度条隐藏
"scale": 50, //缩放配置
"bottomBarPos": "top", //底部栏放在顶部配置
"disableGraphicJump": true, //移动端双击禁止跳转
"fit": true, //集成页面自适应宽度时不留白,默认为false
"defaults": { //设置筛选器的默认值
"列表筛选器控件id":{
"selected": [], // Array
"exclude": false //Boolean
},
"日期筛选器控件id":{
"type": "StaticTime",
"minBound": "2016-07-01 00:00:00",
"maxBound": "2016-07-01 00:00:00"
}
},
"customCssId": "xc14bft1", // 指定使用哪个自定义CSS
"permission": { // 此处的权限配置主要用于图表功能的配置(如:图表导出功能、数据预览、排序级别等功能)
"closeMoreMenu": false, // 图表更多按钮关闭
"global": {
"export":["image","excel","pdf"],
"view":true, // 查看数据
"sortPriority":true, // true 排序级别
"inteExplore":true, // true 智能分析
"refreshHist":true, // true 查看刷新历史记录
"setWarning":true, // true 设置度量预警
"viewMaxReport":true, // 查看最大化
"dataDoctor":true, // 数据医生
"copyData":true, // 复制数据
"graphicLink":true // 图表链接
}
}
},
"chatBi": { //chatBi字段表示是ChatBI集成页面配置
"hideApp": false, // 移动端二维码
"hideExport": false, // 导出管理
"hideHelp": false, // 帮助中心以及跳转帮助中心的入口
"hidePopo": false, // 技术支持
"hideUser": false, // 当前用户
"hideFavorite": true, // 收藏、收藏夹
"hideHistory": true, // 历史会话
"hideMyShare": true, // 隐藏我的分享
"hideFilterSet": true, // 隐藏筛选集
"hideChatModeSwitcher": true, // 隐藏对话模式切换按钮
"hideDataModelSelector": false, // 隐藏数据模型选择按钮
"canEditCalculatedField": false, // 是否可以编辑计算字段
"hideAccountLogo": true, // 隐藏账户Logo
"showCloseIcon": false, // 是否展示右上角的关闭按钮
"showInHistory": false, //默认是false,表示集成的问答是否在历史记录展示
"defaultChatMode": "credible", // 默认问答模式 "credible" | "professional",默认"credible"
"chatTopic": "dataModel", // 对话主题,"dataModel"|"indicator" 默认为"dataModel",
"indicatorName": "", // 指标名称
"dataModelId": -1, // 数据模型id
"tagId": -1, // 模型标签id,查询限制特定标签下的数据模型
"ignoreAiUserCorrect": false, // 跳过选择表、字段、成员等步骤
// 以下参数仅在chatbi/dialogIntegration路由下生效
"hideQueryExplanation": false, // 隐藏查询解释
"hideQueryTable": false, // 隐藏查询表
"hideQueryToolbarMore": false, // 隐藏查询工具栏的更多
"hideGraphicChangeType": false, // 隐藏图标切换类型
"hideQueryForcast": false, // 隐藏预测
"hideGraphicToolbar": false, // 隐藏图表工具栏
"hideGraphicMax": true, // 隐藏图表全屏操作,默认隐藏
"hideGraphicRefresh": true, // 隐藏图表刷新操作,默认隐藏
"hideGraphicRefLine": false, // 隐藏图表参考线
"hideAskInfo": false, // 隐藏ask chatItem
"dataModelIds": "1,2,3", // 指定查询的模型,支持多个,英文逗号,分隔
"question": "东北地区的生产总值?", // 问题内容
"dialogId": "123" // 会话的id,如果设置了不会请求新的对话
}
},
"openRp": true, //表示是否开启资源权限过滤(resourcePermissions)
"resourcePermissions": [{
"projectId": 1, //资源所在的项目id
"resourceType": "NEW_REPORT", //资源类型NEW_REPORT(报告),DATA_MODEL(数据模型),DATA_CONNECTION(数据连接),SCREEN(大屏), NEW_SCREEN(发布大屏)
"resourceNamePaths": ["hzzhangdianpeng", "3.10", "未命名报告(1)"], //报告所在的文件夹名字路径,这个参数与resourceId可以2选1(有文件夹概念的资源需要添加文件夹的路径,否则报错)
"isFolder": 0, //是文件夹还是普通资源,默认为0
"permissions": ["view"] //资源对应的权限['view', 'edit', 'export', 'copy']
},{
"projectId": 1,
"resourceType": "NEW_REPORT",
"resourceId": 173, //报告id,这个参数与resourceNamePaths可以2选1,都是为了确定对哪个报告做权限控制
"isFolder": 0,
"permissions": ["view"]
},{
"resourceType": "DATA_MODEL", //可以使用哪些模型
"resourceId": 700288358, //模型ID
"isFolder": 0,
"permissions": ["view"]
},{
"resourceType": "DATA_MODEL",
"resourceId": 700289868,
"isFolder": 0,
"permissions": ["view"]
}],
"filterMap": {
"123": {
"rule": "or", //5.2版本开始支持传递与或规则,用"or"和"and"表示
"dataFilters": [{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "listFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
}
]},
"700006204": [
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "listFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
],
"700006205": [
{
"filterType": "listFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"excludelist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
},
"columnFilterMap": {
"1234": { //数据连接id
"rule": "or"
"type": "column", //只支持column
"dataFilters": [{
"tableName": "订单",
"type": "dataLevel",
"dataMasks": [{
"field": "地区",
"dataType": "String",
"applyRange": ["view", "export"] //对查看报告和导出的时候设置该列禁止查看
}]
}]
}
}
"reportDataFilters": [
{
"reportId": "14377", //报告ID
"dataModelFilters": [ //报告下面的数据行筛选列表
{
"dataModelId": 700284409, //报告依赖的模型ID
"dataConnectionId": 700315973, //该模型中使用到的数据连接ID
"rule": "or", //权限规则
"type": "row", //权限类型 row:行权限, column: 列权限
"dataFilters": [ // 具体有哪些权限,该配置参考 filterMap 里的配置保持一致
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
},
{
"dataModelId": 700284409, //报告依赖的模型ID
"dataConnectionId": 700315973, //该模型中使用到的数据连接ID
"rule": "or", //权限规则
"type": "row", //权限类型,
"dataFilters": [{
"tableName": "订单",
"type": "dataLevel",
"dataMasks": [{
"field": "地区",
"dataType": "String",
"applyRange": ["view", "export"] //对查看报告和导出的时候设置该列禁止查看
}]
}]
}
]
}
],
"tableFilterMap": { //表权限过滤,控制到schema的粒度。
"700310203": { //对哪个数据连接进行控制
"rule": "and", //多个筛选之间关系,这个表示的同一个库下面如何控制。
"dataFilters": [{
"database": "dev_netease", //对哪个库下的表进行控制
"produced": "Original", //原始表
"selectType": "select", //选择
"select": ["bigviz_user", "api_name"] //表示只能看到 dev_netease 这个库下面的 bigviz_user 和 api_name 两张表
},{
"produced": "UserDefinedSQL", //自定义SQL
"selectType": "select", //选择
"select": ["1740"] //表示只能看到自定义SQL ID = 1740 这个表。
}]
}
}
}
_ 单点登录方式生成token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
uniqueId | String | 是单点登录用户系统中唯一标志(email/uid等) |
integrateToken | String | 用于验证用户合法性加密字段,有数后端服务会调用用户系统作鉴权 |
watermark | String(Optional) | 水印信息 |
filterMap | Object(Optional) | 数据行权限筛选条件(每个数据连接下对应的各个表字段的数据权限) |
columnFilterMap | Object(Optional) | 数据列权限配置(每个数据连接下对应的各个表字段的列权限) |
expiryTime | Int(Optional) | token的过期时间,默认为86400 * 30(一天) |
pillFieldMap | Object(Optional) | 更改指定pill下的某些字段 |
resourcePermissions | Arr(Optional) | 设置用户可以访问的资源权限,这个权限与用户当前拥有的角色权限取交集 |
clientSetting | Object(Optional) | 原先在url配置的一些显示参数可以放到token,加强安全性 |
{
"uniqueId": "123456",
"integrateToken": "ljasljlkjdsiueiwkjajjsdkjhklajljsk",
"watermark": {
"email": "zhangsan@163.com",
"nick": "张三"
},
"expireTime": 1000,
//这里filterMap生成可以参考用户名密码生成token的方式
"filterMap": {
"700006204": [
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
],
"700006205": [
{
"filterType": "listFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"excludelist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
}
}
成功数据返回:
{
"code": 200,
"result": "1503575355359c4fdea8ec1683ed10edd91ae"
}
reportDataFilters失败返回结果:
{
"code": 743, // 如果 reportDataFilters 输入有问题会返回该 code
"message": "reportDataFilters 中对应的模型不存在 dataModelId = 700284408",
}
删除token接口
接口说明:
如果想删除某个token,我们命名为变量t,那么首先需要生成一个专门删除token的token,useType='deleteToken',只有超管才能删除token
基本信息:
API | /api/dash/util/rmToken |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于删除t的鉴权token |
t | String | 待删除的token |
成功数据返回:
{
code: 200,
result: "ok"
}
续期 token 接口
接口说明:
如果想给某个token 进行续期,我们命名该token变量为t,那么首先需要生成一个专门更新token的token,useType='updateToken',只有超管才能续期token
基本信息:
API | /api/dash/util/renewToken |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于续期的鉴权token |
t | String | 待续期的token |
成功数据返回:
{
code: 200,
result: "ok"
}
报告相关
获取用户拥有的报告文件夹列表接口
接口说明:
获取用户在有数有权限的报告文件夹列表
基本信息:
API | /api/dash/folder/list |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,只有在项目中的用户才能调用该接口 |
projectId | Int | 某个项目的id |
needPermission | String(Optional) | 用户权限过滤,"edit"编辑权限,"export"导出权限, "view"预览权限, "copy"复制权限,默认取并集 |
type | Int(Optional) | 不传或者传2是报告;传3是大屏;传4是发布大屏, 传1是模型 |
enableChatBi | Int(Optional) | 只有 type = 1 时有用,输入1表示只返回开启 chatBi 的模型列表 |
publishRelatedId | Int(Optional) | 若开启发布功能,此为发布状态报告id,id则为报告草稿id |
needSnapshot | Bool(Optional) | 是否为文件夹列表中的报告生成快照,默认为否 |
{
token: "1503575355359c4fdea8ec1683ed10edd91ae",
projectId: 1,
permission: "export"
}
成功数据返回:
list是一个树状的报告文件夹列表,items字段存储该文件夹下的报告列表,folders字段存储该文件夹下的文件夹列表
{
code: 200,
result: {
folders: [{ //最外层文件夹 6.2 版本开始变为 folders
id: 3, //文件夹id
name: "我的报告", //文件夹名称
items: [{ //items根据传入的type不同代表不同的资源,比如报告、大屏、模型等
isFolder: 0,
id: 3, //报告id
name: "我的报告", //报告名称
permissions: ['export', 'copy', 'edit', 'view']
}],
folders [],
permissions: ['add', 'edit']
}],
items: []
addPermission: 3, //3表示有新增报表的权限
}
}
复制报告接口
接口说明:
将某个报告,复制到同项目的另一个文件夹中
基本信息:
API | /api/dash/report/copy |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,只有在项目中的用户才能调用该接口 |
reportId | Int | 报告ID |
folderId | Int | 目标文件夹的 ID |
title | String | 复制后的新名字 |
category | Int | 0: 目标文件夹为公共文件夹;1:目标文件夹为私人文件夹 |
成功数据返回:
{
"code": 200,
"result": {
"id": 6162,
"title": "aaaa",
"category": 0,
"projectId": 63780,
"permissions": [
"view",
"edit",
"copy",
"export",
"share",
"mail"
]
},
"logPath": "http://127.0.0.1:8009/operation/log/fNy78UctuDQ3geEsBJAm6m"
}
失败数据返回: 如果目标文件夹已存在同名报告,则会复制失败。
{
"code": 732,
"message": "标题命名重复",
"result": {},
"errType": "ERR",
"logPath": "http://127.0.0.1:8009/operation/log/xyJxE1PzouoZ64WHz6Ww2Y"
}
获取某张报告的全方位信息
接口说明:
根据报告id,返回报告所在域、项目,使用到的数据模型,表、数据连接,过去七天访问量,过去七天访问人次等信息。
权限说明:
使用 token 访问,只有项目管理员才能使用该接口
基本信息:
请求路径 | |
---|---|
API | /api/dash/report/info |
请求方法 | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于鉴权 |
reportId | Number | 报告id |
needStatisticInfo | Optional(Bool) | 是否返回统计信息(last7days和totalView),默认为true |
返回结果示例:
{
"code": 200,
"result": {
"domain": { //域信息
"id": 1,
"name": "netease"
},
"project": { //项目信息
"id": 64464,
"name": "猛犸测试项目"
},
"report": { //报告信息
"id": 14377,
"title": "权限测试"
},
"creator": { // 报告创建人信息
"id": 123456,
"nick": "张三",
"uniqueId": "zhansan@corp.netease.com",
"email": "zhansan@corp.netease.com"
},
"dataConnections": [ //数据连接信息
{
"userName": null,
"type": "excel", //数据连接类型
"port": null,
"server": null,
"namespace": null,
"mammutCatalog": null,
"id": 700315973,
"name": "超市",
"tables": [ //表
{
"status": "direct",
"dataModelId": 700284409,
"tableExprId": null,
"database": null,
"tableName": "订单",
"dataConnectionId": 700315973,
"produced": "Original",
"fields": [ //字段
{
"field": "产品名称",
"dataType": "String"
},
{
"field": "制造商",
"dataType": "String"
},
{
"field": "发货日期",
"dataType": "DateTime"
},
{
"field": "国家",
"dataType": "String"
},
{
"field": "地区",
"dataType": "String"
},
{
"field": "城市",
"dataType": "String"
},
{
"field": "子类别",
"dataType": "String"
},
{
"field": "客户名称",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
},
{
"field": "细分",
"dataType": "String"
},
{
"field": "订单Id",
"dataType": "String"
},
{
"field": "订单日期",
"dataType": "DateTime"
},
{
"field": "邮寄方式",
"dataType": "String"
},
{
"field": "成本",
"dataType": "Whole"
},
{
"field": "折扣",
"dataType": "Decimal"
},
{
"field": "数量",
"dataType": "Whole"
},
{
"field": "类别代码",
"dataType": "Whole"
},
{
"field": "销售额",
"dataType": "Whole"
}
]
}
]
}
],
"last7days": [
{
"date": "2023-09-09",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-10",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-11",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-12",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-13",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-14",
"dayView": 0,
"dayViewPerson": 0
},
{
"date": "2023-09-15",
"dayView": 1,
"dayViewPerson": 1
}
],
"totalView": 15
},
"apiCost": 68,
"logPath": "http://127.0.0.1:8009/operation/log/thNQ7UrwZogtjnbBtv3sKS"
}
获取报告中访问明细
接口说明
根据报告ID获取报告的访问详情: 包括访问行为和访问时间
基本信息
属性 | 值 |
---|---|
API | /api/dash/report/detailLog |
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权信息 |
reportId | Number | 报告ID |
action | Opt(String) | 操作类型, 见枚举 |
beginTime | Opt(String) | 开始时间 |
endTime | Opt(String) | 结束时间 |
userId | Opt(Number) | 筛选访问用户 |
keyword | Opt(String) | 关键词: 可以搜索用户昵称获取uniqueId |
sort | Opt(String) | 排序字段 |
limit | Opt(Number) | 返回结果数量限制 |
offset | Opt(Number) | 返回结果偏移量 |
操作类型枚举:
操作编码 | 操作类型 | 操作编码 | 操作类型 |
---|---|---|---|
view | 浏览报告 | edit | 编辑报告 |
copy | 复制报告 | share | 分享报告 |
exportReport | 导出报告(导出报告Excel) | exportComponent | 导出报表(导出某个组件的Excel) |
调用示例
{
"reportId": 12345,
"beginTime": "2024-02-17 00:00:00",
"endTime": "2024-02-17 23:59:59"
}
返回示例
{
"code": 200,
"result": {
"list": [
{
"id": 1370206,
"action": "编辑报告",
"info": {
"from": "triggerEdit"
},
"platform": "web",
"creator": "xxxx",
"uniqueId": "jianglonggui@corp.netease.com",
"reportId": 20187,
"triggerName": "User",
"creatorId": 12224,
"createTime": "2024-02-17T13:24:36.000Z",
}
],
"count": null
},
"apiCost": 81
}
获取报告中用到的字段信息
接口说明
根据报告ID获取用到的字段信息、指标信息、模型和数据连接信息
基本信息
属性 | 值 |
---|---|
API | /platform/ext/reportTableInfo |
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权信息 |
reportId | Number | 报告ID |
调用示例
{
reportId: 12345
}
返回示例
{
"code": 200,
"result": {
"id": 20188, // 报告ID
"name": "czy趋势分析图", // 报告名称
"components": [{
"id": "c-nbCPxg77cQFQV1ELedcpQp", // 组件ID
"name": "产品_ID、城市、发货日期", // 组件名称
"fields": [
{
"dataConnectionId": 700318382, // 组件用的数据连接ID
"tableName": "oN03-超市三万行-2022-09-09", // 表名
"database": "xxx", // 数据库名
"field": "产品_ID", // 字段名
"role": "Dimension", // 度量(Measure), 维度(Dimension)
"alias": "产品_ID", // 字段别名
"comment": "产品_ID", // 字段注释, 描述
"indicatorName": "xxx" // 指标名称
}]
}],
"dataConnections": [{ // 数据连接信息
"id": 700318245,
"type": "excel",
"host": null,
"port": null,
"userName": null,
"parameters": null
}],
"dataModels": [ // 数据模型信息
{
"id": 53259,
"name": "超市3万行",
"dataConnectionId": 700318382,
"config": {
"status": "direct",
"tables": [
{
"produced": "LogicalTable",
"logicalTableId": 1,
"tables": [
{
"tableId": 1,
"tableAlias": "oN03-超市三万行-2022-09-09",
"produced": "Original",
"dataConnectionId": 700318382,
"tableName": "oN03-超市三万行-2022-09-09",
"logicalTableId": 1
}
]
}
]
},
"pivotSchema": {}
}
],
"creator": { // 报告创建者
"id": 11834,
"nick": "xxx",
"uniqueId": "xxx@corp.netease.com"
},
"modifier": { // 报告修改者
"id": 11834,
"nick": "xxx",
"uniqueId": "xxx@corp.netease.com"
}
}
获取报告中图表数据的接口
接口说明:
根据报告 id 找到报告中图表的数据
基本信息:
API | /api/dash/report/getData |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须有对应报告的预览权限 |
reportId | Number | 报告id |
limit | Number | 单个图表最大数据行数限制。不传默认2万行 |
type | String | 'report'-报告,返回整个报告中的图表数据; 'dashboard'-页面,需额外传参数 dashboardIds,此时只返回对应的页面中的图表数据 |
dashboardIds | Arr(Number) | 页面id。这些页面需要在 reportId 对应的报告中 |
cache | Bool | 是否使用缓存数据。默认为false |
defaultFilters | filters(Optional) | 筛选器,与导出图片和pdf接口中的defaultFilters字段格式一致 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportId":6177,
"dashboardIds": [12255, 10962],
"type": "dashboards",
"cache": true,
"defaultFilters": {
"c-bQo8b75xnJqmhvnJpYNXtW": {
"selected": [
"2020",
"2021",
"2022",
"2023"
],
"exclude": false
},
"c-gJLpNWPGADEg1Gx5zZBGHk": {
"type": "StaticTime",
"minBound": "2022-02-02 00:00:00",
"maxBound": "2023-03-12 24:00:00"
}
}
}
成功数据返回:
{
"code": 200,
"result": [
{
"normalSheetData": [ // 图表数据
[
"计算字段1"
],
[
0
]
],
"dashboardTitle": "页面 2", // 页面名称
"componentTitle": "指标看板" // 图表名称
},
{
"normalSheetData": [
[
"细分",
"利润"
],
[
"公司",
684036.7
],
[
"消费者",
1059953.47
],
[
"小型企业",
412569.35
]
],
"dashboardTitle": "页面 1",
"componentTitle": "利润(按细分划分)"
}
],
"logPath": "http://127.0.0.1:8009/operation/log/nYqzu9pGur46gqqhXdmv3T"
}
获取报告基础信息接口
接口说明:
根据报告 id 获取报告的基础信息
基本信息:
API | /api/dash/report/ext/get |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须有对应报告的预览权限 |
reportId | Number | 报告id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportId":6177,
}
成功数据返回:
{
"code": 200,
"result": {
"reportName": "报告1", //报告名称
"uniqueId": "zhangsan@corp.netease.com", //报告创建人账号
"nick": "张三", //报告创建人昵称
"createTime": "2023-07-12T07:22:48.000Z", //报告创建时间
"recentVisitTime": "2024-02-19T02:05:13.000Z", //当前用户最近访问时间
"snapshotLink": "http://nos.netease.com/youdata-test/capture-devNetease-20128-12375-7TFrUtSd.png" //快照链接
},
"logPath": "http://127.0.0.1:8009/operation/log/nYqzu9pGur46gqqhXdmv3T"
}
通过表信息预加载相关报告数据
接口说明: 根据用户输入的某张表信息,对使用到该表所有的图表进行预加载,以便进行数据的实时更新
API | /api/dash/cacheTask/flushByTable |
Method | POST |
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
dataConnectionId | Int | 数据连接ID |
database | Optional(String) | 数据库 |
tableName | String | 数据库下的某张表 |
输入用例:
{
"token": "slksdkasklkldsjkksjkdssjlkdjjskdjsdlkjds",
"dataConnectionId": 700310511,
"database": "dev_netease",
"tableName": "bigviz_user"
}
返回结果示例:
{
"code": 200,
"result": 20 //新建数据模型的 ID
}
根据路径添加报告文件夹
在某项目的公共文件夹下面,根据path创建报告的文件夹,如果path中的文件夹不存在,会自动创建,如果文件夹已经存在,则返回这个文件夹的 ID。
方式一: 在某项目的公共文件夹下面,根据path创建报告的文件夹,如果path中的文件夹不存在,会自动创建,如果文件夹已经存在,则返回这个文件夹的 ID
方式二: 根据父文件夹创建子文件夹, 如果文件夹已经存在,则返回这个文件夹的 ID
基本信息:
属性 | 值 |
---|---|
API | /api/dash/folder/ext/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
path | Opt(Array(String)) | 文件夹路径,报告文件夹最多可以填四层 |
type | String | 报告(NEW_REPORT), 数据模型(DATA_MODEL), 数据连接(DATA_CONNECTION) |
parentId | Opt(Number) | 父文件夹ID, 根目录为0 |
name | Opt(String) | 填写 parentId 时需要传文件夹名称 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"type": "NEW_REPORT",
"path":["文件夹1", "文件夹2"]
}
返回:
{
"code": 200,
"result": 123 // 最后一级文件夹的ID
}
根据路径删除报告文件夹
递归的删除某项目下,指定路径的最后一个文件夹,以及文件夹下面的内容
基本信息:
属性 | 值 |
---|---|
API | /api/dash/folder/ext/delete |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
path | Array(String) | 文件夹路径 |
type | String | 目前只能写 NEW_REPORT |
force | Option(Bool) | 如果为true,当文件夹下有内容时会强制删除这个文件夹 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"type": "NEW_REPORT",
"path":["文件夹1", "文件夹2"]
}
返回:
如果文件夹下有内容,会返回 1,表示没有删除这个文件夹,如果要强制删除,得传 force: true
{
"code": 200,
"result": 1
}
如果文件夹下没有内容,会正常删除删除这个空文件夹
{
"code": 200,
"result": 0
}
重命名文件夹
接口说明 重命名文件夹,如果传入的文件夹名称和当前目录下的文件夹名称重复了,会返回重复信息。
API | /api/dash/folder/ext/renameFolder |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
id | Int | 文件夹id |
name | String | 新的文件夹名称 |
输入用例:
{
"token": "171706912121966f879edbd3e721c888472f0",
"id": 1,
"name": "test1"
}
更新成功返回结果示例:
{
"code": 200,
}
名称重复返回结果示例:
{
"code": 200,
"result": {
"titleRepeat": true, //是否重复:是
"newName": "文件夹(1)" //不重复的新名称,可以直接使用newName作为更新名称进行重试。
}
}
新增报告接口
新增一个报告,如果重名会报错。
基本信息:
属性 | 值 |
---|---|
API | /api/dash/report/ext/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
title | String | 新添加的报告名称 |
folderId | Option(Int) | 报告所在的文件夹的id,必须是公共文件夹ID,跟 path 二选一,如果是空数组代表是根目录 |
path | Option(Arr(String)) | 报告所在的公共文件夹的路径,跟 folderId 二选一,如果填0代表公共文件夹 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"title": "报告名称1",
"path":["文件夹1"]
}
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"title": "报告名称1",
"folderId": 123
}
返回:
{
"code": 200,
"result": {
"id": 123, // 新增的报告ID
"title": "报告名称"
}
}
删除报告接口
删除一个报告,如有资源依赖,删除会失败。
基本信息:
属性 | 值 |
---|---|
API | /api/dash/report/ext/del |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportId | Option(Number) | 报告ID,可以唯一的确定一个报告,如果不提供,需要提供 projectId 和 path |
projectId | Option(Number) | 项目ID,跟 path 一起唯一确定一个报告 |
path | Option(Arr(String)) | 从公共文件夹的根目录到报告的路径,最后一项是报告的名称,与projectId共同唯一确定一个报告 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"path":["文件夹1", "报告2"]
}
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportId": 123
}
返回:
{
"code": 200
}
修改报告名称接口
修改报告的名称,如果重名会报错。
基本信息:
属性 | 值 |
---|---|
API | /api/dash/report/ext/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
title | Option(String) | 用户组名称 |
reportId | Option(Int) | 报告ID,可以唯一确定给一个报告,如果不提供,需要提供 projectId 和 path |
projectId | Option(Int) | 项目ID,跟path一起可以唯一确定一个报告 |
path | Option(Array(String)) | 从公共文件夹的根目录到报告的路径,最后一项是报告的名称,与projectId共同唯一确定一个报告 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"title": "新名称",
"projectId": 1,
"path":["文件夹1", "报告2"]
}
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"title": "新名称",
"reportId": 123
}
返回:
{
"code": 200
}
修改特定报告属性值接口
修改特定报告某个属性的属性值,需要对应报告的编辑权限
基本信息:
属性 | 值 |
---|---|
API | /api/dash/reportAttribute/setValue |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
name | String | 属性名称 |
reportId | Int | 报告ID,可以唯一确定一个报告 |
projectId | Int | 项目ID |
value | Any | 属性的值 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"name": "属性a",
"value": 123,
"reportId": 7289,
"projectId": 1
}
返回:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qvT8poMLnyGQbvUiVn1K9y"
}
获取特定报告属性值接口
获取特定报告某个属性的属性值,需要对应报告的编辑权限
基本信息:
属性 | 值 |
---|---|
API | /api/dash/reportAttribute/getReportAttributeValue |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportId | Int | 报告ID,可以唯一确定一个报告 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportId": 7289,
}
返回:
{
"code": 200,
"result": [
{
"id": 5,
"name": "日期时间属性",
"type": "dateTime",
"value": "2021-09-13T02:21:41.000Z",
"creatorId": 11111,
"creatorName": "有小数",
"modifierId": 11111,
"modifierName": "有小数",
"createTime": "2021-08-26 20:12:26",
"modifyTime": "2021-09-09 15:50:31"
},
{
"id": 4,
"value": {
"id": 11114,
"nick": "郭朝彤gztgzht",
"uniqueId": "guochaotong@corp.netease.com",
"email": "guochaotong@corp.netease.com",
"department": null
},
"name": "用户属性",
"type": "user",
"creatorId": 11111,
"creatorName": "有小数",
"modifierId": 11111,
"modifierName": "有小数",
"createTime": "2021-08-26 20:12:26",
"modifyTime": "2021-09-09 15:50:31"
},
{
"id": 37,
"value": "2",
"name": "字符串类型",
"type": "string",
"creatorId": 11111,
"creatorName": "有小数",
"modifierId": 11111,
"modifierName": "有小数",
"createTime": "2021-08-26 20:12:26",
"modifyTime": "2021-09-09 15:50:31"
}
],
"logPath": "http://127.0.0.1:8009/operation/log/aEc6GpmpKU7N46V9gyweYj"
}
报告收藏列表接口
获取用户的报告收藏列表
基本信息:
属性 | 值 |
---|---|
API | /api/dash/interest/ext/interestItems |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
isMobile | Boolean | 是否是移动端(移动端会过滤空文件夹) |
userId | Number | 用户id |
projectId | Number | 项目id |
sort | String (Optional) | 收藏列表的排序方法 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"isMobile": true,
"userId": 12333,
"projectId": 1,
}
返回:
{
"code":200,
"result":{
"folders":[
{
"id":7571,
"type":2,
"category":2,
"name":"1234",
"idx":0,
"projectId":1,
"parentId":-4,
"userId":null,
"creatorId":12375,
"permissions":[
"view",
"edit",
"add"
],
"folders":[
{
"id":7572,
"type":2,
"category":2,
"name":"234",
"idx":0,
"projectId":1,
"parentId":7571,
"userId":null,
"creatorId":12375,
"permissions":[
"view",
"edit",
"add"
],
"folders":[
],
"isFolder":1,
"items":[
],
"totalView":0
}
],
"isFolder":1,
"items":[
],
"totalView":0
}
],
"items":[
{
"id":9541,
"title":"jlg权限报告2",
"category":0,
"idx":1,
"userId":12224,
"folderId":-4,
"totalView":107,
"insightReportId":null,
"modifyTime":"2021-09-16T07:51:33.000Z",
"createTime":"2021-09-14T02:34:27.000Z",
"creatorId":12224,
"modifierId":12224,
"mirrorReportId":null,
"isMajor":null,
"interestId":1430,
"permissions":[
"view",
"edit",
"copy",
"export",
"share",
"mail",
"warning",
"add"
]
}
],
"globalPermissions":[
"view",
"edit",
"add"
]
},
}
报告收藏状态接口
获取报告是否被某个用户收藏,返回收藏状态和收藏的文件夹路径。
基本信息:
属性 | 值 |
---|---|
API | /api/dash/interest/status |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportId | Number | 报告id |
userId | Number | 用户id |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"userId": 12333,
"reportId": 239,
}
返回:
{
"code": 200,
"result": {
"interested": true,
"path": ["收藏", "子文件夹"]
}
}
报告收藏接口
用户收藏某个报告
基本信息:
属性 | 值 |
---|---|
API | /interest/ext/add |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportId | Number | 报告id |
userId | Number | 用户id |
folderId | Number(Optional) | 文件夹 id,如果不传则默认为收藏的根文件夹 |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"userId": 12333,
"reportId": 239,
"folderId": 123
}
返回:
{
"code": 200,
"result": {
"interestId": 1
}
}
报告取消收藏接口
用户取消收藏某个报告
基本信息:
属性 | 值 |
---|---|
API | /interest/ext/del |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportId | Number | 报告id |
userId | Number | 用户id |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"userId": 12333,
"reportId": 239,
}
返回:
{
"code": 200
}
报告维度权限用户统计接口
获取拥有对应报告的权限的用户账号列表。
基本信息:
属性 | 值 |
---|---|
API | /report/ext/getUsersWithPermission |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
reportIds | Array |
报告id数组 |
projectId | Number | 项目id |
样例输入
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportIds": [1234, 1235],
"projectId": 63000
}
返回:
{
"code": 200,
"result": {
"1234": [
{
"user": {
"uniqueId": "youdata@corp.netease.com",
"nick": "有小数",
"id": 354
},
"permissions": [
"view",
"edit",
"copy",
"export",
"share",
"mail",
"warning",
"add"
]
}
],
"1235": [
{
"user": {
"uniqueId": "youdata1@corp.netease.com",
"nick": "有小数1",
"id": 355
},
"permissions": [
"view",
"edit",
"copy"
]
}
]
}
}
根据模型创建报告(有基础组件)
根据模型和字段信息创建基础报告, 需要有项目管理员权限
基本信息:
属性 | 值 |
---|---|
API | /report/addReportBySql |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
dataModelId | Number | 数据模型ID |
fields | Array(String) | 模型字段列表 |
folderPath | Array(String) | 报表所在文件夹路径 |
调用示例:
{
"dataModelId": 123,
"fields": ["name", "age", "gender"],
"folderPath": ["report", "demo"] // 根目录则传空数组 []
}
获取文本组件内容
基本信息:
属性 | 值 |
---|---|
API | /api/dash/component/parseComponentContent |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
componentId | String | 组件ID |
token | String | 鉴权token |
调用示例:
{
"token":"1731382917727c56e46c6709883d74a76188b",
"componentId": "exampleComponentId"
}
返回示例:
// 报告编辑的文本:
你好啊 {{{today}}} // 文本+今天日期: 文本测试:2024-1-11
{{{#全局参数.表名列表}}} // 表名列表: users,books
[查询1[F0]] // 字段查询: 正餐、点心餐、早餐
// 接口返回:
{
"code": 200,
"result": "文本测试:2024-1-11users,books 正餐、点心餐、早餐 ",
}
根据模型创建报告(空白报告)
根据数据模型ID创建报告,会跳转到报告编辑页面
API | /api/dash/report/createFromDataModel |
---|---|
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
dataModelId | Number | 数据模型ID |
用户相关
用户批量导入接口
接口说明:
用于将客户的用户列表导入到有数的用户系统里,实现双方部分用户信息的同步,如果导入的用户已在有数系统中,会做更新操作,否则做添加操作
基本信息:
API | /api/dash/user/batchImport |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的域管理员 |
users | Array | 用户列表 |
projectId | Int(Optional) | 默认导入到系统里,如果有projectId,会导入某个项目里 |
groupIds | Array(Optional) | 用户组id列表,可选参数,希望将导入的用户放到那些用户组里,(如果需要导入到用户组,projectId为必传项) |
defaultPassword | String(Optional) | 用户默认密码,可选参数,如果不给,则不设置密码,用户无法直接登陆(单点登录不需要传此参数) |
roleNames | Array(Optional) | 将用户绑定到指定一组角色(限定为根目录的一级角色) |
rolePaths | Array |
将用户绑定到指定一组角色, 每一个角色由一个路径的数组表示,数组的最后一个元素是角色名 |
delRoleNames | Array(Optional) | 为用户删除一组角色(限定为根目录的一级角色) |
delRolePaths | Array |
为用户删除一组角色, 每一个角色由一个路径的数组表示,数组的最后一个元素是角色名 |
permissionRoleNames | Array(Optional) | 将用户绑定到指定的一组数据权限(限定为根目录的行级权限) |
permissionRolePaths | Array |
将用户绑定到指定的一组数据权限, 每一个数据权限由一个路径的数组表示,数组的最后一个元素是数据权限名 |
delPermissionRoleNames | Array(Optional) | 为用户删除一组数据权限(限定为根目录的行级权限) |
delPermissionRolePaths | Array |
为用户删除一组数据权限, 每一个数据权限由一个路径的数组表示,数组的最后一个元素是数据权限名 |
systemRoleIds | Array(Optional) | 将用户绑定到指定的系统角色,1 表示项目管理员,2表示编辑者,3 表示阅览者 |
wholeCustomSystemRoleIds | Array(Optional) | 自定义系统角色ID列表, 每次对于自定义系统角色全量覆盖 |
domainId | Number(Optional) | 域ID,企业域用户可指定 |
domainName | String(Optional) | 域名,企业域用户可指定 |
用户对象参数说明:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
String(Optional) | 邮箱,有些企业该字段会是唯一 | |
phone | String(Optional) | 手机号码 |
uniqueId | String | 用来判断用户唯一性的字段,可能是email,phone,uid等字段其中之一 |
password | String(Optional) | 可以设置或更新用户的登录密码,该配置项的优先级高于defaultPassword (单点登录不需要设置此选项) |
nick | String(Optional) | 用户昵称 |
department | String(Optional) | 用户所属部门 |
company | String(Optional) | 用户所属公司 |
position | String(Optional) | 用户职位 |
networkConfig | Object(Optional) | 用户网络配置,是否允许外网访问,只有部署开启网络限制开关,该配置才生效 |
ifLeave | Int(Optional) | 用户是否已经离职。1:用户已离职,0:用户未离职 |
attrs | Array(Optional) | 用户权限属性值,见修改用户动态值属性接口中的attrs 参数定义 |
customInfo | Object(Optional) | 用户自定义信息 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"users": [{
"email": "zhangsan@163.com",
"phone": 15977765765,
"uniqueId": "20",
"nick": "张三",
"department": "有数",
"networkConfig": {
"allowExternal": true
},
"ifLeave": 0,
"attrs": [
{
"attrId": 1,
"attrValue": ["东北","华北"]
},
{
"attrId": 2,
"attrValue": ["男"]
},
{
"attrId": 5,
"attrValue": []
},
{
"attrId": 8,
"attrValue": null
}
]
}],
"groupIds": [1,2,3],
"roleNames": ["角色1", "角色2"],
"rolePaths":[["smartdata","0"],["smartdata","1"]],
"permissionRoleNames": ["行级角色1", "行级角色2"],
"customInfo": "自定义信息" // 也可以传对象 { info: "自定义信息" }
}
成功数据返回:
{
"code": 200,
"result": "ok"
}
根据有数cookie获取用户信息接口
接口说明
根据有数cookie SESSION_YOUDATA
获取用户等信息
基本信息
API | /api/dash/user/getCookieInfo |
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
cookie | String | cookie |
{
"cookie": "xxxx"
}
成功数据返回
{
"code": 200,
"result": {...},
}
获取用户拥有的项目列表接口
接口说明:
获取用户在有数拥有的项目列表
基本信息:
API | /api/dash/project/list |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
domainId | Opt(Num) | 域ID |
{
token: "1503575355359c4fdea8ec1683ed10edd91ae"
}
成功数据返回:
{
code: 200,
result: {
list: [{
id: 3, //项目id
name: "我的项目", //项目名称
description: "我的demo项目" //x项目
}],
count: 10
}
}
删除项目中某个用户的接口
接口说明:
对项目中的某个用户进行删除。不能删除自己。
权限说明:
使用 token 访问,只有项目管理员、域主和域管理员才能调用该接口。
基本信息:
API | /api/dash/projectUser/delUsersByUniqueIds |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员、域主或域管理员 |
projectId | Int | 需要删除用户的项目 id |
uniqueIds | Array | 需要被删除的用户的 uniqueId,可传多个(与 userIds 二选一) |
userIds | Array | 需要被删除的用户的 userId,可传多个(与 uniqueIds 二选一) |
请求参数示例:
{
"token": "1564644553413e707fada60f1c72d500322c9",
"projectId": 1,
"uniqueIds": ["admin@corp.netease.com","admin2@corp.netease.com"]
}
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/kB8CVXkN2KHLBBh1EJBpcG"
}
获取域中用户列表的接口
接口说明:
获取域中的所有用户,使用 token 访问。
基本信息:
API | /api/dash/user/getAllUsers |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token |
sort | String (Optional) | 用户列表的排序方法 |
offset | Int (Optional) | 从第几条数据开始返回,适用于分页 |
limit | Int (Optional) | 返回数据条数,适用于分页 |
输入URL示例:
https://youdata.163.com/api/dash/user/getAllUsers?token=1564644553413e707fada60f1c72d500322c9
返回结果示例:
{
"code": 200,
"result": [
{
"id": 1,
"email": "email1@163.com",
"nick": "Jack",
"phone": "13136123456",
"uniqueId": "email1@163.com",
"customInfo": "用户自定义信息"
},
{
"id": 2,
"email": "email2@163.com",
"nick": "Amy",
"phone": "13026361234",
"uniqueId": "email2@163.com",
"customInfo": "用户自定义信息"
},
{
"id": 3,
"email": "email3@163.com",
"nick": "Sam",
"phone": null,
"uniqueId": "email3@163.com"
}
],
"logPath": "http://127.0.0.1:8009/operation/log/kB8CVXkN2KHLBBh1EJBpcG"
}
获取项目中用户列表的接口
接口说明:
获取当前项目的所有用户,使用 token 访问。
基本信息:
API | /api/dash/projectUser/list |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token |
projectId | Int (Optional) | 项目Id |
offset | Int (Optional) | 从第几条数据开始返回,适用于分页 |
limit | Int (Optional) | 返回数据条数,适用于分页 |
输入URL示例:
https://youdata.163.com/api/dash/projectUser/list?token=1564644553413e707fada60f1c72d500322c9&offset=0&limit=20&projectId=1
返回结果示例:
{
"code": 200,
"result": [
"list": [{
"id": 90501,
"userId": 11836,
"directLeaderId": null,
"email": "konglei@corp.netease.com",
"nick": "孔磊",
"uniqueId": "konglei@corp.netease.com",
"domainRole": 3,
"active": 1,
"category": "editor",
"isMajor": 0,
"createTime": "2023-07-06T08:00:42.000Z",
}],
"total": 76
],
"logPath": "http://127.0.0.1:8009/operation/log/kB8CVXkN2KHLBBh1EJBpcG"
}
删除域中某个用户的接口
接口说明:
对域中的某个用户进行删除。可同时删除多个用户。域主不能被删除;不能删除自己。
权限说明:
使用 token 访问,只有域主和域管理员才能调用该接口。
基本信息:
API | /api/dash/domain/user/delete |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是域主或域管理员 |
uniqueIds | Array | 需要被删除的用户的 uniqueId,可传多个 |
domainId | Number(Optional) | 域ID,企业域用户可指定 |
domainName | String(Optional) | 域名,企业域用户可指定 |
请求参数示例:
{
"token": "1564644553413e707fada60f1c72d500322c9",
"uniqueIds": ["user1@corp.netease.com", "user2@corp.netease.com"]
}
返回结果示例:
{
"code": 200,
"result": true,
"logPath": "http://127.0.0.1:8009/operation/log/8nLVCeTeATCk18zq7HhJQS"
}
角色与权限
获取用户角色、行级权限、用户组接口
接口说明: 获取某个用户拥有的角色列表(包括二级角色)、行级权限列表和所在用户组的列表
权限说明: 使用 token 访问,只有项目管理员才能调用该接口。
基本信息:
API | /api/dash/user/permissions |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
uniqueId | String | 用户的 uniqueId |
projectId | String | 项目的 id |
返回结果示例:
{
"code": 200,
"result": {
"roles": [ //角色列表
{
"id": 1,
"name": "项目管理员",
"type": 1,
"expiredTime": null, //没有有效期
}
],
"rowPermissions": [ //行级权限列表
{
"id": 190,
"name": "数据行级权限abc",
"type": 2,
"expiredTime": "2025-07-24T16:00:00.000Z",
"dataPermissions": [ //数据权限详情,数据格式可以参照 [关于数据权限传递参数详细说明]
{
"details": [
{
"tableAlias": "Sheet1",
"tableName": "Sheet1",
"selectType": "unselect",
"model": "manual",
"filterType": "listFilter",
"filter": {
"dim": {
"field": "数字",
"dataType": "Whole"
},
"select": [
"1234"
]
}
}
],
"mode": "fixed",
"rule": "or",
"type": "row",
"resourceId": 700315840,
"resourceCategory": 3,
"roleId": 26360
},
{
"details": [
{
"tableAlias": "Sheet1",
"tableName": "Sheet1",
"type": "dataLevel",
"dataMasks": [
{
"field": "数字",
"dataType": "Whole",
"applyRange": [
"view",
"export"
]
},
{
"field": "文本",
"dataType": "String",
"applyRange": [
"view",
"export"
]
}
]
}
],
"mode": "fixed",
"rule": "and",
"type": "column",
"resourceId": 700315840,
"resourceCategory": 3,
"roleId": 26360
},
{
"details": [
{
"produced": "Original",
"selectType": "select",
"select": [
"Sheet1"
],
"mode": "manual"
}
],
"mode": "fixed",
"rule": "and",
"type": "table",
"resourceId": 700315840,
"resourceCategory": 3,
"roleId": 26360
}
]
}
],
"groups": [ //用户组列表
{
"id": 50,
"name": "用户组1"
},
{
"id": 174,
"name": "用户组123"
}
]
},
"logPath": "http://127.0.0.1:8009/operation/log/nuhTNDBGUaEydmwbaHCmD4"
}
获取某项目的角色、行级权限列表的接口
接口说明:
获取项目中的角色列表或行级权限列表。
权限说明:
使用 token 访问,只有超管和在项目中的用户才能调用该接口。
基本信息:
API | /api/dash/role/list |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是超管或在项目中的用户 |
projectId | Int | 项目 id |
type | String | 'ROLE'为角色;'ROW_PERMISSION'为行级权限 |
sort | String(Optional) | 角色列表排序默认为'name:1',按照名字升序排列 |
输入URL示例:
https://youdata.163.com/api/dash/role/list?projectId=1&type=ROLE&token=1564644553413e707fada60f1c72d500322c9
返回结果示例:
{
"code": 200,
"result": {
"folders": [
{
"id": 35,
"type": "ROLE",
"name": "name1",
"isFolder": 1,
"projectId": 1,
"parentId": 0,
"modifyTime": "2019-05-08T07:32:35.000Z",
"items": [
{
"id": 2682,
"projectId": 1,
"type": 0,
"name": "2",
"description": "",
"isAdminCreate": true,
"creatorName": "Jack",
"creatorId": 15,
"folderId": 35,
"isFolder": 0
},
{
"id": 2720,
"projectId": 1,
"type": 0,
"name": "xxa",
"description": "xxxxxx",
"isAdminCreate": true,
"creatorName": "Amy",
"creatorId": 282,
"folderId": 35,
"isFolder": 0
}
],
"folders": []
},
{
"id": 21,
"type": "ROLE",
"name": "name2",
"isFolder": 1,
"projectId": 1,
"parentId": 0,
"modifyTime": "2019-04-28T02:46:23.000Z",
"items": [],
"folders": []
}
],
"items": [
{
"id": 2665,
"projectId": 1,
"type": 3,
"name": "1",
"description": "",
"isAdminCreate": true,
"creatorName": "admin",
"creatorId": 15,
"folderId": 0,
"isFolder": 0
},
{
"id": 2570,
"projectId": 1,
"type": 0,
"name": "111",
"description": "uu",
"creatorName": "admin",
"creatorId": 1,
"folderId": 0,
"isFolder": 0
}
]
},
"logPath": "http://127.0.0.1:8009/operation/log/vGxKzd6w1rX34wHky9i6Zb"
}
同步用户数据权限和资源权限接口
接口说明:
导入一个数据权限或者一个资源权限。根据roleName和type查找是否已经存在同名权限,如果存在就更新这个权限的description,如果不存在就创建一个新的叫这个名字的权限。 然后把 uniqueId 和 uniqueIds 中的用户加到这个project里面来,给这些用户赋予导入的权限;给 groupNames 指代的用户组们也增加这个权限。
异常:
- 如果根据 projectId 找不到项目,返回“对应的项目不存在”
- 如果有用户不存在的,返回“对应的用户不存在”
- 如果有用户组不存在的,返回“对应的用户组不存在”
补充解释:
- 数据权限就是【数据行级权限】,资源权限就是【角色】
- 导入数据权限,type为2,如果还要设置数据行级权限,增加 dataPermissions 字段
- 导入资源权限,type为:0(一级角色)、3(二级角色),如果还要设置资源权限,增加 resourcePermissions 字段
- type 和 path 是必传的, resourcePermissions(dataPermissions)是可选的
- 如果指定了dataPermissions或者resourcePermissions时,该接口导入前会将该角色所有的权限包括资源权限和数据权限都删掉,然后导入新的用户指定的权限
基本信息:
API | /api/dash/role/importDataPermissions |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,只有项目管理员可以访问该接口 |
uniqueId | String(Optional) | 导入的角色需要关联的用户账号 |
uniqueIds | Array(Optional) | 导入的角色需要关联的用户账号列表 |
userExpireMap | Object(optional) | 关联的用户的有消息,{[用户uniqueId]: 过期时间} |
projectId | Int | 项目id, 要导入到哪个项目里 |
roleName | String | 要创建的角色的名称,必须传 |
path | Array(String) | 创建的角色的文件夹路径,最多支持一层文件夹,如["aaa"],表示把角色创建子aaa文件夹下(如果文件夹不存在则自动创建),如要在根目录下创建角色,则传空数组。 亦支持指定文件夹下的数据权限设置 |
description | String(Optional) | 可选参数,用于角色描述 |
groupNames | Array(Optional) | 导入的角色需要关联的用户组名称列表 |
groupExpireMap | Object(optional) | 关联的用户组的有效期,{[用户组名称]: 过期时间} |
orgCodes | Array(Optional) | 需要关联的组织架构编码列表 |
orgExpireMap | Object(optional) | 关联的组织架构有效期 {[组织机构编码]: 过期时间} |
dataPermissions | Array(Optional) | 数据权限列表 |
resourcePermissions | Array(Optional) | 资源相关的资源权限列表 |
importResourceTypes | Array(Optional) | 导入角色的时候,可以指定导入哪几种资源权限,被指定的资源类型的权限会被情况然后添加。如果不传这个参数,那么角色的所有权限都会被清空。resourcePermissions 参数中涉及到的资源种类,必须被importResourceTypes包含,否则会报错“导入的权限超出 importResourceTypes 指定的范围 " |
type | Int | 0 一级角色,3 代表二级角色,2 代表行级权限 |
ignoreInvalidUser | bool | 如果用户不存在于有数,是否忽略; 默认为false, 不忽略,会报错 |
dataPermissions的数据格式如下(参考上文中的关于数据权限传递参数详细说明):
字段名称 | 参数类型 | 参数说明 |
---|---|---|
dataConnectionId | Int | 数据连接id |
details | Array | 该数据连接下的数据权限列表 |
mode | String | 固定值为 "fixed" , 动态值为 "dynamic" |
type | String | 行权限 "row", 列权限 "column", 表权限 "table", 不传默认为 "row |
修改资源权限:
{
"uniqueId": "xiaozhupeiqi@corp.netease.com",
"uniqueIds": ["xiaozhupeiqi2@corp.netease.com"],
"userExpireMap": {
"xiaozhupeiqi@corp.netease.com": "2027-10-10 10:00:00"
},
"groupNames": ["5月10号用户组"],
"groupExpireMap": {
"5月10号用户组": "2027-10-10 10:00:00"
},
"orgCodes": ["rC57m4iRY5e3"],
"orgExpireMap": {
"rC57m4iRY5e3": "2027-10-10 10:00:00"
},
"projectId": 63666,
"path":[],
"roleName": "5月10号角色",
"description": "5月10号角色",
"type": 0,
"importResourceTypes": ["DATA_CONNECTION", "NEW_REPORT"],
"resourcePermissions": [ // <== 资源权限专用!!
{
"resourceId": 2010,
"resourceNamePaths": ["lidasong", "3.9"], //这个字段与resouceId,可以二选一,表示lidasong文件下的名称为3.9的数据连接
"resourceType": "DATA_CONNECTION",
//resourceType为[NEW_REPORT,DATA_MODEL,DATA_CONNECTION,SCREEN]资源对应的资源权限为['view', 'edit', 'export', 'copy']
//resourceType为[ADD_DATA_CONNECTION,ADD_DATA_MODEL,ADD_NEW_REPORT,ADD_SCREEN]对应的资源权限为['add', 'noPrivateAdd']
//DATA_CONNECTION的资源权限还有自定义SQL: "customSql"
"permissions": [
"view",
"edit"
],
"isFolder": 0, //是文件夹还是普通资源,默认为0
},
{
"resourceNamePaths": [ //根目录下一共报告名字叫"lly"
"lly"
],
"resourceType": "NEW_REPORT",
"isFolder": 1,
"permissions": [
"view",
"edit"
]
}
]
}
修改数据权限:
{
"uniqueId": "xiaozhupeiqi@corp.netease.com",
"uniqueIds": ["xiaozhupeiqi2@corp.netease.com"],
"userExpireMap": {
"xiaozhupeiqi@corp.netease.com": "2027-10-10 10:00:00"
},
"groupNames": ["5月10号用户组"],
"groupExpireMap": {
"5月10号用户组": "2027-10-10 10:00:00"
},
"orgCodes": ["rC57m4iRY5e3"],
"orgExpireMap": {
"rC57m4iRY5e3": "2027-10-10 10:00:00"
},
"projectId": 63666,
"roleName": "5月10号行级权限",
"description": "5月10号行级权限",
"type": 2,
"dataPermissions": [
{
"mode": "dynamic",
"dataConnectionId": 2010,
"details": [
{
"database": "dev_netease", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "工作表1",
"selectType": "select",
"model": "list",
"filterType": "listFilter",
"filter": {
"dim": {
"field": "本科毕业学校",
"dataType": "String"
},
"attrId": 3
}
}
]
},
{
"mode": "fixed",
"dataConnectionId": 2010,
"details": [
// listFilter 的例子,行权限
{
"type": "row",
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
// treeFilter 的例子,行权限
{
"type": "row",
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
},
// "自定义SQL例子",行权限
{
"type": "row",
"filterType": "treeFilter",
"selectType": "select",
"tableExprId": 3,
"tableName": "自定义sql的名字",
//自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
},
//导入列权限
{
"dataConnectionId": 700310177,
"details": [
{
"type": "dataLevel", //隐藏列
"tableName": "sheet1", //表名
"dataMasks": [
{
"field": "地区", //字段名
"dataType": "String",
"applyRange": [ //应用范围:导出 + 查看
"view",
"export"
]
}
]
}
],
"type": "column"
},
{ //表权限
"dataConnectionId": 700310177,
"details": [
{
"database": "test", //库名
"databaseAlisa": "test", //库名的别名
"produced": "Original",
"selectType": "unselect", //unselect:禁止查看,select:仅可见
"select": ["table_name"], //可见|不可见的表名
"mode": "manual",
}
]
}
]
}
]
}
成功数据返回:
{
code: 200,
result: 1 // 角色ID
}
全量同步某个资源粒度的用户权限
API | /api/dash/directResourcePerm/syncMembers |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
resourceName | String | 数据模型(DATA_MODEL), 数据连接(DATA_CONNECTION),报告(NEW_REPORT) |
resourceId | Number | 资源ID |
memberInfos | Arr | 成员信息 |
autoAddProjectUser | Bool | 默认为true, 如果用户不在项目,是否自动加入项目 |
wholeCoverMembers | Bool | 默认为false,是否清空当前资源下所有用户权限,用memberInfos全量覆盖 |
memberInfos 结构: 如果用户不在系统里, 将忽略这条数据
[{
type: String, // 用户账号类型: 'uniqueId', 'user'
id: String // 用户账号
// 查看(view), 复制数据(copyData), 导出(export),编辑(edit),
// 分享(share), 推送(mail), 预警(warning), 无权限仍可见(showSummaryWithoutPerm)
permissions: []
}]
输入示例:
{
"projectId": 505,
"resourceId": 144861,
"resourceName": "DATA_MODEL"
"memberInfos": [{
"type": "uniqueId",
"id": "xxxx@163.com",
"permissions": ["view","copyData","export"]
}]
}
删除用户在项目里拥有的角色接口
接口说明:
(outdated:只能删除根目录下的一级角色或权限)
该接口用于删除多个用户在某个项目里的角色(用户需为项目管理员),这个接口并不是删除项目中的角色本身,而是解绑用户与角色的关系。如果roleNames和permissionRoleNames, systemRoleIds 只要指定了其中一个或者两个,三个,表示解绑指定角色,否则是解绑该项目下用户拥有的所有角色(不包含该用户所在用户组的角色)
基本信息:
API | /api/dash/user/delRoles |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
uniqueIds | Array(String) | 需要解绑的角色的用户列表 |
projectId | Int | 项目id,必填 |
roleNames | Array(String)(Optional) | 解绑用户指定的角色的名称列表(若不指定 path,则默认为根目录),与 permissionRoleNames 二者必填其一 |
systemRoleIds | Array(Int)(Optional) | 要解绑的系统角色, 1 表示项目管理员,2 表示编辑者,3 表示预览者 |
permissionRoleNames | Array(String)(Optional) | 解绑用户指定的行级权限根目录的权限,与 roleNames 二者必填其一 |
path | Option(Array(String)) | 如果指定 path,则指的是该路径下的角色或数据权限,否则指根目录下的角色或数据权限,path 目前最多只支持一层 |
输入示例
{
"token":"172061XXXXXXXXb97454038683f97cb6",
"uniqueIds": ["wanlibing@admin.com"],
"projectId": 427,
"roleNames":["文件角色123"],
"path": ["文件夹1"]
}
成功数据返回:
{
"code": 200,
"result": {
"fieldCount": 0,
"affectedRows": 1,
"insertId": 0,
"serverStatus": 2,
"warningCount": 0,
"message": "",
"protocol41": true,
"changedRows": 0
},
"logPath": "http://127.0.0.1:8009/operation/log/uuKdr9vtYBfYf4z2CrGPMT"
}
删除角色
基本信息:
属性 | 值 |
---|---|
API | /api/dash/role/ext/delete |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
roleId | Option(Int) | 角色的ID,roleId 可以唯一确定一个用户组,如果不提供 roleId,则需要同时提供 projectId 和 path |
projectId | Option(Int) | 项目ID,跟path 同时存在,projectId 和 path 可以唯一确定一个角色 |
path | Option(Array(String)) | 用户组的路径,其最后一项是角色的名称,跟 project 同时存在,projectId 和 path 可以唯一确定一个角色 |
输入示例
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"roleId": 123,
}
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"path": ["文件夹1","角色1"]
}
返回:
{
"code": 200
}
修改用户动态值属性接口
接口说明
修改用户动态值属性的值。
基本信息
API | /api/dash/userAttr/update |
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的域管理员 |
uniqueId | String | uniqueId |
userId | Int | 用户ID |
attrs | Array | 用户权限属性值 |
uniqueId
和userId
二选一,优先匹配uniqueId
,若都不填会报错
用户权限属性值 attrs
参数说明:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
attrId | Int | 属性id |
attrName | String | 属性名称。(与attrId任选其一即可) |
attrValue | Array(或null ) |
属性值 |
属性id (attrId):如果用户只有 attrId 为1、3、5的属性,那么只需要在接口中设置这几个属性的值即可,没有被设置的属性可以理解为 attrValue 为null
,可以传也可以不传。如果用户已有该attrId的属性值,则会被新值覆盖。
属性名称 (attrName):属性列表中的属性名。设置方法同上。
属性值 (attrValue):正常情况下是一个字符串数组。
如果要清除用户的对应 attrId 的属性,attrValue 应设置为 null
,这表示该用户没有被这个属性限制权限。如果 attrValue 的值为 []
,说明用户完全没有该属性所关联的列的查看权限。
注意:调用 用户批量导入接口 设置用户属性与调用本接口设置用户属性效果是一样的,这两个接口的接口参数中的attrs
的处理方式是相同的。所以,如果只想导入用户属性,也可以调用本接口(/api/dash/userAttr/update
)。
{
"userId":141,// 或 "uniqueId": "abc@163.com"
"attrs" : [
{
"attrId":1,
"attrValue":["武汉大学","黄冈师范学院"]
},
{
"attrId":3,
"attrValue":[]
},
{
"attrId":5,
"attrValue":null
}
]
}
成功数据返回
{
"code": 200,
"result": "ok",
}
添加用户组
基本信息:
属性 | 值 |
---|---|
API | /api/dash/group/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
title | String | 用户组名称 |
description | String | 用户组的描述 |
roleIds | Option(Array(Int)) | 用户组拥有的角色ID列表 |
path | Option(Array(String)) | 用户组的路径,跟folderId 二选一,只支持一层文件夹,没有文件夹就填空数组 |
category | String | 写死为editor |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"title": "用户组1",
"category": "editor",
"description": "用户组1的描述",
"path":["文件夹1"]
}
返回:
{
"code": 200,
"result": 123 // 新增的用户组的ID
}
修改用户组名称
基本信息:
属性 | 值 |
---|---|
API | /api/dash/group/ext/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | Token |
title | Option(String) | 用户组名称 |
description | Option(String) | 用户组的描述 |
id | Option(Int) | 用户组ID,可以唯一确定给一个用户组,如果不提供,需要提供 projectId 和 path |
projectId | Option(Int) | 项目ID,跟path一起可以唯一确定一个用户组 |
path | Option(Array(String)) | 用户组的路径,至少有一个元素,数组最后一个元素是用户组的名称,跟projectId一起可以唯一确定一个用户组 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"title": "用户组1",
"description": "用户组1的描述",
"path":["文件夹1", "用户组2"]
}
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"id": 300,
"title": "用户组1",
"description": "用户组1的描述"
}
返回:
{
"code": 200
}
删除用户组
基本信息:
属性 | 值 |
---|---|
API | /api/dash/group/dels |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
projectId | Number | 项目ID |
path | Array(String) | 跟 ids 二选一,path 的最后一项是用户组的名称,根据 path 删除用户组 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"path":["文件夹1", "用户组A"]
}
返回:
{
"code": 200
}
删除用户组的成员
基本信息:
属性 | 值 |
---|---|
API | /api/dash/group/ext/delUsers |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
groupId | Option(Int) | 用户组的ID,groupId 可以唯一确定一个用户组,如果不提供 groupId,则需要同时提供 projectId 和 path |
projectId | Option(Int) | 项目ID,跟path 同时存在,projectId 和 path 可以唯一确定一个用户组 |
path | Option(Array(String)) | 用户组的路径,其最后一项是用户组的名称,跟 project 同时存在,projectId 和 path 可以唯一确定一个用户组 |
uniqueIds | Option(Array(String)) | 账号列表,跟 erase 二选一,选择清空用户组下面的哪些成员。 |
erase | Option(Bool) | 是否清空这个用户组的所有成员。 |
输入示例
// 清空ID为123的用户组的所有成员
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"groupId": 123,
"erase": true,
}
// 移除用户组的部分成员
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1,
"path": ["文件夹1","用户组B"],
"uniqueIds": ["aaa@163.com", "bbb@126.com"],
}
返回:
{
"code": 200
}
系统自定义角色的创建
基本信息
属性 | 值 |
---|---|
API | /api/dash/systemRole/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
name | String | 系统自定义角色的名称 |
description | Optional(String) | 系统自定义角色的描述 |
输入示例:
{
token: "xxx",
name: "系统管理员", // 系统自定义角色的名称
description: "拥有系统管理权限" // 系统自定义角色的描述
}
输出示例:
{
result: 1, // 系统自定义角色ID
}
系统自定义角色的修改
基本信息
属性 | 值 |
---|---|
API | /api/dash/systemRole/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
id | Int | 系统自定义角色ID |
name | Optional(String) | 系统自定义角色的名称 |
description | Optional(String) | 系统自定义角色的描述 |
输入示例:
{
token: "xxx",
id: 123, // 系统自定义角色ID
name: "系统管理员", // 系统自定义角色的名称
description: "拥有系统管理权限" // 系统自定义角色的描述
}
系统自定义角色的删除
基本信息
属性 | 值 |
---|---|
API | /api/dash/systemRole/dels |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
ids | Arr(Int) | 系统自定义角色ID列表 |
系统自定义角色的列表
基本信息
属性 | 值 |
---|---|
API | /api/dash/systemRole/list |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
输出示例:
[{
name: 'xxx', // 系统角色名称
id: 1, // 系统角色ID
domainId: 1 // 域ID
description: "xxx" // 描述
}]
创建角色文件夹
基本信息
属性 | 值 |
---|---|
API | /api/dash/role/folder/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
输入示例:
{
"token": "1715153331570ccd827064c458a2e6ec2a3fe",
"projectId": 64233,
"parentId": 0, // 上级文件夹, 0表示根目录
"managementType": 4, // 4表示数据权限, 3表示角色
"name": "测试数据权限文件夹" // 文件夹名称
}
输出示例:
// 正常情况
{
id: Int, // 文件夹 ID
}
// 异常情况: 已存在同名目录
{
titleRepeat: true,
newTitle: String
}
项目相关
新增项目
接口说明:
新建一个项目,必须指定至少一个项目成员
基本信息:
API | /api/dash/project/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
name | String | 项目名称 |
description | Option(String) | 项目描述 |
receiverList | Arr(Object) | 成员列表,要填写用户的uniqueId,具体看例子 |
domainId | Option(Number) | 域ID,企业域用户可指定 |
domainName | Option(String) | 域名,企业域用户可指定 |
输入样例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"name": "项目A",
"description": "描述",
"receiverList": [
{
"type": "user",
"name": "xxx1@xxx.com"// uniqueId
},
{
"type": "user",
"name": "xxx2@xxx.com" // uniqueId
}
]
}
成功数据返回:
{
"code": 200,
"logPath": "http://127.0.0.1:8009/operation/log/fNy78UctuDQ3geEsBJAm6m"
}
修改项目名称
接口说明:
修改项目信息
基本信息:
API | /api/dash/project/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
name | Optional(String) | 项目名称 |
Id | Number | 项目ID |
description | Optional(String) | 项目描述 |
输入样例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"id": 1,
"name": "新项目A",
"description": "新描述"
}
成功数据返回:
{
"code": 200,
"logPath": "http://127.0.0.1:8009/operation/log/fNy78UctuDQ3geEsBJAm6m"
}
删除项目
接口说明:
删除项目。
基本信息:
API | /api/dash/project/del |
Method | DELETE |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
projectId | Number | 项目ID |
输入样例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 1
}
成功数据返回:
{
"code": 200,
"logPath": "http://127.0.0.1:8009/operation/log/fNy78UctuDQ3geEsBJAm6m"
}
组织架构相关
组织架构同步
接口说明:
注意事项:
- 如果部门已经被删除了,被删除了的部门的修改,不要放到 updatedOrgs 发给有数,但可以放到 deletedOrgs 发过来重复删除
- 部门负责人列表,目前只取第一个负责人,最好第一个元素是部门的主要负责人
- 如果部门或子部门下还有直属员工,或者部门下还有子部门,均无法删除部门
- 2023年1月10日 update:
- deletedOrgCodes 中的部门,如果不传 forceDeleteOrg: false ,会递归的删除该部门下的所有部门,并冻结所有人员。
- deletedOrgCodes 被删除的部门的应用项目,如果在 updatedOrgs 中有同样的 orgCode,会在添加的时候被恢复
基本信息:
API | /api/dash/orgStructure/syncOrg |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
companyName | Optional(String) | 公司名,如果传了会更改公司名 |
updatedOrgs | Array | 见输入样例 |
forceDeleteOrg | Optional(Boolean) | 是否强制删除部门,默认为 true,如果不设置为 false,会递归的删除该部门下的所有部门,并冻结所有人员 |
deletedOrgCodes | Array(String) | 需要删除的部门的编码,可以重复删除,如果不删除可以传一个空数组 |
输入样例:
{
"companyName": "xxx公司", // 可选字段,如果传了会更改公司名
"updatedOrgs": [{ // 新增或更新的部门
"orgCode": "xxx", // 部门编码,要保证全局唯一
"name": "部门名称",
"parentOrgCode": "上级部门编码", // 可选,如果不传,说明是一级部门
"orgAdminUniqueIds": ["account1", "account2"], // 部门负责人列表,目前只取第一个负责人
"description": "部门描述"
}],
"forceDeleteOrg": false, // 是否强制删除部门
"deletedOrgCodes": ["code1", "code2", "code3"] // 必传,需要删除的部门的编码,可以重复删除,如果不删除可以传一个空数组
}
人员和组织的关系同步
接口说明:
使用对外接口文档中的/api/dash/user/batchImport接口 ,在导入用户的过程中,把组织关系也同步过来。
该接口的 users 字段新增 userOrgs 字段,表示用户当前直属于哪些部门,以及在这些部门里的角色
注意:
第一次调用 [(部门A, leader)] ,会把这个用户加入部门A,且作为负责人
第二次调用 [(部门A, normal)],这个用户仍然在A,但不是负责人了
第一次调用 userOrgs 说这个用户在A部门
第二次调用 userOrgs 说这个用户在B,C部门
第三次调用 userOrgs 说这个用户在 E,F,G 部门
最终这个用户在 EFG 部门
基本信息:
API | /api/dash/user/batchImport |
Method | POST |
输入样例:
{
"token": "167817564178376dcd64c0bebedc9b161bb8a",
"users": [{
"uniqueId": "wanglibing6@admin.com",
"userOrgs": [{
"orgCode": "4BnnSF6KcKnY",
"orgRole": "normal"
}],
}],
"returnOrgFailedUsers": true //如果有用户的 org 没同步成功,返回报错信息
}
返回样例:
{
"code": 200,
"result": [ // 如果设置了 returnOrgFailedUsers
{
"uniqueId": "maomao",
"message": "code1 dosen't exist!"
}
]
}
门户相关
修改用户的门户总地址访问的门户
接口说明:
修改用户的门户总地址访问的门户
基本信息:
API | /api/dash/portal/updateMainPortal |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
customUrl | String | 门户的url |
uniqueIds | Arr(String) | 用户的账户列表 |
成功数据返回:
{
"code": 200,
"logPath": "http://127.0.0.1:8009/operation/log/fNy78UctuDQ3geEsBJAm6m"
}
获取用户的门户总地址
接口说明:
获取设置了门户总地址的用户的门户总地址,如果用户没有设置过门户总地址,那么该用户不会在返回结果之中。
基本信息:
API | /api/dash/portal/listUserMainPortal |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,必须是超管 |
uniqueIds | Optional(Arr) | 用户uniqueId数组,如果不提供,会返回所有用户的门户总地址 |
成功数据返回:
{
code: 200,
result: [
{
id: 11966,
nick: "郭郭郭",
email: "407121202@qq.com",
uniqueId: "407121202@qq.com",
favoritePortalId: 527,
url: "204_526"
},
{
id: 1,
nick: "admin",
email: "admin@admin.com",
uniqueId: "admin@admin.com",
favoritePortalId: 334,
url: "门户已被删除"
}
],
logPath: "http://127.0.0.1:8009/operation/log/aznj54X2xvAeyiZMdzaC3B"
}
导出与推送相关
导出图片和pdf接口
接口说明:
用于将图表导出为图片,这里需要注意的,导出接口用户在页面上临时的选择,无法实现导出
基本信息:
API | /api/dash/report/exportCapture |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
exportType | String(Optional) | 导出图片类型,"picture"为导出图片,"pdf"为导出PDF,默认是导出图片 |
reportId | Int | 需要导出的报告id |
type | String | type="report",表示是导出报告,type="dashboard",表示导出报告页,type="component",表示导出图表组件 |
componentId | String(Optional) | 组件id,如果type="component",必传 |
dashboardId | Int(Optional) | 页面id,如果type="component"或"dashboard",必传 |
title | String(Optional) | 导出文件名称 |
defaultFilters | filters(Optional) | 筛选器,支持列表筛选器和静态类型日期筛选器 |
tempQueryId | String (Optional) | 临时筛选ID,如果客户在报告做了一些临时筛选等操作,可以通过在集成iframe 的postMessage的方式拿到这个ID,就可以导出筛选后的数据, postMessage具体格式参考前端开放API能力| |
emptyCheck | Boolean(Optional) | 是否检查数据为空 |
列表筛选器的配置格式为:
{
"列表筛选器控件id":{
selected: Array,
exclude: Boolean
}
}
静态日期筛选器的配置格式为;
{
"日期筛选器控件id":{
type: "StaticTime",
minBound: timeString,
maxBound: timeString
}
}
接口输入参数示例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"exportType": "picture", //png格式
"reportId": 1,
"type": "dashboard",
"dashboardId": 23330,
"title": "API导出",
"tempQueryId": "export_2ff50084b2e9ac865f3779c6ecd7c4d6",
"defaultFilters": {
"c-bQo8b75xnJqmhvnJpYNXtW": {
"selected": [
"2020",
"2021",
"2022",
"2023"
],
"exclude": false
}
}
}
成功数据返回:
{
"code": 200,
"result": {
"link": "...", // 下载地址
"emptyData": true // 当设置了emptyCheck时,返回截图数据是否为空,且当数据为空时不返回下载地址
}
}
导出excel接口
接口说明:
用于将图表数据导出为excel,这里需要注意的,导出接口用户在页面上临时的选择,无法实现导出
基本信息:
API | /api/dash/report/exportExcel |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
reportId | Int | 报告id |
type | String | type="report",表示是导出报告,type="dashboard",表示导出报告页,type="component",表示导出图表组件 |
componentId | String(Optional) | 组件id,如果type="component",必传 |
exportType | String(Optional) | 非必填,'csv', 'xlsx', 'crossTable',三者选其一,不传值默认是xlsx |
dashboardId | Number (Optional) | 页面id,如果type="dashboard",必传 |
enhance | Bool(Optional) | 是否导出带样式,true-带样式,false-不带样式,默认true |
conditionFormat | Bool(Optional) | 是否导出条件格式,enhance为true时生效。true-导出条件格式。false不导出,默认false |
useOriginData | Bool(Optional) | 是否导出数据格式及日期格式,true-使用原始数据,false-导出数据格式及日期格式,默认false |
includeTitle | Bool (Optional) | 是否导出图表标题,true-导出,false-不导出, 默认false |
rowsLimit | Number(Optional) | 导出行数。导出类型为xlsx时,可以使用此字段。默认为设置的默认导出行数限制 |
title | String(Optional) | 导出文件名称 | | |
defaultFilters | filters(Optional) | 筛选器,与导出图片和pdf接口中的defaultFilters字段格式一致 |
excelSplitLimit | Number (Optional) | 当导出单个图表组件时,可以使用此参数配置条数拆分导出成多个Excel导出 | |
tempQueryId | String (Optional) | 临时筛选ID,如果客户在报告做了一些临时筛选等操作,可以通过在集成iframe 的postMessage的方式拿到这个ID,就可以导出筛选后的数据, postMessage具体格式参考前端开放API能力| |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"exportType": "xlsx",
"reportId": 14986,
"type": "dashboard",
"dashboardId": 23330,
"useOriginData": false,
"includeTitle": true,
"title": "API导出excel",
"tempQueryId": "export_2ff50084b2e9ac865f3779c6ecd7c4d6",
"defaultFilters": {
"c-bQo8b75xnJqmhvnJpYNXtW": {
"selected": [
"2020",
"2021",
"2022",
"2023"
],
"exclude": false
},
"c-gJLpNWPGADEg1Gx5zZBGHk": {
"type": "StaticTime",
"minBound": "2022-02-02 00:00:00",
"maxBound": "2023-03-12 24:00:00"
}
}
}
成功数据返回:
{
"code": 200,
"result": {
"link": "...", // 下载地址
"taskId": 5362, // 导入任务id
"sheetInfos": [ // sheet信息
{
"dataLine": 54,
"fieldNames": [ // 字段名列表
"地区",
"类别",
"细分",
"折扣"
]
}
],
"exportFileName": "未命名报告-折扣(按细分、地区、类别划分)_20241104:49", // 导出文件名
"emptyData": false // 只要存在一个导出组件的数据为空,该字段就返回true
}
}
导出填报模版接口
接口说明:
根据填报ID导出填报模版。
基本信息:
API | /api/dash/survey/exportTemplate |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
surveyId | Number | 填报ID |
defaultFilters | filters(Optional) | 筛选器,支持列表筛选器和日期筛选器 |
defaultFilters列表筛选器格式与导出图片和pdf接口的列表筛选器一致,获取筛选器控件id方式如下:
访问指定填报页面(dash/survey/1/?surveyId=123456),打开开发者工具,执行
window.__FRANKY_APP_PROXY_WINDOW__._gcGlobal.activeElement.filterDataModel
,即可获取筛选器信息列表
日期筛选器支持多种类型: 静态日期筛选器
{
"日期筛选器控件id":{
"$type": "DateTimeFilter",
"period": {
"minBound": timeString,
"maxBound": timeString
},
"mode": {
"$type": "StaticTime"
}
}
}
相对日期筛选器
通过anchor字段和count字段表示[currentTime-anchor-count+1, currentTime-anchor]的一段时间,时间单位unit支持day(天)、week(周)、month(周)、quarter(季度)、halfYear(半年)、year(年)
{
"日期筛选器控件id":{
"$type": "DateTimeFilter",
"mode": {
"$type": "RelativeTime",
"count": 7, 偏移量
"unit": "day", // 时间单位
"anchor": 0 // 偏移起始位置
}
}
}
某日期前的所有时间
"日期筛选器控件id":{
"$type": "DateTimeFilter",
"period": {
"maxBound": timeString
},
"mode": {
"$type": "RelativeTime"
}
}
}
某日期后的所有时间
"日期筛选器控件id":{
"$type": "DateTimeFilter",
"period": {
"minBound": timeString
},
"mode": {
"$type": "RelativeTime"
}
}
}
示例数据:
{
"token": "1675218670096b19ede50c8a59111b9da2fbe",
"surveyId": 4267,
"defaultFilters": {
"jdcZ1DipogvNWVaTjRQovi": {
"selected": [
"东北",
"华北",
"西南"
],
"exclude": false
},
"vB3Z7F42UyNLPvpdJ7eGc6": {
"$type": "DateTimeFilter",
"period": {
"minBound": "2023-02-01 00:00:00",
"maxBound": "2023-03-16 24:00:00"
},
"mode": {
"$type": "StaticTime"
}
}
}
}
返回结果:
{
"code": 200,
"result": "http://nos.netease.com/youdata-test/exportSurveyTemplate-development-4267-12692-vNmQyWnS.xlsx?Expires=1677738614&NOSAccessKeyId=f3318b2c1f67409386bb99813a44c778&Signature=a4pRSGEUldkg2Giz0hkDrYAMOfMza1ic4qqBa9p%2FGUE%3D&download=exportSurveyTemplate-development-4267-12692-vNmQyWnS.xlsx",
"apiCost": 29041,
"logPath": "http://127.0.0.1:8009/operation/log/jAnUcBvkVok8jaKaztpaqv"
}
立即发送推送接口
接口说明:
立即发送指定项目指定报告的邮件或webhook。
基本信息:
API | /api/dash/regularMail/send |
Method | POST |
该接口有两种参数传递方式
参数传递方式一
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
邮件信息 |
mail字段:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
cache | String (Optional) | 默认为'1'使用缓存,'0'为不使用缓存 |
resourceId | Int | 报告id |
projectId | Int | 项目id |
title | String | 邮件标题 |
receiverList | ReceiverList | 接收者列表,可以是用户,角色,用户组 |
tag | String(Optional) | 邮件签名 |
sendFailMailRemark | Int | 0失败不通知;1失败立即通知;2失败重试(至多3次)后通知 |
id | Int(Optional) | 有数系统中推送的id |
dataPermission | Int(Optional) | 默认为0不区分权限,1为区分权限 |
enableEmail | Int | 是否发送邮件 |
enableWebhook | Int | 是否发送webhook |
webhookList | Array(Int)(Optional) | 当enableWebhook为1时,该项必填。数组中的内容是在有数系统中配置的webhook的id |
image | Int(Optional) | 1带图片(默认),0带数据表格,2不带图片和数据表格 |
sendFailMailRemark | Int(Optional) | 0失败不通知,1失败立即通知,2失败重试后通知 |
attachment | String | 携带附件的类型,nothing-不携带附件,excel, pdf, png |
dashboardIds | Array(Int)(Optional) | 推送范围。当该字段不为null时,推送相应报告页,数组内容是报告页的id |
widgets | Array(widget)(Optional) | 推送范围。当该字段不为null时,推送相应组件,数组内容见下面 widgets字段 表 |
widgets字段: | 字段名称 | 参数类型 | 参数说明 | |-----------------|--------------|----------------------| | dashId | Int | 页面id | | selectIds | Array(String)| 当前页面被选中的组件id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"mail": {
"resourceId": 40,
"projectId": 13,
"title": "title",
"receiverList": [
{
"id": 122, // 用户id
"type": "user"
},
{
"id": 1, // 角色id
"type": "role"
},
{
"id": 1, // 用户组id
"type": "group"
},
{
"name": "hzlisi@163.com", // 用户的uniqueId
"type": "user"
},
{
"name": "角色名称", // 默认角色不支持,只能用id发送(项目管理员1,编辑者2,预览者3),角色id与name二选一即可
"type": "role"
},
{
"name": "用户组名称", // 用户组名称
"type": "group"
}
],
"cache": 1,
"tag": "qianming",
"id" : 2045,
"dataPermission": 0,
"enableEmail": 1,
"enableWebhook": 1,
"webhookList": [1],
"image":1,
"widgets": {"dashId": "140360", "selectIds": ["c-1-130781-140360-keavmgax"]}
}
}
参数传递方式二
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
batchMails | Array(Object) | 邮件信息 |
batchMails 字段:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
id | INT | 系统中定时推送或者立即推送的id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"batchMails": [{
"id": 40
},
{
"id": 41
}]
}
推送暂停/启用接口
接口说明:
暂停/启用定时推送。
基本信息:
API | /api/dash/regularMail/pause |
Method | POST |
参数传递方式一
暂停/启动指定的推送。
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
ids | Array(Number) | 推送ID数组 |
mode | String | pause-暂停推送,restore-重新启用推送 |
{
"token": "1675218670096b19ede50c8a59111b9da2fa',
"ids": [76995, 76994],
"mode": "pause"
}
参数传递方式二
暂停/启用项目下指定类型的所有推送。
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,须是项目管理员 |
projectId | Number | 项目ID |
type | Number | 推送类型,1-报告推送,4-取数导出,5-复杂报表推送 |
mode | String | pause-暂停推送,restore-重新启用推送 |
{
"token": "1675218670096b19ede50c8a59111b9da2fa',
"projectId": 64456,
"type": 1
"mode": "pause"
}
根据数据模型ID进行公共查询导出csv接口
接口说明:
根据数据模型 id 找到定时导出取数的记录。立即导出 csv 并发送到 webhook
基本信息:
API | /api/dash/easyFetch/exportExcelByDataModelId |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是在projectId对应的项目中 |
dataModelId | Number | 数据模型id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"dataModelId": 123
}
成功数据返回:
{
"code": 200,
"logPath": "http://127.0.0.1:8009/operation/log/h9UxwUqT6AR9vKCPUQF86u"
}
大数据量导出接口
接口说明:
对指定报告的组件进行大数据量导出任务的创建
基本信息:
API | /api/dash/report/asyncExportExcel |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
reportId | Int | 报告id |
componentId | String | 组件id |
exportType | Optional(String) | 导出结果类型,值为csv或xlsx,默认为csv |
excelSplitLimit | Optional(Int) | 导出数据行数,默认为1000000 |
{
"reportId": 468,
"componentId": "c-1-468-977-lysaita6",
"exportType": "csv",
"excelSplitLimit": 1000000
}
成功数据返回:
{
"code": 200,
"result": 46742 // 返回导出任务id,可以通过「获取导出状态接口」轮询导出状态
}
导出任务列表接口
接口说明:
获取导出任务列表
基本信息:
API | /api/dash/exportExcelTask/list |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
type | String | 导出类型,见「type枚举」 |
projectId | Int | 项目id |
status | Optional(Array(String)) | 导出状态的列表,见「status枚举」 |
offset | Optional(Int) | 返回结果偏移量 |
limit | Optional(Int) | 返回结果数量限制 |
keyword | Optional(String) | 关键词 |
startTime | Optional(String) | 开始时间 |
endTime | Optional(String) | 结束时间 |
exportType | Optional(String) | 导出结果类型,见「exportType枚举」 |
type枚举:
report | 报告 |
component | 组件 |
tab | 页面 |
easyFetch | 取数 |
easyFetchWebhook | 取数Webhook |
allEasyFetch | 所有取数相关 |
survey | 填报 |
elecTable | 电子表格 |
status枚举:
success | 成功 |
waiting | 排队中 |
waitingData | 查询数据中 |
pending | 数据传输中 |
generating | 文件生成中 |
uploading | 文件上传中 |
fail | 失败 |
expired | 已过期 |
approving | 审批中 |
approvePass | 审批通过 |
approveReject | 审批拒绝 |
exportType枚举:
excel | 导出为excel |
csv | 导出为csv |
crossTable | 导出为交叉表 |
{
"type": "report",
"projectId": 1,
"status": "success",
"offset": "0",
"limit": "1",
"keyword": "test",
"startTime": "2024-06-18 00:00:00",
"endTime": "2024-07-18 00:00:00",
"exportType": "excel"
}
成功数据返回:
{
"code": 200,
"result": {
"count": 307, // 总任务数量
"list": [ // 任务列表
{
"id": 52464, // 任务id
"type": "dashboard", // 导出类型(report: 报告, dashboard: 页面, component: 组件)
"reportId": 21263, // 报告id
"reportName": "report1", // 报告名称
"dashboardId": 31112, // 页面id
"subName": "dashboard1", // 页面名称
"componentId": null, // 组件id
"componentName": "component1", // 组件名称
"componentType": "table", // 组件类型(table: 表格, auto: 图表, indicator: 指标卡)
"exportWay": "sync", // 导出方式(sync: 普通导出, asyc: 大数据量导出)
"status": "expired", // 任务状态(见输入参数的「status枚举」)
"createTime": "2024-06-26T02:07:45.000Z", // 创建时间
"modifyTime": "2024-06-29T16:00:25.000Z", // 修改时间
}
]
}
}
获取导出状态接口
接口说明:
根据导出任务的id来获取导出任务状态
基本信息:
API | /api/dash/exportExcelTask/get |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
id | Int | 导出任务id |
{
"id": 46742
}
成功数据返回:
{
"code": 200,
"result": {
"id": 46742, // 任务id
"type": "dashboard", // 导出类型(report: 报告, dashboard: 页面, component: 组件)
"reportId": 21263, // 报告id
"reportName": "report1", // 报告名称
"dashboardId": 31112, // 页面id
"subName": "dashboard1", // 页面名称
"componentId": null, // 组件id
"componentName": "component1", // 组件名称
"componentType": "table", // 组件类型(table: 表格, auto: 图表, indicator: 指标卡)
"exportWay": "sync", // 导出方式(sync: 普通导出, asyc: 大数据量导出)
"status": "expired", // 任务状态(见导出任务列表接口的「status枚举」)
"createTime": "2024-06-26T02:07:45.000Z", // 创建时间
"modifyTime": "2024-06-29T16:00:25.000Z", // 修改时间
}
}
抽取相关
根据报告id获取抽取列表接口
接口说明:
获取抽取管理的列表,只会返回具有预览权限的数据连接对应的抽取列表
基本信息:
API | /api/dash/tableExtract/getListByReportId |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须具有reportId对应的报告的预览权限 |
reportId | Number | 报告id |
extractStatus | Optional(String) | 抽取状态,'success'-成功/'fail'-失败/'pending'-抽取中。当传递该参数时会筛选出对应抽取状态的抽取列表 |
offset | Optional(Number) | 偏移量,要跟limit一起传。不分页时请固定传0 |
limit | Optional(Number) | 返回的列表长度,要跟offset一起传。不分页时请传一个足够大的数字 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"reportId": 123,
"extractStatus": "success",
"offset": 0,
"limit": 200
}
成功数据返回:
{
"code": 200,
"result": {
"count": 110, // 筛选后所有数据条数的总和,不等于list的数组长度,list的数组长度跟limit值有关
"list": [
{
"id": 1517, // 抽取列表的记录id
"tableName": "退货", // 表名
"dataConnectionName": "超市大(1)(1)", // 数据连接名称
"status": "whole", // 抽取类型,'whole'-增量/'increment'-全量
"extractStatus": "success", // 抽取状态,'success'-成功/'fail'-失败/'pending'-抽取中
"extractTime": "2020-08-25T11:51:56.000Z", // 抽取时间
"usedMemory": 786432, // 占用空间,单位是字节
"successRate": 1, // 成功率
"priority": 0, // 优先级,1-最高/2-次高/3-中等/4-次低/5-最低
"tableExtractLogId": 339832, // 抽取记录id
"tableExprId": 123, // 自定义表 id
"disable": 0, // 是否被禁用
"message": null, // 失败原因
"database": "test", // 数据库名
"creatorName": "张三" // 创建人姓名
}
],
"overview": {
"count": 110,
"successCount": 100, // 抽取成功的总数
"pendingCount": 5, // 抽取中的总数
"failCount": 5, // 抽取失败的总数
"disableCount": 6 // 被禁用的总数
}
},
"logPath": "http://127.0.0.1:8009/operation/log/h9UxwUqT6AR9vKCPUQF86u"
}
单表预处理立即抽取接口
接口说明:
如果用户在数据链接做过单表抽取设置后,可以调用该接口执行立即抽取任务
基本信息:
API | /api/dash/tableCron/run |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
tableExtractId | Int | 数据抽取Id |
{
token: "1503575355359c4fdea8ec1683ed10edd91ae",
tableExtractId: 10 //抽取任务id
}
成功数据返回:
{ code: 200 }
修改抽取表外部依赖数据更新时间接口
接口说明:
用于更新某张抽取表的外部依赖数据库中数据的更新时间,若获取的数据更新的时间大于上次抽取时间,则自动执行抽取。 此步骤需要在抽取设置中,开启“仅当检测到以下表数据更新后才抽取”。开启后,抽取原有的定时任务失效。
权限说明:
此接口需要项目管理员权限
基本信息:
API | /api/dash/tableExtract/relyUpdatedTime |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
dataConnectionId | Number | 数据连接 id |
database(可选) | String | 数据库名称 |
tableName | String | 表名 |
relyUpdatedTime | Date | 外部依赖数据更新的时间(例如 2018-09-17 13:00:00) |
token | String | 生成的用户鉴权 token |
注:
1. dataConnectionId 数据连接 id 可以在数据连接页面中获取或调用获取数据连接 id 接口获取
2. database 数据库名称可以在数据连接页面中找到对应的表的数据库
参数调用例子:
{
"dataConnectionId": 700309163,
"database": "public",
"tableName": "mock_table_1",
"relyUpdatedTime": "2018-10-10 10:24:00",
"token": "15391392723407ae9f048c818fe0d04a6c08f"
}
成功数据返回:
成功会返回 success 字符串
{
code: 200,
result: 'success'
}
获取设置过原始抽取依赖表列表对外接口
接口说明: 新建一个数据模型,只支持新建单表的数据模型
API | /api/dash/tableExtract/getRelyTables |
Method | GET |
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
projectId | Int | 项目ID |
返回结果示例:
{
"code": 200,
"result": [
{
database: "haitao_analy",
tableName: "act_age_cut_180_1227",
dataConnectionId: 2275
},
{
database: "haitao_analy",
tableName: "lbf_app_bu_ipv_1d",
dataConnectionId: 2275
},
{
database: "haitao_analy",
tableName: "adp_kl_new_usr_type_info_detail",
dataConnectionId: 2222
},
{
database: "haitao_dev_log",
tableName: "dwd_kl_flw_miniapp_ext_di",
dataConnectionId: 2222
}
]
}
添加自定义SQL
接口说明
用于创建某个数据连接下的自定义SQL
基本信息
名称 | 参数 |
---|---|
API | /api/dash/customTable/add |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
dataConnectionId | Number | 数据连接ID |
tableName | String | 自定义表名 |
query | String | 自定义SQL查询语句 |
produced | String | 表类型, UserDefinedSQL |
relyList | Optional\ |
依赖的表名称数组 |
initSql | Optional\ |
初始化SQL |
folderId | Number | 自定义SQL分类ID,0-未分类 | |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"dataConnectionId":70001,
"tableName":"hello",
"query":"select * from hello",
"produced":"UserDefinedSQL",
"relyList":[]
}
成功返回
{
"dataConnectionId": 70001, // 数据连接ID
"tableName": "hello", // 自定义表名
"query": "SELECT * from hello", // 查询语句
"produced": "UserDefinedSQL",
"relyList": [], // 依赖数组
"creatorId": 1, // 创建人ID
"modifierId": 1, // 修改人ID
"tableExprId": 1 // 该自定义表的唯一标示
}
更新自定义SQL
接口说明
用于更新某个数据连接下的自定义SQL
基本信息
API | /api/dash/customTable/update |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
id | Number | 新增返回的tableExprId |
dataConnectionId | Number | 数据连接ID |
tableName | String | 自定义表名 |
query | String | 自定义SQL查询语句 |
initSql | Optional | 初始化SQL |
删除自定义SQL
接口说明
用于删除某个数据连接下的自定义SQL
基本信息
历史接口为 DELETE /api/dash/customTable, 支持但是不建议使用
名称 | 参数 |
---|---|
API | /api/dash/customTable/delete |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
id | Number | 自定义SQL ID |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"id": 4041,
}
成功返回
{
"code": 200
}
给某个自定义SQL新建抽取
接口说明
对于某个自定义SQL表,进行初始化建立抽取表,并执行抽取
基本信息
名称 | 参数 |
---|---|
API | /api/dash/tableCron/add |
请求方法 | SOCKET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
projectId | Number | 项目ID |
dataConnectionId | Number | 数据连接ID |
database | Optional\ |
数据库名 |
tableName | Optional\ |
表名 |
tableExprId | Optional\ |
自定义SQL表ID |
status | String | 抽取方式; 全量: whole; 增量: increment |
setting | Setting | 抽取方式配置, 具体参数见Setting对象 |
partitionConfig | Optional\ |
抽取分区配置, 具体参数见PartitionConfig对象 |
engineType | Optional\ |
抽取引擎类型, 普通抽取: 0; 高性能抽取: 1 |
engineConfig | Optional\ | 抽取引擎配置, 包含分片字段 |
relyStatus | Optional\ |
是否开启外部依赖检查, 0: 否; 1: 是 |
relyMode | Optional\ |
依赖模式, or, and |
rerunStatus | Optional\ |
是否开启自动失败重跑 |
rerunSetting | Optional\ |
重跑配置, 具体参数见RerunSetting对象 |
对象 PartitionConfig
结构如下:
{
storage, // String, 行存储(row), 列存储(col)
partitionField, // Optional<String>, 分区字段
partitionSetting { // 分区配置
startTime // Optional<String> 开始时间
endTime // Optional<String> 结束时间
minPeriod // Optional<Number> 最小范围
maxPeriod // Optional<String> 最大范围
interval // Number 间隔
unit // 单元, day, week, month, year
defaultPartition // Bool
dataType // String, 'Whole', 'Decimal', 'DateTime', 'String', 'Date', 'Time', 'Boolean'
}
}
对象RerunSetting
结构如下:
{
retryTime, // Number, 重跑次数
gap // Number, 时间间隔
}
对象 Setting
结构如下:
// 当status为whole时
{
appendData, // Optional<Bool> 是否追加, 默认值为false
}
// 当status为increment时
{
extractField { // 依据该字段进行增量抽取
field, // String, 字段名
dataType, // String, 字段类型
scroll, // Optional<Bool>, 是否滚动覆盖, 默认值为false
mode // 分区周期
}
}
示例: 给某个自定义SQL新建抽取表, 并执行抽取
{
"status": "whole",
"setting": { "appendData": false },
"projectId": 1,
"dataConnectionId": 70001,
"relyStatus": 0,
"relyMode": "and",
"rerunStatus": 0,
"executeExtract": 1,
"tableExtractCrons": [],
"tableExprId": 1,
"engineType": 0,
}
成功返回
{
"code": 200,
"result": {
"dataConnectionId": 70001,
"tableExprId": 1,
"setting": { // 抽取方式设置
"appendData": false
},
"tableExtractId": 2501, // 抽取表的唯一标示
"status": "whole" // 抽取方式
},
}
数据源与数据模型
上传KEYTAB文件
接口说明:
辅助数据连接的创建和更新
基本信息
API | /api/dash/dataConnection/keytab |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
projectId | Number | 项目 ID |
type | String | 文件类型, 不传默认keytab。这里可以不传 |
file | File | keytab 文件 |
输出示例
{
"fileName": "mammut_qa.keytab",
"fileKey": 1181
}
获取数据连接列表接口
接口说明:
根据数据连接名称获取数据连接信息,主要用于获取数据连接id
基本信息:
API | /api/dash/dataConnections |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token |
projectId | Number | 项目id |
keyword | String | 格式为:name:数据连接名称, 如搜索超市数据连接,应该输入 name:超市 |
成功数据返回:
返回的是根据keyword
进行模糊搜索的列表,可能有多个,需要调用者自己去从list
中查找
{
code: 200, //错误返回非200
result: {
total: Number,
list: [{
name: String,
id: Number,
}]
}
}
添加数据连接接口
接口说明: 添加数据连接到指定项目
权限说明: 使用 token 访问,只有项目管理员才能调用该接口。
基本信息:
API | /api/dash/dataConnection/apiAdd |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
name | String | 数据连接名称 |
folderId | Optional(Number) | 文件夹ID, 可以不传默认为0表示根目录 |
paths | Optional(Arr) | 文件夹路径,可以不传 |
projectId | Number | 项目Id |
type | Number | 数据链接类型 |
server | Optional(Str) | 服务器 |
port | Optional(Num) | 端口 |
userName | Optional(Str) | 用户名 |
password | Optional(Str) | 密码 |
parameters | Optional(Obj) | 附加参数 |
namespace | Optional(Arr) | 命名空间 |
readOnly | Number | 是否只读。1-只读,0-非只读。默认为0 |
skipTest | Optional(Bool) | 是否绕过连接验证。false-不绕过,true-绕过。默认为false |
parameters 结构: 不同的数据源传的结构不一样, 见后面的示例
{
....
customData: { // 开启指标类型自定义元信息, 目前仅猛犸指标中台需要用
enable: true,
type: 'indicator'
},
jdbcUrlProps: Opt(Str) // jdbc附加参数
driver: Opt(Str) // 驱动: "driver":"mysql-connector-5.1.49"
}
输入参数举例:
MySQL: 认证方式为用户名密码(Mysql)
{
"name": "测试MySQL",
"projectId": 156,
"type": 0,
"paths": ["abc"],
"server":"10.172.11.225",
"port":"3306",
"userName":"youdata",
"password":"youdata",
"defaultSchemaName": "BLD", // 默认database,可以不传
"token": "1636597037183050570b9a6d51def260eea18"
}
Oracle:
{
"name": "测试Oracle",
"projectId": 156,
"type": 1,
"paths": ["abc"],
"server":"10.172.11.234",
"port":"1521",
"userName":"youdata",
"password":"youdata",
"parameters": {
"SID": "XE"
},
"token": "1636597037183050570b9a6d51def260eea18"
}
SQL Server:
{
"name": "测试SQL Server",
"projectId": 156,
"type": 12,
"paths": ["abc"],
"server":"223.252.222.21",
"port":"1433",
"userName":"youdata",
"password":"youdata",
"namespace": ["test"], // 数据库
"token": "1636597037183050570b9a6d51def260eea18"
}
Custom API:
{
"name": "测试 Custom API",
"projectId": 156,
"type": 24,
"paths": ["abc"],
"server":"url", // url地址
"userName":"youdata",
"password":"youdata",
"parameters": {
"customParameters": {
// 查询参数配置
}
},
"token": "1636597037183050570b9a6d51def260eea18"
}
Postgresql (PG)
{
"name": "测试pg",
"projectId": 542,
"type": 21,
"paths": ["abc"],
"server":"10.196.80.249",
"port":"6432",
"userName":"youdata_test",
"password":"youdata",
"namespace": ["youdata"], // 必传
"token": "1636597037183050570b9a6d51def260eea18"
}
达梦
{
"name": "测试达梦",
"projectId": 542,
"type": 122,
"paths": ["abc"],
"server":"10.200.129.52",
"port":"5236",
"userName":"youdata",
"password":"youdata",
"token": "1636597037183050570b9a6d51def260eea18"
}
IMPALA: 认证方式为kerberos
首先需要调接口上传keytab文件, 然后再调用新建数据连接接口
{
"name": "测试",
"type": 11,
"projectId": 64464,
"server": "hadoop334.xxx",
"parameters": {
"authType": "kerberos",
"connMode": "zookeeper",
"queryQueueSetting": {
"totalQueueLength": 40,
"highQueueLength": 1
},
"driver": "hive-2.1.1",
"cPrincipal": "intern/bigdata@TEST.HZ.NETEASE.COM",
"principal": "impala/_HOST@TEST.HZ.NETEASE.COM",
"namespace": "impala-ha-new/impala-hiveserver2",
"keytab": {
"fileName": "intern.keytab",
"fileKey": 282
}
},
"folderId": 0,
"token": "1705659185955e2ffa2749101bd929184a10f"
}
返回结果示例:
{
"code": 200,
"result": {
"server": "10.172.43.225",
"port": 3306,
"userName": "youdata",
"password": null,
"parameters": {},
"name": "测试数据链接名称",
"defaultSchemaName": "BLD",
"type": 0,
"modifiedId": 1,
"available": 1,
"dataConnectionInfo": {
"version": "5.5.52-0+deb7u1"
},
"projectId": 156,
"id": 3108,// 数据连接id
"showname": "MySQL",
"typeName": "mysql",
"creatorName": "admin"
},
"logPath": "http://127.0.0.1:8009/operation/log/ut3j63gG1ga77PgQdCZN8C"
}
通过API修改数据连接接口
权限说明: 使用 token 访问, 数据连接编辑权限
基本信息:
API | /api/dash/dataConnection/apiUpdate |
---|---|
Method | POST |
请求参数: 同添加数据连接接口,增加一个 id 字段(数据连接 id)
修改数据连接接口
接口说明: 修改数据连接
权限说明: 使用 token 访问,只有项目管理员才能调用该接口。
基本信息:
API | /api/dash/dataConnection/update |
Method | POST |
请求参数:
同添加数据连接接口,增加一个 id
字段(数据连接 id)
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
id | Number | |
name | String | 数据连接名称 |
projectId | Number | 项目Id |
type | Number | 数据链接类型 |
readOnly | Number | 是否只读。1-只读,0-非只读。默认为0 |
skipTest | Bool(Optional) | 是否绕过连接验证。false-不绕过,true-绕过。默认为false |
输入参数举例:
MySQL:
{
"id": 700313268,
"name": "测试MySQL",
"projectId": 156,
"type": 0,
"server":"10.172.11.225",
"port":"3306",
"userName":"youdata",
"password":"youdata",
"defaultSchemaName": "BLD", // 默认database,可以不传
"token": "1636597037183050570b9a6d51def260eea18"
}
返回结果示例:
同添加数据连接接口。
删除数据连接接口
接口说明: 删除数据连接
权限说明: 使用 token 访问,需要编辑数据连接的权限
基本信息:
API | /api/dash/dataConnection/apiDelete |
Method | POST |
请求参数:
同添加数据连接接口,增加一个 id
字段(数据连接 id)
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token |
id | Number |
输入参数举例:
{
"id": 700313268,
"token": "163659837245744b4c8966533e163039e1fbd"
}
返回结果示例:
{
"code": 200,
"logPath": "/operation/log/nu1UZmGWsfzzt6Dywfo6vX"
}
新建单表数据模型接口
接口说明: 新建一个数据模型,只支持新建单表的数据模型
API | /api/dash/dataModel/addWithTable |
Method | POST |
请求参数: 自定义表和原始表二选一,文件夹路径和文件夹ID也是二选一
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
name | String | 要新建的数据模型名称 |
paths | Opt(Array(String)) | 在哪个文件夹路径下新建数据模型 |
folderId | Opt(Num) | 在哪个文件夹下新建数据模型 |
dataConnectionId | Int | 数据连接 ID,表示基于那个数据数据连接建立数据模型 |
database | Opt(String) | 根据数据连接类型不同决定是否可选,表示单表属于哪个 database |
tableName | Opt(String) | 要根据那个表建立数据模型 |
tableExprId | Opt(Int) | 自定义SQL的ID |
原始表输入用例:
{
"folderId": 1, // 文件夹ID
"dataConnectionId": 700310511,
"database": "dev_netease",
"tableName": "bigviz_user",
"name": "test1"
}
自定义输入用例:
{
"paths": ["api-test"], // paths和folderId选填其中一个就可以, 都表示文件夹
"dataConnectionId": 700310511,
"tableExprId": 30, // 自定义SQL ID
"name": "test1"
}
返回结果示例:
{
"code": 200,
"result": 20 //新建数据模型的 ID
}
新建空数据模型接口
接口说明 根据文件夹路径和数据连接Id新建一个空的数据模型
API | /api/dash/dataModel/addEmptyModel |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
folderPath | Option(Array(String)) | 在哪个文件夹路径下新建数据模型 |
dataConnectionId | Int | 数据连接 ID,表示基于那个数据数据连接建立数据模型 |
projectId | Int | 项目id |
name | String | 模型名称 |
输入用例:
{
"token": "171706912121966f879edbd3e721c888472f0",
"folderPath": ["文件夹1", "文件夹2"], //文件夹路径:/文件夹1/文件夹2
"dataConnectionId": 700310511,
"projectId": 1,
"name": "test1"
}
返回结果示例:
{
"code": 200,
"result": 20 //新建数据模型的 ID
}
模型重命名接口
接口说明 重命名模型,如果传入的模型名称和当前目录的模型名称重复了,会返回重复信息。
API | /api/dash/dataModel/ext/renameDataModel |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
id | Int | 模型id |
name | String | 新的模型名称 |
输入用例:
{
"token": "171706912121966f879edbd3e721c888472f0",
"id": 1,
"name": "test1"
}
更新成功返回结果示例:
{
"code": 200,
}
名称重复返回结果示例:
{
"code": 200,
"result": {
"titleRepeat": true, //是否重复:是
"newName": "填报(1)" //不重复的新名称,可以直接使用newName作为更新名称进行重试。
}
}
删除数据模型接口
API | /api/dash/dataModel/del |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
id | Number | 数据模型ID |
返回示例:
// 删除成功
{
code: 200
}
// 存在依赖
{
code: 735,
message: "数据模型存在依赖,不能删除",
}
获取数据模型列表
接口说明:
超级管理员可以获取所有模型列表,普通用户仅能获取有阅览权限的模型
API | /api/dash/dataModel/ext/getList |
---|---|
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token |
projectId | Number | 项目ID |
sort | OPT(String) | 热门排序: "pv:2", 不排序则不需要传 |
输出示例:
{
code: 200,
result: [{
"id": 25153, // 模型ID
"name": "测试", // 模型名称
"projectId": 505, // 项目ID
"folderId": 0, // 文件夹ID
"creatorId": 12234, // 创建人ID
"creator": "xxxxxx", // 创建人名称
"createTime": "2024-03-19 16:44:42", // 创建时间
"modifierId": 12234, // 修改人ID
"modifier": "xxxxxx", // 修改人名称
"modifyTime": "2024-03-19 17:05:37", // 修改时间
"pv": 22, // 访问量
"paths": ['hello', 'sub'], // 文件夹路径
}]
}
获取数据模型详情
接口说明:
获取模型详细信息g
API | /api/dash/dataModel/get |
---|---|
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token |
id | Number | 模型ID |
输出示例:
{
code: 200,
result: {
"id": 3, // 模型ID
"name": "测试", // 模型名称
"projectId": 505, // 项目ID
"folderId": 0, // 文件夹ID
"enableChatBi": true, // 是否开启了 chatBI,false 和 null 均为没开启
"creatorId": 12234, // 创建人ID
"creator": "xxxxxx", // 创建人名称
"createTime": "2024-03-19 16:44:42", // 创建时间
"modifierId": 12234, // 修改人ID
"modifier": "xxxxxx", // 修改人名称
"modifyTime": "2024-03-19 17:05:37", // 修改时间
}
}
获取模型的依赖
API | /api/dash/dataModel/relyCheck |
---|---|
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
id | Number | 数据模型ID |
输出示例
{
code: 200,
result: {
rely: true // 是否存在依赖
relyList: [{ // 依赖的资源列表
newReportDataModels,
...
}]
}
}
获取模型相关资源依赖的指标信息
接口说明
获取某个模型的下游依赖的所有报告、每个报告下的图表、每个图表依赖的指标等信息
API | /api/dash/dataModel/getDependence |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
dataModelId | Number | 数据模型ID |
输出示例
{
pgId, // 项目组ID
source // 猛犸集群
projectId, // 项目ID
domainName // 域名
dataModel: { // 当前模型信息
id, // 模型ID
status, // 模型状态: 直连(direct), 抽取(extrac)
tables: [{ // 模型用到的表
dataConnectionId
database
tableName
tableExprId
}]
},
reports: [{
id, // 报告ID
publishStatus: Int, // 0(已发布的编辑态), 1(发布态), 2(未发布的编辑态)
publishRelatedId: Int, // 发布和编辑的ID映射, 报告ID
version: String, // 当前报告版本, 如果发布态和编辑态版本号一致则说明已经发布成最新状态
name, // 报告名称
creator: { // 创建人
id: xx,
uniqueId: xx,
nick: xx
}
modifier: {} // 修改人
components: [{
id, // 组件ID
name, // 组件名称
fields: [{
field // 字段名称
indicatorName // 指标名称
dataConnectionId // 数据连接ID
tableExprId, // 自定义
database // 数据库名
tableName // 表名
}],
}],
}]
dataConnections: [{ // 用到的数据连接的基本信息
id,
type
host,
...
mammutCatalog
}]
}
同步模型元信息
接口说明:
当数据库中表的元信息发生修改时,可将修改同步至所有相关报告
API | /api/dash/wideTable/synchRelatedMetas |
---|---|
Method | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | token |
dataModelId | Number | 数据模型ID |
表数据更新通知接口
接口说明: 如果某个表数据更新,通过该接口告知有数后,可以触发依赖该表的邮件的推送、依赖该表的抽取的自动抽取、依赖该表的报告自动刷新缓存。前提是需要在产品上开启相关依赖配置。
API | /api/dash/util/pushTableByMammut |
Method | POST |
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
type | String | 'TABLE' |
dataConnectionId | Int | 数据连接 ID |
dbName | String | 根据数据连接类型不同决定是否可选,表示单表属于哪个 database |
tblName | String | 对应的表名 |
输入用例:
{
"token": "ssjdjsjsjkdjklsdjkl",
"dataConnectionId": 700310511,
"dbName": "dev_netease",
"tblName": "bigviz_user"
}
返回结果示例:
{
"code": 200,
"result": {
}
}
表元数据更新通知接口
接口说明: 如果某个表数据或者表元信息更新,通过该接口告知有数后,可以触发依赖该表的邮件的推送、依赖该表的抽取的自动抽取、依赖该表的报告自动刷新缓存、模型元信息刷新等。
API | /api/dash/tableRely/pushTable |
Method | POST |
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是项目管理员 |
dataConnectionId | Int | 数据连接 ID |
database | String | 根据数据连接类型不同决定是否可选,表示单表属于哪个 database |
tableName | String | 对应的表名 |
relyEvents | Array |
要触发的事件,数组,支持多个事件,'dataModelMetaUpdate' 更新模型元信息,'tableExtract' 触发抽取, 'tableExtractReInit' 触发抽取重新建表并抽取, 'resourceCache' 触发缓存, 'easyFetchExport' 触发取数依赖导出, 'mailSend' 触发邮件依赖推送 |
输入用例:
{
"token": "ssjdjsjsjkdjklsdjkl",
"dataConnectionId": 700310511,
"database": "dev_netease",
"tableName": "bigviz_user",
"relyEvents": ["dataModelMetaUpdate", "tableExtract"]
}
返回结果示例:
{
"code": 200,
"result": {
}
}
获取标签列表
接口说明:
可以获取项目下的所有标签
API | /api/dash/tag/all |
---|---|
Method | GET |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
projectId | Number | 项目ID |
keyword | OPT(String) | 搜索关键词 |
token | String | 鉴权token |
输入示例
{
"projectId":2,
"keyword":"name:测试标签",
"token":"17316620001929261c1b5db26b87c5e150e38"
}
输出示例:
{
code: 200,
result: [{
"id": 25153, // 标签ID
"name": "测试标签", // 标签名称
"bindModelNum": 3, // 标签绑定的数据模型数量
"bindModels": [ // 标签绑定的数据模型列表
{
"id": 1, // 模型id
"name": "模型1" // 模型名称
},
{
"id": 2,
"name": "模型2"
},
{
"id": 3,
"name": "模型3"
}
]
}]
}
chatbi集成标签列表示例:
https://demo.youdata.com/dash/chatbi?token=173217423373754e658ce7aaeb7b7d42d16ec&tagId=24(标签id)
企业域相关
企业域-新增域
接口说明:
新增一个域和域主,并创建默认项目,返回域id和默认项目id。
基本信息:
API | /api/dash/privateSaas/domain/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
domainName | String | 域名 |
domainAdmin | User | 域主对象 |
edition | String | 版本 |
accountNumber | Number | 账号数 |
mppSpaceLimit | Number | 抽取总容量 |
buyingMinutes | Number | 增量购买分钟数 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"domainName": "demo1",
"domainAdmin": {
"email": "zhangsan@163.com",
"phone": 15977765765,
"uniqueId": "20",
"nick": "张三",
"department": "有数"
},
"edition": "ultimate",
"accountNumber": 30,
"mppSpaceLimit": 300,
"buyingMinutes": 10
}
成功数据返回:
{
"code": 200,
"result": {
"domainId": 12,
"projectId": 27
}
}
企业域-删除域
接口说明:
给定域id,删除域。域内的所有用户和项目以及资源都会被删除。
基本信息:
API | /api/dash/domain/del |
Method | DELETE |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
domainId | Number | 域id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"domainId": 12
}
成功数据返回:
{
"code": 200
}
企业域-修改域信息
接口说明:
修改域的相关信息
基本信息:
API | /api/dash/privateSaas/domain/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
domainId | Number | 域id |
edition | String | 版本 |
accountNumber | Number | 账号数 |
mppSpaceLimit | Number | mpp容量 |
buyingMinutes | Number | 购买分钟数 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"domainId": 12,
"edition": "trial",
"accountNumber": 20,
"mppSpaceLimit": 100,
"buyingMinutes": 10
}
成功数据返回:
{
"code": 200,
"result": {
"id": 12,
"edition": "trial",
"accountNumber": 20,
"mppSpaceLimit": 100,
"expireTime": 1592554271476
}
}
企业域-获取域的使用情况
接口说明:
获取域列表
基本信息:
API | /api/dash/privateSaas/domain/get |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的超管 |
domainId | Optional(Number) | 域ID |
成功数据返回:
{
"code": 200,
"result": {
"id": 12,
"edition": "trial",
"accountNumber": 20,
"mppSpaceLimit": 100,
"expireTime": 1592554271476
}
}
企业域-删除用户接口
接口说明:
将用户从域中删除
基本信息:
API | /api/dash/privateSaas/domain/delUsers |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的域管理员 |
uniqueIds | Arr | 账号列表 |
domainId | Number | 域Id |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"uniqueIds": ["admin", "123"],
"domainId": 12
}
成功数据返回:
{
"code": 200
}
取数相关
获取某个项目的取数历史日志
接口说明:
获取某个项目的所有用户的取数历史日志
基本信息:
API | /api/dash/easyFetchRecord/getHistoryLogsForProject |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是项目管理员 |
projectId | Int | 项目ID |
beginTime | String | 查询最大时间,格式 "2023-01-01 03:00:00" |
endTime | String | 查询最晚时间,格式 "2023-01-01 03:00:00" |
source | Optional(String) | 可选,取数模式,dragFetch 表示可视化取数,sqlFetch表示是sql取数,不传会返回全部 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 64516,
"beginTime": "2023-01-01 00:00:00",
"endTime": "2023-12-01 00:00:00"
}
成功数据返回:
{
"code": 200,
"result": [
{
"id": 14004,
"source": "dragFetch", // sql取数还是可视化取数
"status": "ok", //取数的结果是成功还是失败
"message": null, //失败的情况下有message
"beginTime": "2023-12-07T07:11:02.863Z", //取数开始时间
"dataModelId": 1782, //如果是可视化取数,取数对应的模型ID,对应的是 easy_fetch_data_model 这张表
"dataConnectionId": null, //如果是sql取数,表示取数对应的数据连接ID,对应的是 easy_fetch_data_connection 这张表
"creatorId": 11835, //取数的用户的ID
"creatorInfo": { //取数的用户信息
"id": 11835,
"uniqueId": "linouya1@corp.netease.com", //账号
"email": "linouya@126.com", //邮箱
"nick": "林欧亚-编辑者" //昵称
},
"originDataModelId": 700298261 //原始的模型ID是什么, 对应的是 data_model这张表的id
},
{
"id": 14013,
"source": "sqlFetch",
"status": "err",
"message": "数据库SQL执行错误(DatasourceQueryError)",
"beginTime": "2023-12-19T02:38:53.962Z",
"dataModelId": null,
"dataConnectionId": 242,
"creatorId": 11835,
"creatorInfo": {
"id": 11835,
"uniqueId": "linouya1@corp.netease.com",
"email": "linouya@126.com",
"nick": "林欧亚-编辑者"
},
"originDataConnectionId": 700318129 //原始的数据连接ID是什么,对应的是 data_connection这张表的id
},
{
"id": 14020,
"source": "sqlFetch",
"status": "ok",
"message": null,
"beginTime": "2023-12-19T02:40:09.087Z",
"dataModelId": null,
"dataConnectionId": 242,
"creatorId": 11835,
"creatorInfo": {
"id": 11835,
"uniqueId": "linouya1@corp.netease.com",
"email": "linouya@126.com",
"nick": "林欧亚-编辑者"
},
"originDataConnectionId": 700318129
}
],
"apiCost": 23,
"logPath": "http://127.0.0.1:8009/operation/log/hwyiVpvnr1wVmXqP7uDxRp"
}
chatBi 相关
自然语言问答获取数据接口
接口说明:
通过自然语言返回对应的数据结果
基本信息:
API | /api/dash/chatBi/askData |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须有模型和项目的权限 |
projectId | Int | 项目ID |
dataModelIds | Arr | 要问的模型ID列表 |
question | String | 问题 |
inspect | Optional(String) | 返回的内容类型,data表示仅数据,sql表示仅sql,all表示数据和sql,picture表示截图,默认all |
options | Optional(Object) | 可选参数 |
options可选参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
pictureMaxWidth | Optional(Int) | inspect为picture时用来指定截图的最大宽度(单位为px),默认不限制宽度 |
pictureMaxHeight | Optional(Int) | inspect为picture时用来指定截图的最大高度(单位为px),默认不限制高度 |
示例输入:
{
"projectId": 3, //项目ID
"dataModelIds": [3, 4], //模型 ID 列表,
"question": "东北地区的销售额", //问题
"token": "xxx" //鉴权token,生成逻辑参考有数BI定制化文档
}
成功数据返回:
{
"code": 200, //非200表示查询失败
"message": "用户无权限", //非200 的情况下报错信息
"result": {
"answer": {
"logicalSql": "select xxx", //逻辑 sql,
"physicalSql": "select xxx", //最后物理执行的SQL
"structureExplain": "按照地区分组,计算销售额求和", //SQL解释
},
"fromDataModelId": 3, //选中哪个模型ID
"hitfFeedback": 0, //是否命中反馈回答
"isValid": true, //是否是有效答案
"systemMessage": "调用大模型超时",
"data": {
"head": ["地区", "销售额"], //表头
"body": [["东北", 1], ["华北", 2]], //二维数据,最多返回2万行
"size": 2 //总行数
},
"logId": 65356, // 问答的唯一 ID,可用于点赞点踩
"askCost": 5695, // 问题理解推理耗时(毫秒)
"tableQueryCost": 5485, // 数据落库查询耗时(毫秒)
"trustMode": true, // 是否是可信模式
"tableQueryData": {}, // 可视化查询 tabelQuery 的 dsl,业务调用方一般不用关注
"dataFilters": { //当前查询是否有行列权限作用
"columnFilters": [], //列权限作用
"rowFilters": [ //行权限作用
{
"$type": "ConditionFilter",
"fieldName": "dimensions",
"condition": {
"or": [
{
"$type": "ConditionFilter",
"fieldName": "dimensions",
"condition": {
"and": [
{
"$type": "DFilter",
"filter": {
"$type": "DiscreteDimensionFilter",
"exclude": false,
"select": [
"东北",
"中南",
"华北"
]
},
"pill": {
"field": "地区",
"dataType": "String",
"$type": "Dimension",
"produced": "Existed",
"alias": "地区",
"granularity": "g0",
"interpretation": "Discrete",
"role": "Dimension",
"tableId": 1,
"tableName": "sheet1"
}
}
]
},
"priority": 4
}
]
},
"priority": 4
}
]
},
}
}
示例输入(截图):
{
"projectId": 3, //项目ID
"dataModelIds": [3, 4], //模型 ID 列表,
"question": "东北地区的销售额", //问题
"token": "xxx", //鉴权token,生成逻辑参考有数BI定制化文档
"inspect": "picture" //进行截图
}
成功数据返回:
{
"code": 200, //非200表示查询失败
"message": "用户无权限", //非200 的情况下报错信息
"result": {
"dialogId": 36727, //会话id
"dialogLogId": 58891, //单轮问答id
"downloadLink": "http://..." //图片下载地址
}
}
点赞点踩接口
接口说明:
通过自然语言返回对应的数据结果
基本信息:
API | /api/dash/chatBi/feedback |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的域管理员 |
logId | Int | 问答的 id,参见 askData 接口返回的 logId |
feedback | Int | 0 点踩, 1 点赞 |
feedbackDetail | String(Optional) | 反馈的内容,可选 |
{
"logId": 123, // 问答的 id,参见 askData 接口返回的 logId
"feedback": 0, // 0 点踩, 1 点赞,
"feedbackDetail": "这个问题生成答案的不准确" // 反馈的内容,可选,
}
成功数据返回:
{
"code": 200,
"message": "", // 如果报错,则 code 不为 200,且有 message
"result": "ok",
}
获取 chatBi 历史日志接口
接口说明:
获取 chatBi 历史日志接口
基本信息:
API | /api/dash/chatBi/getDomainHistoryDialogs |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权token,该用户必须是有数系统里的域管理员 |
domainId | Int | 域ID |
beginTime | String | 开始时间 |
endTime | String | 结束时间 |
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"domainId": 12,
"beginTime": "2023-07-19 00:00:00",
"endTime": "2023-07-19 23:59:59"
}
成功数据返回:
{
"code": 200,
"result": [{
"id": 9652,
"question": "合同明细", //问题
"answer": "SELECT * FROM \"合同明细\";", //答案 SQL
"createTime": "2023-07-19T02:34:29.000Z", //问答时间
"dataModelId": 700289868, //模型ID
"isValid": 1, //是否有效
"creatorId": 12923,
"triggerName": null,
"creatorInfo": { //发起人用户信息
"uniqueId": "xiaokang@corp.netease.com", //账号
"email": "xiaokang@corp.netease.com", //邮箱
"nick": "" //昵称
}
},
{
"id": 9651,
"question": "合同明细金额",
"answer": "SELECT * FROM \"合同明细\";",
"createTime": "2023-07-19T02:34:23.000Z",
"dataModelId": 700289868,
"isValid": 1,
"creatorId": 12923,
"triggerName": null,
"creatorInfo": {
"uniqueId": "xiaokang@corp.netease.com",
"email": "xiaokang@corp.netease.com",
"nick": ""
}
}]
}
外部系统
更新钉钉通讯录接口
接口说明: 购买有数的钉钉小程序后,企业的钉钉通讯录会在每天凌晨 2 点同步到有数数据库中。如果想立即同步,可以主动调用该接口。
权限说明: 使用 token 访问,只有超管才能调用该接口。
基本信息:
API | /api/dash/dingTalk/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是超管 |
返回结果示例:
{
"code": 200,
"result": true,
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
报告书签相关
添加书签
接口说明: 根据配置信息新增报告书签
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
category | Int | 书签类型,0 表示公共书签,1表示私人书签 |
dashboardId | Int | 报告的页面ID |
name | String | 书签名称 |
folderId | Int | 要添加到哪个文件下对应的文件夹ID |
setting | Int | 书签的配置信息,主要用于 iframe 集成时从子页面获取对应的配置信息 |
返回结果示例:
{
"code": 200,
"result": "ok", //新增书签的ID
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
删除书签
接口说明: 根据书签ID删除对应的报告书签
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/delete |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
id | Int | 书签ID |
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
更新书签
接口说明: 根据书签ID更新对应的报告书签的配置信息
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
id | Int | 书签ID |
category | Int | 书签类型,0 表示公共书签,1表示私人书签 |
name | String | 书签名称 |
folderId | Int | 要添加到哪个文件下对应的文件夹ID |
setting | Int | 书签的配置信息,主要用于 iframe 集成时从子页面获取对应的配置信息 |
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
添加书签文件夹
接口说明: 添加书签文件夹
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/folder/add |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
category | Int | 书签文件夹类型,0 表示公共书签,1表示私人书签 |
name | String | 书签文件夹名称 |
dashboardId | Int | 页面ID |
返回结果示例:
{
"code": 200,
"result": 12, //书签文件夹的ID
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
删除书签文件夹
接口说明: 根据书签文件夹ID删除对应的文件夹及书签
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/folder/delete |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
id | Int | 要删除的书签文件夹ID |
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
更新书签文件夹
接口说明: 根据书签文件夹ID更新书签文件夹
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/folder/update |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
id | Int | 书签文件夹ID |
name | String | 更新名称 |
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
获取书签列表
接口说明: 获取某个报告的书签列表
权限说明: 使用 token 访问,只有当前报告的预览权限才能调用该接口。
基本信息:
API | /api/dash/bookmark/getList |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须有该报告的预览权限 |
reportId | Int | 报告ID |
返回结果示例:
{
"code": 200,
"result": {
"privateFolders": [ //私人文件夹列表
{
"id": 22070,
"name": "私人文件夹",
"category": 1,
"items": [ //私人文件夹列表下的书签列表
{
"id": 737,
"name": "私人1",
"category": 1,
"idx": 0,
"setting": {},
"dashboardId": 71841,
"folderId": 22070,
"userId": 3672,
"creatorId": 3672,
"createTime": "2023-11-06T12:43:57.000Z",
"modifierId": 3672,
"modifyTime": "2023-11-06T12:43:57.000Z",
"reportId": 42661,
"setAsDefault": 0
}
],
"resourceId": 42661
}
],
"publicFolders": [ //公共文件夹列表
{
"id": 22071,
"name": "公共文件夹",
"category": 0,
"items": [ //公共文件夹下的书签列表
{
"id": 738,
"name": "公共1",
"category": 0,
"idx": 0,
"setting": {},
"dashboardId": 71841,
"folderId": 22071,
"userId": 3672,
"creatorId": 3672,
"createTime": "2023-11-06T12:44:06.000Z",
"modifierId": 3672,
"modifyTime": "2023-11-06T12:44:06.000Z",
"reportId": 42661,
"setAsDefault": 0
}
],
"resourceId": 42661
}
],
"privateBookmarks": [ //私人全局的书签列表
{
"id": 735,
"name": "私人1",
"category": 1,
"idx": 0,
"dashboardId": 71841,
"folderId": -1,
"userId": 3672,
"setting": {},
"creatorId": 3672,
"createTime": "2023-11-06T12:43:00.000Z",
"modifierId": 3672,
"modifyTime": "2023-11-06T12:43:00.000Z",
"reportId": 42661,
"setAsDefault": 0
}
],
"publicBookmarks": [ //私人公共的书签列表
{
"id": 736,
"name": "公共1",
"category": 0,
"idx": 0,
"dashboardId": 71841,
"folderId": 0,
"userId": 3672,
"creatorId": 3672,
"setting": {},
"createTime": "2023-11-06T12:43:18.000Z",
"modifierId": 3672,
"modifyTime": "2023-11-06T12:43:18.000Z",
"reportId": 42661,
"setAsDefault": 0
}
],
"defaultBookmarkId": null
},
"apiCost": 13,
"logPath": "https://netease.backend.youdata.com/operation/log/ewp4U8cZwA9V2qyNdwkh4o"
}
升级与运维
更新数据库只读状态
接口说明:
可以更新业务数据库为只读状态。
权限说明:
使用 token 访问,只有超管才能调用该接口。
基本信息:
API | /api/dash/util/readOnly |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是超管 |
readOnly | Bool | 是否设置为只读 |
返回结果示例:
{
"code": 200,
"result": {
"successCount": 1,
"successMsg": [
"pid:55637, 开始更新数据库状态成功"
],
"errorCount": 0,
"errorMsg": []
},
"logPath": "http://127.0.0.1:8009/operation/log/cVusvDK4bKcDoy1NDPWgwv"
}
数据升级接口
接口说明:
只能升级某个版本的数据结构,调用该接口存在风险,请谨慎使用。 比如当前数据版本是 3.10 版本,想升级到 3.11 版本,可以直接输入参数 version = "3.11" 即可
权限说明:
使用 token 访问,只有超管才能调用该接口。
基本信息:
API | /api/dash/util/dbUpgrade |
Method | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 鉴权 token,该用户必须是超管 |
version | String | 要升级的版本 |
返回结果示例:
{
"code": 200,
"result": "ok",
"logPath": "http://127.0.0.1:8009/operation/log/qC1oooi5LthtzKoaxVs5o5"
}
数据填报数据源相关接口说明
test 接口
接口说明
测试数据填报数据源是否能够连通
权限说明
使用 token 进行调用,且只能操作自己的表单
基本信息
请求路径 | |
---|---|
API | /api/dash/survey/datasource/test |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
surveyId | Number | 数据填报表单 id |
参数调用例子
{
"surveyId": 1
}
成功返回
{
code: 200,
result: {
apiVersion: '1.0',
name: '1-admin@admin.com'
}
}
tables 接口
接口说明
用于返回对应数据填报表单的数据库表名
权限说明
使用 token 访问,并且只能操作自己创建的数据填报表单
基本信息
请求路径 | |
---|---|
API | /api/dash/survey/datasource/tables |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
surveyId | Number | 数据填报表单 id |
参数调用例子
{
"surveyId": 1
}
成功返回
{
code: 200,
result: ["1-admin@admin.com"]
}
注:数组中是对应的数据填报的表单的表名
tablemeta 接口
接口说明
用于获取对应表的表结构信息(表头)
权限说明
使用 token 访问,并且只能操作自己创建的数据填报表单
基本信息
请求路径 | |
---|---|
API | /api/dash/survey/datasource/tablemeta |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
surveyId | Number | 数据填报表单 id |
参数调用例子
{
"surveyId": 95
}
成功返回
{
code: 200,
fields: [
{
"name": "2cba0707-c0ab-d3cf-df48-c1f39be48428",
"comment": "数3344",
"type": "Decimal"
},
{
"name": "提交人",
"type": "String",
"comment": "提交人"
},
{
"name": "提交时间",
"type": "DateTime",
"comment": "提交时间"
},
{
"name": "id",
"type": "Whole",
"comment": "id",
"primaryKey": true
}
]
}
tabledata 接口
接口说明
用于获取对应表的全部数据或指定 id 的某几条数据,同时也会返回表信息
权限说明
使用 token 访问,并且只能操作自己创建的数据填报表单
基本信息
请求路径 | |
---|---|
API | /api/dash/survey/datasource/tabledata |
请求方法 | POST |
请求参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
surveyId | Number | 数据填报 id |
Ids | [Number] | 可选,数字数组,对应数据的数据 id,如果传此参数则返回对应的 id 的数据 |
参数调用例子1
{
"surveyId": 95
}
成功返回
{
"code": 200,
"result": {
"fields": [
{
"name": "2cba0707-c0ab-d3cf-df48-c1f39be48428",
"comment": "数3344",
"type": "Decimal"
},
{
"name": "提交人",
"type": "String",
"comment": "提交人"
},
{
"name": "提交时间",
"type": "DateTime",
"comment": "提交时间"
},
{
"name": "id",
"type": "Whole",
"comment": "id",
"primaryKey": true
}
],
"data": [
[
"1",
"admin",
"2018-12-03 14:24:49",
56573
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56574
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56575
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56576
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56577
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56578
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56579
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56580
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56581
]
]
},
"logPath": "http://127.0.0.1:8009/operation/log/oDcvTEEMZwaSoe9GecmpfV"
}
参数调用例子2
{
"surveyId": 95,
"ids": [56573, 56574]
}
成功返回
{
"code": 200,
"result": {
"fields": [
{
"name": "2cba0707-c0ab-d3cf-df48-c1f39be48428",
"comment": "数3344",
"type": "Decimal"
},
{
"name": "提交人",
"type": "String",
"comment": "提交人"
},
{
"name": "提交时间",
"type": "DateTime",
"comment": "提交时间"
},
{
"name": "id",
"type": "Whole",
"comment": "id",
"primaryKey": true
}
],
"data": [
[
"1",
"admin",
"2018-12-03 14:24:49",
56573
],
[
"1",
"admin",
"2018-12-03 14:27:59",
56574
]
]
},
"logPath": "http://127.0.0.1:8009/operation/log/oDcvTEEMZwaSoe9GecmpfV"
}
根据日志记录查询相关操作资源信息接口
接口说明:
根据有数后端系统打印的 transLog 日志内容,查询相关接口的操作人信息,资源信息以及资源的创建人等信息
权限说明:
使用 token 访问,只有超级管理员才能使用该接口
基本信息:
请求路径 | |
---|---|
API | /api/dash/resource/getLogInfo |
请求方法 | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于鉴权 |
operatorId | Number | transLog中记录的userId |
resourceId | Number or String | transLog中记录的resourceId |
resourceName | String | transLog中记录的resourceName |
请求参数示例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"operatorId": 1,
"resourceId": 2,
"resourceName": "NEW_REPORT"
}
返回结果示例:
{
"code": 200,
"result": {
"operator": {
"id": 1,
"nick": "zhangsan",
"email": "zhangsan@163.com",
"uniqueId": "zhangsan@163.com"
},
"creator": {
"id": 2,
"nick": "lisi",
"email": "lisi@163.com",
"uniqueId": "lisi@163.com"
},
"modifier": {
"id": 2,
"nick": "lisi",
"email": "lisi@163.com",
"uniqueId": "lisi@163.com"
},
"resource": {
"id": 1,
"title": "我的报告",
"createTime": "2019-01-01 00:00:00",
"modifierTime": "2019-01-02 00:00:00"
},
"resourceName": "报告"
}
}
指标系统相关
同步第三方指标信息
接口说明
有数支持自定义和指标系统(第三方指标数据), 该接口支持了从第三方同步指标元信息
基本信息
名称 | 参数 |
---|---|
API | /api/dash/mammutIndicator/sync |
METHOD | POST |
请求参数
同步指标系统的数据分为三种情况, 全量同步, 单个指标信息同步 以及 删除指标信息
1. 批量同步 : 用于批量同步指标信息, 全量同步某一来源的指标信息;保存数组内的指标信息,同时删除有数属于该来源的其余指标信息。
字段名称 | 参数类型 | 参数说明 |
---|---|---|
type | String | 标记同步的类型, 全量同步时为 full |
source | String | 用于标记第三方来源 |
mammutIndicators | Array\ |
指标数组, 其中 MammutIndicator 为指标对象 |
2. 单个指标信息同步: 更新或新建某一个指标信息
字段名称 | 参数类型 | 参数说明 |
---|---|---|
type | String | 标记同步的类型, 单个指标信息同步时为 single |
source | String | 用于标记第三方来源 |
mammutIndicator | MammutIndicator | 指标对象: MammutIndicator |
3. 删除指标信息: 根据 指标ID和来源 删除有数中的某一个指标信息
字段名称 | 参数类型 | 参数说明 |
---|---|---|
type | String | 标记同步的类型, 删除指标信息时为 delete |
source | String | 用于标记第三方来源 |
mammutIndicator | MammutIndicator | 指标对象: MammutIndicator |
其中 MammutIndicator
的结构
字段名称 | 参数类型 | 参数说明 |
---|---|---|
indicatorId | Int | 指标ID+source, 用于唯一标示 |
name | String(Optional) | 指标名称 |
caliber | String(Optional) | 业务口径 |
techCaliber | String(Optional) | 技术口径, 例如SQL等信息, 用于辅助了解指标信息 |
接口返回
// 成功
{ "code": 200 }
// 失败
{
"code": 731,
"message": "", // 报错信息
}
全局搜索相关
开启全局搜索
在 yaml 中开启 mammutAdapter 模块,配置环境变量
env | 值 | 注释 |
---|---|---|
ENABLE_ES_SEARCH | 'true' | 开启搜索特性 |
ES_PROTOCOL | http | |
ES_HOST | es | 有数 es 日志库的 host |
ES_PORT | 9200 | 数 es 日志库的 port |
启动 ma 模块后,登录有数的超管账号,访问接口 /api/dash/es/refreshIndex
,然后查看 ma 模块的日志,看是否开始正常索引了
根据字段名或报告名搜索报告接口
接口说明:
根据报告名称或字段名称搜索报告
权限说明:
使用 token 访问,只有超级管理员才能使用该接口
环境变量:
web 需要开启这两个环境变量
ES_SEARCH_URL: http://es:9200
ES_SEARCH_INDEX_NAME: youdata-private
基本信息:
请求路径 | |
---|---|
API | /api/dash/es/searchReport |
请求方法 | POST |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于鉴权的Token |
projectId | Option(Number) | 项目ID |
reportKeyword | Option(String) | 报告名称关键字 |
measureKeyword | Option(String) | 度量字段关键字 |
dimensionKeyword | Option(String) | 维度字段关键字 |
请求参数示例:
{
"token": "1503575355359c4fdea8ec1683ed10edd91ae",
"projectId": 2,
"reportKeyword": "超市",
"dimensionKeyword": "地区",
"measureKeyword": "利润"
}
返回结果示例:
{
"code": 200,
"result": [
{
"reportName": "超市",
"reportId": 134,
"projectId": 2,
"paths": [ // 文件夹路径
"1112",
"1"
],
"creator": "admin",
"createTime": "2017-12-29 14:40:22",
"modifyTime": "2024-02-11 11:25:42",
"status": "1",
"componentHighlights": [
{
"componentId": "c-1-134-714-jj41rhts",
"componentTitle": "利润(按地区划分)",
"matchDimensions": [
"地区"
],
"matchMeasures": [
"利润"
]
}
],
"webLink": "https://local.youdata.com:7007/dash/folder/2?rid=134",
"mobileLink": "https://local.youdata.com:7007/dash/mobile/134",
"integrationLink": "https://local.youdata.com:7007/dash/integration/2?rid=134"
}
],
"apiCost": 142,
"logPath": "http://127.0.0.1:8009/operation/log/5n6kBKQgZ1yfbsWrtwrMYt"
}
单点登录说明
功能介绍:
解决客户需要通过第三方登录方式登录有数的问题,有数系统会保存登录用户的相关信息,但是不会保存密码。
这里访问第三方系统,也需要考虑做接口鉴权的问题,需要加一个时间戳和密钥作验证
- 通过跳转单点第三方登录界面实现方式
- 通过loginToken验证的服务端实现方式
- 自定义接口登录
功能介绍:
有数支持用户通过自定义接口进行登录的方式,用户通过该接口传入用户自定义的参数,然后通过用户自定义处理文件对该参数进行登录校验,校验成功后,跳转到用户指定的地址,用户登出时跳出的地址在此处配置。
接口:/tokenLogin
GET
参数:
{
redirectPath: '/' // 登陆成功后的跳转地址,可以不指定
token: '1503575355359c4fdea8ec1683ed10edd91ae' // 到用户sso系统鉴权的token
}
用户需要提供校验上述token
的接口,该接口的返回格式如下:
{
code: 200, // 200表示鉴权成功,非200表示鉴权失败
result: {
email: string optional, // 邮箱,有些企业该字段会是唯一
phone: string optional, // 手机号码
uniqueId: string, // 用来判断用户唯一性的字段,可能是email,phone,uid等字段其中之一
nick: string optional, // 用户昵称
position: string optional, // 用户职位
department: string optional, // 用户所属部门
company: string optional, // 用户所属公司
doNotAdd: bool optional, // 用户不存在有数时,是否添加到有数,默认添加
filterMap: object optional
// 数据筛选条件(每个数据连接下对应的各个表字段的数据权限),详细说明见首页的关于“数据权限传递参数详细说明”,该参数只是用于集成页面
},
message: string optional // 错误信息,code非200时传入
}
集成页面说明
功能介绍
集成页面是指用户在没有登录有数的情况下,通过iframe方式将有数某些页面潜入到第三方系统中,实现预览功能。因为用户没有登录,所有任何页面都要带上通过有数的/api/dash/util/genToken方式生产的token参数做鉴权,生产token的逻辑在前面的接口文档里有介绍。
集成页面的特点
- 用户无需登录可以访问有数报告
- 可以通过iframe方式嵌入到其它系统中
- 只需要同一个账号,通过生成token时设置数据权限不同,针对同一张报告,可以看到不同的数据
- 对于一些不需要登录有数系统的只需要访问集成页面的用户,可以使用同一个账号进行管理,不需要在有数进行数据权限和资源权限控制
- 建议在使用数据权限进行控制时,每个数据模型都关联同一个权限表,这样只需要控制该张权限表的数据权限,便可以控制所有报告的权限
集成页面列表
- 报告预览集成页面
- 大屏预览集成页面
- 新大屏预览集成页面
- 权限管理集成页面
- 报告导出管理集成页面
- 移动端页面集成
- 驾驶舱集成页面
- 数据填报集成页面
- 报告编辑集成页面
- ChatBI集成页面
- ChatBI单会话集成页面
- 取数主页集成页面
- 可视化取数编辑集成页面
- Sql取数编辑集成页面
- 数据模型集成页面
- 数据表格集成页面
目前有数提供的集成页面
报告预览集成页面:/dash/integration/:projectId
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
rid | 报告id(若不开启发布功能,则为报告id;若开启发布功能:id可以是已经发布的报告的id,也可以是报告草稿的id) | |
did | 报告页面id | |
toolbar | 功能键 | |
mode | 底部导航条显示方式 | |
defaults | 筛选器 | |
side | 侧边栏 | |
sort | 排序 | |
hidePublic | 公共文件夹隐藏 | |
hidePrivate | 私有文件夹隐藏 | |
hideTitle | 顶部标题栏隐藏 | |
tabColor | tab页面颜色设置 | |
hideScaleBar | 缩放栏隐藏 | |
hidePageBar | 整个报告底部工具栏隐藏 | |
enableReportDetail | 报告列表详情,内容是属性以及相关信息,默认是 false | |
hideProgressBar | 顶部进度条隐藏 | |
hideLoading | 加载中动画隐藏 | |
scale | 缩放配置 | |
bottomBarPos | 底部栏放在顶部配置 | |
backgroundColor | 页面背景颜色设置 | |
fit | 集成页面自适应宽度时两边不留白,默认是 false | |
parameters | 参数配置值 | |
showExportExcelRemind | 显示导出Excel时的提醒,默认是false | |
showExportExcelData | 显示导出Excel时的数据格式选择,默认是false | |
customCssId | 指定使用哪个自定义CSS(可选) |
集成报告草稿和发布rid
报告未开启发布功能:id则为报告id。 报告开启发布功能:‘/api/dash/folder/list’、‘/api/dash/report/get’接口中:id则为报告草稿的id,publishRelatedId为发布报告的id。
集成报告模式
报告的模式目前分为两种:normal、simple;加入的原因主要为了区别报告页面切换的方式。
配置方式:直接在url后加入
&mode=simple
normal
普通模式,是一种默认配置模式,报告的页面切换方式与目前预览方式一致;
simple
简单模式,是一种相对normal更为简单的页面切换方式
集成报告的导航栏
报告导航栏可配置项包括(打印功能、数据刷新功能、报告导出功能、全屏功能) 可配置参数print、refresh、bookmark、export、fullScreen、doctor分别对应打印、刷新数据、书签、导出报告、全屏、数据医生 可以配置显示顺序以及是否显示、默认情况下都显示,默认顺序为[print, refresh, bookmark, export, doctor, fullScreen]
配置方式:直接在url后加入
&toolbar=["print", "refresh", "bookmark", "export", "doctor", "fullScreen"]
集成报告默认显示页面
集成报告默认进入显示第一页,如果需要更改默认显示页面;直接配置url中的dashboard
配置方式:直接在url后加入
&did=14510
集成报告筛选器控件默认参数配置
目前只支持对列表筛选器控件,日期筛选器控件的配置。
- 列表筛序器控件
配置方式:直接在url后加入
&defaults=默认配置的数据结构
配置参数数据结构如下:
{
"列表筛选器控件id":{
selected: Array,
exclude: Boolean
}
}
其中selected表示设置的选项列表,如果列表筛选默认有设置, 这里的配置会覆盖默认的配置。
- 日期筛序器控件
配置方式:直接在url后加入
&defaults=默认配置的数据结构
目前只支持静态时间段,筛选出从起始时间到结束时间的数据,配置参数数据结构如下:
{
"日期筛选器控件id":{
type: "StaticTime",
minBound: timeString,
maxBound: timeString
}
}
eg:
{type: "StaticTime", minBound: "2016-07-01 00:00:00", maxBound: "2016-07-20 23:59:59"}
其中minBound,maxBound分别表示起始时间与结束时间,起始时间不能大于结束时间,同时minBound,maxBound的日期格式为"YYYY-MM-DD HH:mm:ss"。如果日期筛选默认有设置,这里的配置会覆盖默认的配置。
集成报告的侧边栏
集成报告默认不展示侧边栏,如需展示侧边栏;直接配置url中的side
配置方式:直接在url后加入
&side=true
集成报告的侧边栏排序
集成报告侧边栏默认按照名称升序,如需更改排序方式,直接配置url中的sort
配置方式:直接在url后加入
&sort=title:1/title:2/modifyTime:1/modifyTime:2
集成报告的侧边栏公共文件夹隐藏
集成报告侧边栏默认展示公共文件夹,如需隐藏,直接配置url中的hidePublic
配置方式:直接在url后加入
&hidePublic=true
集成报告的侧边栏私有文件夹隐藏
集成报告侧边栏默认展示私有文件夹,如需隐藏,直接配置url中的hidePrivate
配置方式:直接在url后加入
&hidePrivate=true
集成报告的标题栏隐藏
集成报告标题栏默认展示,如需隐藏,直接配置url中的hideTitle 如果隐藏,toolbar也会隐藏
配置方式:直接在url后加入
&hideTitle=true
集成报告的tab页面颜色设置
集成报告tab页面颜色设置,如需设置,直接配置url中的tabColor,css颜色
配置方式:直接在url后加入
&tabColor=red
或者
&tabColor=%23ccc
集成报告的tab页面区域缩放栏隐藏
集成报告tab页面区域缩放栏默认展示,如需隐藏,直接配置url中的hideScaleBar
配置方式:直接在url后加入
&hideScaleBar=true
集成报告的底部栏隐藏
集成报告底部栏默认展示,如需隐藏,直接配置url中的hidePageBar
配置方式:直接在url后加入
&hidePageBar=true
集成报告的详情展示
集成报告详情默认不展示,如需展示,直接配置url中的enableReportDetail
配置方式:直接在url后加入
&enableReportDetail=true
集成报告的顶部进度条隐藏
集成报告顶部进度条默认展示,如需隐藏,直接配置url中的hideProgressBar
配置方式:直接在url后加入
&hideProgressBar=true
集成报告的加载中动画隐藏
集成报告加载中动画默认展示,如需隐藏,直接配置url中的hideLoading
配置方式:直接在url后加入
&hideLoading=true
集成报告的缩放配置
集成报告缩放配置,默认为100%:100: 为缩放100%,'width':自适应宽度,'screen':自适应窗口,直接配置url中的scale
配置方式:直接在url后加入
&scale=width
集成报告的底部栏放在顶部配置
集成报告底部栏放在顶部配置,默认为放在底部,如需放在顶部,直接配置url中的bottomBarPos
配置方式:直接在url后加入
&bottomBarPos=top
集成报告的页面背景颜色设置
集成报告页面背景颜色设置,如需设置,直接配置url中的backgroundColor,css颜色
配置方式:直接在url后加入
&backgroundColor=red
或者
&backgroundColor=%23ccc
集成报告的页面参数控制的配置
集成报告页面全局参数或者参数控制器的参数的默认配置,目前只支持静态的,如需设置,直接配置url中的parameters 用户可配置的参数为:[{id:控制参数的id,defaultValue:控制参数的值}] 若非浏览器需要直接使用需要:encodeURIComponent('[{"id":1908,"defaultValue":2},{"id":35,"defaultValue":"2020-12-01%2017:54:36"}]')
配置方式:直接在url后加入
¶meters=[{"id":1908,"defaultValue":2},{"id":35,"defaultValue":"2020-12-01%2017:54:36"}]
集成报告的显示导出Excel时的提醒
集成报告在导出Excel时的提醒默认隐藏,如需显示,直接配置url中的showExportExcelRemind
配置方式:直接在url后加入
&showExportExcelRemind=true
集成报告的显示导出Excel时的数据格式选择
集成报告在导出Excel时的数据格式选择默认隐藏,如需显示,直接配置url中的showExportExcelData
配置方式:直接在url后加入
&showExportExcelData=true
图表权限配置
此处的权限配置主要用于图表功能的配置(如:图表导出功能、数据预览、排序级别等功能)
数据结构:
{
closeMoreMenu: Boolean // 关闭图表菜单更多配置
global:{
export: Array, // ['image','excel','pdf']
view: Boolean, // true
sortPriority: Boolean, // true 排序级别
refreshHist: Boolean, // true 查看刷新历史记录
inteExplore: Boolean, // true 智能分析
graphicLink: Boolean, // 图表链接
setWarning: Boolean, // 设置度量预警
viewMaxReport: Boolean, // 查看最大化
dataDoctor: Boolean, // 数据医生
copyData: Boolean // 复制数据
}
}
上面的注释部分表示默认的配置方式:即导出和数据预览功能都是具有的
使用方式
&permission = serialize(数据结构)
@example 数据结构 = {
export: ['image', 'excel', 'pdf'], // 导出
view: true, // 查看数据
sortPriority: true, // true 排序级别
inteExplore: true, // true 智能分析
refreshHist: true, // true 查看刷新历史记录
graphicLink: true, // 图表链接
setWarning: true, // 设置度量预警
viewMaxReport: true, // 查看最大化
dataDoctor: true, // 数据医生
copyData: true // 复制数据
}
https://youdata.163.com/dash/integration/2345?rid=12&token=1231dadf12312adfad323adas&side=true&sort=title:1&hidePublic=false&hidePrivate=true&toolbar=[]&mode=normal&permission=%7B%22global%22%3A%7B%22export%22%3A%5B%22image%22%2C%22excel%22%2C%22pdf%22%5D%2C%22view%22%3Atrue%7D%7D
dom文档相关配置
此处的配置主要用于dom文档的部分可配项(目前只支持配置dom文档的title自定义设置)
数据结构:
{
title:String, //集成报告-网易有数
}
使用方式:
&head = serialize(数据结构)
@example 数据结构 = {
"title": "自定义文档标题"
}
https://youdata.163.com/dash/integration/2345?rid=12&token=1231dadf12312adfad323adas&head=%7B%22title%22%3A%22%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%87%E6%A1%A3%E6%A0%87%E9%A2%98%22%7D
大屏预览集成页面:/dash/screenIntegration/:projectId
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
sid | 大屏id | |
hideTitleBar | 大屏隐藏上方bar | |
bodyScreen | 大屏采用body尺寸来计算(会将head覆盖) | |
customCssId | 指定使用哪个自定义CSS(可选) |
https://youdata.163.com/dash/screenIntegration/2345?sid=12&token=1231dadf12312adfad323adas&hideTitleBar=true&bodyScreen=true
大屏预览集成页面的侧边栏
大屏预览集成页面默认不展示侧边栏,如需展示侧边栏;直接配置url中的side
配置方式:直接在url后加入
&side=true
新大屏预览集成页面:/dash/newScreen/integration/view/:sid
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
sid | 新大屏id | |
customCssId | 指定使用哪个自定义CSS(可选) |
https://youdata.163.com/dash/newScreen/integration/view/561?token=1231dadf12312adfad323adas
权限管理集成页面:/dash/permission/:projectId/role
只有项目管理员可以集成预览这个页面
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 |
https://youdata.163.com/dash/permission/2345/role?token=1231dadf12312adfad323adas
报告导出管理集成页面
提供项目中心-分享与导出管理-报告导出页面的集成
path:
/dash/massExportIntegration/:projectId
projectId 报告所在项目id
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 |
https://youdata.163.com/dash/massExportIntegration/2345?token=1231dadf12312adfad323adas
移动端页面集成
移动端的图表化内容通过webView的方式嵌入web页面进行展示,移动端的内容集成与PC保持一致,采用同一路由进行访问,不过配置参数略有不同。
报告页集成(/dash/integration/:projectId)
默认显示第一页内容,可以通过设置页面ID,来改变默认显示的页面。配置参数如下:
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
rid | 报告id | |
hideTitle | 标题栏隐藏(可选) | |
enableReportDetail | 报告列表详情,内容是属性以及相关信息,默认是 false (可选) | |
mode | 集成报告模式 (可选) | |
did | 页面id (可选) | |
disableGraphicJump | 移动端禁止双击页面跳转默认跳转 | |
customCssId | 指定使用哪个自定义CSS(可选) |
https://youdata.163.com/dash/integration/2345?rid=12&hideTitle=true&token=1231dadf12312adfad323adas
集成报告的详情展示
集成报告详情默认不展示,如需展示,直接配置url中的enableReportDetail
配置方式:直接在url后加入
&enableReportDetail=true
集成报告的标题栏隐藏
集成报告标题栏默认展示,一般情况下移动端不需要展示标题栏,需配置url中的hideTitle为true。
配置方式:直接在url后加入
&hideTitle=true
集成报告的双击页面跳转配置
集成报告双击页面跳转默认跳转,如需不跳转,直接配置url中的disableGraphicJump
配置方式:直接在url后加入
&disableGraphicJump=true
集成报告模式
移动端的集成报告模式同样是为了区别报告页面切换的方式,报告的模式目前分为三种:normal、simple、tab;
配置方式:直接在url后加入
&mode=simple
normal
普通模式,是一种默认配置模式,页面无翻页器,需要手动配置did(页面id)进行翻页;
simple
简单模式,当报告有多个页面的时候显示翻页器。
tab
页签模式,当报告有多个页面的时候顶部显示tab页签。
报告页特定报表的显示
移动端的单报表的显示,是通过定位到某个报告的特定报表,从而显示单个报表内容。配置参数如下:
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
rid | 报告id | |
cid | 报表id | |
did | 页面id (可选) | |
customCssId | 指定使用哪个自定义CSS(可选) |
特定报表的显示只需要配置以上参数,此外不需要其他额外的配置。
https://youdata.163.com/dash/integration/12?rid=34&cid=c-12-34-56-sckfjshe&token=1231dadf12312adfad323adas
特定报表和页面需要匹配
设定报告页报表id时会从当前报告页取报表,所以特定报表和页面需要匹配;如果设置的报表不属于第一页报告页,则需要设置与该报表匹配的did(页面id),否则会因为取不到报表而不显示页面。
驾驶舱集成
驾驶舱集成页面除了默认展示侧边栏,没有排序和私有公共文件夹配置外,其他配置与报告集成一致,详细的配置说明见报告预览集成页面
驾驶舱集成页面(/dash/cockpitIntegration)
字段名称 | 参数说明 | |
---|---|---|
token | 鉴权使用 | |
pid | 项目id | |
rid | 报告id | |
did | 报告页面id | |
toolbar | 功能键 | |
mode | 底部导航条显示方式 | |
defaults | 筛选器 | |
side | 侧边栏 | |
hideTitle | 顶部标题栏隐藏 | |
tabColor | tab页面颜色设置 | |
hideScaleBar | 缩放栏隐藏 | |
hidePageBar | 整个报告底部工具栏隐藏 | |
hideProgressBar | 顶部进度条隐藏 | |
scale | 缩放配置 | |
bottomBarPos | 底部栏放在顶部配置 | |
backgroundColor | 页面背景颜色设置 | |
customCssId | 指定使用哪个自定义CSS |
https://youdata.163.com/dash/cockpitIntegration?pid=2345&rid=12&hideTitle=true&token=1231dadf12312adfad323adas
驾驶舱集成默认显示报表
如果驾驶舱内有报告,不配置项目id和报告id或者配置错误的报告id会默认展示第一个报表,如果需要更改默认显示报告,直接配置url中的pid项目id和rid报告id;默认报表的展示可以只配置需要展示的报告id,不配置pid不影响报告展示,但可能会影响导出功能。
配置方式:直接在url后加入
&pid=234&rid=14510
驾驶舱集成的侧边栏
驾驶舱集成页面默认展示侧边栏,如需隐藏侧边栏;直接配置url中的side
配置方式:直接在url后加入
&side=false
数据填报集成页面
path: /survey/import/:surveyId
surveyId: 创建的数据填报表单 id
字段名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
token | 鉴权使用 | true | |
tab | 填报模式 | template: 模版模式,只可查看表单不显示提交栏, import: 填报模式, 不加参数默认为填报模式 | false |
refered | 代表被引用 | integrate | true |
hideCreator | 隐藏页面顶部创建人 | false | |
hideDeadline | 隐藏页面顶部截止时间 | false | |
hideSubNav | 隐藏页面顶部状态栏 | false |
https://youdata.163.com/survey/import/294?token=1231dadf12312adfad323adas&refered=integrate&hideCreator=true&hideDeadline=true
数据填报数据管理页面
path: /survey/:projectId/
projectId 数据填报所在项目id
字段名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
token | 鉴权使用 | true | |
surveyId | 创建的数据填报表单 id | true | |
tab | 模式 | data | true |
refered | 代表被集成 | integrate | true |
hideSubNav | 隐藏子导航 | true | true |
https://youdata.163.com/survey/1485/?surveyId=1677&tab=data&refered=integrate&hideSubNav=true&token=16644203646189984627ff14391e2ccda8ff8
数据填报表单填写、数据管理页面(支持切换模式)
path: /survey/:projectId/
projectId 数据填报所在项目id
字段名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
token | 鉴权使用 | true | |
surveyId | 创建的数据填报表单 id | true | |
tab | 默认模式 | data 或 import | true |
refered | 代表被集成 | integrate | true |
showExportTemplate | 显示导出模板按钮,不显示不要传该参数 | true | false |
importActions | 需要显示的模式切换按钮列表,需要encode | ["import", "data", "template"] | false |
https://youdata.163.com/survey/1485/?surveyId=1677&tab=data&refered=integrate&token=123&importActions=%5B"import"%2C"data"%5D
报告编辑集成页面
dash/:rid/editor
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
pid | 项目id |
下列参数在生成token时,配置在clientSetting.integrate字段下
参数名称 | 参数说明 |
---|---|
disableEditExit | 编辑时隐藏退出入口,默认为 true |
exitPath | 同时编辑自动退出、右上关闭按钮没隐藏时等场景的跳转地址 |
customCssId | 指定使用哪个自定义CSS(可选) |
ChatBI集成页面
dash/chatbi
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
下列参数在生成token时,配置在clientSetting.chatBi下
参数名称 | 参数说明 |
---|---|
hideApp | 隐藏移动端二维码入口,默认为 false |
hideExport | 隐藏导出管理入口,默认为 false |
hideHelp | 隐藏帮助中心以及跳转帮助中心的入口,默认为 false |
hidePopo | 隐藏技术支持入口,默认为 false |
hideUser | 隐藏当前用户入口,默认为 false |
hideFavorite | 隐藏收藏夹、禁用收藏功能,默认为 true |
hideHistory | 禁用历史会话功能,默认为 true |
hideMyShare | 隐藏我的分享,默认为 false |
hideFilterSet | 隐藏筛选集,默认为 false |
hideChatModeSwitcher | 隐藏对话模式切换按钮,默认为false |
hideDataModelSelector | 隐藏数据模型选择按钮,默认false |
canEditCalculatedField | 是否允许编辑计算字段,默认为false |
hideAccountLogo | 隐藏账户Logo,默认为 false |
showCloseIcon | 是否展示右上角的关闭按钮,默认为false |
defaultChatMode | 默认问答模式, "credible"或者"professional",默认"credible" |
chatTopic | 对话主题, "dataModel"或者"indicator",默认"dataModel" |
indicatorName | 指标名称,字符串 |
dataModelId | 指定数据模型id |
customCssId | 指定使用哪个自定义CSS(可选) |
取数主页集成页面
dash/easyFetch/:pid?refered=integrate
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
下列参数在生成token时,配置在clientSetting.fetch下
参数名称 | 参数说明 |
---|---|
hideNav | 隐藏导航栏,默认为 false |
hideFetch | 隐藏可视化取数,默认为 false |
hideSqlFetch | 隐藏SQL取数,默认为 false |
hideChat | 隐藏Chat取数,默认为 true |
可视化取数编辑集成页面
dash/easyFetchEditor/:pid?refered=integrate
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
下列参数在生成token时,配置在clientSetting.fetch下
参数名称 | 参数说明 |
---|---|
hideFetchNav | 隐藏导航栏,默认为 false |
hideSqlFetch | 隐藏切换SQL取数,默认为 false |
hideChat | 隐藏前往Chat取数,默认为 true |
hidePublic | 隐藏公共查询,默认为 false |
hidePrivate | 隐藏我的查询,默认为 false |
hideExit | 隐藏返回模型库,默认为 false |
Sql取数编辑集成页面
dash/easyFetchSqlEditor/:pid?refered=integrate
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
下列参数在生成token时,配置在clientSetting.fetch下
参数名称 | 参数说明 |
---|---|
hideFetchNav | 隐藏导航栏,默认为 false |
hideFetch | 隐藏切换可视化取数,默认为 false |
hideChat | 隐藏前往Chat取数,默认为 true |
hidePublic | 隐藏公共查询,默认为 false |
hidePrivate | 隐藏我的查询,默认为 false |
hideExit | 隐藏返回模型库,默认为 false |
数据模型集成页面
阅览页
path: dash/dataModel/integration/:projectId?mid={mid}
projectId 项目id mid 模型id
字段名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
token | 鉴权使用 | true | |
hideSubNav | 隐藏页面顶部工具栏,默认为false | false | |
hideExportBtn | 隐藏导出按钮,默认为true | false |
编辑页
path: dash/dataModel/editorIntegration/:projectId?mid={mid} 示例: https://d.youdata.com/dash/dataModel/editorIntegration/1?mid=700298296&hideExitAndNewReportBtn=true&schemaNameParams=0902&disableSwitchSchema=true&hideExitBtn=true
projectId 项目id mid 模型id
字段名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
token | 鉴权使用 | true | |
hideSubNav | 隐藏页面顶部工具栏,默认为false | false | |
hideSaveBtn | 隐藏保存按钮,默认为false | false | |
hideExitBtn | 隐藏退出按钮,默认为false | false | |
hideExitAndNewReportBtn,默认为false | 隐藏保存并新建报告按钮 | false | |
hideMoreBtn | 隐藏显示更多按钮,默认为true | false | |
hideExportBtn | 隐藏导出按钮,默认为true | false | |
disableSwitchSchema | 是否允许切换数据库,默认为false | false | |
schemaNameParams | 数据库名称 | false |
数据表格集成页面
阅览页
path: dash/electable/:projectId/integration/:electableId
projectId 项目id electableId 表格id
参数名称 | 参数说明 | 值 | 是否必须 |
---|---|---|---|
showSubNav | 是否显示主页表格顶部栏 默认隐藏 | false | |
hideToolbar | 是否隐藏工具栏 默认显示 | hideToolbar or hideToolbar=1 | false |
toolbarLayout | 工具栏布局 默认缩略收起 平铺:toolbarLayout=1 | false | |
hidePrint | 隐藏打印按钮,默认显示 | hidePrint or hidePrint=1 | false |
hideFilterExplanation | 隐藏导出口径,默认显示 | hideFilterExplanation or hideFilterExplanation=1 | false |
hideExportConfig | 隐藏导出报表配置,默认显示 | hideExportConfig or hideExportConfig=1 | false |
hideExportAllSheet | 隐藏导出所有页面,默认显示 | hideExportAllSheet or hideExportAllSheet=1 | false |
hideExportExcel | 隐藏导出Excel,默认显示 | hideExportExcel or hideExportExcel=1 | false |
hideExportWps | 隐藏导出WPS格式(*.et)文件,默认显示 | hideExportWps or hideExportWps=1 | false |
hideExportCsv | 隐藏导出Csv,默认显示 | hideExportCsv or hideExportCsv=1 | false |
hideExportPdf | 隐藏导出pdf,默认显示 | hideExportPdf or hideExportPdf=1 | false |
skipPrintConfirm | 跳过打印配置,默认显示 | skipPrintConfirm | false |
注:以下打印配置参数仅在skipPrintConfirm配置情况下生效 | printRange | 打印范围,默认全表 | 全表:1 选中区域:2 | false | | printOrientation | 打印方向,默认纵向 | 纵向:1 横向:2 | false |
ChatBI单会话集成页面
dash/chatbi/dialogIntegration
url参数名称 | 参数说明 |
---|---|
token | 鉴权使用 |
dialogId | api/dash/chatBi/askData接口inspect参数传picture时返回 |
chatbi单会话集成链接示例:
下列参数推荐在生成token时,配置在clientSetting.chatBi下(url参数也可生效).
参数名称 | 参数说明 |
---|---|
hideQueryExplanation | 隐藏查询解释 |
hideQueryTable | 隐藏查询表 |
hideQueryToolbarMore | 隐藏查询工具栏的更多 |
hideGraphicChangeType | 隐藏图标切换类型 |
hideQueryForcast | 隐藏预测 |
hideGraphicToolbar | 隐藏图表工具栏 |
hideGraphicMax | 隐藏图表全屏操作,默认隐藏 |
hideGraphicRefresh | 隐藏图表刷新操作,默认隐藏 |
hideGraphicRefLine | 隐藏图表参考线 |
tagId | 模型标签id,查询限制特定标签下的数据模型 |
hideAskInfo | 隐藏ask chatItem |
dataModelIds | 指定查询的模型,支持多个,英文逗号,分隔 |
question | 问题内容,例:"东北地区的生产总值?" |
dialogId | 会话id,展示当前会话的详细内容 |
ignoreAiUserCorrect | 跳过选择表、字段、成员等步骤 |
用户自定义数据连接说明
功能介绍
有数允许用户按照自己的方式输入数据连接的信息,用户需要编写js
代码对自定义的数据连接信息进行解析。
Function: getConnection
input: json object // 用户自定义数据连接信息的json对象
output: { // 输出为有数定义的数据连接对象
type: string, // 类型
host: string, // 地址
port: number, // 端口
username: string, // 用户名
password: string, // 密码
parameters: object, // 额外信息
namespace: string, // 结构名称
}
配置说明
配置位置
有数有四个地方可以进行参数配置,分别是
- 环境变量:docker 中使用
docker-compose.yaml
进行配置。变量名采用大写下划线形式; config
模块:平台等引用的子模块。不同文件名代表了不同环境下的配置。变量名采用驼峰形式;- 自定义配置文件:
Platform/custom/custom.config.json
文件。变量名采用驼峰形式; - backend 中的设置。直接在 http://127.0.0.1:8009/operation/setting 中的 开发后台管理-设置 中进行配置。注意有两个 tab,外观和平台。
配置优先级
backend 中的设置 > 自定义配置文件 > 环境变量 > config
模块
参数解析方法
- 环境变量:使用
envParser
进行解析; config
模块:通过require('config')
进行解析。参考 https://www.npmjs.com/package/config;- 自定义配置文件:通过解析
custom.config.json
文件;
envParser 调用方法
envParser
解析 node 环境变量,并为对应的系统配置进行赋值。它接收四个参数,分别是
configJSON
:模块的配置对象ev
:node 环境变量appPath
:Platform 模块所在路径envList
:需要解析的环境变量数组。各模块根据实际情况决定数组内容。数组中包括多个对象。每个对象中的属性包括:- name:环境变量中的变量名。大写下划线格式。
- type:变量的类型。目前包括 String、Bool、Json、smtp、Array、Store、Custom。其中,Array 类型的变量,各元素之间用英文逗号
,
隔开,不要加多余的空格。 - path(可选):envParser 会直接把大写下划线形式的环境变量参数映射成系统配置中的驼峰形式。如果直接映射的结果不符合预期,就在 path 中放入期望的系统配置变量名。支持映射为对象中的属性,用
.
隔开。 - keyMap(可选):对于对象(Json)类型的变量,需要传入该参数指明需要解析的属性。对于变量
LOG_DB
、DB
、REDIS
、CAPTURE
、CACHE_CAPTURE
、CHROME
,envParser 提供了默认的 keyMap,故上述环境变量可以不传 keyMap 参数。 - fn(可选):对于无法使用 envParser 提供的统一方法进行映射的配置,在 fn 中进行处理。
envList 的样例:
[
//把环境变量中的 PLATFORM_LINK 赋值给系统配置中的 platform
{name: 'PLATFORM_LINK', type: 'String', path: 'platform'},
//把环境变量中的 BACKEND_LINK 赋值给系统配置中的对应驼峰形式的 backendLink
{name: 'BACKEND_LINK', type: 'String'},
//把环境变量中的 COMPANY_NAME 赋值给系统配置中 customAssets 的属性 companyName
{name: 'COMPANY_NAME', type: 'String', path: 'customAssets.companyName'},
//把环境变量中的 WATERMARK 解析成布尔类型,赋值给系统配置中 customAssets 的属性 watermark
{name: 'WATERMARK', type: 'Bool', path: 'customAssets.watermark'},
//把环境变量中的 LOG_DB 解析成一个对象,赋值给系统配置中的 logDatasource。keyMap = {database: 'title', host: 'host', port: 'port', user: 'user', password: 'password'} 在这里省略了因为 envParser 提供了对 LOG_DB 默认的 keyMap
{name: 'LOG_DB', type: 'Json', path: 'logDatasource'},
// 把环境变量中的 PAY_MODULES 解析成一个数组,并赋值给系统配置中的对应驼峰形式的 payModules
{name: 'PAY_MODULES', type: 'Array'},
// 把环境变量中的 STORE 解析成一个 store 对象,赋值给系统配置中的 ydStore。keyMap 在这里省略了因为 envParser 提供了对 LOG_DB 默认的 keyMap
{name: 'STORE', type: 'Store', path: 'ydstore'},
// 无法统一处理的配置,在这里的函数中进行自定义配置
{
name: '',
type: 'Custom',
fn:function (configJSON) {
configJSON.from = _.get(configJSON, 'smtp.from') || configJSON.from;
}
}
]
参数说明
环境变量 | 配置参数 | 类型 | 含义 | 使用模块 | 备注 |
---|---|---|---|---|---|
PLATFORM_LINK | platform | String | 平台运行的地址 | platform schedule backend survey website | 供外部用户访问 |
PLATFORM | platformInner | String | 平台运行的地址 | platform schedule backend | 供内部容器访问 |
BACKEND_LINK | backendLink | String | backend 模块的外部域名 | platform | 5.8 版本以后可不配置,与 PLATFORM_LINK 公用同一个域名,根据 path 区分 |
SCHEDULE | schedule | String | schedule 模块的调用地址 | platform | |
INSIGHT | insight | String | insight 模块的调用地址 | platform | |
DE | de | String | DE 模块的调用地址 | platform | |
WEBSITE | website | String | website 模块的调用地址 | platform | |
SURVEY | survey | String | survey 模块的调用地址 | platform | |
DC | dc | String | DC 模块的调用地址 | platform | |
CAPTURE | capture | Json | capture 模块的调用地址 | schedule | |
CACHE_CAPTURE | cacheCapture | Json | cacheCapture 模块的调用地址 | schedule | 用于执行 capture 的预加载任务 |
HA_COMPUTE | haCompute | String | 高性能计算模块的调用地址 | platform | |
COMPANY_NAME | customAssets.companyName | String | 公司名 | platform | 系统左上角显示的公司名,默认是‘网易有数’;系统邮件中的发件人处也显示该变量内容 |
USER_LIMIT | userLimit | String | 最大账号数量 | platform | |
LOGIN_TYPE | loginType | String | 用户登录方式 | platform | '':通过用户名密码的普通登录形式;'customLogin':企业单点登录;'openId':使用 openId 登录(单点登录的一种) |
OPENID_SECRET_ID | openId.secretId | String | 网易私有部署的域名的 secretId,用于单点登录 | platform | 只有 loginType = 'openId' 时才会使用 |
OPENID_CLIENT_ID | openId.clientId | String | 网易私有部署的域名的 clientId,用于单点登录 | platform | 只有 loginType = 'openId' 时才会使用 |
PASS_KEY | passKey | String | 各模块共有的一个秘钥 | platform backend website schedule | |
PUBLIC_PATH | customAssets.publicPath | String | 前端公共域名 | platform | |
GLOBAL_LANGUAGE | customAssets.globalLanguage | String | 全局语言 | platform | 默认中文 'zh-cn',可改为英文 'en',可以在 backend 中进行配置 |
DEPLOY_TYPE | deployType | String | 部署类型 | platform schedule backend survey website | 'private':私有部署;'netease':内部环境 'online':线上环境 |
DEFAULT_USER_PWD | defaultUserPwd | String | 默认的用户密码 | platform | |
MOBILE_DEPLOYED | mobileDeployed | Bool | 是否部署了移动端 app | platform backend | |
WATERMARK | customAssets.watermark | Bool | 是否开启报告界面的水印 | platform | 可以在 backend 中进行配置 |
OPEN_HUBBLE | customAssets.openHubble | Bool | 是否在哈勃进行埋点 | platform | |
PUSH_MAMMUT | pushMammut | Bool | 是否调用猛犸接口 | platform | 若开启,数据产生变化时放入消息队列,猛犸数据准备好后通知有数,可执行预加载,需要部署 SyncExtract 模块 |
SQL_LOG | sqlLog | Bool | 后台日志是否打印业务查询 SQL | platform | 可以在 backend 中进行配置 |
REDIS_LOG | redisLog | Bool | 后台日志是否打印有关 redis 的日志 | platform | |
LANGUAGE_SWITCH | customAssets.languageSwitch | Bool | 用户是否可以切换自己的系统语言 | platform | 可以在 backend 中进行配置 |
HIDE_HELP_CENTER | customAssets.hideHelpCenter | Bool | 是否需要隐藏帮助中心 | platform | 帮助中心是有数界面右上角的问号图标,其中包括新手引导、用户手册、常见问题等。可以在 backend 中进行配置 |
ENABLE_EMAIL | enableEmail | Bool | 是否开启电子邮件服务 | platform | 开启的话需要配置邮箱服务 SMTP |
ENABLE_MESSAGE | enableMessage | Bool | 是否开启短信服务 | platform | 私有部署用户开启的话需要在 custom/customSMS.js 文件下进行外挂脚本适配开发,自己提供短信服务。可以在 backend 中进行配置 |
TR_INPUT_LOG | trInputLog | Bool | 是否打印大屏 input 日志 | platform | 可以在 backend 中进行配置 |
NETWORK_ACCESS_ENABLE | networkAccessEnable | Bool | 是否开启网络拦截 | platform | 开启后,具体的白名单需要在 backend 的设置中进行配置。网络拦截配置有两个选项:若选择 user ,开启后只有在白名单中的 IP 才能访问有数,如果有某些特殊用户想使用非白名单 IP 来访问有数,需要调用 user/batchImport 接口修改用户 networkConfig 属性;若选择 mobile ,开启后 web 端只有在 IP 白名单中才可以访问有数,移动端在非白名单中也可以访问有数。具体白名单和拦截类型如何配置请看 backend 的配置页面 |
PICTURE_NO_LINK | smtp.pictureNoLink | Bool | 发送邮件是否带跳转连接 | platform schedule backend | 可以在 backend 中进行配置。 |
SERVICE_DOWNGRADE | serviceDowngrade | Bool | 是否开启服务降级 | schedule | 开启后 schedule 中只有表单填写提醒邮件和 kill Chrome 会如期运行,其他任务将不再运行 |
PAY_MODULES | payModules | Array | 用于指定用户购买的模块 | platform | 'report': 报告, 'mpp': mpp, 'cockpit': 驾驶仓, 'screen': 大屏, 'survey': 数据填报, 'gis': gis 地图 |
TR_INPUT_API_LIST | trInputApiList | Array | 用于指定必须打日志的 API 列表 | platform | |
LOG_DB | logDatasource | Json | backend 查询的系统日志所存放的数据库的配置 | backend | 环境变量中配置成 mysql://<user>:<password>@<host>:<port>/<database> ,例 mysql://youdata:password@127.0.0.1:3306/youdata_log |
REDIS | redis | Json | redis 相关配置,用于缓存设置和存储 session 等 | platform backend survey website | 环境变量中配置成 redis://<password>@<host>:<port> ,例 redis://password@127.0.0.1:6379 |
CHROME | chrome | Json | Chrome 相关的配置 | capture | 需包含 host、port 属性 |
DB | datasource | Json | Platform 模块的数据库相关配置 | platform schedule backend survey website | 环境变量中配置成 mysql://<user>:<password>@<host>:<port>/<database> ,例 mysql://youdata:password@127.0.0.1:3306/youdata |
SMTP | smtp | smtp | 发邮件相关的配置 | platform schedule backend | 环境变量中配置成 smtp://<user>:<password>@<host>:<port> , 例 smtp://youdata@corp.netease.com:password@corp.netease.com:25 。可以在 backend 中进行配置 |
STORE | ydstore | Store | 对象存储服务的配置 | platform schedule capture | 环境变量中配置成 <protocol>://<user>:<password>@<host>:<port>/<bucket> ,例 minio://PJ99D7K3OAFS732PS1PZ:password@store.ydqa:80/yd-bucket |
Webhook接口设计
Webhook
- 需根据有数的规范,对每个添加的 webhook 地址,实现一个 get 请求接口和一个 post 请求接口。
- Get 请求用于:有数验证 webhook 接口可用性。
- Post 请求用于:有数调用进行消息推送。
配置 webhook 时的参数
- name(String):webhook 的名字。
- url(String):webhook 的请求地址。
- secret(String):用于使 webhook 验证有数有效性。
- type(String):webhook 类型,"warning"、"report"、"easyFetch"中的一个,分别表示"预警"、"定时推送"、"取数"。
- custom(Object):用户自定义参数。有数调用 webhook 时会把它放在请求体 body 中一起传。
有数验证 webhook url 有效性
- 有数在通过该验证后,才会把对应的 webhook 添加到有数中。Get 请求,url 为用户配置的 http(s)://host。
- 请求地址及参数:
- 请求地址:http(s)://host?timestamp=TIMESTAMP&nonce=NONCE&signature=SIGNATURE
- timestamp(long):调用 webhook 时的时间戳
- nonce(long):随机数
- signature(String):先对 timestamp,nonce,secret 进行字典序排序后拼接成一个字符串,然后求 sha1 的结果。即
sha1(sort(timestamp,nonce,secret))
。Webhook 端可根据该字段的值判断请求是否来自于有数(也可以不判断)。示例:long timestamp = 1583890769246; long nonce = 5111011325335330; String secret = "gzBDV9AMbGfHcf28"; String sortedString = Arrays.sort([timestamp.toString, nonce.toString, secret]) = "15838907692465111011325335330gzBDV9AMbGfHcf28"; String signature = sha1(sortedString) = "6460c444cf9df23a73717d16f7101199e79b8ec2";
- 返回:
{"code":0,"msg":"ok"}
- content-type:"application/json"
- 有数使用 code == 0 来判断 webhook 是否有效。
有数调用 webhook
- 当预警被触发,或者到了设置的定时任务时间,有数调用 webhook 进行消息推送。
- Post 请求,url 为用户配置的 http(s)://host。
请求地址及参数:
- 请求地址:http(s)://host?timestamp=TIMESTAMP&nonce=NONCE&signature=SIGNATURE 地址中携带的参数含义与上述一致,webhook 端可根据 signature 判断请求是否来自于有数(也可以不判断)。
- Header
- content-type: "application/json"
- Body(Body 示例)
参数名 | 参数类型 | 参数含义 |
---|---|---|
custom | Object | 用户自定义参数。用户在配置 webhook 时输入 |
from | String | 推送 webhook 的事件名。anomalyDetection:指标移动分析,decisionEvent:决策引擎,exportExcelTask: 导出excel,measureWarning:度量预警,reportComment: 报告评论,reportMail: 报告邮件推送 |
receiverList | List | 接收人列表,每个域内接收人的属性有:id,name,phone,email,weChatId,dingTalkId;域外邮箱的属性有:id:-1,email;域外电话的属性有:id:-2,phone;取数推送到webhook没有该字段 |
msgType | String | “text”:文本,此时 data 中不存在 picture 相关信息。“picture”:图片,此时 data 中不存在 abstractDesc 字段。“picture-text”:图片+文本 |
data | Object | 预警或者报告的数据体,具体格式见 data 的数据格式 |
data的数据格式
- 当配置 webhook 时的类型为"预警"(即 type == "warning")时:
- 发送成功消息时,传除了
errMsg
之外的所有参数, - 发送失败消息时,传带星号的参数,
- 消息类型取决于
msgStatus
字段。
- 发送成功消息时,传除了
参数名 | 参数类型 | 参数含义 |
---|---|---|
msgStatus * | String | 消息类型,"success" 或者 "fail" |
warningId * | Int | 触发的预警 id |
warningName * | String | 触发的预警名称 |
componentId * | String | 预警所在图表的 id |
componentName * | String | 预警所在图表的名称 |
dashboardId * | Int | 预警所在 dashboard 的 id |
dashboardName * | String | 预警所在 dashboard 的名称 |
reportId * | Int | 预警所在报告的 id |
reportName * | String | 预警所在报告的名称 |
projectId * | Int | 预警所在项目的 id |
projectName * | String | 预警所在项目的名称 |
abstractDesc * | String | 触发的预警摘要,该字段简要说明触发了预警的数据 |
pictureBase64 | String | 预警对应图表截图使用 base64 编码后的结果 |
pictureMd5 | String | 预警对应图表截图使用 md5 编码后的结果 |
pictureName | String | 截图的名称,包括拓展名"jpeg"、"png"等 |
pictureSize | Int | 截图的大小,单位:字节 |
pictureLink | String | 截图的下载链接 |
coverPictureBase64 | String | 封面图 base64 编码后的结果 |
coverPictureMd5 | String | 封面图使用 md5 编码后的结果 |
coverPictureName | String | 封面图的名称,包括拓展名"jpeg"、"png"等 |
coverPictureSize | Int | 封面图的大小,单位:字节 |
coverPictureLink | String | 封面图的下载链接 |
warningLink * | String | 预警所在的 dashboard 的 url |
flushTime * | Long | 数据刷新的时间戳 |
errMsg * | String | 出错原因及解决方式 |
- 当配置 webhook 时的类型为"定时推送"(即 type == "reportMail")时:
- 发送成功消息时,传除了
errMsg
之外的所有参数, - 发送失败消息时,传带星号的参数,
- 消息类型取决于
msgStatus
字段。
- 发送成功消息时,传除了
参数名 | 参数类型 | 参数含义 |
---|---|---|
msgStatus * | String | 消息类型,"success" 或者 "fail" |
reportId * | Int | 报告的 id |
reportName * | String | 报告的名称 |
projectId * | Int | 报告所在项目的 id |
projectName * | String | 报告所在项目的名称 |
bodyDesc | String | 推送的正文内容 |
abstractDesc | String | 推送的签名内容 |
pictureBase64 | String | 报告截图使用 base64 编码后的结果 |
pictureMd5 | String | 报告截图使用 md5 编码后的结果,长度为 32 的字符串 |
pictureName | String | 截图的名称,包括拓展名"jpeg"、"png"等 |
pictureSize | Int | 截图的大小,单位:字节 |
pictureLink | String | 截图的下载链接 |
dashboardData | Arr | 数据表格内容,数组,包含页面id、组件名称、表格数据的二维数组,具体格式见 dashboardData 示例 |
attachmentLink | String | 附件的下载链接 |
coverPictureBase64 | String | 封面图 base64 编码后的结果 |
coverPictureMd5 | String | 封面图使用 md5 编码后的结果 |
coverPictureName | String | 封面图的名称,包括拓展名"jpeg"、"png"等 |
coverPictureSize | Int | 封面图的大小,单位:字节 |
coverPictureLink | String | 封面图的下载链接 |
reportLink * | String | 报告的 url |
errMsg * | String | 出错原因及解决方式 |
- 当配置 webhook 时的类型为"取数"(即 type == "easyFetch")时:
- 发送成功消息时,传除了
errMsg
之外的所有参数, - 发送失败消息时,传带星号的参数,
- 消息类型取决于
msgStatus
字段。
- 发送成功消息时,传除了
参数名 | 参数类型 | 参数含义 |
---|---|---|
msgStatus * | String | 消息类型,"success" 或者 "fail" |
schemaInfo | Array | 元数据信息,数组元素是对象{name: "列名",type: "字段类型"} |
lineCount | Int | 文件的行数 |
viewerInfo * | Object | 表示数据来自的阅览者的信息,属性包括 id,uniqueId,phone,email |
fileName | String | 文件名称,不包括拓展名,如"abc" |
fileType | String | 文件类型,如"xlsx"、"csv" |
downloadLink | String | 文件下载的链接。excel下载下来是个xlsx文件;csv下载下来是一个zip文件,解压后里面有一个csv |
msgTag * | String | 唯一标识发送的执行结果 |
errMsg * | String | 出错原因及解决方式 |
输入示例
示例1
{
"custom": {
"robotUrl": "https://123.com/abc",
"color":{
"r":255,
"g":0,
"b":0
}
},
"receiverList": [{
"id": 1,
"name": "小明",
"phone": "13088888888",
"email": "xiaoming@admin.com",
"weChatId": "XiaoMing",
"dingTalkId": "xiaoming"
}, {
"id": -1,
"email": "xiaohong@admin.com"
}, {
"id": -2,
"phone": "13066666666"
}],
"msgType": "picture-text",
"data": {
"msgStatus": "success",
"warningId": 1,
"warningName": "预警名称",
"componentId": "c-1-128693-136413-k47wa7rj",
"componentName": "图表名称",
"dashboardId": 1,
"dashboardName": "页面1",
"reportId": 1,
"reportName": "报告名称",
"projectId": 1,
"projectName": "项目名称",
"abstractDesc": "东北销售额的求和为 10000,大于 100,触发预警,请及时查看",
"pictureBase64": 'iVxIHEgcSBNuJAEvBt9DFSVRIHEgcSB1rJgSTgW8nNVFbiQOJA4kAbcSAJ+Db6GKkqiQOJA4kDreRAEvCt5GYqK3EgcSBxoI048F8SmkEYgmFzNwAAAABJRU5ErkJggg==',
"pictureMd5":"7b4ed889dea0f24c3abee3bbf2b98607",
"pictureName": "abc.png",
"pictureSize": 512,
"warningLink": "https://netease.youdata.163.com/dash/folder/1?rid=1&did=1",
"flushTime": 1583829855276
}
}
示例2
{
"custom": {
"emails": [
"guochaotong@corp.netease.com"
]
},
"msgType": "easyFetchExport",
"data": {
"msgStatus": "success",
"schemaInfo": [
{
"name": "姓名",
"type": "String"
},
{
"name": "学号",
"type": "Whole"
}
],
"lineCount": 10,
"fileName": "呃",
"fileType": "xlsx",
"downloadLink": "http://nos.netease.com/youdata-test/excel-export-1595407226435.xlsx?Expires=1596767368&NOSAccessKeyId=f3318b2c1f67409386bb99813a44c778&Signature=4lbioAJ4EF5M8In2DNF7jchDdDM3QEQW0Hm2enp%2FKso%3D&download=%E5%91%83.xlsx",
"msgTag": "9d4f0ca6-5574-ef06-f329-69a1b144c12a",
"errMsg": null,
"viewerInfo": {
"id": 11114,
"uniqueId": "guochaotong@corp.netease.com",
"phone": "13088888888",
"email": "guochaotong@corp.netease.com"
}
}
}
dashboardData 示例
dashboardData 是数组,数组中的元素是对象。每个对象都包含 componentTitle、dashboardId、normalSheetData 三个属性。 其中,normalSheetData 是二维数组,数组第一项为表头,后面为数据。
[
{
"componentTitle": "折扣(按地区划分)",
"dashboardId": 139357,
"normalSheetData": [
[
"地区",
"折扣"
],
[
"东北",
"234.95"
],
[
"中南",
"234.25"
],
[
"华东",
"333.50"
],
[
"华北",
"74.10"
],
[
"西北",
"53.40"
],
[
"西南",
"134.20"
]
]
}
]
返回:
{"code":0,"msg":"ok"}
- content-type:"application/json"
- 有数使用 code == 0 来判断请求成功。无论成功与否,都可以在有数系统中查看 webhook 调用结果。
以上内容对您是否有帮助?