<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Smartchart开发手册</title>
    <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/</link>
    <description>Recent content on Smartchart开发手册</description>
    <generator>Hugo -- gohugo.io</generator><atom:link href="https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E8%AE%BE%E5%AE%9A/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E8%AE%BE%E5%AE%9A/</guid>
      <description> 简介 # SmartChart 数据集可以作为独立的 API 微服务对外暴露，通过配置用户白名单和 token，外部系统可以通过 GET/POST 请求查询 SmartChart 数据集的数据。这使得 SmartChart 不仅是可视化平台，也是轻量级的数据 API 网关。
SmartChart的数据集功能, 可以非常方便的实现数据对外微服务
权限设定 # 账号访问权限 # 超级管理员可以在首页右上角用户图标的菜单中, 找到&amp;quot;服务配置&amp;quot;打开 比如需要调用API的用户名为test 和 test2，用户名需要是在你的用户设定中存在的,内容如下: { &amp;#34;test&amp;#34;: { &amp;#34;token&amp;#34;: &amp;#34;smartchart&amp;#34; }, &amp;#34;test2&amp;#34;: { &amp;#34;token&amp;#34;: &amp;#34;smartchartxxx&amp;#34;, &amp;#34;host&amp;#34;: [&amp;#34;10.10.10.10&amp;#34;,&amp;#34;10.10.10.23&amp;#34;], &amp;#34;limit&amp;#34;: 60, &amp;#34;log&amp;#34;:1, &amp;#34;cors&amp;#34;: 1 } } 可选设定参考test2 host:API白名单配置，limit:一分钟内可调用次数, log:日志记录方式. cors:永许跨域访问
数据集权限 # 在数据集权限管理中, 将你需要开放的数据集的权限, 设定给对应的用户 API请求方式请参考 数据服务API
服务配置字段说明 # 配置项 类型 说明 token 必填 用于 SHA1 签名的密钥 host 可选数组 IP 白名单，不配置则不限制 limit 可选整数 每分钟最大调用次数（限流） log 可选 日志记录方式 cors 可选 1 允许跨域访问 </description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1API/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1API/</guid>
      <description>加密接口请求方式（推荐） # 下文提到的&amp;quot;秘钥&amp;quot;即管理员在API服务设定中的&amp;quot;token&amp;quot;
Content-Type为application/x-www-form-urlencoded
GET请求 # 接口请求URL
/echart/dataset_api/?visitor=xxx&amp;amp;token=xxx&amp;amp;type=xxx&amp;amp;stamp=xxxxx&amp;amp;param={&amp;#34;xx&amp;#34;:&amp;#34;xxx&amp;#34;,&amp;#34;xx&amp;#34;:&amp;#34;xxxx&amp;#34;} 参数说明
visitor: 用户名 type: 接口数据集ID stamp: 时间戳(1970年1月1日到生成时间的毫秒数) token: 采用sha1加密, token=SHA1(秘钥 + stamp + visitor + type) param: 数据集查询参数清单(可选), 格式json字符串, 如: &amp;#39;{&amp;#34;参数A&amp;#34;:&amp;#34;xxxx&amp;#34;, &amp;#34;参数B&amp;#34;:&amp;#34;xxxx&amp;#34;}&amp;#39; 接口返回格式Json
{ &amp;#34;data&amp;#34;:[[]], &amp;#34;result&amp;#34;:&amp;#34;success&amp;#34;, &amp;#34;maxpg&amp;#34;:1, &amp;#34;pg&amp;#34;:1 } 返回值说明
data : 二维数组, 第一行为表头, 样列数据如下 [[&amp;#34;heroname&amp;#34;, &amp;#34;qty&amp;#34;],[&amp;#34;镜&amp;#34;,658],[&amp;#34;猪八戒&amp;#34;,591]] result : success 或 error maxpg/pg : GET请求固定为1不分页 POST请求 # 适用于后台定时同步数据，查询请用GET请求方法
#接口请求格式: url: /echart/dataset_api/ #请求参数data: { &amp;#34;visitor&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;token&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;stamp&amp;#34;:xxxxx, &amp;#34;type&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;pagesize&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;pg&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;param&amp;#34;:&amp;#39;{&amp;#34;xxx&amp;#34;:&amp;#34;xxxx&amp;#34;}&amp;#39; } #data参数说明 visitor: 用户名 type: 接口数据集ID stamp: 时间戳(1970年1月1日到生成时间的毫秒数) token: 采用sha1加密, token=SHA1(秘钥 + stamp + visitor + type) Pagesize: 采用分页, 每页的数据量大小 pg: 返回第几页 param: 数据集查询参数清单(可单), 拼接成json字符串, 如: &amp;#39;{&amp;#34;参数A&amp;#34;:&amp;#34;xxxx&amp;#34;, &amp;#34;参数B&amp;#34;:&amp;#34;xxxx&amp;#34;}&amp;#39; #接口返回格式Json: { &amp;#34;data&amp;#34;:[[]], &amp;#34;status&amp;#34;:200, &amp;#34;msg&amp;#34;:&amp;#34;success&amp;#34;, &amp;#34;maxpg&amp;#34;:xxx, #最大页数 &amp;#34;pg&amp;#34;:xx, #当前页数 &amp;#34;casheflag&amp;#34;: xx, #如果是999说明命中缓存 &amp;#34;total&amp;#34;:xx, #总条数 } 注意： 只有post是分页的, 第一页是带标题的， 后面页不带标题; 由于post方式会使用缓存进行分页,如命中缓存传参不会生效，小数据量请使用get方式请求; 不要请求大数据量，大量数据请采用limit, offset传参方式进行分页</description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%8E%A5%E6%94%B6API/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%8E%A5%E6%94%B6API/</guid>
      <description>POST请求 # url: /echart/dataset_api/ Content-Type: application/x-www-form-urlencoded 请求参数data # { &amp;#34;visitor&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;token&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;stamp&amp;#34;:&amp;#34;xxxxx&amp;#34;, &amp;#34;type&amp;#34;:&amp;#34;xxx&amp;#34;, &amp;#34;ds&amp;#34;:[[&amp;#34;A&amp;#34;,&amp;#34;B&amp;#34;],[&amp;#34;a1&amp;#34;,&amp;#34;b1&amp;#34;],[&amp;#34;a2&amp;#34;,&amp;#34;b2&amp;#34;]], &amp;#34;update&amp;#34;:0 } 参数说明 # visitor: 用户名 type: 接口数据集ID stamp: 时间戳(1970年1月1日到生成时间的毫秒数) token: 采用sha1加密, token=SHA1(秘钥 + stamp + visitor + type) update: 0表示新增, 1表示数据更新 ds: 二维数组 或 参考数据填报或数据更新的格式要求 &amp;ldquo;秘钥&amp;quot;即管理员在API服务设定中的&amp;quot;token&amp;rdquo;
返回格式 # { &amp;#34;status&amp;#34;: 200, &amp;#34;msg&amp;#34;: &amp;#34;success&amp;#34; } 调用样列参考 # def post_data(): import requests import hashlib url=&amp;#39;http://localhost:8000/echart/dataset_api/&amp;#39; visitor = &amp;#39;xxx&amp;#39; key = &amp;#39;xxxxxx&amp;#39; id = 123 ContentType=&amp;#34;application/x-www-form-urlencoded&amp;#34; stamp = int(time.</description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E4%B8%8B%E8%BD%BD/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E4%B8%8B%E8%BD%BD/</guid>
      <description>简介 # SmartChart 提供 ds_download() 函数，允许用户将当前报表中的数据集数据一键下载为 CSV 或 Excel 文件。通过结合按钮点击事件，可以实现灵活的&amp;quot;按需下载&amp;quot;功能，支持下载当前查询结果（含筛选条件）。
应用场景: # 需要要下载数据集的数据到本地
使用方法 # 仅需要录活使用ds_download这个函数, 你可以开发出非常个性化的下载功能
ds_download(name, dataset,xls=0) 参数说明: name: 文件名称 dataset: 可以是二维数组也可以是字符串 xls: 默认0为下载csv, 指定1为下载excel 样例: # 可在&amp;quot;模板&amp;quot; 中新建一个下载按钮并包裹拖拽容器, 指定button的ID,如id_down1, 拖拽到你需要的位置 在任意一个图形开发或js代码段中加入以下代码即可
$(&amp;#39;#id_down1&amp;#39;).click(()=&amp;gt;{ ds_download(&amp;#39;报表数据.csv&amp;#39;, dataset); }); 这样就可以实现点击按钮下载数据了
ds_download 函数说明 # ds_download(name, dataset, xls=0) 参数 说明 name 下载文件名，如 &#39;报表数据.csv&#39; 或 &#39;数据.xlsx&#39; dataset 二维数组数据 或 字符串内容 xls 0=下载 CSV（默认），1=下载 Excel（.xlsx） 完整下载按钮示例 # &amp;lt;!-- 模板 Body 中添加下载按钮 --&amp;gt; &amp;lt;div class=&amp;#34;smtdrag&amp;#34; id=&amp;#34;id_down1&amp;#34;&amp;gt; &amp;lt;button&amp;gt;下载数据&amp;lt;/button&amp;gt; &amp;lt;/div&amp;gt; // 图形编辑器中或模板 JS 区 $(&amp;#39;#id_down1&amp;#39;).</description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E5%A1%AB%E6%8A%A5/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E5%A1%AB%E6%8A%A5/</guid>
      <description>简介 # 数据填报是 SmartChart 将前端用户输入的数据写入数据库的核心机制，通过 ds_save(数据集序号, dataset) 函数调用，可以将用户填写的表单数据、按钮触发的数据、复杂报表中提取的单元格数据等写入数据库。配置好填报数据集后，写入逻辑完全在前端 JS 中控制，灵活度极高。
应用场景 # 收集用户端录入的数据 前端处理好的数据回写到任意系统 制做问卷系统 埋点应用 配置方法 # 新建一个懒加载数据集,填写内容格式如下: # 如果需将数据保存到对应的表名 dataset={ &amp;#34;table&amp;#34;:&amp;#34;表名&amp;#34; } 如需指定字段, 可如下方式填写, 也可指定写入前sql和写入后sql dataset={ &amp;#34;table&amp;#34;:&amp;#34;表名(字段1, 字段2)&amp;#34;, &amp;#34;preSql&amp;#34;:[&amp;#34;truncate table abc&amp;#34;], &amp;#34;postSql&amp;#34;:[&amp;#34;insert into xxx select ....&amp;#34;] } 写入数据集格式说明 # 写入一行数据 dataset = [&amp;#39;a&amp;#39;,&amp;#39;b&amp;#39;] 或 dataset = {&amp;#39;id&amp;#39;: 123, &amp;#39;name&amp;#39;:&amp;#39;john&amp;#39;} //如果需要自动记录写入者用户名 dataset = [&amp;#39;$username&amp;#39;, &amp;#39;b&amp;#39;] 多行数据 dataset = [[], [&amp;#39;a1&amp;#39;,&amp;#39;b1&amp;#39;],[&amp;#39;a2&amp;#39;, &amp;#39;b2&amp;#39;]] dataset = [[&amp;#39;__A&amp;#39;,&amp;#39;B&amp;#39;], [&amp;#39;a1&amp;#39;,&amp;#39;b1&amp;#39;],[&amp;#39;a2&amp;#39;, &amp;#39;b2&amp;#39;]] 当数据中表头第一个字段用__开头，如上则会自动采用表头A,B插入，否则会忽略表头采用配置中指定的表头顺序
使用场景 # 在&amp;quot;模板&amp;quot;中自定义写入 # 具体可参考视屏</description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/</guid>
      <description>应用场景 # 基于主键对数据进行更新
使用方法 # 新建一个懒加载数据集,填写内容格式如下: # 如果需将数据保存到对应的表名 dataset={ &amp;#34;table&amp;#34;:&amp;#34;表名&amp;#34;, &amp;#34;id&amp;#34;:&amp;#34;id&amp;#34;, &amp;#34;fDict&amp;#34;:{&amp;#34;name&amp;#34;:&amp;#34;code&amp;#34;,&amp;#34;m_age&amp;#34;:&amp;#34;age&amp;#34;}, &amp;#34;sFields&amp;#34;:[&amp;#34;age&amp;#34;, &amp;#34;update_date&amp;#34;], &amp;#34;autoDict&amp;#34;:{&amp;#34;updater&amp;#34;:&amp;#34;$username&amp;#34;, &amp;#34;update_date&amp;#34;:&amp;#34;curdate()&amp;#34;} } id: 定义主键字段 fDict: 定义写入的字段与数据库中字段的映身关系 sFields: 特殊字段，比如数值类型，函数方法 autoDict:会自动提交的数据 更新方法 # 参考数据填报，不同的只需增加一个update参数为1: ds_save(0,dataset,1)
关于更新的数据集格式说明 # //适用于单行 dataset = {&amp;#39;id&amp;#39;: 123, &amp;#39;name&amp;#39;:&amp;#39;john&amp;#39;} //多行数据 dataset = [{&amp;#39;id&amp;#39;: 123, &amp;#39;name&amp;#39;:&amp;#39;john&amp;#39;},{&amp;#39;id&amp;#39;: 124, &amp;#39;name&amp;#39;:&amp;#39;smith&amp;#39;},] 复合主键的配置方法 # 如a,b为复合主键, 以mysql为例
dataset={ &amp;#34;table&amp;#34;:&amp;#34;表名&amp;#34;, &amp;#34;id&amp;#34;:&amp;#34;concat(a,b)&amp;#34;, &amp;#34;fDict&amp;#34;:{&amp;#34;id&amp;#34;:&amp;#34;concat(a,b)&amp;#34;}, &amp;#34;sFields&amp;#34;:[], &amp;#34;autoDict&amp;#34;:{} } 自增编码生成 # 如按照当天的序号增长
&amp;#34;autoCode&amp;#34;:{&amp;#34;工单号&amp;#34;:&amp;#34;SELECT CONCAT(&amp;#39;SCDD&amp;#39;,DATE_FORMAT(NOW(), &amp;#39;%Y%m%d&amp;#39;), LPAD(IFNULL(CAST(SUBSTRING(MAX(工单号), 13) AS UNSIGNED) + 1, 1),3, &amp;#39;0&amp;#39;)) AS o FROM work_order WHERE 工单号 LIKE CONCAT(&amp;#39;SCDD&amp;#39;, DATE_FORMAT(NOW(), &amp;#39;%Y%m%d&amp;#39;), &amp;#39;%&amp;#39;)&amp;#34;} 你也可以简写为</description>
    </item>
    
    <item>
      <title></title>
      <link>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E5%90%8E%E5%8F%B0API%E5%88%B7%E6%96%B0/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://help.smartchart.cn/docs/6.%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1/%E5%90%8E%E5%8F%B0API%E5%88%B7%E6%96%B0/</guid>
      <description>简介 # 后台 API 刷新允许外部系统（如 ETL 调度器、数据流水线）在数据准备好后，主动通知 SmartChart 刷新指定仪表盘的数据缓存。与前端定时刷新相比，后台 API 刷新更精准、更节省资源，特别适合&amp;quot;ETL 完成后立即刷新&amp;quot;的场景，保证用户打开报表时始终看到最新且加载极速的数据。
应用场景 # 有ETL流程，需要等待后台数据刷新完成后，再触发仪表盘的刷新，数据未完成刷新，仪表盘不刷新 针对有一些耗时的查询, 虽然smartchart有缓存加速, 但是在第一次刷新时可能不能达到极速 用户需要随时都能体验到极速的打开效果 使用后台API刷新，建意将仪表盘中数据集的缓存时间设置长一些，比如2天（2880分钟）
后台数据主动刷新接口 # (购买专业版本后支持)
你需要在setting.py中设定API_TOKEN API_TOKEN = &amp;#39;xxxxxxxx&amp;#39; 找到你要刷新的仪表盘编码, 你可以在打开的仪表盘url上面找到这个type id
后台访问如下api url即可
http://ip:端口/echart/refresh_ds/?type=你的报表ID&amp;amp;token=你设定的API_TOKEN 关于定时刷新 # 为保持产品的轻量化及坚持专业的产品做专业的事情, 归一化统一化的架构设计, 我们不会集成相关调度系统, 一般我们推荐使用您自有的调度工具或平台, 如airflow, 我们也有相关的配套产品
如果您仅仅是简单应用, 也无需使用专用调度来增加运维复杂度, 可以使用linux自带的即可
新建一个sh文件, 假设目录在/data/smartchart vim refresh_smartchart.sh 写入需要刷新的脚本 echo start refresh $(date &amp;#34;+%Y-%m-%d %H:%M:%S&amp;#34;) curl http://ip:端口/echart/?type=你的报表ID1&amp;amp;token=你设定的API_TOKEN curl http://ip:端口/echart/?type=你的报表ID2&amp;amp;token=你设定的API_TOKEN echo end refresh $(date &amp;#34;+%Y-%m-%d %H:%M:%S&amp;#34;) 如果你的网址是https, 可如下方法使用curl
curl -k --insecure &amp;#34;https://www.</description>
    </item>
    
  </channel>
</rss>
