<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <id>http://help.primeton.com/iData/5.4.5.0/</id>
  <title>iData</title>
  <subtitle>Just do it!</subtitle>
  <updated>2026-03-24T07:20:37.556Z</updated>
  <generator>@mr-hope/vuepress-plugin-feed</generator>
  <link rel="self" href="http://help.primeton.com/iData/5.4.5.0/atom.xml"/>
  <link rel="alternate" href="http://help.primeton.com/iData/5.4.5.0/"/>
  <category term="guide"/>
  <entry>
    <title type="html">contributing</title>
    <id>http://help.primeton.com/iData/5.4.5.0/contributing/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/contributing/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="contributing"> contributing</h1>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">文件夹系统</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/3-foldersystem/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/3-foldersystem/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>为了权限管理更加方便, 企业版把原来<code>数据源</code>, <code>数据集</code>, <code>图表</code>, <code>看板</code>各个独立的资源管理通过通用文件夹系统做了统一.<br>
这样做带来的好处是, 用户可以按<code>数据主题</code>、<code>用户</code>、<code>部门</code>建立文件夹, 然后把不同模块的资源都放在同一个父文件夹下面(可以多级子文件夹), 在授权的时候只要对父文件夹赋权操作一次即可把文件夹下面所有的资源一并授权给角色.</p>
<div><p>注意</p>
<ol>
<li><strong>不同模板展示对应模块类型的资源。</strong> 如: 看板管理、自助分析、数据集下面都有相同的文件夹，但是看板管理文件下面只能看到看板、自助分析文件夹下面只有图表</li>
<li>数据源文件夹从1.4.3开始支持</li>
</ol>
</div>
<h2 id="文件夹右键菜单"> 文件夹右键菜单</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210701102622.png" alt="" /></p>
<h2 id="创建文件夹"> 创建文件夹</h2>
<p>在目录树的文件夹上面<strong>右键点击</strong>, 出现右键菜单, 然后点击<code>创建子文件夹</code>创建文件夹</p>
<h2 id="重命名"> 重命名</h2>
<p>在目录树的文件夹或资源节点右键点击, 出现右键菜单, 然后点击<code>重命名</code>重命操作</p>
<h2 id="删除"> 删除</h2>
<p>在目录树的文件夹或资源节点上面右键点击, 出现右键菜单, 然后点击<code>删除</code>删除文件夹, 删除文件夹的时候会有安全依赖检查, 如果为非空文件夹是不允许删除的.</p>
<div><p>提示</p>
<ul>
<li>根文件夹<code>ROOT</code>右键只能进行创建子文件夹操作</li>
<li>从所有的包含文件夹弹窗的操作, 均能做文件夹新建操作</li>
</ul>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">资源依赖分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/10-linage/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/10-linage/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="资源依赖分析"> 资源依赖分析</h1>
<p>血缘分析可以让资源管理者迅速掌握当前资源利用率，从1.8开始支持分析所有下游的数据集、图表、看板、报表，包含间接依赖(如：图表使用的数据集使用了该数据源)</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026133912.png" alt="" /></p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Home</title>
    <id>http://help.primeton.com/iData/5.4.5.0/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">数据集基础</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/4-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/4-dataset/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<div><p>数据集</p>
<p>数据集是OLAP分析的Cube(数据立方体)，可以提前定义查询、聚合表达式、动态时间漏斗、数据权限等。
在用户数据模型比较稳定的前提下，可以减少相同数据集下不同表报设计时重复的填写查询脚本、新建聚合表达式工作。</p>
</div>
<p>CBoard 的数据集为敏捷轻模型，任何一条简单的查询输出都可以当做一个 cube 查询来使用，cube 修改避免了常规数据建模、修改、发布测试的繁琐过程。<br>
打个比方，第一次业务需求你可能选择了，a,b,c,d 四个列作为聚合维度建立了一个 Cube 查询</p>
<div><pre><code><span>SELECT</span> a<span>,</span> b<span>,</span> c<span>,</span> d
  <span>FROM</span> fact a
  <span>JOIN</span> dima <span>ON</span> <span>.</span><span>.</span><span>.</span>
  <span>JOIN</span> dimb <span>ON</span> <span>.</span><span>.</span><span>.</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>之后有了新的需求，需要引入维度 e, f, g 列，常规的报表工具需要重新引入表、更新模型定义、发布，这个时候 CBoard 轻模型的优势就体现出来了只需要简单的修改或者复制之前的模型再修改一下查询</p>
<div><pre><code><span>SELECT</span> a<span>,</span> b<span>,</span> c<span>,</span> e<span>,</span> f<span>,</span> g
 <span>FROM</span> fact a
 <span>JOIN</span> dima a <span>ON</span> <span>.</span><span>.</span><span>.</span>
 <span>JOIN</span> dimb b <span>ON</span> <span>.</span><span>.</span><span>.</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>提示</p>
<p>您甚至可以更换一个数据源、完全重写查询，仅需要<strong>保证旧查询使用的字段都包含在修改之后的查询字段中</strong></p>
</div>
<h2 id="数据集模型定义"> 数据集模型定义</h2>
<p>数据集的 schema 包含<code>维度列</code>、<code>度量列</code>、<code>聚合表达式</code>、<code>预定义漏斗</code></p>
<ul>
<li>选择数据源，填写对应的查询脚本，JDBC 数据源为查询 SQL，读取数据</li>
<li>读取数据成功之后，<code>原始列/可选列</code>和 Schema 空树出现在页面下方</li>
<li>拖拽左边方框的列到右边维度节点/度量节点下方，也可以通过点击左边的<code>可选列</code>，快速把列添加到 Schema，默认添加到维度节点，之后可通过功能键<code>切换到度量</code></li>
<li>一个列可在不同的维度层级下多次使用，如：年-&gt;月-&gt;日，年-&gt;周-&gt;日</li>
<li>加入 Schema 树的列可以编辑修改<code>别名</code></li>
<li>层级是图表下钻、上卷的路径基础</li>
<li>计算表达式和过滤组通过点击<code>添加新建</code></li>
</ul>
<div><p>提示</p>
<ul>
<li>维度列在图表设计时只能拖拽到维度栏；</li>
<li>v1.5.1之前的版本指标(度量)列只能拖拽到指标栏，1.5.1之后的版本指标可以拖拽到维度用作直方图分析</li>
<li>聚合函数设计时可以改变, 默认为 sum 求和</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210628171934.png" alt="" /></p>
<h3 id="建模建议"> 建模建议</h3>
<div><p>建议</p>
<p>正常情况下我们建议让有基础数据仓库建模经验的技术人员进行维度建模，建好模型之后自助分析、看板设计阶段交付非技术、业务使用<br>
这样做的好处是专业的人员统一管理模型，交付的模型更加利于后期多场景重用分析，查询性能也更加可控</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210710202929.png" alt="" /></p>
<h2 id="维度层级"> 维度层级</h2>
<p>维度层级是图表在固定路径上下钻、上卷的路径基础, 常用于交叉表、柱线图、饼图的下钻操作</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230504192910.png" alt="" /></p>
<h2 id="衍生维度、定制维"> 衍生维度、定制维</h2>
<p>原始数据列在模型上可以多次重复使用, 除了定义不同的下钻维度层级之外, 还能对相同列进行不同的维度分组定制; 下面的例子演示了通过不同方式对月份分组<code>上半年</code>/<code>下半年</code>,
当然这个例子只是简单为了做功能演示, 真实数据你可以已经包含上下半年信息</p>
<p><img src="./../assets/dataset/cn-custom-dim.png" alt="" /></p>
<ul>
<li>点击维度节点上的<i></i><code>编辑按钮</code>进入定制维弹框
<div style="text-align:center">
<img src="../assets/dataset/cn-custom-dim-blank.png"  />
</div></li>
</ul>
<h3 id="列表定制"> 列表定制</h3>
<p><code>分组类型</code>选择<code>列表</code>, 列表分组适合给字符型维度进行分组</p>
<p><img src="./../assets/dataset/cn-custom-dim-list.png" alt="" /></p>
<p>左边栏为该原始数据列所对应的值, 右边栏为分组定义,</p>
<ul>
<li>输入别名</li>
<li>在右边栏最上方输入分组名框, 输入分组然后点击<kbd>添加分组</kbd></li>
<li>激活分组标签页, 然后对对该分组进行重命名和分组成员定义, 如果分组成员比较简单或者该列对应的结果集过大, 手工输入成员值之后添加</li>
<li>不在分组内的值将被分为<code>其他分组</code></li>
<li>对维度进行分组之后大部分情况下改变原有列的数据类型, 为了让服务端能够生成正确的查询脚本, 最好还需要在窗口首行指定分组之后的<code>数据类型</code>, 不指定默认为字符串类型</li>
<li>分组编辑完成之后点击<kbd>保存</kbd>, <kbd>取消</kbd>则视为放弃本次编辑</li>
</ul>
<h3 id="范围定制"> 范围定制</h3>
<p><code>分组类型</code>选择<code>范围</code>, 范围分组适合给数值型维度进行分组</p>
<p><img src="./../assets/dataset/cn-custom-dim-range.png" alt="" /></p>
<ul>
<li>输入别名</li>
<li>选择分组之后的数据类型, 我们这里把原本 1-12 的数值型月份变成了<code>上半年</code>和<code>下半年</code>两个文本成员, 所以选择数据类型为字符</li>
<li><kbd>添加分组</kbd></li>
<li>编辑分组名, 起始值, 结束值, 注意分组区间为闭区间</li>
<li>编辑完成保存</li>
</ul>
<h3 id="脚本定制"> 脚本定制</h3>
<p><code>分组类型</code>选择<code>脚本</code>, 脚本分组适用于对 sql 比较熟悉的用户, 可以定义任意复杂类型的分组</p>
<p><img src="./../assets/dataset/cn-custom-dim-script.png" alt="" /></p>
<div><p>注意</p>
<p>分组脚本不需要再指定别名;</p>
</div>
<h3 id="组外成员处理"> 组外成员处理</h3>
<p>对于维度组外成员，如果需要显示，可以设置组外成员处理，默认为维持原值，可以配置维持原值或设置为统一值，如果不需要统计显示，可以设置过滤组外成员</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230504193428.png" alt="" /></p>
<div><p>注意</p>
<p>如果衍生维度的数据类型与原始字段的数据类型不一致，Clickhouse会报错，如下面所示，case 结构中同时出现字符与数字，在数据库没有
做兼容处理的情况下将引起报错, 解决方案为设置组外成员统一值，或者过滤组外成员</p>
<div><pre><code><span>SELECT</span> 
    <span><span>`</span>the_year<span>`</span></span> <span>AS</span> c_0<span>,</span>
    <span>CASE</span>
        <span>WHEN</span> <span><span>`</span>month_of_year<span>`</span></span> <span>IN</span> <span>(</span><span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>)</span> <span>THEN</span> <span>'上半年'</span> <span>-- 字符类型</span>
        <span>ELSE</span> <span><span>`</span>month_of_year<span>`</span></span> <span>-- 数字型</span>
    <span>END</span> <span>AS</span> c_1<span>,</span>
<span>.</span><span>.</span><span>.</span> 
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><p>SOL 错误 [386] [07000]: Code: 386. DB:Exception: There is no supertype for types String, Int8 because some of them are String/FixedString and some of them are not;</p>
</div>
<h2 id="维度字典功能v1-9"> 维度字典功能<sup>v1.9</sup></h2>
<ul>
<li>
<p>维度字典在数据集编辑-&gt;维度节点高级配置栏-&gt;<strong>维度字典</strong>(原维度可选值查询)中配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206102703.png" alt="" /></p>
</li>
<li>
<p>支持多对一处理</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206103218.png" alt="" /></p>
</li>
</ul>
<div><p>聚合数据查询</p>
<p>维度字典的配置，不会改变汇总查询的结构，从上面的案例可以发现聚合字段依旧是region_id，region_id与country之间是多对一的的关系，即多个region_id对应同一个国家，
汇总查询按region_id汇总，但是我们的数据引擎会在此基础之前再进行一次汇总计算，实现按字典映射值sales_country的粒度汇总</p>
<div><pre><code><span>SELECT</span> <span><span>`</span>REGION_ID<span>`</span></span> <span>AS</span> c_0<span>,</span>
       <span>SUM</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span> <span>AS</span> v_0
  <span>FROM</span> <span>(</span>
  <span>-- dataset view</span>
<span>)</span> cb_view
<span>WHERE</span> <span><span>`</span>REGION_ID<span>`</span></span> <span>NOT</span> <span>IN</span> <span>(</span><span>1</span><span>)</span>
<span>GROUP</span> <span>BY</span> <span><span>`</span>REGION_ID<span>`</span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div></div>
<div><p>跨库、跨源关联</p>
<p>维度字典查询可以与数据集为不同的库或者数据源，因此可以利用维度字典实现跨库跨源数据关联，典型场景如: Elasticsearch数据集维度映射到关系数据的字典表</p>
</div>
<div><p>字典过滤</p>
<p>对有配置维度字典的维度过滤，维度成员输出按映射结果分组，选定值为映射值，多维分析引擎会把映射值还原为原值过滤<br>
支持用户在选定值直接输入原始值<br>
如果输入的选定值在字典表找不到映射关系，则不做映射直接用原值过滤
<img src="http://qiniu.ibidemo.cn/picgo/20230206111536.png" alt="" /></p>
<div><pre><code><span>SELECT</span> <span><span>`</span>REGION_ID<span>`</span></span> <span>AS</span> c_0<span>,</span> <span><span>`</span>sales_region<span>`</span></span> <span>AS</span> c_1<span>,</span>
       <span>SUM</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span> <span>AS</span> v_0
  <span>FROM</span> <span>(</span>
<span>-- dataset view</span>
<span>)</span> cb_view
<span>WHERE</span> <span><span>`</span>REGION_ID<span>`</span></span> <span>NOT</span> <span>IN</span> <span>(</span><span>3</span><span>,</span><span>7</span><span>,</span><span>8</span><span>,</span><span>9</span><span>,</span><span>10</span><span>,</span><span>11</span><span>,</span><span>12</span><span>,</span><span>13</span> <span>.</span><span>.</span><span>.</span><span>.</span><span>)</span>
<span>GROUP</span> <span>BY</span> <span><span>`</span>REGION_ID<span>`</span></span><span>,</span> <span><span>`</span>sales_region<span>`</span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div></div>
<h2 id="聚合表达式"> 聚合表达式</h2>
<ol>
<li>
<p>编辑聚合表达式并测试正确，表达式是用于聚合后再计算.<br>
如: <code>Math.log(sum(columnA)/count(columB))</code></p>
</li>
<li>
<p>表达式的编写</p>
</li>
</ol>
<ul>
<li>表达式可以编写的时候, 写点击选择<code>聚合栏</code>聚合函数和可选字段辅助输入;</li>
<li>表达式之间可以引用已有, <code>可选表达式</code> 引用定义好的表达式的时候注意不要成环, 避免解析死循环</li>
</ul>
<p><img src="./../assets/dataset/cn-calculate-measure.png" alt="" /></p>
<div><p>注意</p>
<p>聚合表达式中使用的字段必须与聚合函数成对出现，否则聚合表达式将会影响聚合颗粒度引起计算错误<br>
如: 维度字段使用了年度，sql对应的聚合为<code>group by year</code>, 当聚合表达式中出现了不在group by中的字段则改查询就不正确了</p>
<div><pre><code><span>-- 正确</span>
<span>select</span> <span>year</span><span>,</span> <span>sum</span><span>(</span>cost<span>)</span>
 <span>from</span> t
<span>group</span> <span>by</span> <span>year</span>

<span>-- 错误</span>
<span>select</span> <span>year</span><span>,</span> unit <span>*</span> <span>sum</span><span>(</span>cost<span>)</span>
 <span>from</span> t
<span>group</span> <span>by</span> <span>year</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div></div>
<ol start="3">
<li>数据集中预定义的聚合表达式在图表设计时不支持修改</li>
</ol>
<div><p>sql的count distinct</p>
<p>表达式里面的distinct(col)与sql的count(distinct col)等价, 直接写count(distinct col)是错误的写法</p>
</div>
<h3 id="条件聚合"> 条件聚合</h3>
<p>汇总统计中维持原始输入</p>
<div><p>怎么实现count(case when col > 10 then 1 else 0 end)</p>
<p>加个引号就可以了, 表达式会把里面的语句当成一个整体 <code>count(&quot;case when col &gt; 10 then 1 else 0 end&quot;)</code></p>
</div>
<h3 id="解析自定义-特定聚合函数1-9"> 解析自定义/特定聚合函数<sup>1.9</sup></h3>
<p>默认的的汇总类型只支持常规的sum/avg/max/min/count/distinct(等同于数据库中const(distinct column))<br>
自定义聚合函数支持用户使用数据库特有的汇总函数，比如clickhouse的分位数统计函数</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206155434.png" alt="" /></p>
<p>自定义聚合函数的配置在可选表达式中添加表达式语法如下：</p>
<blockquote>
<p><code>[aggType](column)</code> aggType为聚合函数名，column为列名，如：<em><code>[quantile](salary)</code></em></p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206160607.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206160859.png" alt="" /></p>
<div><p>提示</p>
<p>使用自定义聚合函数时暂时忽略语法检测，后续版本中会完善语法检测功能</p>
</div>
<h2 id="预定义漏斗-过滤器"> 预定义漏斗（过滤器）</h2>
<p>用于预定义动态日期窗口，点击下拉选择动态时间表达式模板，模板中的值可以编辑文本。用户可根据自己的需求改成任意大小时间窗口。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210710201433.png" alt="" /></p>
<h3 id="预定义组合过滤"> 预定义组合过滤</h3>
<ul>
<li>原有的过滤器组合只能对原始数据列进行过滤而且不同列之间的关系只能是简单的与运算(AND), 即必须都成立;</li>
<li>如果想要过滤<code>男性或者国家为美国</code>这样的条件或者更加复杂的过滤条件则无法完成;</li>
<li>企业版 0.5.1 在添加<code>定制维</code>功能之后对过滤器也进行了相应的改进, 过滤器不再直接在列上定义, 而是在模型维度节点上进行过滤;</li>
</ul>
<p><img src="./../assets/dataset/cn-prefilter-group.png" alt="" /></p>
<ul>
<li>如前面我们演示了新增一个半年的维度, 之后用户可以在过滤器里面过滤<code>上半年</code>即可; 否则按原有数据列过滤逻辑, 过滤上半年需再次选定上半年所有月份;</li>
</ul>
<p><img src="./../assets/dataset/cn-prefilter-item.png" alt="" /></p>
<h2 id="准实时数据集-看板刷新"> 准实时数据集/看板刷新</h2>
<p>看板是如何做刷新的? 我们知道一个看板里面可以组合来自不同数据集的图表, 但是不是所有的数据集的图表都需要刷新
因此我们把看板上图表的刷新和数据集绑定在一起了, 在设计数据集的时候设置实时刷新时间间隔, 可以保持空，留空则不做后台刷新，填入大于 0 的值,
看板展示的时候里面要是存在设置了刷新间隔的数据集所创建的图表, 该图表就会按设置的时间间隔重新读取数据并更新</p>
<h2 id="数据集权限模板"> 数据集权限模板<badge text="企业版 v1.2"/></h2>
<p>通过数据集权限模板可以控制数据集对不同用户的数据访问权限，查询模板是可以查询外部系统权限数据，这样便可以方便用户把BI系统与外部系统的权限进行集成</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104155811.png" alt="" /></p>
<p>操作步骤:</p>
<ul>
<li>编辑维度节点，高级配置栏开打权限规则开关</li>
<li>可以使用直接查询，选定权限数据所在的数据源连接-&gt;编写查询，查询中可以通过<code>${loginName}</code>变量控制区别用户权限范围，查询首列为当前维度限定的数据范围</li>
<li>也可以使用权限模板(查询模板)中预定义的模板</li>
</ul>
<h2 id="数据集变量声明"> 数据集变量声明<badge text="v1.13"/></h2>
<p>数据集查询中使用变量并不需要提前声明，只要下游自助分析中赋值即可生效，但是不方便地方在于在自助分析页面中不知道数据集中使用了哪些变量，以及变量的类型是什么。<br>
从数据集和自助分析两个模块定位的使用者角色来看，数据集设计用户通常为有技术背景的用户，自助分析面向业务用户，因此为了让业务用户能在使用数据集时更加方便，可以选择在数据集开发阶段提前定义好
数据集支持的变量以及变量类型</p>
<p>数据集设计阶段声明变量支持</p>
<ul>
<li>配置变量类型，不同的变量类型在<strong>自助分析页面</strong>变量赋值对应不同的输入形式</li>
<li>设置变量的默认值(也可以不设置)</li>
<li>默认值支持使用变量</li>
</ul>
<div><p>提示</p>
<p>数据集查询中数组变量获取建议使用arr.get()函数传参设置，因为carr.get()能够在变量为空白字符和null两种情况下更安全的设定默认值</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231120175326.png" alt="" /></p>
<h2 id="维度绑定变量配置"> 维度绑定变量配置<badge text="v1.13"/></h2>
<p>将数据集维度绑定变量之后，自助分析过程中维度过滤条件可以隐式赋值到变量，从而进一步实现变量赋值的无感化、简单化，降低业务人员对变量赋值使用门槛</p>
<ul>
<li>通过<strong>过滤类型</strong>的限制确保了变量赋值的正确性, 如日期范围查询过滤类型为闭区间，必须设置两个值</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121082745.png" alt="" /></p>
<h2 id="维度自动添加到过滤栏"> 维度自动添加到过滤栏<badge text="v1.14"/></h2>
<p>维度自动添加到过滤栏, 防止大数据集使用忘记添加过滤条件，让业务人员使用起来更加便捷，整体提高系统的稳定性</p>
<ol>
<li>配置维度自动添加到过滤栏</li>
<li>设置默认过滤值</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240506151915.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/dim_filter_pin.gif" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121082745.png" alt="" /></p>
<h2 id="图表级表达式"> 图表级表达式</h2>
<p>是否允许在图表设计阶段，新建表达式，该功能可能与维度、指标列权限冲突，因为通过表达式可以查询不在模型可见范围内的字段，如：引号表达式</p>
<h2 id="特殊数据集的查询定义说明"> 特殊数据集的查询定义说明</h2>
<h3 id="kylin-native"> Kylin Native</h3>
<p><img src="./../assets/dataset/KylinDataSet.png" alt="" /></p>
<div>
    使用Kylin数据源之前需对Kylin基本原理有所了解。
    需要填写项, 以及解释如下：
    <ul>
        <li><b>Kylin Project</b>：对应Kylin本身的Project</li>
        <li><b>Data Model</b>：对应Kylin Model</li>
    </ul>
</div>
<h2 id="查询脚本敏感配置1-14"> 查询脚本敏感配置<sup>1.14</sup></h2>
<p>默认场景下为了便于用户能够分析调试、以及更好的理解自助分析动态sql生成原理，在自助分析页面预览查询能够查看查询脚本，
如果您希望控制sql查询脚本的可见性可以通过配置开启数据集查询敏感，限制一些场景的下预览查询按钮是否可见</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240506142816.png" alt="" /></p>
<table>
<thead>
<tr>
<th>是否敏感</th>
<th>数据集查询</th>
<th>数据集<br>保存与另存为</th>
<th>自助分析<br>预览查询</th>
<th>网格看板<br>预览查询</th>
</tr>
</thead>
<tbody>
<tr>
<td>关闭</td>
<td>数据源权限</td>
<td>可见</td>
<td>可见</td>
<td>看板编辑权限</td>
</tr>
<tr>
<td>打开</td>
<td>数据源权限+数据集编辑权限</td>
<td></td>
<td>数据集编辑权限</td>
<td>看板编辑权限</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">定时任务</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/5-job/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/5-job/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p><img src="http://qiniu.ibidemo.cn/picgo/20231121150026.png" alt="" /></p>
<h1 id="定时任务"> 定时任务</h1>
<p>IBI定时作业现阶段定位于提供一款轻量级数据开发、ETL作业平台，适用于数据任务不是很大的需求场景，如果企业任务多、任务重，建议上分布式任务调度平台如：DolphinScheduler等</p>
<h2 id="任务类型"> 任务类型</h2>
<h3 id="邮件发送看板、大屏"> 邮件发送看板、大屏</h3>
<h4 id="服务端请求插件配置"> 服务端请求插件配置</h4>
<p>通过定时任务发送看板，需要服务端定时在后台做看板模拟请求，该功能需要安装配置到模拟请求插件<br>
模拟请求插件可以在配置文件中配置或在配置页面配置, 在配置页面配置的优先级高于配置文件中的配置项</p>
<div><pre><code><span>## 看板导出、邮件发送依赖插件</span>
<span>pkg_puppetter</span><span>=</span><span>/Users/xxx/cboard/pkg-puppeteer/build/pkg-puppeter-macos</span>
<span>pkg.puppetter.args</span><span>=</span><span>-DvpWidth=1920 -DvpHeight=1080 -DvpScale=1</span>
<span>## 导出插件模拟请求地址</span>
<span>frontend.baseurl</span><span>=</span><span>http://localhost:8026/cboard</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p>配置页面配置如下：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121183042.png" alt="" /></p>
<h4 id="邮件服务器配置"> 邮件服务器配置</h4>
<p>配置文件配置</p>
<div><pre><code><span>mail.smtp.host</span><span>=</span><span>127.0.0.1</span>
<span>mail.smtp.port</span><span>=</span><span>8825</span>
<span>mail.smtp.from</span><span>=</span><span>test@test.com</span>
<span>##mail.smtp.username=test@test.com</span>
<span>##mail.smtp.password=111111</span>
<span>##mail.smtp.ssl.checkserveridentity=false</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>配置页面配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121183421.png" alt="" /></p>
<h4 id="新建任务-填写任务表单"> 新建任务，填写任务表单</h4>
<ul>
<li>任务名称</li>
<li>任务有效期</li>
<li>周期(Quartz表达式为只读属性，不能直接编辑)</li>
<li>任务类型(邮件发送Send Mail)</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121183522.png" alt="" /></p>
<h4 id="配置邮件内容"> 配置邮件内容</h4>
<ul>
<li>收件人(必填)/抄送/密送/邮件主题</li>
<li>添加看板：可以添加多个看板</li>
<li>配置看板展示形式
<ul>
<li><strong>Excel</strong>：看板以Excel附件形式展示</li>
<li><strong>Image</strong>：看板以页面截图形式在邮件正文展示</li>
<li><strong>Excel+Image</strong>：两种形式共存</li>
<li>HtmlTable: 邮件正文为Html表格</li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121183732.png" alt="" /></p>
<div><p>邮件标题与内容</p>
<p>从v1.6.0开始邮件标题和内容支持内置变量解析，如时间变量使用
<img src="http://qiniu.ibidemo.cn/picgo/20220504105930.png" alt="" /></p>
</div>
<h4 id="立即运行"> 立即运行</h4>
<p>邮件添加完整可以立即运行，运行失败点击点击debug按钮查看出错信息</p>
<h3 id="微信发送看板、大屏"> 微信发送看板、大屏</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230811105955.png" alt="" /></p>
<ul>
<li>配置企业微信机器人webhook key，并测试连通性</li>
<li>选择需要发送的看板</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121184017.png" alt="" /></p>
<h3 id="加载缓存数据集"> 加载缓存数据集</h3>
<p>缓存数据集默认每天凌晨0点刷新缓存，对于更新频率高于天的缓存数据集，可以通过定时任务刷新数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121184144.png" alt="" /></p>
<h3 id="sql和存储过程"> SQL和存储过程</h3>
<ul>
<li>任务类型选择SQL或存储过程</li>
<li>SQL任务，一次可以执行多个sql，sql之间用分号分割</li>
<li>SQL任务支持变量</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121155730.png" alt="" /></p>
<h3 id="datax任务"> DataX任务</h3>
<div><p>DataX目录配置</p>
<p>在使用DataX任务之前，需要自行安装配置好DataX安装目录，管理员登陆系统，<code>管理</code>-&gt; <code>系统配置</code> -&gt; <code>定时任务</code> -&gt; <code>datax安装目录</code></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121155630.png" alt="" /></p>
<h4 id="图形化配置模式"> 图形化配置模式</h4>
<ul>
<li>选择源数据库</li>
<li>填写数据查询sql(支持变量), 并预览数据</li>
<li>如果读取的数据量比较大，可以配置数据分片字段，多个字段用英文逗号分割</li>
<li>选择目标数据库</li>
<li>选择目标表(通过点击数据按钮可以查看当前目标表数据，检查目标表数据是否存在)</li>
<li>字段选择(不配置为一一对应加载，建议按实际情况配置字段)</li>
<li>高级配置
<ul>
<li>扩展json：用于覆盖自动生成JSON</li>
<li>PreSQL: 加载前执行sql</li>
<li>PostSQL: 加载后执行sql</li>
<li>建表：当目标表不存在时，在页面进行自动建表操作，点击字段加载程序根据源数据查询结果生成字段列表，然后点击建表
<img src="http://qiniu.ibidemo.cn/picgo/20231121185256.png" alt="" /></li>
</ul>
</li>
</ul>
<h4 id="纯json配置模式"> 纯JSON配置模式</h4>
<p>JSON模式适用于对DataX配置熟悉的或者已有现成DataX配置的场景</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121185420.png" alt="" /></p>
<h3 id="shell任务"> shell任务</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121155945.png" alt="" /></p>
<h4 id="shell执行租户"> shell执行租户</h4>
<p>shell运行租户指shell任务执行时切换的操作系统用户，租户添加需要管理员在系统配置页面添加，添加的租户需要确保在操作系统重存在<br>
<img src="http://qiniu.ibidemo.cn/picgo/20231121185714.png" alt="" /></p>
<div><p>日志查看</p>
<p>shell任务支持准实时的在任务日志窗口查看</p>
</div>
<h3 id="启动任务节点"> 启动任务节点</h3>
<p>在启动节点中用户可以统一定义手续任务的运行参数</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121155853.png" alt="" /></p>
<h2 id="任务特性"> 任务特性</h2>
<h3 id="变量配置"> 变量配置</h3>
<ul>
<li>支持任务定义变量、</li>
<li>任务启动变量, 用于临时运行任务，在不改变配置默认参数配置的情况下修改运行参数，如补数任务场景</li>
<li>启动变量支持下游依赖传递</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121160458.png" alt="" /></p>
<h3 id="任务依赖"> 任务依赖</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121160036.png" alt="" /></p>
<h3 id="任务执行失败提醒"> 任务执行失败提醒</h3>
<p>邮件任务发送失败之后会发送失败通知给邮件管理员，此外，如果邮件任务所有者账号如果有配置邮箱地址，相应通知也会发送给该所有者</p>
<div><pre><code>## 该配置支持在application.properties和系统配置页面配置
mail.job.admin=aa@domain.com
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20220504105102.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">资源分享</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/6-shareResource/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/6-shareResource/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="资源分享"> 资源分享</h1>
<h2 id="资源分享界面"> 资源分享界面</h2>
<p>权限管理功能定位于给超级管理员与组管理员管理组用户与权限。<br>
对于没有用户管理页面的权限的普通用户，需要把自己新建的图表分享给其他组的时候，需要使用到资源分享功能</p>
<h2 id="独立资源分享"> 独立资源分享</h2>
<p>资源所有者无需进去<strong>用户管理</strong>界面即可分享资源给其他用户和角色</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/share-res.gif" alt="" /></p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">用户与权限管理</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/7-userAdmin/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/7-userAdmin/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="用户与权限管理"> 用户与权限管理</h1>
<h2 id="rbac-基于角色的权限管理"> RBAC 基于角色的权限管理</h2>
<p>RBAC (Role Based Access Control)基于角色的权限管理，由用户、角色、操作/资源，三部分组成，访问列表也称之为资源列表被赋予角色/用户组之上，赋予用户一个或多个组让用户获得所在组的资源访问权限;<br>
混合模式下允许资源被直接赋予用户，这样对于复杂多变的互联网公司的业务场景更加灵活。IBI自1.2起开始支持直接在用户至上的赋权模式。</p>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-rbac.png"  />
</div>
<h2 id="权限管理模块"> 权限管理模块</h2>
<p>与之相对应用户管理界面分也为三块，同时支持用户管理/角色管理/用户、角色、资源总览三种视图模式。</p>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-UserAdmin_Snap.png"  />
</div>
<table>
<thead>
<tr>
<th>栏目</th>
<th>介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td>用户栏</td>
<td>所有用户列表，目前仅支持超级管理员新建、编辑、删除用户</td>
</tr>
<tr>
<td>角色栏</td>
<td>所有角色列表，但是用户只能改变自己是角色管理员的角色项</td>
</tr>
<tr>
<td>资源栏</td>
<td>资源按标签页分为：菜单、数据源、资源(数据集、图表、看板以文件夹形式组织)、定时任务</td>
</tr>
</tbody>
</table>
<blockquote>
<p>授权文件夹资源具有继承效果，如果不单独对子节点设置权限，则子节点继承父节点权限</p>
</blockquote>
<h2 id="ibi权限管理特色"> IBI权限管理特色</h2>
<p>为了简化用户、角色、权限管理，我们把原来需要多个操作页面的工作集中设计到单页面完成，在您可能之前使用过其他的系统里会存在一个页面用户管理，一个角色管理一个界面，角色权限管理又有一个页面，想要查看一个赋予了多个角色的用户所具有的权限合集，一般得靠记忆力。</p>
<blockquote>
<p>在IBI系统中，查看、新增、编辑、权限管理统一在一个页面完成，避免了不同界面来回切换，从而做到所见即得的使用体验！</p>
</blockquote>
<p>下面的解释可以在您对操作产生疑惑时解疑，正常情况下相信可以脱离文档快速上手</p>
<h2 id="三种操作模式"> 三种操作模式</h2>
<h3 id="模式1-用户管理"> 模式1:用户管理</h3>
<p>用户管理模式下，可以看见两栏，左边栏为用户列表，右边栏为资源列表， 在该模式下用户可以</p>
<ul>
<li>可以管理与编辑用户信息</li>
<li>查看用户与资源之间的直接关系</li>
<li>更新用户权限</li>
</ul>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-rbac-user.png"  />
</div>
<br>
<ul>
<li>资源栏会监控用户选中状态，选中单个用户，右边栏会与选中用户联动，从而达到查询用户权限的功能；</li>
<li>选中多个用户，或者不选中用户资源栏取消所有选中</li>
<li>当用户具有<code>菜单-&gt;管理-&gt;用户管理-&gt;用户资源管理</code>权限的时候用户栏下方会显示授权按钮，进行用户授权:
<ul>
<li>点击<code>用户-权限</code>按钮进行授权，下拉授权按钮可以操作撤销用户权限</li>
<li>用户授权内容为增量更新，新增授权系统自动检测当前授权是否存在，如果存在则会删除原有授权，更新为当次操作授权</li>
<li>当您在资源栏多个标签页切换时，您可能已经忘记之前标签页被选中状态，为了避免多用户状态下授权变更错误的增加或者删除非当前标签页的资源，授权内容仅为当前激活资源标签页下面的资源</li>
<li>支持一次对多个用户进行授权</li>
</ul>
</li>
</ul>
<h3 id="模式2-角色管理"> 模式2:角色管理</h3>
<p>角色管理模式下，可以看见两栏，左边栏为角色列表，右边栏为资源列表，在该模式下可以：</p>
<ul>
<li>可以管理与编辑角色信息</li>
<li>查看角色与资源之间的直接关系，包含单个角色或多个角色权限合集</li>
<li>更新角色所具有的权限</li>
</ul>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-rbac-role.png"  />
</div>
<br>
<blockquote>
<p><strong>资源栏联动</strong>：与用户资源联动不同地方在于，选中多个角色时资源栏会显示多个角色具有的权限合集，该设计是因为我们经常会把某个用户赋予多个角色，显示多个资源合集可以便于查看具有了多个角色的情况下能够访问的所有资源</p>
</blockquote>
<ul>
<li>资源栏会监控角色选中状态，选中角色项变化时，资源栏会与选中角色联动，从而达到查询角色权限的功能；</li>
<li>授权:
<ul>
<li>点击<code>更新角色资源权限</code>按钮进行授权限，授权为全量授权</li>
<li>目前仅支持每次更新一个角色权限(后续更新会与用户管理一样，支持增量更新多个角色权限)</li>
</ul>
</li>
</ul>
<h3 id="模式3-权限总览"> 模式3:权限总览</h3>
<p>权限总览模式下，可以看见三栏，在该模式下对于熟练的用户甚至可以完成所有权限相关的操作：</p>
<ol>
<li>进行所有在用户管理模式下支持的用户管理</li>
<li>支持所有在角色管理模式下支持的角色管理</li>
<li>支持查看与管理用户与角色的关系</li>
<li>支持查看用户直接授权的资源 + 用户在角色组间接授权的资源合集</li>
</ol>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-UserAdmin_Snap.png"  />
</div>
<br>
<ol>
<li><strong>查看用户角色与权限</strong> 选中单个用户，该用户所属角色会被联动选中，方便便捷查看用户所属角色；同时该用户所有的权限列表(包含用户权限与该用户所属角色具有权限合集)也会实时联动</li>
<li><strong>查询与修改用户直接拥有权限</strong> 取消用户与角色的联动，选中单个用户的状态下，用户与资源直接的关系实时联动, 效果与<kbd>用户管理模式</kbd>一致</li>
<li><strong>修改(授权，回收)用户角色</strong> 取消所有用户的选中，此事角色与资源直接的实时联动，管理效果与<kbd>角色管理模式</kbd>一致</li>
<li><strong>查询角色权限</strong> 在用户没有被选中的状态下，联动选中的资源即为当前选中角色具有的权限， (用户被选中状态下会混入用户直接授权所关联的权限)</li>
</ol>
<blockquote>
<p>选中多个角色时，被联动选中的资源为当前所有角色权限合集</p>
</blockquote>
<h2 id="其他管理操作"> 其他管理操作</h2>
<div><p>用户列表</p>
<ul>
  <li>用户列表</li>
  <li>点击＋号添加`新建用户`: 新建用户的权限目前只对管理员开放, CAS, OAuth2.0系统接入之后, 通过认证登录能够自动创建新用户</li>
  <li>`编辑与删除`: 只有选中单个用户的时候右上角的编辑与删除菜单才会出现</li>
  <li>搜索用户：默认通过用户名（包含登陆名）搜索，点击搜索框前面的<kbd>按名称</kbd>按钮可以切换为按用户组搜索</li>
  <li>企业版多选checkbox选中用户或者角色(社区版暂时为按住Ctrl鼠标左键选中多个用户或者角色)</li>
  <li><kbd>用户<->权限</kbd>：从版本1.2开始直接对用户进行授权
  <li><kbd>用户<->角色</kbd>：授权或者回收权限</li>
  <li>选中一个用户之后，该用户对应的角色可以被联动选中，同时该用户所有的权限列表(包含用户权限与该用户所属角色具有权限合集)也会实时联动</li>
</ul>
</div>
<div><p>角色(Role)</p>
<ul>
  <li>点击＋号添加角色, 并为该角色分配一个管理员(角色管理员所在组需要有管理功能菜单权限)</li>
  <li>`编辑与删除`: 只有选中单个角色的是右上角的编辑与删除菜单才会出现</li>
  <li>角色管理员用于管理当前角色所属</li>
  <li>除了Admin之外，角色管理员只能管理的角色, 其他的角色为不能编辑状态</li>
  <li>每次只能更新一个角色的资源权限</li>
</ul>
</div>
<div><p>资源</p>
<ul>
  <li>`菜单`：一级菜单与二级菜单分开控制，没有级联</li>
  <li>`文件夹`: 子文件夹会继承父文件夹的权限, 文件夹的详细解释请参考[文件夹资源管理<sup style="color:red">(企业版)</sup>](zh-cn/manual/foldersystem.md)</li>
  <li>合理的按照文件夹组织资源之后`看板`/`数据集`/`图表`都可以不用另行控制权限; 特殊需求可以单独控制</li>
  <li>文件夹下的子节点在没有单独选中修改权限的情况下集成最近父节点权限，选中状态下以自身状态为主，如父节点为可读写删除权限，当前节点只读权限，则最终为只读。</li>
  <li>`资源的查改删`: 资源的权限包含`查,改,删`, 右键点击资源节点可以切换`改,删`状态</li>
  <li>角色管理员只能管理owner为自己的角色</li>
</ul>
</div>
<h2 id="数据权限精细化控制-企业版"> 数据权限精细化控制<sup style="color:red">(企业版)</sup></h2>
<p>企业版支持对角色设置精细的访问权限, 权限控制可达到<code>单元格</code>粒度. 下面是详细操作介绍:</p>
<p>假如我们有两个不同地区的销售团队, <code>美国组</code>与<code>加拿大组</code>, 管理员希望每个组只能看到各自的数据; 在角色栏选中<code>美国组</code>, 选中需要添加规则的数据集, 右键<code>Rule</code></p>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-roledataset-enter.png"  />
</div>
<p>弹出交互框, 左侧为数据集下所有的列, 拖拽列到<code>AND</code>节点, 然后点击编辑按钮, 会进入和图表设计时同样的字段过滤窗类似:</p>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-roledataset-setting.png"  />
</div>
<h3 id="维度成员动态查询"> 维度成员动态查询</h3>
<blockquote>
<p>维度成员过滤设置与自助分析时不同的地方是，此处的维度成员设置支持动态查询脚本，设想一下贵公司可能在引入BI系统之前在其他系统里面维护了一套用户与业务数据权限管理表，此事便可以很方便的在此通过动态查询导入BI系统外部关系；
从而让您公司多套系统共用一套权限数据</p>
</blockquote>
<p>动态查询支持传入的查询变量常用的有：</p>
<table>
<thead>
<tr>
<th>变量</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>loginName</td>
<td>登陆账号</td>
</tr>
<tr>
<td>userName</td>
<td>用户别名</td>
</tr>
</tbody>
</table>
<blockquote>
<p>当某个角色对应的维度成员过滤变成动态数据之后，角色本身遍可以当成可变规则来使用，如：原本要对每个国家的用户都建立一个角色然后选定该角色可见国家维度成员，食品集市-加拿大组、食品集市-美国组等等，变可以统一变成一个动态规则组<kbd>国家过滤规则组</kbd></p>
</blockquote>
<div><pre><code><span>select</span> country
  <span>from</span> your_rule_table
 <span>where</span> <span>user</span> <span>=</span> <span>'${loginName}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div style="text-align:center">
  <img src="../assets/user-admin/cn-roledataset-filter-dimmember.png"  />
</div>
<p>同时, 还您还可以</p>
<ul>
<li>添加多个字段的过滤</li>
<li>切换同级下多个节点之间的关系为<code>AND</code>或者<code>OR</code></li>
<li>添加多级节点
<div style="text-align:center">
<img src="../assets/user-admin/cn-roledataset-composite.png"  />
</div></li>
</ul>
<div><p>Tips</p>
<p>设置完成之后记得点击确认保存, 关闭窗口哦!</p>
</div>
<h3 id="字段可见控制"> 字段可见控制</h3>
<p>切换到排除标签页, 你还可以控制该角色对模型节点(包含: 层级, 维度, 指标, 表达式与过滤器)的可见性, 如下图, 配置了<code>美国组</code>在使用<code>Foodmart</code>模型的时候不可见<code>家庭小孩数</code></p>
<div style="text-align:center">
  <img src="../assets/user-admin/cn-roledataset-exclude.png"  />
</div>
<h3 id="用户结合数据集维度精细权限控制"> 用户结合数据集维度精细权限控制</h3>
<p>通过数据集权限模板可以控制数据集对不同用户的数据访问权限，查询模板是可以查询外部系统权限数据，这样便可以方便用户把BI系统与外部系统的权限进行集成</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104155811.png" alt="" /></p>
<p>操作步骤:</p>
<ul>
<li>编辑维度节点，高级配置栏开打权限规则开关
<img src="http://qiniu.ibidemo.cn/picgo/20230320085026.png" alt="" /></li>
<li>可以使用直接查询，选定权限数据所在的数据源连接-&gt;编写查询，查询中可以通过<code>${loginName}</code>变量控制区别用户权限范围，查询首列为当前维度限定的数据范围</li>
<li>也可以使用权限模板(查询模板)中预定义的模板
<ul>
<li>查询模板目前仅管理员账号可以统一配置，配置路径: <code>管理</code> → <code>权限模板</code></li>
</ul>
</li>
</ul>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">数据源</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/2-datasource/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/2-datasource/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<div><p>目前支持以下数据源连接：</p>
<ul>
<li>JDBC数据源</li></li>
<li>TextFile (文本文件，Excel, <code>1.4.2</code>之后支持上传)</li></li>
<li>Http接口</li>
<li>ElasticSearch 1.x, 2.x, 5.x (原生读取Index与Mapping，根据用户拖拽生成查询DSL)</li></li>
<li>Kylin 1-4 (原生读取kylin Model，根据用户拖拽生成查询SQL)</li></li>
<li>MongoDB</li>
</ul>
</div>
<h2 id="关系型数据库-jdbc数据源"> 关系型数据库(JDBC数据源)</h2>
<p>我们不纯粹为了宣传而罗列各种数据库产品，懂JDBC原理的都知道没有意义。<strong>基本上所有关系型数据库都能支持。</strong>
或许会存在一点点语法兼容问题，但是修改起来都比较简单。遇到后台日志抛语法错误异常请在github上面提issue，附上详细的异常日志和操作步骤，我们会协助解决，更加欢迎提PR合并解决方案到我们的版本。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210628163442.png" alt="" /></p>
<div><p>Tips</p>
<ul>
<li>填写完毕之后可以点击<strong>测试</strong>按钮，输入简单的sql查询测试数据源与CBoard之间的连通性</li>
<li><code>是否使用连接池</code> 设置数据源是否通过druid连接池的方式连接数据源,</li>
<li><code>数据源聚合</code> 默认配置，即引擎每次会解析用户的拖拽配置动态的生成查询语句下推数据源执行, 详细解释请参考<a href="./discuss/optimize.html">性能优化</a></li>
</ul>
</div>
<details><summary>连接池的作用</summary>
<p>对于一个简单的数据库应用，由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时，就新创建一个连接，用完后就关闭它，这样做也不会带来什么明显的性能上的开销。<br>
<strong>但是</strong>对于一个复杂的数据库应用，情况就完全不同了。频繁的建立、关闭连接，会极大的减低系统的性能，因为对于连接的使用成了系统性能的瓶颈。<br>
连接复用。通过建立一个数据库连接池以及一套连接使用管理策略，使得一个数据库连接可以得到高效、安全的复用，避免了数据库连接频繁建立、关闭的开销。</p>
</details>
<h3 id="连接属性配置"> 连接属性配置</h3>
<h4 id="_1-普通jdbc连接"> 1. 普通JDBC连接</h4>
<p>普通JDBC连接属性配置之后，作用效果对应源代码如下:</p>
<div><pre><code><span>String</span> driver <span>=</span> dataSource<span>.</span><span>get</span><span>(</span><span>DRIVER</span><span>)</span><span>;</span>
<span>String</span> jdbcUrl <span>=</span> dataSource<span>.</span><span>get</span><span>(</span><span>JDBC_URL</span><span>)</span><span>;</span>

<span>Class</span><span>.</span><span>forName</span><span>(</span>driver<span>)</span><span>;</span>
<span>// 获取用户自定义properties</span>
<span>Properties</span> props <span>=</span> <span>new</span> <span>Properties</span><span>(</span><span>getDsrProps</span><span>(</span><span>)</span><span>)</span><span>;</span>
<span>return</span> <span>DriverManager</span><span>.</span><span>getConnection</span><span>(</span>jdbcUrl<span>,</span> props<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><p>从1.5.1开始properties配置支持变量<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220124171350.png" alt="" /></p>
<h4 id="_2-druid连接池配置"> 2. Druid连接池配置</h4>
<blockquote>
<p>对于使用了连接池配置的jdbc数据源，可以通过访问
http://host:port/context/druid 查看连接池状态</p>
</blockquote>
<p><a href="https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8" target="_blank" rel="noopener noreferrer">点击参见Druid文档</a></p>
<p>常用配置</p>
<table>
<thead>
<tr>
<th>配置</th>
<th>缺省值</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td></td>
<td>配置这个属性的意义在于，如果存在多个数据源，监控的时候可以通过名字来区分开来。如果没有配置，将会生成一个名字，格式是：&quot;DataSource-&quot; + System.identityHashCode(this).</td>
</tr>
<tr>
<td>initialSize</td>
<td>0</td>
<td>初始化时建立物理连接的个数。初始化发生在显示调用init方法，或者第一次getConnection时</td>
</tr>
<tr>
<td>maxActive</td>
<td>10</td>
<td>最大连接池数量</td>
</tr>
<tr>
<td>maxIdle</td>
<td>8</td>
<td>已经不再使用，配置了也没效果</td>
</tr>
<tr>
<td>minIdle</td>
<td></td>
<td>最小连接池数量</td>
</tr>
<tr>
<td>maxWait</td>
<td></td>
<td>获取连接时最大等待时间，单位毫秒。</td>
</tr>
</tbody>
</table>
<h4 id="_3-druid连接池名称"> 3. Druid连接池名称</h4>
<p>监控连接池状态，老版本连接池的名词为随机字符串，需要数据源管理员在properties配置栏增加name属性才会显示为识别性高的连接池名称，1.4.2版本在没有配置name属性时将会默认使用数据源名称为作为连接池名称，便于维护管理</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210511175128.png" alt="" /></p>
<div><p>关于Hive</p>
<p>理论上Hive也可以通过JDBC的方式连接，考虑到查询延迟太高不适合做及时交互查询引擎，不推荐引入。</p>
</div>
<h3 id="驱动引入方式"> 驱动引入方式</h3>
<p>添加JDBC数据源之前确认应用中已经包含了对应的JDBC驱动包，其他驱动可自行添加将驱动拷贝到<code>ext-lib</code>或联系我们预置, 当前版本项目中预置的驱动有：</p>
<table>
<thead>
<tr>
<th>数据库</th>
<th>版本</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>MySQL</td>
<td>mysql / mysql-connector-java / 8.0.22</td>
<td></td>
</tr>
<tr>
<td>SQLServer</td>
<td>com.microsoft.sqlserver / mssql-jdbc / 8.2.2.jre8</td>
<td></td>
</tr>
<tr>
<td>Oracle</td>
<td>com.github.noraui / ojdbc8 / 12.2.0.1</td>
<td></td>
</tr>
<tr>
<td>Postgresql</td>
<td>postgresql / 42.6.0</td>
<td></td>
</tr>
<tr>
<td>Clickhouse</td>
<td>ru.yandex.clickhouse / clickhouse-jdbc / 0.2</td>
<td></td>
</tr>
<tr>
<td>Presto</td>
<td>com.facebook.presto / presto-jdbc / 0.231.1</td>
<td></td>
</tr>
<tr>
<td>Phoenix</td>
<td>phoenix-queryserver-client-5.0.0-HBase-2.0</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="textfile-文本数据源"> TextFile 文本数据源</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210701180105.png" alt="" /><br>
文本数据只能读取CBoard应用服务器本地文件，<strong>1.4.2之前的版本</strong>使用者需要自己架设ftp服务器单独维护文本文件的上传与管理。</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>文件所在目录</td>
<td>该目录指BI服务器上的目录，需提前创建好, 后续数据集中使用该数据源，上传文件时会传到此处配置的目录</td>
</tr>
</tbody>
</table>
<div><p>目录权限</p>
<p>建议配置的基础目录有新建文件与删除文件操作权限，
如果没有新建与操作权限，仅有只读权限，也是能够使用的，只是文件上传会失败</p>
</div>
<h2 id="http数据源v1-7-0"> HTTP数据源<sup>v1.7.0</sup></h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220816164953.png" alt="" /></p>
<h3 id="数据源配置"> 数据源配置</h3>
<ul>
<li>服务地址为地址前缀, 不需要以斜杠结尾, 会与查询请求地址组合为完整请求地址</li>
<li>用户名/密码目前仅支持用于Basic Authentication</li>
<li>可以不设置, 具体类型会请求体自动适配</li>
</ul>
<h2 id="kylin"> Kylin</h2>
<h3 id="jdbc方式连接"> JDBC方式连接</h3>
<p>添加了kylin的jdbc依赖，可以直接连接，连接方式如下</p>
<div><pre><code>Driver ：org.apache.kylin.jdbc.Driver
JdbcUrl：jdbc:kylin://&lt;host&gt;:&lt;port&gt;/&lt;project&gt;
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><p>用JDBC方式连接Kylin可以选数据源聚合也就是聚合下推Kylin，或者使用CBoard提供的内置聚合器，通过查询预聚合返回小的结果集，结果集缓存在CBoard服务器上做二次聚合。 聚合下推原理参照<a href="./../discuss/optimize.html">性能优化章节</a>。</p>
<div><p>注意</p>
<p><strong>非数据源聚合的连接，切记注意数据集或者Query查询结果集大小。</strong></p>
</div>
<div><p>关于Kylin1.6对子查询支持结果异常问题：</p>
<p>CBoard中采用的基于数据集定义的子查询嵌套之后group by的形式聚合下推数据源。
我们在实际使用中遇到过查询结果不准的bug，遇此情况可以通过图表设计模块下预览查询功能查看调试实际执行的Query。
<p>或者改用下面Kylin原生数据源</p></p>
</div>
<h3 id="kylin原生连接"> Kylin原生连接</h3>
<p>Kylin原生连接通过restful接口读取解析Kylin数据模型</p>
<blockquote>
<p><strong>原生连接模式下聚合操作只会在数据源进行。</strong></p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210710110111.png" alt="" /></p>
<h2 id="elasticsearch"> Elasticsearch</h2>
<p>IBI Elasticsearch数据源适配采用restful url + DSL查询的方式适配，不需要转sql查询，目前测试最高兼容版本8.x,
更高版本只要没有重大变更基本都可以兼容，如有不兼容场景请联系我们更新适配。</p>
<h3 id="es-数据源配置"> ES 数据源配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230428161609.png" alt="" /></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>服务器url</td>
<td>必填, 如: http://host:port</td>
</tr>
<tr>
<td>用户名</td>
<td>选填, ES服务开启了standard HTTP basic authentication 之后需要填写</td>
</tr>
<tr>
<td>密码</td>
<td>选填</td>
</tr>
</tbody>
</table>
<h2 id="变量支持v1-8"> 变量支持<sup>v1.8</sup></h2>
<p>在配置输入项中使用变量, 支持读取在<code>系统配置</code>中配置的属性和<code>application.properties</code>中<code>user.</code>前缀的配置项, 通过连接配置可以从数据源头切换不同环境的数据展示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026134822.png" alt="" /></p>
<h3 id="密码加密v1-10-0"> 密码加密<sup>v1.10.0</sup></h3>
<p>从1.10开始支持数据源中配置的密码自动加密，加密之后的配置将不能与旧版本兼容，旧版本的配置在新版本中点击保存将进行加密操作</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">操作手册</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="操作手册"> 操作手册</h1>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Restful接口</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/9-restful/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/9-restful/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="restful接口"> Restful接口</h1>
<h2 id="重要提示-必读"> 重要提示/必读</h2>
<div><p>重要提示</p>
<ul>
<li>从v1.6.0开始所有请求取消<code>.do</code>后缀，1.6之前的版本添加<code>.do</code>后缀</li>
<li>post 请求时使用<code>form-data</code>或<code>x-www-form-urlencoded</code></li>
<li>前端请求示例</li>
</ul>
<div><pre><code>axios<span>.</span><span>create</span><span>(</span><span>{</span>
    <span>baseURL</span><span>:</span> baseServerUrl<span>,</span> <span>// http://ip:port/cboard</span>
    <span>headers</span><span>:</span> <span>{</span>
        <span>'Content-Type'</span><span>:</span> <span>'application/x-www-form-urlencoded'</span><span>,</span>
    <span>}</span>
<span>}</span><span>)</span><span>.</span><span>post</span><span>(</span><span>'auth'</span><span>,</span> <span>{</span><span>username</span><span>:</span> <span>''</span><span>,</span> <span>password</span><span>:</span> <span>''</span><span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ul>
<li>服务端请求示例</li>
</ul>
<div><pre><code><span>import</span> <span><span>cn<span>.</span>hutool<span>.</span>http<span>.</span></span><span>HttpUtil</span></span><span>;</span>

<span>Map</span><span><span>&lt;</span><span>String</span><span>,</span> <span>Object</span><span>></span></span> body <span>=</span> <span>new</span> <span>HashMap</span><span><span>&lt;</span><span>></span></span><span>(</span><span>)</span><span>;</span>
body<span>.</span><span>put</span><span>(</span><span>"username"</span><span>,</span> arguments<span>[</span><span>0</span><span>]</span><span>)</span><span>;</span>
body<span>.</span><span>put</span><span>(</span><span>"password"</span><span>,</span> arguments<span>[</span><span>1</span><span>]</span><span>)</span><span>;</span>
<span>String</span> response <span>=</span> <span>HttpUtil</span><span>.</span><span>post</span><span>(</span>baseServerUrl <span>+</span> <span>"auth"</span><span>,</span> body<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div></div>
<h2 id="认证api"> 认证API</h2>
<p>登陆认证, 后续Restful API所有有安全认证的接口需要使用认证成功返回的token</p>
<blockquote>
<p>post auth</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>username</td>
<td>String</td>
<td>用户名</td>
<td>true</td>
<td></td>
</tr>
<tr>
<td>password</td>
<td>String</td>
<td>用户名</td>
<td>true</td>
<td></td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505151430349.png" alt="" /></p>
<p><strong>成功</strong></p>
<div><pre><code>{
    &quot;token&quot;: &quot;VhzJp0k6&quot;,
    &quot;user&quot;: {
        &quot;password&quot;: &quot;ee11cbb19052e40b07aac0ca060c23ee&quot;,
        &quot;username&quot;: &quot;user&quot;,
        &quot;authorities&quot;: [],
        &quot;accountNonExpired&quot;: true,
        &quot;accountNonLocked&quot;: true,
        &quot;credentialsNonExpired&quot;: true,
        &quot;enabled&quot;: true,
        &quot;userId&quot;: &quot;244e8c1c-ec29-44de-ab37-f32f78825514&quot;,
        &quot;company&quot;: &quot;公司&quot;,
        &quot;department&quot;: &quot;研发&quot;,
        &quot;name&quot;: &quot;别名&quot;,
        &quot;title&quot;: &quot;前端&quot;
    },
    &quot;msg&quot;: null,
    &quot;valid&quot;: true
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br></div></div><p><strong>失败</strong></p>
<div><pre><code>{
    &quot;token&quot;: null,
    &quot;user&quot;: null,
    &quot;msg&quot;: null,
    &quot;valid&quot;: false
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><p>重要提示</p>
<p>从<code>1.4.3</code>开始，采用jwt认证，token较长, 支持放到header中, 当然url中的token也会兼容</p>
<div><pre><code>axios.create({
    headers: {
        token: 244e8c1c-ec29-44de-ab37-f32f78825514 
    }
})
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div></div>
<h2 id="资源列表"> 资源列表</h2>
<h3 id="获取文件夹列表"> 获取文件夹列表</h3>
<ol>
<li>获取当前所有文件夹，以及当前用户对文件夹访问属性</li>
</ol>
<blockquote>
<p>get folder/getFolderList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>false</td>
<td>不传则获取用户当前登录用户资源列表，传则获取指定资源列表</td>
<td>1.2.2</td>
</tr>
</tbody>
</table>
<ol start="2">
<li>获取当前所有文件夹列表</li>
</ol>
<blockquote>
<p>get folder/getAllFolderList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>false</td>
<td>不传则获取用户当前登录用户资源列表，传则获取指定资源列表</td>
<td>1.2.2</td>
</tr>
</tbody>
</table>
<div><pre><code>[
    {
        &quot;id&quot;: 10000,
        &quot;name&quot;: &quot;Root&quot;,
        &quot;parentId&quot;: -1,
        &quot;isPrivate&quot;: 0,
        &quot;userId&quot;: &quot;1&quot;,
        &quot;userName&quot;: &quot;超级管理员&quot;,
        &quot;loginName&quot;: &quot;peter&quot;,
        &quot;createTime&quot;: &quot;2018-07-04 10:22:59.0&quot;,
        &quot;updateTime&quot;: &quot;2018-07-04 10:22:59.0&quot;
    },
    ...
]
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="获取看板列表api"> 获取看板列表API</h3>
<ol>
<li>获取当前用户有权限的看板列表</li>
</ol>
<blockquote>
<p><code>get board/getBoardList</code></p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>false</td>
<td>不传则获取用户当前登录用户资源列表，传则获取指定资源列表</td>
<td>1.2.2</td>
</tr>
</tbody>
</table>
<ol start="2">
<li>获取所有看板列表</li>
</ol>
<blockquote>
<p><code>get board/getAllBoardList</code></p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>无</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>{
    &quot;resList&quot;: [
        {
            &quot;folderId&quot;: 10036,
            &quot;folderPath&quot;: &quot;Root\\foodmart\\看板&quot;,
            &quot;id&quot;: 91,
            &quot;userId&quot;: &quot;1&quot;,
            &quot;folderName&quot;: &quot;看板&quot;,
            &quot;folderIsPrivate&quot;: 0,
            &quot;name&quot;: &quot;Foodmart综合分析看板&quot;,
            &quot;userName&quot;: &quot;超级管理员&quot;,
            &quot;loginName&quot;: &quot;peter&quot;,
            &quot;createTime&quot;: &quot;2019-09-27 11:48:36.0&quot;,
            &quot;updateTime&quot;: &quot;2020-02-19 11:59:46.0&quot;,
            &quot;layoutType&quot;: &quot;freelayout&quot;,
            &quot;layout&quot;: null,
            &quot;edit&quot;: false,
            &quot;delete&quot;: false
        },
        ....
    ],
    &quot;folderList&quot;: [
        {
            &quot;id&quot;: 10000,
            &quot;name&quot;: &quot;Root&quot;,
            &quot;parentId&quot;: -1,
            &quot;isPrivate&quot;: 0,
            &quot;userId&quot;: &quot;1&quot;,
            &quot;userName&quot;: &quot;超级管理员&quot;,
            &quot;loginName&quot;: &quot;peter&quot;,
            &quot;createTime&quot;: &quot;2018-07-04 10:22:59.0&quot;,
            &quot;updateTime&quot;: &quot;2018-07-04 10:22:59.0&quot;,
            &quot;edit&quot;: false,
            &quot;delete&quot;: false
        },
        ....
    ]
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br></div></div><h3 id="获取数据源列表api"> 获取数据源列表API</h3>
<ol>
<li>获取当前用户有权限访问的数据源列表</li>
</ol>
<blockquote>
<p>get datasource/getDatasourceList</p>
</blockquote>
<ol start="2">
<li>获取所有数据源列表</li>
</ol>
<blockquote>
<p>get datasource/getAllDatasourceList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>无</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>[
    {
        &quot;id&quot;: 1,
        &quot;userId&quot;: &quot;1&quot;,
        &quot;name&quot;: &quot;foodmart&quot;,
        &quot;type&quot;: &quot;jdbc&quot;,
        &quot;config&quot;: null,
        &quot;edit&quot;: false,
        &quot;delete&quot;: false,
        &quot;userName&quot;: &quot;超级管理员&quot;,
        &quot;loginName&quot;: &quot;peter&quot;,
        &quot;createTime&quot;: &quot;2018-07-04 10:27:06.0&quot;,
        &quot;updateTime&quot;: &quot;2020-03-03 22:23:29.0&quot;
    },
    ....
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h3 id="获取数据集列表api"> 获取数据集列表API</h3>
<ol>
<li>获取当前用户有权限的数据集列表</li>
</ol>
<blockquote>
<p>get/post dataset/getDatasetList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>false</td>
<td>不传则获取用户当前登录用户资源列表，传则获取指定资源列表</td>
<td>1.2.2</td>
</tr>
</tbody>
</table>
<ol start="2">
<li>获取所有数据集列表</li>
</ol>
<blockquote>
<p>get/post dataset/getAllDatasetList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>无</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>{
    &quot;resList&quot;: [
        {
            &quot;folderId&quot;: 10030,
            &quot;folderPath&quot;: &quot;Root\\ES&quot;,
            &quot;id&quot;: 41,
            &quot;userId&quot;: &quot;1&quot;,
            &quot;name&quot;: &quot;es-bank&quot;,
            &quot;categoryName&quot;: &quot;默认分类&quot;,
            &quot;userName&quot;: &quot;超级管理员&quot;,
            &quot;loginName&quot;: &quot;peter&quot;,
            &quot;createTime&quot;: &quot;2018-09-21 16:47:07.0&quot;,
            &quot;updateTime&quot;: &quot;2020-02-20 18:13:48.0&quot;,
            &quot;data&quot;: null,
            &quot;edit&quot;: false,
            &quot;delete&quot;: false
        },
        ....
    ],
    &quot;folderList&quot;: [
        {
            &quot;id&quot;: 10000,
            &quot;name&quot;: &quot;Root&quot;,
            &quot;parentId&quot;: -1,
            &quot;isPrivate&quot;: 0,
            &quot;userId&quot;: &quot;1&quot;,
            &quot;userName&quot;: &quot;超级管理员&quot;,
            &quot;loginName&quot;: &quot;peter&quot;,
            &quot;createTime&quot;: &quot;2018-07-04 10:22:59.0&quot;,
            &quot;updateTime&quot;: &quot;2018-07-04 10:22:59.0&quot;,
            &quot;edit&quot;: false,
            &quot;delete&quot;: false
        },
        ....
    ]
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br></div></div><h3 id="获取图表列表api"> 获取图表列表API</h3>
<ol>
<li>获取用户有权限的图表列表</li>
</ol>
<blockquote>
<p>get widget/getWidgetList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>false</td>
<td>不传则获取用户当前登录用户资源列表，传则获取指定资源列表</td>
<td>1.2.2</td>
</tr>
</tbody>
</table>
<ol start="2">
<li>获取所有独立保存的所有图表列表</li>
</ol>
<blockquote>
<p>get widget/getAllWidgetList</p>
</blockquote>
<div><pre><code><span>{</span>
  <span>"resList"</span><span>:</span> <span>[</span>
    <span>{</span>
      <span>"folderId"</span><span>:</span> <span>10004</span><span>,</span>
      <span>"folderPath"</span><span>:</span> <span>"Root\\foodmart\\图表\\交叉表"</span><span>,</span>
      <span>"id"</span><span>:</span> <span>9</span><span>,</span>
      <span>"userId"</span><span>:</span> <span>"1"</span><span>,</span>
      <span>"name"</span><span>:</span> <span>"2.3-行占比-开销占比"</span><span>,</span>
      <span>"categoryName"</span><span>:</span> <span>null</span><span>,</span>
      <span>"userName"</span><span>:</span> <span>"超级管理员"</span><span>,</span>
      <span>"loginName"</span><span>:</span> <span>"peter"</span><span>,</span>
      <span>"createTime"</span><span>:</span> <span>"2018-07-04 11:42:01.0"</span><span>,</span>
      <span>"updateTime"</span><span>:</span> <span>"2020-03-07 14:51:19.0"</span><span>,</span>
      <span>"dataset"</span><span>:</span> <span>null</span><span>,</span>
      <span>"data"</span><span>:</span> <span>null</span><span>,</span>
      <span>"edit"</span><span>:</span> <span>false</span><span>,</span>
      <span>"delete"</span><span>:</span> <span>false</span>
    <span>}</span><span>,</span>
    ...
  <span>]</span><span>,</span>
  <span>"folderList"</span><span>:</span> <span>[</span>
    <span>{</span>
      <span>"id"</span><span>:</span> <span>10042</span><span>,</span>
      <span>"name"</span><span>:</span> <span>"ddd"</span><span>,</span>
      <span>"parentId"</span><span>:</span> <span>10032</span><span>,</span>
      <span>"isPrivate"</span><span>:</span> <span>0</span><span>,</span>
      <span>"userId"</span><span>:</span> <span>"1"</span><span>,</span>
      <span>"userName"</span><span>:</span> <span>"超级管理员"</span><span>,</span>
      <span>"loginName"</span><span>:</span> <span>"peter"</span><span>,</span>
      <span>"createTime"</span><span>:</span> <span>"2018-12-06 12:08:19.0"</span><span>,</span>
      <span>"updateTime"</span><span>:</span> <span>"2018-12-06 12:08:41.0"</span><span>,</span>
      <span>"edit"</span><span>:</span> <span>false</span><span>,</span>
      <span>"delete"</span><span>:</span> <span>false</span>
    <span>}</span><span>,</span>
    ...
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br></div></div><h2 id="看板"> 看板</h2>
<h3 id="大屏导出图片"> 大屏导出图片</h3>
<blockquote>
<p>get export/exportCockpit</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>boardId</td>
<td>long</td>
<td>true</td>
<td>大屏ID</td>
<td>1.6.0</td>
</tr>
<tr>
<td>timeout</td>
<td>int</td>
<td>false</td>
<td>等待截图时长, 单位s, 默认15s</td>
<td>1.6.0</td>
</tr>
<tr>
<td>scale</td>
<td>long</td>
<td>true</td>
<td>图片解析率, 默认1</td>
<td>1.6.0</td>
</tr>
<tr>
<td>type</td>
<td>long</td>
<td>true</td>
<td>png/jpeg/pdf, 导出类型默认png</td>
<td>1.6.0</td>
</tr>
</tbody>
</table>
<div><pre><code><span>@RequestMapping</span><span>(</span>value <span>=</span> <span>"/exportCockpit"</span><span>)</span>
<span>public</span> <span>ResponseEntity</span><span>&lt;</span><span>byte</span><span>[</span><span>]</span><span>></span> <span>exportCockpit</span><span>(</span>
    <span>@RequestParam</span> <span>Long</span> boardId<span>,</span>
    <span>@RequestParam</span><span>(</span>defaultValue <span>=</span> <span>"15"</span><span>)</span> <span>Integer</span> timeout<span>,</span> <span>// 等待截图时长，单位s</span>
    <span>@RequestParam</span><span>(</span>defaultValue <span>=</span> <span>"1"</span><span>)</span> <span>float</span> scale<span>,</span> <span>// 图片解析率</span>
    <span>@RequestParam</span><span>(</span>defaultValue <span>=</span> <span>"png"</span><span>)</span> <span>String</span> type <span>// png/jpeg/pdf</span>
<span>)</span> 
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h2 id="授权"> 授权</h2>
<h3 id="模块"> 模块</h3>
<table>
<thead>
<tr>
<th>code</th>
<th>模块</th>
<th>desc</th>
</tr>
</thead>
<tbody>
<tr>
<td>menu</td>
<td>功能菜单模块</td>
<td></td>
</tr>
<tr>
<td>datasource</td>
<td>数据源模块</td>
<td></td>
</tr>
<tr>
<td>dataset</td>
<td>数据集模块</td>
<td></td>
</tr>
<tr>
<td>widget</td>
<td>图表模块</td>
<td></td>
</tr>
<tr>
<td>board</td>
<td>看板模块</td>
<td></td>
</tr>
<tr>
<td>job</td>
<td>定时任务模块</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="功能菜单模块介绍"> 功能菜单模块介绍</h4>
<p>功能菜单部分目前为硬编码</p>
<div><pre><code> {resId: 1,  pid:-1, name: &quot;配置&quot;,          }
 {resId: 2,  pid:1,  name: &quot;数据源管理&quot;,    }
 {resId: 3,  pid:1,  name: &quot;数据集管理&quot;,    }
 {resId: 4,  pid:-1,  name: &quot;自助分析&quot;,      }
 {resId: 41, pid:-1,  name: &quot;复杂报表&quot;,      }
 {resId: 5,  pid:-1, name: &quot;看板&quot;,          }
 {resId: 51, pid:5,  name: &quot;看板管理&quot;,      }
 {resId: 52, pid:5,  name: &quot;网格布局&quot;,      }
 {resId: 53, pid:5,  name: &quot;驾驶舱布局&quot;,    }
 {resId: 7,  pid:-1, name: &quot;管理&quot;,          }
 {resId: 71, pid:7,  name: &quot;权限模板&quot;,      }
 {resId: 8,  pid:7,  name: &quot;用户管理&quot;,      }
 {resId: 81, pid:8,  name: &quot;用户资源管理&quot;,  }
 {resId: 9,  pid:1,  name: &quot;定时任务&quot;,      }
 {resId: 91, pid:1,  name: &quot;邮件发送&quot;,      }
 {resId: 10, pid:-1, name: &quot;资源分享&quot;,      }
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h4 id="权限-资源对象结构res"> 权限/资源对象结构Res</h4>
<table>
<thead>
<tr>
<th>属性</th>
<th>类型</th>
<th>Required</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>resType</td>
<td>String</td>
<td>true</td>
<td>资源模块, 对应值： <code>menu、datasource、dataset、widget、board、job</code></td>
</tr>
<tr>
<td>resId</td>
<td>long</td>
<td>true</td>
<td>对应模块资源ID</td>
</tr>
<tr>
<td>edit</td>
<td>boolean</td>
<td>false</td>
<td>是否具有编辑权限</td>
</tr>
<tr>
<td>delete</td>
<td>boolean</td>
<td>false</td>
<td>是否具有删除权限</td>
</tr>
</tbody>
</table>
<h3 id="用户权限"> 用户权限</h3>
<ol>
<li>全量更新用户权限</li>
</ol>
<blockquote>
<p>post admin/updateUserRes</p>
</blockquote>
<ol start="2">
<li>增量授权用户权限</li>
</ol>
<blockquote>
<p>post admin/grantUserRes</p>
</blockquote>
<ol start="3">
<li>增量删除用户权限</li>
</ol>
<blockquote>
<p>post admin/revokeUserRes</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userIdArr</td>
<td>JSON String</td>
<td>用户ID数组，支持一次更新多个用户权限</td>
<td>true</td>
<td>1.2.0</td>
</tr>
<tr>
<td>resIdArr</td>
<td>JSON String</td>
<td>Res[], 权限/资源列表数组</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>_this<span>.</span><span>updateUserRes</span> <span>=</span> <span>function</span> <span>(</span><span>userIds<span>,</span> resIds</span><span>)</span> <span>{</span>
    <span>return</span> _axios<span>.</span><span>post</span><span>(</span><span>'admin/updateUserRes'</span><span>,</span> <span>{</span>
        <span>userIdArr</span><span>:</span> <span>JSON</span><span>.</span><span>stringify</span><span>(</span>userIds<span>)</span><span>,</span>
        <span>resIdArr</span><span>:</span> <span>JSON</span><span>.</span><span>stringify</span><span>(</span>resIds<span>)</span><span>,</span>
    <span>}</span><span>)</span><span>;</span>
<span>}</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ul>
<li>userIdArr</li>
</ul>
<div><pre><code>[&quot;uid1&quot;, &quot;uid2&quot;]
</code></pre>
<div><span>1</span><br></div></div><ul>
<li>resIds</li>
</ul>
<div><pre><code><span>[</span>
  <span>{</span>
    <span>"resId"</span><span>:</span> <span>1</span><span>,</span>
    <span>"resType"</span><span>:</span> <span>"menu"</span><span>,</span>
    <span>"edit"</span><span>:</span> <span>false</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"resId"</span><span>:</span> <span>1</span><span>,</span>
    <span>"resType"</span><span>:</span> <span>"datasource"</span><span>,</span>
    <span>"edit"</span><span>:</span> <span>false</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"resId"</span><span>:</span> <span>7</span><span>,</span>
    <span>"resType"</span><span>:</span> <span>"widget"</span><span>,</span>
    <span>"edit"</span><span>:</span> <span>false</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"resId"</span><span>:</span> <span>1</span><span>,</span>
    <span>"resType"</span><span>:</span> <span>"dataset"</span><span>,</span>
    <span>"edit"</span><span>:</span> <span>false</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"resId"</span><span>:</span> <span>6745078</span><span>,</span>
    <span>"resType"</span><span>:</span> <span>"folder"</span><span>,</span>
    <span>"edit"</span><span>:</span> <span>false</span>
  <span>}</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br></div></div><ol start="0">
<li>ServiceStatus</li>
</ol>
<table>
<thead>
<tr>
<th>prop</th>
<th>value</th>
<th>desc</th>
</tr>
</thead>
<tbody>
<tr>
<td>status</td>
<td>1、2</td>
<td>1成功，2失败</td>
</tr>
<tr>
<td>msg</td>
<td>success, error msg</td>
<td>相关消息</td>
</tr>
<tr>
<td>obj</td>
<td>Object</td>
<td>为原始数字，测为操作影响记录数</td>
</tr>
</tbody>
</table>
<ol>
<li>更新成功</li>
</ol>
<div><pre><code>{
    &quot;status&quot;: &quot;1&quot;,
    &quot;msg&quot;: &quot;success&quot;, 
    &quot;obj&quot;: 4,
    &quot;id&quot;: null
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ol start="2">
<li>更新失败</li>
</ol>
<div><pre><code>{
    &quot;status&quot;: &quot;2&quot;,
    &quot;msg&quot;: &quot;No Module Permission!&quot;,
    &quot;obj&quot;: null,
    &quot;id&quot;: null
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="查询用户授权"> 查询用户授权</h3>
<ol>
<li>查询所有用户授权列表</li>
</ol>
<blockquote>
<p>get admin/getAllUserResList</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>无</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<ol start="2">
<li>查询指定用户授权列表</li>
</ol>
<blockquote>
<p>get/post admin/getUserResListByUserId</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>Sring</td>
<td></td>
<td>true</td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>[
    {
        &quot;userResId&quot;: &quot;034f6429-cff6-4274-b5ff-2f9df9f8e1c4&quot;,
        &quot;userId&quot;: &quot;244e8c1c-ec29-44de-ab37-f32f78825514&quot;,
        &quot;resId&quot;: 10042,
        &quot;resType&quot;: &quot;folder&quot;,
        &quot;edit&quot;: false,
        &quot;delete&quot;: false,
        &quot;createTime&quot;: null
    },
    {
        &quot;userResId&quot;: &quot;123ee3dc-44f8-4c58-8f68-c56c78a239a4&quot;,
        &quot;userId&quot;: &quot;244e8c1c-ec29-44de-ab37-f32f78825514&quot;,
        &quot;resId&quot;: 47,
        &quot;resType&quot;: &quot;widget&quot;,
        &quot;edit&quot;: false,
        &quot;delete&quot;: false,
        &quot;createTime&quot;: null
    },
    ...
]
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br></div></div><h3 id="授权用户角色"> 授权用户角色</h3>
<ol>
<li>增量授权用户角色</li>
</ol>
<blockquote>
<p>post admin/grantRoles</p>
</blockquote>
<ol start="2">
<li>增量删除用户所属角色</li>
</ol>
<blockquote>
<p>post admin/deleteUserRole</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userIdArr</td>
<td>JSON String</td>
<td>JSON.stringify(Arrary of User Id)[&quot;BoNSmgq5&quot;]</td>
<td>true</td>
<td></td>
</tr>
<tr>
<td>roleIdArr</td>
<td>JSON String</td>
<td>JSON.stringify(Arrary of Role Id)</td>
<td>true</td>
<td></td>
</tr>
</tbody>
</table>
<ul>
<li>Request</li>
</ul>
<div><pre><code>userIdArr: &#39;[&quot;BoNSmgq5&quot;]&#39;
roleIdArr: &#39;[&quot;kZKs0eAB&quot;,&quot;mW7MgbRi&quot;]&#39;
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><ul>
<li>Response</li>
</ul>
<p>ServiceStatus</p>
<div><pre><code>{
    &quot;status&quot;: &quot;1&quot;,
    &quot;msg&quot;: &quot;success&quot;, 
    &quot;obj&quot;: 4,
    &quot;id&quot;: null
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="角色查询"> 角色查询</h3>
<ol>
<li>查询当前用户为管理员的角色列表</li>
</ol>
<blockquote>
<p>get admin/getRoleList</p>
</blockquote>
<ol>
<li>查询所有角色列表</li>
</ol>
<blockquote>
<p>get admin/getRoleListAll</p>
</blockquote>
<ul>
<li>Request</li>
</ul>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>无</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<ul>
<li>Response</li>
</ul>
<div><pre><code><span>[</span>
    <span>{</span>
        <span>"roleId"</span><span>:</span> <span>"9yp5FYGV"</span><span>,</span>
        <span>"roleName"</span><span>:</span> <span>"Foodmart国家访问规则"</span><span>,</span>
        <span>"userId"</span><span>:</span> <span>"admin"</span>
    <span>}</span><span>,</span>
    <span>{</span>
        <span>"roleId"</span><span>:</span> <span>"afff8e98-c223-4b71-8a44-946b9eeb9585"</span><span>,</span>
        <span>"roleName"</span><span>:</span> <span>"体验账号"</span><span>,</span>
        <span>"userId"</span><span>:</span> <span>"1"</span>
    <span>}</span><span>,</span>
    ...
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h3 id="查询用户所属角色"> 查询用户所属角色</h3>
<ol>
<li>查询用户所属角色</li>
</ol>
<blockquote>
<p>get admin/getUserRoleList</p>
</blockquote>
<ul>
<li>Request</li>
</ul>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>用户ID，不传则查所有用户角色</td>
<td>false</td>
<td></td>
</tr>
</tbody>
</table>
<ul>
<li>Response</li>
</ul>
<div><pre><code>[
    {
        &quot;userRoleId&quot;: 5297009885287913052,
        &quot;userId&quot;: &quot;cf592eb2-91fd-4319-925e-141d5a1b58b3&quot;,
        &quot;roleId&quot;: &quot;afff8e98-c223-4b71-8a44-946b9eeb9585&quot;
    },
    {
        &quot;userRoleId&quot;: 2139519606675883725,
        &quot;userId&quot;: &quot;cf592eb2-91fd-4319-925e-141d5a1b58b3&quot;,
        &quot;roleId&quot;: &quot;o7OfQhTB&quot;
    }
    .....
]
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h3 id="角色权限"> 角色权限</h3>
<h2 id="用户管理"> 用户管理</h2>
<h3 id="user对象结构"> User对象结构</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>值类型</th>
<th>Requied</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>true</td>
<td>id 主键</td>
</tr>
<tr>
<td>loginName</td>
<td>String</td>
<td>true</td>
<td>登陆名</td>
</tr>
<tr>
<td>userName</td>
<td>String</td>
<td>true</td>
<td>昵称</td>
</tr>
<tr>
<td>userPassword</td>
<td>String</td>
<td>true</td>
<td>密码</td>
</tr>
<tr>
<td>company</td>
<td>String</td>
<td>false</td>
<td>公司</td>
</tr>
<tr>
<td>department</td>
<td>String</td>
<td>false</td>
<td>部门</td>
</tr>
<tr>
<td>title</td>
<td>String</td>
<td>false</td>
<td>职务</td>
</tr>
<tr>
<td>validDate</td>
<td>timestamp</td>
<td>false</td>
<td>截止有效期</td>
</tr>
<tr>
<td>enabled</td>
<td>boolean</td>
<td>false</td>
<td>是否有效</td>
</tr>
</tbody>
</table>
<h3 id="新增用户"> 新增用户</h3>
<blockquote>
<p>post admin/saveNewUser</p>
</blockquote>
<ul>
<li>Request</li>
</ul>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Default</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>user</td>
<td>JSON String</td>
<td>用户对象</td>
<td>false</td>
<td></td>
<td></td>
</tr>
<tr>
<td>md5Pwd</td>
<td>boolean</td>
<td>密码是否加密</td>
<td>false</td>
<td>false</td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>{
  &quot;loginName&quot;: &quot;biuser&quot;,
  &quot;userName&quot;: &quot;爱分析&quot;,
  &quot;userPassword&quot;: &#39;xxxx&#39;,
  &quot;company&quot;: &quot;公司名称&quot;, 
  &quot;department&quot;: &quot;BI&quot;,
  &quot;title&quot;: &quot;分析师&quot;,
  &quot;validDate&quot;: 4073990400000,
  &quot;enabled&quot;: true
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><ul>
<li>Response</li>
</ul>
<p>成功</p>
<div><pre><code>{
    &quot;status&quot;: &quot;1&quot;,
    &quot;msg&quot;: &quot;success&quot;,
    &quot;obj&quot;: {
        &quot;userId&quot;: &quot;Sl4LqKFe&quot;,
        &quot;loginName&quot;: &quot;api-new&quot;,
        &quot;userName&quot;: &quot;新建api&quot;,
        &quot;userPassword&quot;: &quot;f561aaf6ef0bf14d4208bb46a4ccb3ad&quot;,
        &quot;userStatus&quot;: null,
        &quot;company&quot;: &quot;公司名称&quot;,
        &quot;department&quot;: &quot;BI&quot;,
        &quot;title&quot;: &quot;分析师&quot;,
        &quot;validDate&quot;: 4073990400000,
        &quot;enabled&quot;: true
    },
    &quot;id&quot;: null
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><p>失败</p>
<div><pre><code>{
    &quot;status&quot;: &quot;2&quot;,
    &quot;msg&quot;: &quot;No Module Permission!&quot;,
    &quot;obj&quot;: null,
    &quot;id&quot;: null
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="更新用户"> 更新用户</h3>
<blockquote>
<p>post admin/updateUser</p>
</blockquote>
<ul>
<li>Request</li>
</ul>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Default</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>user</td>
<td>JSON String</td>
<td>用户对象</td>
<td>true</td>
<td></td>
<td></td>
</tr>
<tr>
<td>md5Pwd</td>
<td>boolean</td>
<td>密码是否加密</td>
<td>false</td>
<td>false</td>
<td></td>
</tr>
</tbody>
</table>
<div><pre><code>{
  &quot;userId&quot;: &quot;cf592eb2-91fd-4319-925e-141d5a1b58b3&quot;,
  &quot;loginName&quot;: &quot;biuser&quot;,
  &quot;userName&quot;: &quot;爱分析&quot;,
  &quot;userPassword&quot;: null, // 密码为空则不修改密码
  &quot;company&quot;: &quot;楚果&quot;, 
  &quot;department&quot;: &quot;BI&quot;,
  &quot;title&quot;: &quot;分析师&quot;,
  &quot;validDate&quot;: 4073990400000,
  &quot;enabled&quot;: true
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><h3 id="删除用户"> 删除用户</h3>
<blockquote>
<p>post/get admin/deleteUser</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Default</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>用户ID</td>
<td>true</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<ul>
<li>Response 成功</li>
</ul>
<div><pre><code><span>{</span>
    <span>"status"</span><span>:</span> <span>"1"</span><span>,</span> <span>// 接口是否调用成功</span>
    <span>"msg"</span><span>:</span> <span>"success"</span><span>,</span>
    <span>"obj"</span><span>:</span> <span>1</span><span>,</span> <span>// 0 为接口调用成功，但是没有删除数据</span>
    <span>"id"</span><span>:</span> <span>null</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="获取用户信息"> 获取用户信息</h3>
<blockquote>
<p>get/post admin/getUserList?token=yU2TbYpA</p>
</blockquote>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
<th>Required</th>
<th>Default</th>
<th>Since</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>用户ID, 不传获取所有用户列表</td>
<td>false</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<ul>
<li>Response</li>
</ul>
<div><pre><code>[
    {
        &quot;userId&quot;: &quot;a18033335555&quot;,
        &quot;loginName&quot;: &quot;a18033335555&quot;,
        &quot;userName&quot;: &quot;18033335555&quot;,
        &quot;userPassword&quot;: null, // 不返回密码
        &quot;userStatus&quot;: null,
        &quot;company&quot;: null,
        &quot;department&quot;: null,
        &quot;title&quot;: null,
        &quot;validDate&quot;: null,
        &quot;enabled&quot;: false
    },
    {
        &quot;userId&quot;: &quot;admin&quot;,
        &quot;loginName&quot;: &quot;admin&quot;,
        &quot;userName&quot;: &quot;admin&quot;,
        &quot;userPassword&quot;: null, // 不返回密码
        &quot;userStatus&quot;: null,
        &quot;company&quot;: null,
        &quot;department&quot;: null,
        &quot;title&quot;: null,
        &quot;validDate&quot;: null,
        &quot;enabled&quot;: true
    },
    ....
]
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br></div></div>]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">RFM</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/1-rfm/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/1-rfm/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概述"> 概述</h2>
<p>RFM分析是一种基于客户购买行为进行细分的市场营销技术。它通过评估客户的三个关键因素来确定哪些客户更有价值，以及如何更好地与这些客户互动。这三个因素分别是：</p>
<ol>
<li>
<p><strong>Recency（最近一次购买的时间）</strong>：指的是客户上一次购买产品或服务距离现在的时间。较近进行购买的客户通常被认为更有可能再次购买，因为他们对品牌或产品的记忆仍然新鲜。</p>
</li>
<li>
<p><strong>Frequency（购买频率）</strong>：表示在特定时间段内客户购买的次数。频繁购买的客户往往对品牌有较高的忠诚度，并且可能代表了重复购买习惯的良好指标。</p>
</li>
<li>
<p><strong>Monetary（消费金额）</strong>：指客户在一定时期内花费的总金额。高消费额的客户显然对企业的收入贡献更大，识别并维护这些高价值客户是企业的重要任务。</p>
</li>
</ol>
<p>通过结合这三个维度，RFM分析可以帮助企业将客户分成不同的群体，从而制定针对性的营销策略。例如，对于那些最近有过购买、经常购买并且花费较高的客户（即R、F、M值都高的客户），可以被视为最佳客户，给予特别的关注和奖励；而针对那些很久没有购买、购买频率低且消费金额也低的客户，则可能需要采取重新激活的策略。</p>
<p>RFM分析的优势在于其相对简单却非常有效的方法，不需要复杂的算法即可快速实施，并能产生直观且可操作的结果。这种方法非常适合用于优化客户关系管理(CRM)策略、提升客户满意度和增加销售收益。在实际应用中，企业可以根据自己的业务特点调整RFM分析的具体参数和阈值，以达到最佳效果。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271005492.png" alt="" /></p>
<h2 id="案例演示"> 案例演示</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/demo-data/%E7%A4%BA%E4%BE%8B-%E8%B6%85%E5%B8%82.xls" target="_blank" rel="noopener noreferrer">测试数据-示例超市.xls</a></p>
<p>我们依旧基于超市订单表数据进行案例演示, 数据特征如下:</p>
<ol>
<li>主要使用到的字段有: 客户ID，订单时间，订单ID</li>
<li>每个客户有多个订单，一个订单可能分拆为多个子订单
<img src="http://qiniu.ibidemo.cn/picgo/202505261031697.png" alt="" /></li>
</ol>
<h2 id="r值"> R值</h2>
<p>即每个用户最后一次购买时间距 <strong>业务最新日期</strong> 多少天。</p>
<p>下面是为R值相关新增的 <strong>计算字段</strong></p>
<div><pre><code>首次交易日期<span>=</span>{<span>FIXED</span> <span><span>`</span>客户 id<span>`</span></span> : <span>min</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span>}
用户最后交易日期<span>=</span>{<span>FIXED</span> <span><span>`</span>客户 id<span>`</span></span> : <span>max</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span>}
业务最新日期<span>=</span>{<span>FIXED</span> : <span>max</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span>} 
<span># R值取订单表最大日期与最后交易日期差异值, 实际使用中可以根据业务需求调整</span>
R值<span>=</span>DATEDIFF<span>(</span><span>'day'</span><span>,</span> <span>#{用户最后交易日期}, #{业务最新日期}) </span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202505270934345.png" alt="" /></p>
<h3 id="总体平均r值"> 总体平均R值</h3>
<p>平均R值为全体客户平均R值， 从上面的订单表可以看到，一个客户有多条记录，每条记录的R值相同，但是计算客户评价R值的时候只能取一条，类似于下面的SQL定义</p>
<div><pre><code><span>select</span> <span>sum</span><span>(</span>R<span>)</span> <span>/</span> <span>count</span><span>(</span><span>distinct</span> <span><span>`</span>客户ID<span>`</span></span><span>)</span>
       <span>-- 同 avg(R)</span>
  <span>from</span> <span>(</span>
   <span>select</span> <span><span>`</span>客户ID<span>`</span></span><span>,</span> 
          <span>min</span><span>(</span><span><span>`</span>R值<span>`</span></span><span>)</span> R <span>-- 这里因为每个客户的R值都相同，用min/max/avg都可以</span>
     <span>from</span> t_order
    <span>group</span> <span>by</span> <span><span>`</span>客户ID<span>`</span></span>
  <span>)</span> t
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><p>但是，我们在计算字段中不方便做多次汇总，改用均摊方法计算总体<code>R值</code>的和</p>
<p>每条记录的有效R值=<code>#{R值}/#{客户记录数}</code>, 上面截图中 一个客户4条记录，均摊之后则为, 1460/4, sum求和之后依旧为1460</p>
<p>通过LOD FIXED在全体数据记录上求平均R值:</p>
<div><pre><code>平均R值<span>=</span>{<span>FIXED</span> : <span>sum</span><span>(</span><span>#{R值}/#{客户记录数}) / distinct(`客户 id`)}</span>
</code></pre>
<div><span>1</span><br></div></div><h2 id="f值"> F值</h2>
<p>即每个用户累计订单数。把每个用户的下单数做一个计数统计即可得到F值。</p>
<div><pre><code>F值<span>=</span>{<span>FIXED</span> <span><span>`</span>客户 id<span>`</span></span> : <span>distinct</span><span>(</span><span><span>`</span>订单 id<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><h3 id="总体平均f值"> 总体平均F值</h3>
<p>与平均R值一样，总体平均F值用记录均摊法求和再除以总客户数</p>
<div><pre><code>平均F值<span>=</span>{<span>FIXED</span> : <span>sum</span><span>(</span><span>#{F值}/#{客户记录数}) / distinct(`客户 id`)}</span>
</code></pre>
<div><span>1</span><br></div></div><h2 id="m值"> M值</h2>
<p>即每个客户消费总额</p>
<div><pre><code>M值<span>=</span>{<span>FIXED</span> <span><span>`</span>客户 id<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><h3 id="总体平均m值"> 总体平均M值</h3>
<p>总体平均F值用记录均摊法求和再除以总客户数</p>
<div><pre><code>平均M值<span>=</span>{<span>FIXED</span> : <span>sum</span><span>(</span><span>#{M值}/#{客户记录数}) / distinct(`客户 id`)}</span>
</code></pre>
<div><span>1</span><br></div></div><h2 id="客户分组"> 客户分组</h2>
<p>客户RFM综合评价，会按照<strong>客户自身R/F/M每一项指标是否高于总体平均值</strong>，高于平均值记录为1，低于平均值记录为0，于是把用户划分为8类，具体如下：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505261117619.png" alt="" /></p>
<p>增加计算字段：</p>
<div><pre><code>R<span>=</span><span>IF</span><span>(</span><span>#{R值} > #{平均R值}, 1, 0)</span>
F<span>=</span><span>IF</span><span>(</span><span>#{F值} > #{平均F值}, 1, 0)</span>
M<span>=</span><span>IF</span><span>(</span><span>#{M值} > #{平均M值}, 1, 0)</span>
RFM<span>=</span>CONCAT<span>(</span><span>#{R}, #{F}, #{M})</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>为了RFM值可读，案例中对RFM维度配置了维度字典</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271012721.png" alt="" /></p>
<h2 id="数据看板"> 数据看板</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271015650.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">配置页</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/advance/0-setting/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/advance/0-setting/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>从版本<em>v1.4.0</em>开始，把一些在系统启动时不需要确定的配置信息允许管理员不需要修改配置文件在线配置，并把配置项写入数据库，原本配置文件的配置依旧有效</p>
<blockquote>
<p>配置优先级: 默认配置 &lt; <code>config.properties</code> &lt; Web页面配置(数据库配置)</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160456.png" alt="" /></p>
<h2 id="配置文件模块"> 配置文件模块</h2>
<div><pre><code><span>#</span>
<span># meta datasource 元数据</span>
<span># Druid 连接池</span>
<span>#</span>
<span>datasource.meta.name</span><span>=</span><span>meta</span>
<span>datasource.meta.driver-class-name</span><span>=</span><span>com.mysql.jdbc.Driver</span>
<span>datasource.meta.url</span><span>=</span><span>jdbc:mysql://localhost:3306/cboard_dev?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>datasource.meta.username</span><span>=</span><span>root</span>
<span>datasource.meta.password</span><span>=</span><span>xxx</span>
<span>datasource.meta.max-active</span><span>=</span><span>10</span>
<span>datasource.meta.min-idle</span><span>=</span><span>0</span>
<span>datasource.meta.initialSize</span><span>=</span><span>1</span>
<span>datasource.meta.breakAfterAcquireFailure</span><span>=</span><span>true</span>
<span>#</span>
<span># log datasource 日志数据默认与meta元数据源一致</span>
<span>#</span>
<span>datasource.log.name</span><span>=</span><span>log</span>
<span>datasource.log.driver-class-name</span><span>=</span><span>${datasource.meta.driver-class-name}</span>
<span>datasource.log.url</span><span>=</span><span>${datasource.meta.url}</span>
<span>datasource.log.username</span><span>=</span><span>${datasource.meta.username}</span>
<span>datasource.log.password</span><span>=</span><span>${datasource.meta.password}</span>
<span>datasource.log.max-active</span><span>=</span><span>10</span>
<span>datasource.log.min-idle</span><span>=</span><span>0</span>
<span>datasource.log.initialSize</span><span>=</span><span>1</span>
<span>datasource.log.breakAfterAcquireFailure</span><span>=</span><span>true</span>

<span># 连接端口与context</span>
<span>server.port</span><span>=</span><span>8026</span>
<span>server.servlet.context-path</span><span>=</span><span>/cboard</span>
<span># https相关配置</span>
<span>#server.ssl.key-store=classpath:.xxxx.jks</span>
<span>#server.ssl.key-store-password=xxx</span>
<span>#server.ssl.keyStoreType=JKS</span>

<span># 对应安装目录下user-files文件夹</span>
<span>file.userfiles-path</span><span>=</span><span>user-files</span>
<span>spring.web.resources.static-locations</span><span>=</span><span>classpath:/static,classpath:/webui,classpath:/${file.userfiles-path}</span>
<span>spring.web.resources.cache.cachecontrol.cache-public</span><span>=</span><span>true</span>
<span>spring.web.resources.cache.cachecontrol.max-age</span><span>=</span><span>30d</span>

<span>#</span>
<span># 系统运行产生文件存储地址</span>
<span>#</span>
<span>runtime.base.filePath</span><span>=</span><span>${user.home}/.ibi</span>
<span># 在线表格写转文件存储地址, 默认目录</span>
<span>dataprovider.onlineTable.filePath</span><span>=</span><span>${runtime.base.filePath}/online-tables</span>
<span># 大屏导出临时文件存储地址</span>
<span>export.cockpit.screenshotPath</span><span>=</span><span>${runtime.base.filePath}/screenshot/cockpit</span>

<span>admin_user_id</span><span>=</span><span>1</span>

<span># Service configuratin</span>
<span>#【谨慎配置】维度成员查询返回结果集大小限定, 默认:2000</span>
<span>dimension.member.resultLimit</span><span>=</span><span>2000</span>
<span>#【谨慎配置】聚合结果集大小限制，调大会增加服务端压力, 默认:1万</span>
<span>dataprovider.agg.resultLimit</span><span>=</span><span>10000</span>
<span>#【谨慎配置】离线数据集缓存大小限制, 默认:30万</span>
<span>dataprovider.resultLimit</span><span>=</span><span>300000</span>
<span># 交叉表是否合并表头阈值=行维数量 * 数据行数</span>
<span># pivot.table.mergeLimit=500</span>

<span>#</span>
<span># 离线数据集聚合引擎配置</span>
<span>#</span>
<span># Inner aggregator type: h2[default], clickhouse</span>
<span>#aggregator.type=clickhouse</span>
<span># Set batch size load size, times by 1 thousand</span>
<span>aggregator.batchReadSize</span><span>=</span><span>50</span>
<span>aggregator.batchLoadSize</span><span>=</span><span>50</span>
<span># 缓存定时任务清理quartz表达式默认每日0点清空所有缓存</span>
<span># aggregator.cleanJob.quartz=0 0 0 * * ?</span>

<span># h2 缓存相关配置</span>
<span># Storage File Syatem</span>
<span># 1 默认缓存数据存储到文件 Stores data in file system</span>
<span>aggregator.h2.driver-class-name</span><span>=</span><span>org.h2.Driver</span>
<span>aggregator.h2.url</span><span>=</span><span>jdbc:h2:~/H2Data/cboard;AUTO_SERVER=TRUE;MODE=MYSQL;CASE_INSENSITIVE_IDENTIFIERS=false</span>
<span># 2 切到缓存数据到内存 Stores data outside of the VM's heap - useful for large memory DBs without incurring GC costs.</span>
<span>#aggregator.h2.url=jdbc:h2:nioMemFS:cboard;AUTO_SERVER=TRUE;MODE=MYSQL;CASE_INSENSITIVE_IDENTIFIERS=false</span>
<span>aggregator.h2.username</span><span>=</span><span>sa</span>
<span>aggregator.h2.password</span><span>=</span><span>!QAZ2wsx</span>
<span>aggregator.h2.max-active</span><span>=</span><span>10</span>
<span>aggregator.h2.testWhileIdle</span><span>=</span><span>false</span>

<span># ClickHouse 缓存相关配置当aggregator.type=clickhouse时生效</span>
<span>aggregator.ck.driver-class-name</span><span>=</span><span>ru.yandex.clickhouse.ClickHouseDriver</span>
<span>aggregator.ck.url</span><span>=</span><span>jdbc:clickhouse://xxx:8123/ibi</span>
<span>aggregator.ck.username</span><span>=</span><span>xxx</span>
<span>aggregator.ck.password</span><span>=</span><span>xxx</span>
<span>aggregator.ck.min-idle</span><span>=</span><span>1</span>
<span>aggregator.ck.max-active</span><span>=</span><span>5</span>
<span>aggregator.ck.testWhileIdle</span><span>=</span><span>false</span>


<span># 看板导出、邮件发送依赖插件</span>
<span>pkg_puppetter</span><span>=</span><span>/Users/xxx/cboard/pkg-puppeteer/build/pkg-puppeter-macos</span>
<span>pkg.puppetter.args</span><span>=</span><span>-DvpWidth=1920 -DvpHeight=1080 -DvpScale=1</span>
<span># 导出插件模拟请求地址</span>
<span>frontend.baseurl</span><span>=</span><span>http://localhost:8026/cboard</span>

<span># Max size for export file size by Megabyte ,</span>
<span># 上传文件大小控制配置，影响单个看板导出最大大小，单个交叉表最大大小，单位兆</span>
<span># 注：看板大小包含图表截图，交叉表数据，不包含明细表数据</span>
<span>export.maxUploadSize</span><span>=</span><span>50</span>
<span>export.maxInMemorySize</span><span>=</span><span>4</span>
<span># export.detailTable.showTitle=true</span>

<span>mail.smtp.host</span><span>=</span><span>xxxx</span>
<span>mail.smtp.port</span><span>=</span><span>25</span>
<span>mail.smtp.from</span><span>=</span><span>cboard@sina.com</span>
<span>mail.smtp.username</span><span>=</span><span>xxx@sina.com</span>
<span>mail.smtp.password</span><span>=</span><span>xxxx</span>
<span>#mail.smtp.ssl.checkserveridentity=false</span>


<span># formData.mango.connectionString=mongodb://peter:!QAZ2wsx@tcc2:27017</span>


<span>log.negativeFilter</span><span>=</span><span>List</span>
<span>log.positiveFilter</span><span>=</span>

<span>#</span>
<span># jwt configurations, support set in web page</span>
<span>#</span>
<span>#jwt.subject=ibi</span>
<span># expire after hours</span>
<span>#jwt.expire=12</span>
<span>#jwt.secret=xxxx</span>
<span>#jwt.prefix=xxx</span>

<span>session.timeoutMinutes</span><span>=</span><span>300</span>


<span>spring.security.auth.type</span><span>=</span><span>jdbc</span>

<span>#cas</span>
<span>#caso.client.url=http://localhost:8026</span>
<span>#caso.client.check=${caso.client.url}/login/cas</span>

<span>caso.server.url</span><span>=</span><span>https://tcc4:8443/cas</span>
<span>caso.server.login</span><span>=</span><span>${caso.server.url}/login</span>
<span>caso.server.logout</span><span>=</span><span>${caso.server.url}/logout</span>

<span>#cas RestAPI</span>
<span>caso.server.tgt</span><span>=</span><span>${caso.server.url}/v1/tickets</span>
<span>caso.server.validate</span><span>=</span><span>${caso.server.url}/serviceValidate</span>

<span>#OAuth2</span>
<span>## implicit</span>
<span>oauth2.implicit.url</span><span>=</span><span>http://tcc4:8080/oauth2/oauth/authorize?response_type=token&amp;scope=read</span>
<span>oauth2.userInfo</span><span>=</span><span>http://tcc4:8080/oauth2/m/user_info?access_token=</span>
<span>oauth2.client_id</span><span>=</span><span>ibi-app</span>
<span>oauth2.client_secret</span><span>=</span><span>client_secret</span>
<span>oauth2.redirect_uri</span><span>=</span><span>http://localhost:8088/login.html</span>

<span>#LDAP</span>
<span>ldap.url</span><span>=</span><span>ldap://www.zflexldap.com:389</span>
<span>ldap.base</span><span>=</span><span>dc=zflexsoftware,dc=com</span>
<span>ldap.userDn</span><span>=</span><span>cn=ro_admin,ou=sysadmins</span>
<span>ldap.password</span><span>=</span><span>zflexpass</span>
<span>ldap.principalPattern</span><span>=</span><span>uid=%s,ou=users,ou=guests</span>
<span># "guest1", "guest1password"</span>

<span>spring.devtools.remote.restart.enabled</span><span>=</span><span>false</span>
<span>spring.devtools.livereload.enabled</span><span>=</span><span>false</span>
<span>spring.devtools.restart.enabled</span><span>=</span><span>false</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br><span>72</span><br><span>73</span><br><span>74</span><br><span>75</span><br><span>76</span><br><span>77</span><br><span>78</span><br><span>79</span><br><span>80</span><br><span>81</span><br><span>82</span><br><span>83</span><br><span>84</span><br><span>85</span><br><span>86</span><br><span>87</span><br><span>88</span><br><span>89</span><br><span>90</span><br><span>91</span><br><span>92</span><br><span>93</span><br><span>94</span><br><span>95</span><br><span>96</span><br><span>97</span><br><span>98</span><br><span>99</span><br><span>100</span><br><span>101</span><br><span>102</span><br><span>103</span><br><span>104</span><br><span>105</span><br><span>106</span><br><span>107</span><br><span>108</span><br><span>109</span><br><span>110</span><br><span>111</span><br><span>112</span><br><span>113</span><br><span>114</span><br><span>115</span><br><span>116</span><br><span>117</span><br><span>118</span><br><span>119</span><br><span>120</span><br><span>121</span><br><span>122</span><br><span>123</span><br><span>124</span><br><span>125</span><br><span>126</span><br><span>127</span><br><span>128</span><br><span>129</span><br><span>130</span><br><span>131</span><br><span>132</span><br><span>133</span><br><span>134</span><br><span>135</span><br><span>136</span><br><span>137</span><br><span>138</span><br><span>139</span><br><span>140</span><br><span>141</span><br><span>142</span><br><span>143</span><br><span>144</span><br><span>145</span><br><span>146</span><br><span>147</span><br><span>148</span><br><span>149</span><br><span>150</span><br><span>151</span><br><span>152</span><br><span>153</span><br><span>154</span><br><span>155</span><br><span>156</span><br><span>157</span><br><span>158</span><br><span>159</span><br><span>160</span><br><span>161</span><br><span>162</span><br><span>163</span><br><span>164</span><br><span>165</span><br><span>166</span><br><span>167</span><br></div></div><h2 id="jwt-token生成安全配置"> JWT Token生成安全配置</h2>
<p>JWT token生成相关配置，支持在配置文件中或者web配置界面修改</p>
<div><p>提示</p>
<p>从安全层面考虑，用户在部署之后按自己的环境和安全等级要求修改配置</p>
</div>
<div><pre><code><span># jwt configurations, support set in web page</span>

<span># subject可以任意修改</span>
<span>jwt.subject</span><span>=</span><span>ibi</span>

<span># token过期时间(小时)</span>
<span>jwt.expire</span><span>=</span><span>12</span>

<span># 加密秘钥secret可以任意修改</span>
<span>jwt.secret</span><span>=</span><span>xxxx</span>

<span># 令牌前缀prefix可以任意修改</span>
<span>jwt.prefix</span><span>=</span><span>xxx</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h2 id="页眉-页脚logo自定义"> 页眉/页脚Logo自定义</h2>
<blockquote>
<p>系统管理员可以在<code>管理-&gt;系统配置</code>页面配置页眉/页脚Logo等</p>
</blockquote>
<h3 id="说明"> 说明</h3>
<p>为了方便软件服务企业对外提供服务，我们允许客户修改 logo 与脚注相关内容</p>
<blockquote>
<p>但是版权声明可以替换为空白，或者单纯的公司信息，但是不允许申明为自己公司版权, IBI所有软件著作权、专利均受法律保护！</p>
</blockquote>
<p>如：</p>
<div><p>允许</p>
<p>xxx 公司 【允许】</p>
</div>
<div><p>禁止</p>
<p>Copyright © xxx 公司 . All rights reserved. 【不允许】<br>
版权 © xxx 公司 . 保留所有版权. 【不允许】</p>
</div>
<table>
<thead>
<tr>
<th style="text-align:left">配置项</th>
<th style="text-align:center">格式/语法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">loginLogoHtml</td>
<td style="text-align:center">html</td>
<td style="text-align:left">登陆页: Logo配置</td>
</tr>
<tr>
<td style="text-align:left">loginFooterHtml</td>
<td style="text-align:center">html</td>
<td style="text-align:left">登陆页: 备案号配置</td>
</tr>
<tr>
<td style="text-align:left">headerLogoHtml</td>
<td style="text-align:center">html</td>
<td style="text-align:left">左上角: 页眉Logo配置</td>
</tr>
<tr>
<td style="text-align:left">copyrightHtml</td>
<td style="text-align:center">html</td>
<td style="text-align:left">左下角: 页脚公司信息, 禁止版权申明!</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220503094403.png" alt="" /></p>
<h2 id="配置项-html-head"> 配置项 html.head <badge text="v1.4.3"/></h2>
<div><p>为什么要使用配置注入，而不是直接修改html源代码？</p>
<ol>
<li><strong>页面缓存</strong>: html页面为静态资源，修改之后用户需清理缓存才能生效，配置项注入为动态注入修改刷新页面直接生效</li>
<li><strong>多处维护</strong>: html页面有多个入口，index.html, render.html, render-lite.html, cockpit.html需要多处修改</li>
<li><strong>升级维护</strong>: html修改版本更新需要再次维护，注入方式配置信息存储在数据库，更新不受影响</li>
</ol>
</div>
<p>值内容为json数组，额外的需要被注入到当前页面的 HTML <code>&lt;head&gt;</code> 中的标签，每个标签都可以以 <code>[tagName, { attrName: attrValue }, innerHTML?]</code> 的格式指定, 举个例子，增加icon-font自定义css</p>
<div><pre><code><span>[</span>
  <span>[</span>
    <span>"link"</span><span>,</span>
    <span>{</span>
      <span>"rel"</span><span>:</span> <span>"stylesheet"</span><span>,</span>
      <span>"href"</span><span>:</span> <span>"//at.alicdn.com/t/font_2677584_cfynubcr16f.css"</span>
    <span>}</span>
  <span>]</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><p>注入成功之后，页面加载会在 <code>&lt;head&gt;</code> 添加下面html</p>
<div><pre><code><span><span><span>&lt;</span>head</span><span>></span></span>
    <span>&lt;!-- 注入的内容 --></span>
    <span><span><span>&lt;</span>link</span> <span>href</span><span><span>=</span><span>"</span>//at.alicdn.com/t/font_2677584_cfynubcr16f.css<span>"</span></span> <span>rel</span><span><span>=</span><span>"</span>stylesheet<span>"</span></span><span>></span></span><span><span><span>&lt;/</span>link</span><span>></span></span>
<span><span><span>&lt;/</span>head</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="iconfont使用"> Iconfont使用</h3>
<p><a href="https://iconfont.cn" target="_blank" rel="noopener noreferrer">Iconfont</a> 是阿里妈妈 MUX 倾力打造的矢量图标管理、交流平台。</p>
<p>设计师将图标上传到 Iconfont 平台，用户可以自定义下载多种格式的 icon，平台也可将图标转换为字体，便于前端工程师自由调整与调用。</p>
<h4 id="使用方式"> 使用方式</h4>
<p>首先你需要新建一个项目，对你网站的图标进行设置与管理:</p>
<ol>
<li>使用 GitHub 或微博登录 Iconfont。</li>
<li>在网站上方找到 <code>资源管理</code> → <code>我的项目</code>，点击右上角的 <code>新建项目</code> 图标。</li>
<li>设置可以辨识的项目名称</li>
<li><code>FontClass/Symbol 前缀</code> 填入 <code>icon-</code>(你也可以根据自己喜好填写，但需要将此值设置到 <code>themeConfig.iconPrefix</code>)</li>
</ol>
<div><p>提示</p>
<p>Font Family 请保持 <code>尽量避免使用默认值icon佛那个以免和系统图标发生冲突</code></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716090845.png" alt="" /></p>
<h4 id="导入图标"> 导入图标</h4>
<ol>
<li>请自行在 iconfont 自由搜索寻找你想要使用的图标，并点击图标上的 “添加入库” 按钮</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716091009.png" alt="" /></p>
<ol start="2">
<li>在寻找完所有图标后，请点击右上角的 “添加入库” 图标，点击下方的 “添加至项目” 并选择你刚刚创建好的项目进行确定。</li>
</ol>
<h4 id="编辑图标"> 编辑图标</h4>
<p>在项目页面，你可以对项目内的图标进行简单的编辑，包括位置、缩放、旋转、颜色以及 Unicode 编号与 Font Class / Symbol 的调整。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716091049.png" alt="" /></p>
<h4 id="生成图标文件"> 生成图标文件</h4>
<ol>
<li>请点击项目上方的 “Font Class” 按钮，并点击生成。</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716091153.png" alt="" /></p>
<h4 id="图标引入ibi"> 图标引入IBI</h4>
<p>配置项的修改仅支持管理员操作，
管理员登陆，进入<code>系统配置</code>页面，新建配置项<code>html.head</code>，值内容为json数组，增加icon-font自定义css</p>
<div><pre><code><span>[</span>
  <span>[</span>
    <span>"link"</span><span>,</span>
    <span>{</span>
      <span>"rel"</span><span>:</span> <span>"stylesheet"</span><span>,</span>
      <span>"href"</span><span>:</span> <span>"//at.alicdn.com/t/font_2677584_cfynubcr16f.css"</span>
    <span>}</span>
  <span>]</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><p>注入成功之后，页面加载会在 <code>&lt;head&gt;</code> 添加下面html</p>
<div><pre><code><span><span><span>&lt;</span>head</span><span>></span></span>
    <span>&lt;!-- 注入的内容 --></span>
    <span><span><span>&lt;</span>link</span> <span>href</span><span><span>=</span><span>"</span>//at.alicdn.com/t/font_2410206_xxxx.css<span>"</span></span> <span>rel</span><span><span>=</span><span>"</span>stylesheet<span>"</span></span><span>></span></span><span><span><span>&lt;/</span>link</span><span>></span></span>
<span><span><span>&lt;/</span>head</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>Tips</p>
<p>如果您后面添加了新的图标，请重新生成新的 CSS 地址并在 <code>.vuepress/styles/index.styl</code> 中覆盖旧的 CSS 地址。</p>
</div>
<h4 id="在大屏中使用自定义图标"> 在大屏中使用自定义图标</h4>
<ol>
<li>组件列表插入图标</li>
<li>点击并激活图标</li>
<li>下拉选择图标类型为<code>user-font</code>，改选项名称后续可能会变更</li>
<li>输入图标对应的font class</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716094133.png" alt="" /></p>
<div><p>font-class格式解释：</p>
<p>前缀为在步骤，新建项目输入的<code>Font Fmaily</code>名称，空格之后第二项为改图标在项目中的名称</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210716094538.png" alt="" /></p>
<h2 id="邮件任务发送失败提醒-v1-5-1"> 邮件任务发送失败提醒  <sup>v1.5.1</sup></h2>
<p>从v1.5.1开始可以配置邮件任务管理员邮箱地址<code>mail.job.admin</code>，邮件任务发送失败之后会发送失败通知给邮件管理员，
此外，如果邮件任务所有者如果有配置邮箱地址，相应通知也会发送给改所有者<br>
<img height="400" src="http://qiniu.ibidemo.cn/picgo/20220214161349.png"/></p>
<h2 id="全局自定义echarts主题色v1-9"> 全局自定义ECharts主题色<sup>v1.9</sup></h2>
<ul>
<li>全局自定义ECharts主题色能够让用户配置符合自身企业的配色方案，避免重复繁琐的通过样式配置修改颜色</li>
<li>用户可设定任意数量的主题色块，当用户设置系列色不足是会使用系统默认系列色补充</li>
<li>系统配置之后需刷新页面生效</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230207100428.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">帕累托分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/2-pareto/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/2-pareto/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概述"> 概述</h2>
<p>帕累托分析用英语可以说是&quot;Pareto Analysis&quot;。这种分析方法基于帕累托原则（也称为80/20规则），该原则指出，通常情况下，大约80%的效果来自20%的原因。在商业和管理领域中，帕累托分析常用于识别出最关键的几个因素，这些因素导致了大部分的问题或者创造了大部分的成果。例如，它可以帮助确定哪些客户贡献了公司大部分的收入，或者哪些产品缺陷导致了多数的退货和投诉。</p>
<h2 id="帕累托分析"> 帕累托分析</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/demo-data/%E7%A4%BA%E4%BE%8B-%E8%B6%85%E5%B8%82.xls" target="_blank" rel="noopener noreferrer">测试数据-示例超市.xls</a></p>
<p>按照产品子类别销售额做帕累托分析，帕累托分析需要设计出下面的交叉表数据表格，按产品类型，销售额降序排序，第二列指标为销售额基础上做累加占比</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271052288.png" alt="" /></p>
<p>配置要点：</p>
<ul>
<li><strong>行维子类别取消排序</strong>: 因为如果维度有排序，维度的排序优先级大于指标，后面销售额的排序就不会生效了</li>
<li><strong>销售额降序</strong>: 所有行维取消排序之后，销售额指标配置降序</li>
<li><strong>销售额累加占比</strong>：复制销售额指标字段，并设置值类型为累加占比，修改别名为累计占比</li>
</ul>
<img src="http://qiniu.ibidemo.cn/picgo/202505271055341.png" width="400">
<h2 id="展示为双轴图"> 展示为双轴图</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271104166.png" alt="" /></p>
<p><strong>配置要点</strong>：</p>
<ul>
<li>切换上面的交叉表展示形式为柱线图</li>
<li>添加次轴, 并把累计占比指标拖到次轴</li>
</ul>
<img src="http://qiniu.ibidemo.cn/picgo/202505271105352.png" width="300">
<ul>
<li>主轴展示类型: 下拉选择为柱状</li>
<li>配置<code>销售额</code>值样式:
<ul>
<li>选择着色字段为累加占比</li>
<li>调色板选择混色</li>
<li>中心点设置为0.8 (<strong>此处输入框组件对于小数输入有一些异常</strong>)如果输入0.8没有反应可以在外面任意编辑输入0.8之后拷贝进输入框</li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271108373.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">留存率分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/3-retention/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/3-retention/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概述"> 概述</h2>
<p>留存率（Retention Rate）是指在一段时间内继续使用某产品或服务的用户比例。它是衡量客户忠诚度和满意度的重要指标，广泛应用于软件即服务（SaaS）、移动应用、在线游戏以及其他订阅型服务行业。高留存率通常意味着用户对产品或服务有较高的满意度和依赖性，反之则可能表明存在用户体验不佳、竞争压力大或者其他问题。</p>
<p>留存率的计算方式可以根据具体应用场景有所不同，但一般公式如下：</p>
<div><pre><code>留存率 = 某个时间段结束时仍然活跃的用户数 / 该实际的开始时的用户数
</code></pre>
<div><span>1</span><br></div></div><p>例如，在分析一款移动应用程序的表现时，可以计算一个月内的留存率，查看在第一天使用过应用的用户中，有多少比例的用户在第30天仍然在使用该应用。</p>
<p>提高留存率通常是通过改善产品质量、增强用户体验、提供优质的客户服务以及构建忠实用户社区等方式来实现的。理解并优化留存率对于任何希望长期成功的企业来说都是至关重要的。</p>
<h2 id="实现思路"> 实现思路</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/demo-data/Orders(GlobalSuperstore).csv" target="_blank" rel="noopener noreferrer">GlobalSuperstore.xls</a></p>
<p>基于超市订单表测试， 增加计算字段</p>
<div><pre><code>首次购买日期 = {FIXED `customer id` : min(`order date`)}
留存周期(月) = CONCAT(DATEDIFF(&#39;month&#39;, #{首次购买日期}, `order date`), &#39;月&#39;)
留存周期(季度) = CONCAT(DATEDIFF(&#39;quarter&#39;, #{首次购买日期}, `order date`), &#39;季度&#39;)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h2 id="留存用户矩阵"> 留存用户矩阵</h2>
<ul>
<li>行维放置<code>首次购买日期</code>，日期格式化设置为季度(yyyy-Q)</li>
<li>列维放置<code>留存周期(季度)</code></li>
<li>指标放置 <code>customer id</code> 设置聚合函数为 <code>distinct</code></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271641864.png" alt="" /></p>
<h2 id="留存率矩阵"> 留存率矩阵</h2>
<p>留存用户数，设置值类型为表达式，如下：</p>
<div><pre><code>get(&#39;留存用户数&#39;) / max(&#39;留存用户数&#39;, null, [])
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>get('留存用户数') : 取用户数原值
max('留存用户数', null, []) 取行上最大值，也就是初始值</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271703781.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271706719.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">购物篮分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/4-market-basket/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/4-market-basket/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概述"> 概述</h2>
<p>购物篮分析（Market Basket Analysis）是一种数据挖掘技术，主要用于发现顾客购买行为中的模式和关联。
它通过分析销售交易数据来识别哪些产品经常一起被购买，从而帮助企业更好地理解消费者的购买习惯、优化商品布局、制定促销策略以及提升客户体验。</p>
<h2 id="实现思路"> 实现思路</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/demo-data/%E7%A4%BA%E4%BE%8B-%E8%B6%85%E5%B8%82.xls" target="_blank" rel="noopener noreferrer">测试数据-示例超市.xls</a></p>
<p>一般我们使用三个指标来度量一个关联规则，这三个指标分别是：<strong>支持度</strong>、<strong>置信度</strong>和<strong>提升度</strong>。</p>
<h3 id="support-支持度"> Support（支持度）</h3>
<p>表示某个商品组合在所有交易中出现的频率。例如，如果在100次交易中有20次同时购买了A和B，则A和B的支持度为20%。</p>
<div><pre><code>支持度 = 同时购买A和B订单数 / 总购买订单数
</code></pre>
<div><span>1</span><br></div></div><h3 id="confidence-置信度"> Confidence（置信度）</h3>
<p>指的是在已知一个特定商品被购买的情况下，另一个商品也被购买的概率。比如，“买了A的顾客也买了B”的置信度是80%，意味着在所有包含A的商品篮子中，有80%也包含了B。</p>
<div><pre><code>置信度 = 同时购买A和B订单数 / 购买A的订单数
</code></pre>
<div><span>1</span><br></div></div><h3 id="lift-提升度"> Lift（提升度）</h3>
<p>衡量两个商品一起购买的概率与它们独立购买概率的比值。提升度大于1表示这两个商品更可能一起被购买；等于1则表明两者独立；小于1说明这些商品倾向于不一起购买。例如，如果“买了A的顾客也买了B”的提升度是2，这意味着买A的顾客买B的可能性是随机情况下预期的两倍。</p>
<div><pre><code>A的购买比率 = 购买A次数 / 总购买订单数
B的购买比率 = 购买B次数 / 总购买订单数
提升度 = 支持度 / (A的购买比率 * B的购买比率)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h2 id="数据准备"> 数据准备</h2>
<p>在原有超市订单表基础之间，为了实现找到两种产品的关系可以用订单号自关联, 增加过滤条件AB商品不相等</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271503171.png" alt="" /></p>
<h3 id="增加计算字段"> 增加计算字段</h3>
<div><pre><code>商品A的订单数 <span>=</span> {<span>FIXED</span> <span><span>`</span>a_子类别<span>`</span></span> : <span>distinct</span><span>(</span><span><span>`</span>订单 ID<span>`</span></span><span>)</span> }
商品B的订单数 <span>=</span> {<span>FIXED</span> <span><span>`</span>b_子类别<span>`</span></span> : <span>distinct</span><span>(</span><span><span>`</span>订单 ID<span>`</span></span><span>)</span> }
同时购买商品AB订单数 <span>=</span> {<span>FIXED</span> <span><span>`</span>a_子类别<span>`</span></span><span>,</span> <span><span>`</span>b_子类别<span>`</span></span> : <span>distinct</span><span>(</span><span><span>`</span>订单 ID<span>`</span></span><span>)</span> }
总订单数 <span>=</span> {<span>FIXED</span>  : <span>distinct</span><span>(</span><span><span>`</span>订单 ID<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>数据 <strong>明细</strong> （注意是明细数据不是汇总数据）如下所示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271515423.png" alt="" /></p>
<h3 id="增加汇总表达式"> 增加汇总表达式</h3>
<p>由于上面通过计算字段增加的字段已经是汇总级别，所以下面在汇总计算的时候需要选择 max/min/avg 中的一种汇总函数，不能选择sum函数</p>
<div><pre><code>支持度 <span>=</span> <span>max</span><span>(</span><span><span>`</span>同时购买商品AB订单数<span>`</span></span><span>)</span> <span>/</span> <span>max</span><span>(</span><span><span>`</span>总订单数<span>`</span></span><span>)</span>
置信度 <span>=</span> <span>max</span><span>(</span><span><span>`</span>同时购买商品AB订单数<span>`</span></span><span>)</span> <span>/</span> <span>max</span><span>(</span><span><span>`</span>商品A订单数<span>`</span></span><span>)</span>
商品A购买占比 <span>=</span> <span>max</span><span>(</span><span><span>`</span>商品A订单数<span>`</span></span><span>)</span> <span>/</span> <span>max</span><span>(</span><span><span>`</span>总订单数<span>`</span></span><span>)</span>
商品B购买占比 <span>=</span> <span>max</span><span>(</span><span><span>`</span>商品B订单数<span>`</span></span><span>)</span> <span>/</span> <span>max</span><span>(</span><span><span>`</span>总订单数<span>`</span></span><span>)</span>
提升度 <span>=</span> ${支持度} <span>/</span> <span>(</span>${商品A购买占比} <span>*</span> ${商品B购买占比}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202505271509798.png" alt="" /></p>
<h2 id="制作热力图"> 制作热力图</h2>
<p><strong>细节解析</strong></p>
<ul>
<li>支持度指标设置值格式化，百分数，保留两位小数</li>
<li>配置栏：
<ul>
<li>数字标签 开启显示</li>
<li>布局：开启自定义，增加右边距</li>
<li>视觉映射：开启自定义，垂直位置居中</li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271517338.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271518640.png" alt="" /></p>
<h2 id="分析看板"> 分析看板</h2>
<p>增加联动</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271518589.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271519276.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">波斯顿矩阵</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/5-boston-matrix/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/analysis-model/5-boston-matrix/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概述"> 概述</h2>
<p>波士顿矩阵（Boston Matrix），也称为市场增长率-相对市场份额矩阵，是一种用来帮助公司评估其业务单元或产品线的战略工具。这个矩阵使用两个轴来区分公司的不同业务单元或产品：</p>
<ol>
<li>
<p><strong>市场增长率（Market Growth Rate）</strong>：这是纵轴的指标，通常表示为一个业务单元所在市场的年度增长率百分比。它反映了市场的吸引力以及未来的潜力。高市场增长率（通常是高于10%的增长率）表明这是一个快速增长的市场，可能充满了机会但也伴随着较高的风险；低市场增长率则意味着市场已经成熟或者接近饱和。</p>
</li>
<li>
<p><strong>相对市场份额（Relative Market Share）</strong>：这是横轴的指标，指的是公司某个业务单元的市场份额与该市场中最大竞争对手的市场份额的比例。它用来衡量公司在特定市场中的竞争力和强势地位。如果一个业务单元的相对市场份额大于1，这意味着它在市场上的份额超过了最大的竞争对手，被视为拥有较强的市场地位；相对市场份额小于1则表示反之。</p>
</li>
</ol>
<p>通过结合这两个指标，波士顿矩阵将公司的业务单元划分为四种类型：问题型（Question Marks）、明星型（Stars）、现金牛型（Cash Cows）和瘦狗型（Dogs）。这些分类有助于公司决定如何分配资源，是投资、维持现状还是撤资等策略。</p>
<h2 id="实现思路"> 实现思路</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/demo-data/%E7%A4%BA%E4%BE%8B-%E8%B6%85%E5%B8%82.xls" target="_blank" rel="noopener noreferrer">测试数据-示例超市.xls</a></p>
<h3 id="增加动态矩阵分割值"> 增加动态矩阵分割值</h3>
<p>通过计算字段, 增加动态矩阵分割值, 计算字段中使用环境变量，后续可以在看板参数中绑定环境变量实现动态分割值</p>
<div><pre><code>X轴分隔 = ${xSplit!0.1}
Y轴分隔 = ${ySplit!0.1}
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="汇总指标表达式"> 汇总指标表达式</h3>
<div><pre><code>去年销售额 = {EXCLUDE DATEADD(`订单日期`, -1, &#39;year&#39;) : sum(`销售额`)}
销售额增长率 = CHGRATE(${去年销售额}, sum(`销售额`), 0)
X轴分隔值 = max(`X轴分隔`)
Y轴分隔值 = max(`Y轴分隔`)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h2 id="图表设计"> 图表设计</h2>
<ul>
<li>图表类型选择气泡图</li>
<li>列维放置订单日期字段，并设置日期格式化到年</li>
<li>行维放置商品子类别</li>
<li>第一个指标栏, 依次 <code>X轴分隔值</code>, <code>Y轴分隔值</code>, <code>销售额</code>, <code>销售额增长率</code>
<ul>
<li>第一个指标栏最后一个指标默认为Y轴</li>
<li>销售额字段，值类型设置为<strong>列占比</strong>，转化为产品市场占有率, 并设置为X轴
<img src="http://qiniu.ibidemo.cn/picgo/202505271602679.png" alt="" /></li>
</ul>
</li>
<li>第二个指标栏，放置销售额原值，映射为气泡大小</li>
<li>配置：时间线，开启时间线，并选择列维数量为1个，把列维上的年分用做时间线绘制</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271554920.png" alt="" /></p>
<h3 id="矩阵分区颜色配置"> 矩阵分区颜色配置</h3>
<p>矩阵分区颜色和名称使用开发者模式，结合ECharts的区域标记 参考代码如下</p>
<div><pre><code><span>const</span> s0 <span>=</span> option<span>.</span>options<span>[</span><span>0</span><span>]</span><span>.</span>series<span>[</span><span>0</span><span>]</span><span>;</span>
<span>const</span> _1stMetrics <span>=</span> s0<span>.</span>data<span>[</span><span>0</span><span>]</span><span>.</span>value<span>[</span><span>4</span><span>]</span><span>.</span>metrics<span>;</span>
<span>const</span> xSplit <span>=</span> _1stMetrics<span>[</span><span>0</span><span>]</span><span>.</span>value<span>;</span>
<span>const</span> ySplit <span>=</span> _1stMetrics<span>[</span><span>1</span><span>]</span><span>.</span>value<span>;</span>
console<span>.</span><span>log</span><span>(</span>xSplit<span>,</span> ySplit<span>)</span><span>;</span>
<span>const</span> maxX <span>=</span> Number<span>.</span><span>MAX_VALUE</span><span>;</span>
<span>const</span> maxY <span>=</span> maxX<span>;</span>
<span>const</span> minX <span>=</span> <span>-</span><span>1000000</span><span>;</span>
<span>const</span> minY <span>=</span> minX<span>;</span>

s0<span>.</span>markArea <span>=</span> <span>{</span>
    <span>label</span><span>:</span> <span>{</span>
        <span>position</span><span>:</span> <span>'inside'</span><span>,</span>
        <span>color</span><span>:</span> <span>'black'</span><span>,</span>
        <span>fontSize</span><span>:</span> <span>14</span><span>,</span>
        <span>fontWeight</span><span>:</span> <span>'bold'</span><span>,</span>
    <span>}</span><span>,</span>
    <span>data</span><span>:</span> <span>[</span>  
        <span>[</span><span>{</span><span>name</span><span>:</span> <span>'瘦狗型'</span><span>,</span> <span>itemStyle</span><span>:</span> <span>{</span><span>color</span><span>:</span> <span>'rgba(203, 203, 203, 0.5)'</span><span>}</span><span>,</span> <span>coord</span><span>:</span> <span>[</span>minX<span>,</span> ySplit<span>]</span><span>}</span><span>,</span> <span>{</span><span>coord</span><span>:</span> <span>[</span>xSplit<span>,</span> minY<span>]</span><span>}</span><span>]</span><span>,</span>
        <span>[</span><span>{</span><span>name</span><span>:</span> <span>'问题型'</span><span>,</span> <span>itemStyle</span><span>:</span> <span>{</span><span>color</span><span>:</span> <span>'rgba(199, 164, 204, 0.5)'</span><span>}</span><span>,</span> <span>coord</span><span>:</span> <span>[</span>minX<span>,</span> ySplit<span>]</span><span>}</span><span>,</span> <span>{</span><span>coord</span><span>:</span> <span>[</span>xSplit<span>,</span> maxY<span>]</span><span>}</span><span>]</span><span>,</span>
        <span>[</span><span>{</span><span>name</span><span>:</span> <span>'现金牛'</span><span>,</span> <span>itemStyle</span><span>:</span> <span>{</span><span>color</span><span>:</span> <span>'rgba(234, 197, 183, 0.5)'</span><span>}</span><span>,</span> <span>coord</span><span>:</span> <span>[</span>xSplit<span>,</span> ySplit<span>]</span><span>}</span><span>,</span> <span>{</span><span>coord</span><span>:</span> <span>[</span>maxX<span>,</span> minY<span>]</span><span>}</span><span>]</span><span>,</span>
        <span>[</span><span>{</span><span>name</span><span>:</span> <span>'明星型'</span><span>,</span> <span>itemStyle</span><span>:</span> <span>{</span><span>color</span><span>:</span> <span>'rgba(190, 201, 166, 0.5)'</span><span>}</span><span>,</span> <span>coord</span><span>:</span> <span>[</span>xSplit<span>,</span> maxY<span>]</span><span>}</span><span>,</span> <span>{</span><span>coord</span><span>:</span> <span>[</span>maxX<span>,</span> ySplit<span>]</span><span>}</span><span>]</span><span>,</span>
    <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br></div></div><h2 id="分析看板"> 分析看板</h2>
<ul>
<li>增加区域销售地图，并设置图标联动到区域</li>
<li>添加波斯顿矩阵</li>
<li>增加两个范围查询看板参数，并绑定到环境变量xSplit，ySplit, 过滤类型改为 大于或者小于都可以，只为了让滑动条变为单值滑动 (也可以使用输入框交互)
<img src="http://qiniu.ibidemo.cn/picgo/202505271606932.png" alt="" /></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505271604793.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">看板全局配置</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/0-board-global-setting/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/0-board-global-setting/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="标题配置"> 标题配置</h2>
<p>编辑模式下，点击看板标题，修改看板标题</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-title-edit.gif" alt="" /></p>
<h2 id="全局配置"> 全局配置</h2>
<p>点击全局配置按钮，边栏展示看板全局配置菜单</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505071121917.png" alt="" /></p>
<h2 id="标题字体样式与看板背景"> 标题字体样式与看板背景</h2>
<p>您可以在看板全局配置中调整默认的看板标题字体样式大小、对齐与边距等</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202502111743972.png" alt="标题和背景" /></p>
<h2 id="参数变更实时生效"> 参数变更实时生效</h2>
<p>配置为参数变更实时生效时，用户每次修改查询参数都会自动触发图表刷新，区别于手动查询模式，后者需在修改参数后点击查询按钮才会生效。</p>
<h2 id="看板背景色"> 看板背景色</h2>
<p>支持看板背景色、组件背景色、组件边框样式配置、标题字体配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206181543.png" alt="" /></p>
<h2 id="图表组件全局调色板"> 图表组件全局调色板</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-echarts-colorplate.gif" alt="" /></p>
<h2 id="局部css"> 局部CSS</h2>
<ul>
<li>为满足开发者对样式的精细化控制需求，看板支持局部 CSS 设置。该功能允许为当前看板独立编写样式，仅作用于该看板，不会影响全局或其他看板页面。</li>
<li>局部CSS支持less、sass风格的层级嵌套语法</li>
</ul>
<p>下面是一段修改，查询菜单栏按钮背景色与字体色的代码</p>
<div><pre><code><span>.action-buttons</span> <span>{</span>
    <span>.el-button--primary</span> <span>{</span>
        <span>background-color</span><span>:</span> darkblue<span>;</span>
        <span>color</span><span>:</span> white<span>;</span>
    <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">图表组件</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/1-board-charts/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/1-board-charts/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>编辑模式下, 激活<code>图表</code>相关下拉菜单，可选添加</p>
<ul>
<li><strong>已保存图表</strong>: 自助分析中保存的图表，又叫引用图表</li>
<li><strong>内嵌图表</strong>: 图表配置不单独保存，而是保存在看板数据中</li>
<li><strong>复杂报表</strong>: 中国式报表</li>
<li><strong>标签页</strong>: 一个标签也一个图表</li>
<li><strong>标签页容器</strong>: 一个标签页相当于一个看板</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505081846096.png" alt="" /></p>
<h2 id="已保存图表-引用图"> 已保存图表(引用图)</h2>
<ul>
<li>菜单栏<code>图表</code>-&gt;<code>添加已保存图表</code>, 弹出已保存图表列表, <strong>双击</strong>图表节点即可将其添加到看板上, 然后用户根据自己的需求进行组件大小与位置调整</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-add-ref-chart.gif" alt="" /></p>
<h3 id="引用图样式同步"> 引用图样式同步</h3>
<div><p>引用图表样式改变了看板上为什么没有生效</p>
<p>当引用图表添加到看板时，系统会<strong>复制并应用该图表在加入时刻的样式配置</strong>。这种方式允许同一个引用图表在不同的看板中拥有独立且多样的配置设置。如果主图表进行了更新，直接同步这些更改会导致各看板上针对该引用图表所做的个性化调整丢失。</p>
<p>不过，您可以手动<strong>同步引用图表的样式配置</strong>，这样可以在保持个性化的前提下选择性地应用新的样式或功能更新。</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091003364.png" alt="" /></p>
<h2 id="内嵌图表"> 内嵌图表</h2>
<div><p>引用图表的问题</p>
<ul>
<li>从我们生产使用过程中与用户的实际反馈发现, 随着看板的增多, 图表的数据量会呈现急剧增长趋势;</li>
<li>起初为了图表可以在多个看板中重复引用, 特意把图表设计作为一个独立的模块维护与管理, 实际上这样的场景又非常的少见;</li>
<li>又或是用户在只需要发送仅包含一个图表的看板情况下不得不单独先设计与保存图表, 在看板废弃和删除之后, 还需要去图表管理模块找到对应图表手工删除;</li>
<li>另外, 由于看板与图表之间的权限是独立管理的; 在主题模块维护不太清晰的情况下经常会出现看板授权之后, 看板上的图表权限没有授权;</li>
</ul>
</div>
<p>为了解决上述看板设计, 图表管理上的诸多不便, 在进行自由布局开发与改造的过程当中我们引入了新的看板设计模式<code>内嵌图表</code>; 图表定义数据直接保存在看板元数据中, 不在独立保存; 看板删除之后所有的数据一并被删除;</p>
<ul>
<li>在引入内嵌图表之后, 原有的引用式的图表添加依旧可以正常使用;</li>
<li>内嵌图表的设计过程与原独立维护图表体验相同;</li>
<li>编辑与修改内嵌图表定义, 在看板实时实时生效;</li>
</ul>
<p><img src="./../../assets/board/cn-inline-chart.gif" alt="" /></p>
<h3 id="引用图与内嵌图转换"> 引用图与内嵌图转换</h3>
<p>在看板中，引用图与内嵌图之间支持互相转换。这意味着您可以根据需要灵活地将引用图表转变为内嵌图表，或将内嵌图表转换为引用图表。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091014786.png" alt="" /></p>
<h2 id="复杂报表"> 复杂报表</h2>
<ul>
<li>菜单栏<code>图表</code>-&gt;<code>添加复杂报表</code>, 弹出已保存复杂报表列表, <strong>双击</strong>报表节点即可将其添加到看板上, 然后用户根据自己的需求进行组件大小与位置调整</li>
<li><strong>报表容器高度调整之后，需要手动刷新，重新计算报表分页</strong></li>
</ul>
<h3 id="复杂报表标题配置"> 复杂报表标题配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-report-title.gif" alt="" /></p>
<h3 id="复杂报表分页配置"> 复杂报表分页配置</h3>
<p>页脚配置</p>
<ul>
<li><strong>不显示页脚</strong>: 报表取消分页</li>
<li><strong>配置页面样式</strong>: 页码样式支持配置背景色、字体等</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-report-footer.gif" alt="" /></p>
<h3 id="复杂报表其他配置"> 复杂报表其他配置</h3>
<ul>
<li><strong>列宽拉伸</strong>: 当总列宽小于容器列宽时按百分比拉伸, <strong>2.2之前的版本，调整列宽拉伸配置之后需要手动刷新报表生效</strong>
<img src="http://qiniu.ibidemo.cn/picgo/board-report-stretch.gif" alt="" /></li>
<li><strong>是否显示导出</strong>: 控制是否显示报表导出按钮</li>
<li><strong>边距</strong>: 控制报表在容器中的边距</li>
</ul>
<h2 id="标签页"> 标签页</h2>
<p>标签页一个标签中配置一个图表, 标签页组件的右上角菜单用于调整标签本身配置，位于标签中的图表配置在标签中右侧</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091033369.png" alt="" /></p>
<h2 id="标签页容器"> 标签页容器</h2>
<p>标签页容器的每个标签页中可以放置多个图表，并支持与网格布局相同的使用体验，灵活满足多场景展示需求。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191659044.png" alt="标签页容器" /></p>
<h2 id="编辑图表"> 编辑图表</h2>
<ul>
<li>内嵌图表点击编辑、保存直接修改;</li>
<li>引用图表点击编辑跳转图表编辑页面, 跳转编辑页之前请确认当前看板已修改内容均已保存, 否则未保存的修改数据会丢失;</li>
</ul>
<blockquote>
<p>编辑引用图表的, 因为如果该图表被多个看板引用, 修改之后会影响多个看板;</p>
</blockquote>
<p><img src="./../../assets/board/cn-board-editchart.gif" alt="编辑图表" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">普通组件</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/2-board-comps/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/2-board-comps/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="文本"> 文本</h2>
<ul>
<li>文本组件可作为段落性标题，</li>
<li>结构包含: 标题、子标题、图标三元素</li>
<li>子标题留空在预览时不占位</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091757385.png" alt="" /></p>
<ul>
<li>配置项</li>
<li>标题和子标题支持点击直接编辑或在配置栏编辑两种模式</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091803857.png" alt="" /></p>
<h2 id="富文本"> 富文本</h2>
<p>默认为普通富文本编辑器模式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091817099.png" alt="" /></p>
<h3 id="markdown"> Markdown</h3>
<p>切换为Markdown模式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091817940.png" alt="" /></p>
<h3 id="html"> HTML</h3>
<p>HTML模式, 支持点击事件定义</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505091819702.png" alt="" /></p>
<h4 id="定义点击事件"> 定义点击事件</h4>
<ol>
<li>js事件定义中支持的参数params、原生axios(用于外部服务请求)等</li>
</ol>
<div><pre><code>// params为js调用传参
const params = {
    event, // 点击事件对象 
    token, // 当前用户认证token
    _axios, // BI axios请求实例，用于BI自身服务请求，使用该实例可以不设置请求头
    boardParameters,  // 看板参数
    variables, // 环境变量
};
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><ol start="2">
<li>html里面可以有多个元素，通过params.event.target判断是否点击的是目标对象</li>
<li>下面的案例为通过事件定义请求服务端端实现导出多个复杂报表</li>
</ol>
<div><pre><code><span>const</span> target <span>=</span> params<span>.</span>event<span>.</span>target<span>;</span>
<span>// console.log(_axios);</span>
<span>// 替换为加载图标</span>
<span>if</span> <span>(</span>target<span>.</span><span>getAttribute</span><span>(</span><span>'id'</span><span>)</span> <span>==</span> <span>'download'</span><span>)</span> <span>{</span>
    <span>const</span> url <span>=</span> target<span>.</span><span>getAttribute</span><span>(</span><span>'url'</span><span>)</span><span>;</span>
    <span>if</span> <span>(</span>target<span>.</span>isExport<span>)</span> <span>{</span>
        <span>return</span><span>;</span>
    <span>}</span>
    <span>const</span> originalContent <span>=</span> target<span>.</span>innerHTML<span>;</span> <span>// 保存原内容</span>
    target<span>.</span>innerHTML <span>=</span> <span>'&lt;i>&lt;/i> 下载中'</span><span>;</span>
    target<span>.</span>isExport <span>=</span> <span>true</span><span>;</span>
    
    <span>// 传入reports对象数组则可以下载多个报表</span>
    <span>const</span> reports <span>=</span> <span>[</span><span>{</span>
        <span>id</span><span>:</span> <span>230216164924406</span><span>,</span>
        <span>name</span><span>:</span> <span>'Mexico'</span><span>,</span>
        <span>filters</span><span>:</span> <span>[</span><span>{</span>
            <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
            <span>columnName</span><span>:</span> <span>'sales_country'</span><span>,</span>
            <span>filterType</span><span>:</span> <span>'='</span><span>,</span>
            <span>values</span><span>:</span> <span>[</span><span>'Mexico'</span><span>]</span><span>,</span>
        <span>}</span><span>]</span><span>,</span>
        <span>// 环境变量</span>
        <span>variables</span><span>:</span> <span>{</span>
            <span>foo</span><span>:</span> <span>'bar'</span><span>,</span>
            <span>month_range</span><span>:</span> <span>'1,10'</span>
        <span>}</span>
    <span>}</span><span>,</span> <span>{</span>
        <span>id</span><span>:</span> <span>230216164924406</span><span>,</span>
        <span>name</span><span>:</span> <span>'Canada'</span><span>,</span>
        <span>filters</span><span>:</span> <span>[</span><span>{</span>
            <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
            <span>columnName</span><span>:</span> <span>'sales_country'</span><span>,</span>
            <span>filterType</span><span>:</span> <span>'='</span><span>,</span>
            <span>values</span><span>:</span> <span>[</span><span>'Canada'</span><span>]</span><span>,</span>
        <span>}</span><span>]</span>
    <span>}</span><span>]</span><span>;</span>
    
    <span>// reportView/exportExcelById为根据报表ID下载Excel</span>
    <span>// 传入id则只下载一个报表</span>
    <span>// 传入reports对象数组则可以下载多个报表</span>
    <span>// 同一个报表可以在出现多次，filters控制过滤参数</span>
    params<span>.</span>_axios<span>.</span><span>post</span><span>(</span><span>'reportView/exportExcelById'</span><span>,</span> 
            <span>{</span>
                <span>reports</span><span>:</span> <span>JSON</span><span>.</span><span>stringify</span><span>(</span>reports<span>)</span>
                <span>// id: 230216164924406</span>
            <span>}</span><span>,</span> <span>{</span>
                <span>responseType</span><span>:</span> <span>'blob'</span><span>,</span>
                <span>headers</span><span>:</span> <span>{</span>
                <span>// header这一段如果使用params._axios不需要设置</span>
                <span>// 如果使用原生axios请求外部服务根据需要设置</span>
                    <span>'Content-Type'</span><span>:</span> <span>'application/x-www-form-urlencoded'</span><span>,</span>
                    <span>token</span><span>:</span> params<span>.</span>token
                <span>}</span>
            <span>}</span><span>)</span>
        <span>.</span><span>then</span><span>(</span><span>response</span> <span>=></span> <span>{</span>
            <span>// 创建 URL 并下载文件</span>
            <span>const</span> url <span>=</span> window<span>.</span><span>URL</span><span>.</span><span>createObjectURL</span><span>(</span>response<span>.</span>data<span>)</span><span>;</span>
            <span>const</span> a <span>=</span> document<span>.</span><span>createElement</span><span>(</span><span>'a'</span><span>)</span><span>;</span>
            a<span>.</span>href <span>=</span> url<span>;</span>
            a<span>.</span>download <span>=</span> <span>'报表.xlsx'</span><span>;</span> <span>// 设置下载文件的名称</span>
            document<span>.</span>body<span>.</span><span>appendChild</span><span>(</span>a<span>)</span><span>;</span>
            a<span>.</span><span>click</span><span>(</span><span>)</span><span>;</span>
            window<span>.</span><span>URL</span><span>.</span><span>revokeObjectURL</span><span>(</span>url<span>)</span><span>;</span> <span>// 释放 URL</span>
        <span>}</span><span>)</span><span>.</span><span>catch</span><span>(</span><span>error</span> <span>=></span> <span>{</span>
            console<span>.</span><span>error</span><span>(</span><span>'下载失败'</span><span>,</span> error<span>)</span><span>;</span>
        <span>}</span><span>)</span>
        <span>.</span><span>finally</span><span>(</span><span>(</span><span>)</span> <span>=></span> <span>{</span>
            <span>// 恢复原始内容和点击功能</span>
            target<span>.</span>innerHTML <span>=</span> originalContent<span>;</span>
            target<span>.</span>style<span>.</span>pointerEvents <span>=</span> <span>'auto'</span><span>;</span>
            target<span>.</span>isExport <span>=</span> <span>false</span><span>;</span>
        <span>}</span><span>)</span><span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br><span>72</span><br><span>73</span><br><span>74</span><br></div></div><h2 id="图片"> 图片</h2>
<ul>
<li>支持多张<strong>图片轮播</strong></li>
<li>支持<strong>上传图片</strong>或<strong>网络图片地址</strong></li>
<li>网络图片地址支持<strong>环境变量解析</strong></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230810181350.png" alt="" /></p>
<h2 id="添加iframe组件"> 添加IFrame组件</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220214155257.png" alt="" /></p>
<h3 id="iframe联动交互"> IFrame联动交互</h3>
<div><p>iframe与看板联动交互</p>
<p>Iframe与看板直接可以通过postMessage消息机制交互，即iframe按约定格式发送消息，看板监听处理不同类别的消息，
iframe支持的的消息格式如下:</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/iframe-msg.gif" alt="" /></p>
<h4 id="环境变量"> 环境变量</h4>
<ol>
<li>单个变量</li>
</ol>
<div><pre><code>window.parent.postMessage({
    name: &#39;ibi.widgetLink&#39;,
    params: [
        {type: &#39;env&#39;, val: {id: &#39;year&#39;, value: 2019}},
    ],
}, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ol start="2">
<li>多个变量</li>
</ol>
<div><pre><code>window.parent.postMessage({
    name: &#39;ibi.widgetLink&#39;,
    params: [
        {type: &#39;env&#39;, val: {id: &#39;year&#39;, value: 2019}},
        {type: &#39;env&#39;, val: {id: &#39;month&#39;, value: 10}},
    ],
}, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h4 id="弹窗图"> 弹窗图</h4>
<div><pre><code>window.parent.postMessage({
    name: &#39;ibi.widgetLink&#39;,
    params: [
        {
            type: &#39;popup-widget&#39;, 
            targetId: 1, // 图表ID
            val: { alias: &#39;年&#39;, column: &#39;the_year&#39;, type: &quot;=&quot;, values: [&#39;2016&#39;] }
        },
    ],
}, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h4 id="数据集"> 数据集</h4>
<div><pre><code>window.parent.postMessage({
    name: &#39;ibi.widgetLink&#39;,
    params: [
        {
            type: &quot;dataset&quot;, 
            targetId: 1, // 数据集ID
            val: { alias: &#39;年&#39;, column: &#39;the_year&#39;, type: &quot;=&quot;, values: [&#39;2016&#39;] }
        },
    ],
}, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h4 id="图表"> 图表</h4>
<div><pre><code>window.parent.postMessage({
    name: &#39;ibi.widgetLink&#39;,
    params: [
        {
            type: &quot;widget&quot;, 
            targetId: &#39;xp1lbw1j9cs&#39;, // 图表sid
            val: { alias: &#39;年&#39;, column: &#39;the_year&#39;, type: &quot;=&quot;, values: [&#39;2016&#39;] }
        },
    ],
}, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">图表联动</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/4-board-link/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/4-board-link/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>看板图表联动通过选择或点击某个图表的元素来动态筛选其他图表的数据，相比看板参数，它提供了一种更为直观和交互式的数据探索方式。这种方式减少了用户手动设置筛选条件的步骤，使得数据分析过程更加流畅高效，增强了用户体验。同时，它能够实时展现数据间的关联与影响，有助于更快速地发现洞察。</p>
<ul>
<li>一对多联动, 支持联动到数据集或者单个图表;</li>
<li>支持排除指定图表的关联;</li>
<li>主动关联与被动状态关联状态可见, 用户可以清除发出的主动关联;</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/cn-chartlink-dataset.gif" alt="" /></p>
<h2 id="联动数据集与图表"> 联动数据集与图表</h2>
<ul>
<li>看板编辑状态下，从图表右上角功能菜单进入 <strong>图表联动</strong> 设计卡片, 进入联动设计界面;</li>
<li>点击, 添加 <strong>关联对象</strong>, 选择联动对象类型
<img src="http://qiniu.ibidemo.cn/picgo/202505141517887.png" width="600"></li>
<li>确定添加, 联动对象以标签页的形式出现在下方;</li>
<li>一个图表的点击事件可以关联到多个对象, 设计器下方一个标签页代表一个联动对象定义;</li>
<li>选择指定点击事件 <strong>源字段</strong>: 源字段与图表设计的行维/列维相对应;</li>
<li>选择关联对象 <strong>目标字段</strong>: 目标字段与目标对应的数据集或者 AD-HOC 查询相对应, 目标字段通过点击左侧模型树节点选择;</li>
<li>选定源字段与目标字段之后, 点击 <strong>添加条件</strong> 保存关联条件;</li>
<li>一次点击事件涉及多个维度信息, 用户可以添加其中一个或件多个关联动条件;</li>
<li>联动全局设置: 默认排除自身, 此外还可以选择排除其他的图表不响应联动时间;</li>
<li>添加完毕确认保存;</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141513874.png" alt="" /></p>
<h3 id="联动状态查看与取消联动"> 联动状态查看与取消联动</h3>
<ul>
<li>为了让用户了解当前看板数据是否有被联动过滤, 每个发出与接收到联动过滤的图表右上角都会显示状态图表;</li>
<li>看板左下角有当前联动值条件显示</li>
<li>联动状态关闭按钮，可以取消<code>主动</code>发出的联动事件</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-chart-link-status.gif" alt="" /></p>
<h2 id="联动到看板"> 联动到看板</h2>
<ul>
<li>点击事件也可以联动到另外一个同类型的看板</li>
<li>事件参数可以与被连接看板上的参数发生关联，因为联动事件取值通常只有一个值，所以被关联的看板参数类型只能是等值比较，不能是区间比较</li>
<li>也可以不指定参数关联</li>
</ul>
<div>
<img src="../../assets/board/cn-chartlink-dashboard.png"  />
<p>联动到看板</p>
</div>
<h2 id="联动到外部链接"> 联动到外部链接</h2>
<ul>
<li>点击事件可以跳转到任意外部链接</li>
<li>事件参数可以转化为 url 参数，参数别名可以自定义</li>
</ul>
<div>
<img src="../../assets/board/cn-chartlink-url.png"  />
<p>联动到外部地址</p>
</div>
<h2 id="联动弹窗图表"> 联动弹窗图表</h2>
<ul>
<li>点击事件在看板弹窗，可以用来显示不在看板上图表</li>
<li>如点击 KPI 弹出表格显示对应图表</li>
</ul>
<p><strong>操作流程</strong></p>
<blockquote>
<ol>
<li>添加联动对象，选择<strong>外部弹窗</strong></li>
<li>点击浏览，从图表目录树中选择需要关联的图表</li>
<li>在确认关闭关联对象窗口</li>
<li>在联动配置<strong>关联对象</strong>栏配置关联规则</li>
<li>选择源字段(来自源图表行列维度), 对于 KPI 指标卡之类没有行列维度在图上显示的可以选择常量</li>
<li>选择过滤类型</li>
<li>输入常量值</li>
<li>从左侧目标对应模型选择关联目标字段</li>
<li>添加条件</li>
<li>正确关联条件出现在关联条件目录卡之后，确认关闭联动配置窗口</li>
</ol>
</blockquote>
<div>
<img src="../../assets/board/cn-board-dialog-chart.png"  />
<p>弹窗联动</p>
</div>
<h2 id="复杂报表联动事件定义-主动"> 复杂报表联动事件定义(主动)</h2>
<p>报表的点击事件是通过，<strong>目标单元格</strong>(单元格匹配-单元格排除)加<strong>单元格表达式</strong>(Expression)，来定义源点击事件信息</p>
<h3 id="单元格定义语法"> 单元格定义语法</h3>
<div><pre><code>A1: A1单元格
A: A列所有单元格
1: 第1行所有单元格
A1,B,C: 多个匹配直接用英文逗号分隔
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="expression-表达式"> Expression 表达式</h3>
<p>Expression 表达式为取值表达式，可以理解为在点击单元格上运行表达式动态取值，</p>
<ul>
<li>如点击</li>
<li>为必填字段</li>
</ul>
<blockquote>
<p>#号是最简单的表达式取值为取<strong>当前点击单元格的值</strong></p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505151558291.png" alt="" /></p>
<h2 id="联动参数到环境变量"> 联动参数到环境变量</h2>
<p>关联到环境变量之后, 可以用于数据集和查询变量设置, 看板 API 动态请求参数, Query 变量赋值等</p>
<blockquote>
<p>一次联动可以产生多个值, 因此添加联动对象窗口 key 值任意输入即可, 真正联动变量名与维度值关系板顶在联动对象编辑栏</p>
</blockquote>
<div>
<img src="../../assets/board/board-widget-link-env.png"  />
<p>联动数据到环境变量</p>
</div>
<h3 id="echarts标题支持变量v1-10"> ECharts标题支持变量<sup>v1.10</sup></h3>
<ul>
<li>标题支持变量, 包含联动信息、环境变量、维度信息</li>
</ul>
<div><pre><code>环境变量: ${envVars}
变量可以省略envVars前缀如：${year} == ${envVars.year}
联动信息: ${links}
列维度数组: ${groups}
行维度数组: ${keys}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230515110304.png" alt="" /></p>
<p>在数据信息发生发生变化时，动态的变更标题</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/dynamic-title.gif" alt="" /></p>
<h2 id="多联动事件"> 多联动事件</h2>
<p>升级前点击联动事件只能区分下钻和联动，多个联动事件只能触发优先级最高的事件（比如联动到看板和数据集同时配置只能触发联动到看板），配置联动到多个看板，选取联动只能生效一个，升级后可以配置</p>
<ul>
<li>联动到同类型多个对象,</li>
<li>联动到不同类型多个对象</li>
<li>通过弹层菜单让用户自由选择当前触发指定联动对象</li>
<li>支持配置<strong>联动别名</strong>(相同别名或者不配置别名能够同时触发)</li>
</ul>
<img src="http://qiniu.ibidemo.cn/picgo/20230104160526.png" width="400">
<h3 id="交叉表联动区分行表头、列表头、数据"> 交叉表联动区分行表头、列表头、数据</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160558.png" alt="" /></p>
<p>交叉表通过触发部位选择定位联动事件类型，实现点击行、列表头、不同指标列触发不同的联动事件</p>
<ol>
<li>区分行维表头到具体列</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160619.png" alt="" /></p>
<ol start="2">
<li>区分列维表头到具体行</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160638.png" alt="" /></p>
<ol start="3">
<li>区分数据到具体指标</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160658.png" alt="" /></p>
<ol start="4">
<li>明细表联动区分到指定列</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160715.png" alt="" /></p>
<ol start="5">
<li>另外</li>
</ol>
<ul>
<li>只有单一联动的事件直接触发，不再出弹层，增加便捷性</li>
<li>精准联动样式显示，只有联动事件的列会增加下划线</li>
</ul>
<h2 id="源字段-常量-支持表达式解析v2-4"> 源字段“常量&quot;支持表达式解析<sup>v2.4</sup></h2>
<p><strong>功能背景</strong></p>
<p>当我们在指标中包含了维度信息，如下面的指标卡，<code>去年同期销售额</code>、<code>今年销售额</code></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511121652182.png" alt="" /></p>
<p>两个指标中都包含了日期维度过滤条件，但是没有维度配置，这种情况下如何联动点击指标过滤其他图表到对应指标的日期范围呢？</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511121654210.png" alt="" /></p>
<p><strong>核心能力</strong></p>
<ul>
<li>支持在联动常量值规则中嵌入环境变量表达式，通过内置cdt工具类自动计算日期范围（如当年 / 去年首日、日期偏移等），实现 “指标点击→动态日期计算→全看板图表联动过滤” 的闭环。</li>
<li>同一个图表支持多次联动到同一个数据集对象。</li>
</ul>
<p><strong>联动定义如下：</strong></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511121704759.png" alt="" /></p>
<ol>
<li><strong>去年同期销售指标</strong></li>
</ol>
<div><pre><code>-- 触发指标选择去年同期
// 通过变量表达式计算去年第一天日期
r_date &gt;= ${cdt.startOfYear(cdt.addYear(-1), &quot;yyyy-MM-dd&quot;)} 
// 通过变量计算去年今天日期
r_date &lt;= ${cdt.addYear(-1, &quot;yyyy-MM-dd&quot;)}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><ol start="2">
<li><strong>今年销售额</strong></li>
</ol>
<div><pre><code>-- 触发指标选择今年销售额
// 通过变量表达式计算今年第一天
r_date &gt;= ${cdt.startOfYear(cdt.now(), &quot;yyyy-MM-dd&quot;)}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/board-link-constvar.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">查询参数组件</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/3-board-params/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/3-board-params/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p><strong>看板参数(筛选器)的作用</strong></p>
<p>看板参数的主要作用是让用户能够动态地调整和筛选数据显示，从而满足个性化需求或探索特定的数据视角。通过设置不同的参数，用户可以轻松地对数据集进行过滤，进而获得更加深入的数据洞察。</p>
<p><strong>看板参数的类型</strong></p>
<p>看板参数提供了多种类型的输入方式，以适应不同的使用场景和需求：</p>
<ul>
<li><strong>通过过滤</strong>：通用过滤器，可以实现 [=, ≠, &gt;, &lt;, 区间查询, 关键词查询] 等所有形式的过滤</li>
<li><strong>下拉选框</strong>：从预定义的选项列表中选择一个或多个值。</li>
<li><strong>日期范围</strong>：选择一个时间间隔，用以限定查询的数据时间段。</li>
<li><strong>日期</strong>：选择具体的日期作为查询条件。</li>
<li><strong>复选框</strong>：允许多选，适合需要从一系列选项中挑选出符合要求的组合。</li>
<li><strong>单选</strong>：从一组选项中选出一个值，通常用于明确的选择情况。</li>
<li><strong>范围查询</strong>：输入数值区间，适用于基于数值范围的筛选需求。</li>
<li><strong>关键词搜索</strong>：通过输入关键字来快速查找匹配的数据记录。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131559429.png" alt="" /></p>
<h2 id="添加参数-筛选器"> 添加参数(筛选器)</h2>
<p>看板编辑模式下，菜单栏 选择 <strong>参数</strong>，添加看板参数</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131643710.png" alt="" /></p>
<h3 id="关联对象"> 关联对象</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131641914.png" alt="" /></p>
<p>看板参数通过添加 <strong>关联对象</strong> 建立与图表之间的关联</p>
<ul>
<li>关联对象可以是数据集或者单个图表</li>
<li>一个参数可以关联多个不同的数据集或图表</li>
<li>关联对象为环境变量时，参数变更时所有使用了环境变量的组件都会被影响</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131622828.png" alt="" /></p>
<h4 id="关联到数据集"> 关联到数据集</h4>
<p>推荐优先选择参数与数据集模型维度节点关联, 通过关联到数据集之后，数据集对应的所有图表都会与看板参数建立连接;</p>
<h4 id="排除关联图表"> 排除关联图表</h4>
<p>当我们通过数据集把看板参数间接关联到所有基于该数据集的图表之后，如果其中某个图表(如:<strong>全年销售总额</strong>)不希望受该参数的影响，可以使用参数排除对象配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131717946.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131719047.png" alt="" /></p>
<h4 id="关联到环境变量"> 关联到环境变量</h4>
<p>关联到环境变量之后, 可以用于数据集和查询变量设置, 看板 API 动态请求参数, Query 变量赋值等</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131731298.png" alt="" /></p>
<h3 id="看板参数关联字段设置"> 看板参数关联字段设置</h3>
<p><strong>添加关联对象之后，当前参数具体作用到数据集哪个维度字段呢</strong>？
一个数据集有多个字段，所以您还需要设定关联到数据集的具体字段，告诉当前参数是进行 日期列筛选、还是国家列筛选</p>
<div><p>图表中没有使用字段</p>
<p>看板参数可以关联到数据集的所有字段，即使该字段没有在图表上使用，也能关联</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-param-linkcolumn.gif" alt="" /></p>
<h2 id="通用过滤器"> 通用过滤器</h2>
<ul>
<li>通用过滤器与自助分析中过滤器类似，可以实现 [=, ≠, &gt;, &lt;, 区间查询, 关键词查询] 等所有形式的过滤</li>
<li>如果不希望用户加载关联字段内容，可以在参数配置栏关闭 <strong>允许加载</strong> 开关，这样用户就只能通过手工输入的方式设定过滤值</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131739812.png" alt="" /></p>
<h2 id="日期范围过滤"> 日期范围过滤</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131745853.png" alt="" /></p>
<p>日期范围筛选器的配置项允许用户自定义日期选择器的行为和外观，以满足不同的数据筛选需求。以下是各个配置项的作用解释：</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>日期类型</td>
<td>用户可以选择的日期粒度，具体包括：<br> <strong>年范围</strong>, <strong>月范围</strong>, <strong>日范围</strong>, <strong>周范围</strong>, <strong>季度范围</strong></td>
</tr>
<tr>
<td>类型切换</td>
<td>控制在看板<strong>查看状态</strong>下是否允许用户在不同的日期类型之间进行切换。<br> <strong>日期类型切换关联的字段必须为日期类型, 不能是字符串日期</strong> <br> 开启类型切换之后，切换到不同的日期类型，日期传值自动根据类型切换 <br></td>
</tr>
<tr>
<td>日期值格式</td>
<td>选定的日期以何种值格式传递<br> <b>当关联字段为日期类型时不需要设置</b>，系统将根据日期类型自动设置日期格式 <br>传值格式常用于以下场景： <br> - 关联字段为 字符串日期 : 如yyyyMM, 202501 <br> - 关联到环境变量 之后用于 字符串拼接</td>
</tr>
<tr>
<td>过滤类型</td>
<td>定义日期范围如何应用于数据过滤，如闭区间<code>[a,b]</code>或开区间<code>(a,b)</code>等。</td>
</tr>
<tr>
<td>最大天数</td>
<td>设置用户可选择的最大日期跨度，例如30表示最大只能选30天的范围。</td>
</tr>
<tr>
<td>最小/大日期距今</td>
<td>设置日期控件上用户可以选的日期, 小于最小、大于最大的日期既不能作为起始日期也不能作为结束日期。</td>
</tr>
<tr>
<td>可清空</td>
<td>允许用户清除已选择的日期设置，恢复默认关闭。</td>
</tr>
<tr>
<td>动态日期</td>
<td>启用后，<strong>看板初始化加载时根据当前日期自动计算并设置日期范围</strong></td>
</tr>
<tr>
<td>开启快捷日期</td>
<td>启用后，在日期选择器中显示预设的快捷日期选项，方便快速选择。</td>
</tr>
<tr>
<td>快捷日期</td>
<td>用户可以自定义快捷日期选项，包括名称（如“最近1周”）、偏移量和单位等。</td>
</tr>
<tr>
<td>日期格式</td>
<td>设置日期的显示格式，如<code>yyyy-MM-dd</code>表示年-月-日格式。</td>
</tr>
<tr>
<td>连接符号</td>
<td>设置日期范围中的连接符号，默认为<code>~</code>，也可以修改为其他符号，如<code>-</code>或<code>至</code>。</td>
</tr>
</tbody>
</table>
<h3 id="动态日期"> 动态日期</h3>
<p>动态日期配置开启后，<strong>看板初始化加载时根据当前日期自动计算并设置日期范围</strong></p>
<p><strong>开始日期距今</strong> 和 <strong>结束日期距今</strong> 分别用于定义日期范围的起始点和终止点相对于当前日期的偏移值。</p>
<ul>
<li><strong>数值</strong>：输入具体的天数、周数、月数或年数, <strong>负数</strong>代表往前偏移。</li>
<li><strong>单位</strong>：选择时间单位，如“天”、“周”、“月”或“年”。</li>
</ul>
<p>例如：</p>
<ul>
<li>如果设置“开始日期距今”为“-7 天”，表示到7天前的日期结束。</li>
<li>如果设置“结束日期距今”为“0 天”，表示从今天开始。</li>
</ul>
<p><strong>取起始值</strong> 用于把动态偏移之后的日期日计算到 指定 类型 的“第一天”或“最后一天”。</p>
<ul>
<li><strong>年、月、日、周</strong>：选择时间粒度。</li>
<li><strong>开始/结束</strong>：确定是基于周期的开始还是结束。</li>
</ul>
<p>例如：
假设今天是2023年10月5日，我们希望查看上一个月的数据，并且想要数据范围从上一个月的第一天到最后一天：</p>
<p>通过这些配置项，用户可以灵活地定义动态日期范围，以满足不同场景下的数据筛选需求，同时保持操作的简便性和结果的准确性。</p>
<h3 id="日期类型切换"> 日期类型切换</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191702946.png" alt="" /></p>
<p>日期类型切换功能允许用户在不同的时间粒度（如年、月、周等）之间灵活切换，以满足不同场景下的数据查询和分析需求。这种切换不仅改变了用户界面中的日期选择方式，还直接影响了后台数据库查询的逻辑和格式化方式。以下是详细的解释：</p>
<p><strong>日期类型切换原理</strong></p>
<p>当用户在前端界面上选择不同的日期类型时（例如从“年”切换到“月”），系统会根据当前选中的日期类型动态调整日期选择器的显示和交互方式：</p>
<ul>
<li><strong>年</strong>：用户可以选择具体的年份。</li>
<li><strong>月</strong>：用户可以选择具体的月份。</li>
<li><strong>周</strong>：用户可以选择具体的一周。</li>
<li><strong>日</strong>：用户可以选择具体的日期。</li>
</ul>
<p><strong>数据库查询逻辑变化</strong></p>
<p>后台数据库查询逻辑会根据用户选择的日期类型自动调整日期字段的格式化方式，以确保查询结果的准确性和一致性, 如：</p>
<ul>
<li><strong>选择年份</strong>：数据库查询通过<code>DATE_FORMAT(日期字段, 'yyyy')</code>来提取并匹配年份信息。</li>
<li><strong>选择月份</strong>：数据库查询通过<code>DATE_FORMAT(日期字段, 'yyyy-MM')</code>来提取并匹配年月信息。</li>
</ul>
<p><strong>关联字段要求</strong></p>
<p>为了保证日期类型切换功能的正确性和有效性，关联的字段必须是日期类型，而不能是字符串类型的日期表示。这是因为：</p>
<ul>
<li><strong>日期类型字段</strong> 可以被 <code>date_format</code> 函数处理。</li>
</ul>
<p><strong>示例说明</strong></p>
<p>假设有一个订单表，其中包含一个<code>order_date</code>字段，记录了每个订单的日期信息。用户选择了“年”作为日期类型，并选择了2024年，则数据库查询语句可能如下：</p>
<div><pre><code><span>SELECT</span> <span>*</span> <span>FROM</span> orders <span>WHERE</span> DATE_FORMAT<span>(</span>order_date<span>,</span> <span>'yyyy'</span><span>)</span> <span>=</span> <span>'2024'</span><span>;</span>
</code></pre>
<div><span>1</span><br></div></div><p>如果用户切换到“月”，并选择了2024年8月，则查询语句会自动调整为：</p>
<div><pre><code><span>SELECT</span> <span>*</span> <span>FROM</span> orders <span>WHERE</span> DATE_FORMAT<span>(</span>order_date<span>,</span> <span>'yyyy-MM'</span><span>)</span> <span>=</span> <span>'2024-08'</span><span>;</span>
</code></pre>
<div><span>1</span><br></div></div><p>这样，通过日期类型切换功能，用户可以方便地在不同的时间粒度上查看和分析数据，同时系统能够自动适配相应的查询逻辑，确保数据展示的准确性和效率。</p>
<h2 id="日期"> 日期</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505131747076.png" alt="" /></p>
<p><strong>单日期</strong> 筛选控件的配置与日期范围基本相同</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>日期类型</td>
<td>用户可以选择的日期粒度，具体包括：<br> <strong>年</strong>, <strong>月</strong>, <strong>日</strong>, <strong>周</strong>, <strong>季度</strong></td>
</tr>
<tr>
<td>类型切换</td>
<td>控制在看板<strong>查看状态</strong>下是否允许用户在不同的日期类型之间进行切换。<br> <strong>日期类型切换关联的字段必须为日期类型, 不能是字符串日期</strong> <br> 开启类型切换之后，切换到不同的日期类型，日期传值自动根据类型切换 <br></td>
</tr>
<tr>
<td>日期值格式</td>
<td>选定的日期以何种值格式传递<br> <b>当关联字段为日期类型时不需要设置</b>，系统将根据日期类型自动设置日期格式 <br>传值格式常用于以下场景： <br> - 关联字段为 字符串日期 : 如yyyyMM, 202501 <br> - 关联到环境变量 之后用于 字符串拼接</td>
</tr>
<tr>
<td>过滤类型</td>
<td>定义日期如何应用于数据过滤，如：=， &gt;, &lt;, &gt;=, &lt;=</td>
</tr>
<tr>
<td>最小/大日期距今</td>
<td>设置日期控件上用户可以选的日期, 小于最小、大于最大的日期既不能作为起始日期也不能作为结束日期。</td>
</tr>
<tr>
<td>可清空</td>
<td>允许用户清除已选择的日期设置，恢复默认关闭。</td>
</tr>
<tr>
<td>动态日期</td>
<td>启用后，<strong>看板初始化加载时根据当前日期自动计算并设置日期</strong></td>
</tr>
<tr>
<td>开启快捷日期</td>
<td>启用后，在日期选择器中显示预设的快捷日期选项，方便快速选择。</td>
</tr>
<tr>
<td>快捷日期</td>
<td>用户可以自定义快捷日期选项，包括名称（如“最近1周”）、偏移量和单位等。</td>
</tr>
<tr>
<td>日期格式</td>
<td>设置日期的显示格式，如<code>yyyy-MM-dd</code>表示年-月-日格式。</td>
</tr>
</tbody>
</table>
<h2 id="复选框"> 复选框</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505140941088.png" alt="" /></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>最少/多选择项</td>
<td>配置用至少、最多能选择几个项目</td>
</tr>
<tr>
<td>过滤类型</td>
<td>控制在看板<strong>查看状态</strong>下是否允许用户在不同的日期类型之间进行切换。<br> <strong>日期类型切换关联的字段必须为日期类型, 不能是字符串日期</strong> <br> 开启类型切换之后，切换到不同的日期类型，日期传值自动根据类型切换 <br></td>
</tr>
<tr>
<td>过滤类型</td>
<td>定义日期如何应用于数据过滤，如：=，≠</td>
</tr>
<tr>
<td>手动输入添加值</td>
<td>CheckBox 的选项为固定的静态选项，用户可以通过手工输入的方式维护选项<br></td>
</tr>
<tr>
<td>可选项</td>
<td>当前CheckBox的选项</td>
</tr>
<tr>
<td>添加目标字段成员</td>
<td>用户也可以从左侧加载目标字段成员之后，添加到可选项</td>
</tr>
</tbody>
</table>
<h3 id="选项值与选项名"> 选项值与选项名</h3>
<p>如果用户需要选项显示值与传递值区分开可以输入 <code>选项值|选项名称</code> 的格式添加选项</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141022723.png" alt="" /></p>
<h3 id="选项宽度设置"> 选项宽度设置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141032677.png" alt="" /></p>
<h2 id="单选"> 单选</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505140959054.png" alt="" /></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>过滤类型</td>
<td>控制在看板<strong>查看状态</strong>下是否允许用户在不同的日期类型之间进行切换。<br> <strong>日期类型切换关联的字段必须为日期类型, 不能是字符串日期</strong> <br> 开启类型切换之后，切换到不同的日期类型，日期传值自动根据类型切换 <br></td>
</tr>
<tr>
<td>过滤类型</td>
<td>定义日期如何应用于数据过滤，如：=，≠</td>
</tr>
<tr>
<td>手动输入添加值</td>
<td>CheckBox 的选项为固定的静态选项，用户可以通过手工输入的方式维护选项<br></td>
</tr>
<tr>
<td>可选项</td>
<td>当前CheckBox的选项</td>
</tr>
<tr>
<td>添加目标字段成员</td>
<td>用户也可以从左侧加载目标字段成员之后，添加到可选项</td>
</tr>
</tbody>
</table>
<h2 id="下拉选框"> 下拉选框</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141043641.png" alt="" /></p>
<h3 id="下拉框筛选器配置项"> 下拉框筛选器配置项</h3>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>是否单选</td>
<td>开启后，用户只能选择一个选项。</td>
</tr>
<tr>
<td>可清空</td>
<td>开启后，用户可以清除已选择的选项。</td>
</tr>
<tr>
<td>折叠多选</td>
<td>开启后，在多选模式下折叠显示已选择的选项。</td>
</tr>
<tr>
<td>选项排序</td>
<td>设置选项的排序方式，升序或降序</td>
</tr>
<tr>
<td>过滤类型</td>
<td>设置过滤条件的类型，如: =，≠, &gt;, &lt;</td>
</tr>
<tr>
<td>设置默认值</td>
<td>默认选择的值，用户可以在下方输入框中设置默认值，支持变量，点击“Test”按钮进行测试变量解析。</td>
</tr>
<tr>
<td>可选值查询</td>
<td>开启后，允许通过查询获取可选值。</td>
</tr>
<tr>
<td>允许创建条目</td>
<td>开启后，用户可以手动输入并创建新的选项条目。</td>
</tr>
<tr>
<td>默认选中第一个</td>
<td>开启后，默认选中列表中的第一个选项。</td>
</tr>
<tr>
<td>远程搜索</td>
<td>开启后，支持远程搜索功能，实时加载搜索结果。</td>
</tr>
<tr>
<td>显示选项值</td>
<td>开启后，在界面上显示具体的选项值。</td>
</tr>
<tr>
<td>使用缓存</td>
<td>开启后，使用缓存机制提高加载速度和性能。</td>
</tr>
</tbody>
</table>
<h3 id="下拉可选值查询"> 下拉可选值查询</h3>
<p>通过配置下拉框可选值查询维度字典表来提高选项获取效率，以及如何实现（选项值和选项名）分离的效果。</p>
<div><p>下拉框加载比较慢怎么办</p>
<p><strong>默认行为</strong></p>
<p>下拉框选项是<strong>通过关联的数据集字段构造子查询</strong>来获取的。如果这个数据集是一个性能较慢或比较大的事实表、视图，那么每次字段选项子查询都会带来较大的查询开销。</p>
<p><strong>可选值查询设置</strong></p>
<p>为了优化性能，用户可以启用“可选值查询”功能，<strong>并设置一个直接查询维度字典表的SQL语句</strong>。这种方法可以直接从专门设计用于快速查找的维度字典表中获取选项，从而显著提升选项加载速度和整体性能。</p>
</div>
<p><strong>示例配置</strong>: 假设我们有一个国家列表需要展示在下拉框中：</p>
<div><pre><code><span>SELECT</span> country_code <span>AS</span> option_value<span>,</span> 
       country_name <span>AS</span> option_name 
<span>FROM</span> countries<span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>在这个例子中：</p>
<ul>
<li><code>country_code</code> 是选项值，它将作为实际提交给服务器的值。</li>
<li><code>country_name</code> 是选项名，它是用户在界面上看到的文本。</li>
</ul>
<p><strong>总结</strong></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>设置可选值查询</td>
<td>用户可以指定一个直接查询维度字典表的SQL语句，提高选项加载效率。</td>
</tr>
<tr>
<td>选项值与选项名</td>
<td>当查询返回两个字段时，第一个字段作为选项值，第二个字段作为选项名。</td>
</tr>
<tr>
<td>示例SQL</td>
<td><code>SELECT option_value, option_name FROM dimension_dictionary;</code></td>
</tr>
</tbody>
</table>
<p>通过这种方式，不仅可以大幅减少因频繁查询大型事实表带来的性能问题，同时也能为用户提供更加友好和直观的操作体验。</p>
<h3 id="下拉框缓存不推荐的配置"> 下拉框缓存<sup>不推荐的配置</sup></h3>
<p>如果不配置可选值查询，在选项列表不会频繁变动的情况下，用户还可以打开下拉框缓存, 默认缓存有效期12小时，可配置。</p>
<p>以下场景下缓存不会生效：</p>
<ol>
<li>维度配置有可选项查询(包含参数配置与数据集维度配置)</li>
<li>数据集该字段配置有权限规则</li>
</ol>
<h3 id="下拉框参数级联"> 下拉框参数级联</h3>
<p>参数级联常用于有上下层级关系的两个下拉框之间，上级下拉框参数值变更之后下级下拉框选项内容被上级选项限定，如: 国家-&gt;大区, 公司-&gt;部门</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220503215749.png" alt="" /></p>
<ol>
<li>建立级联第一步是，在下级下拉框配置界面，打开级联开关，并选则级联上级参数<div><p>提示</p>
<p>当下级参数与正确的上级建立级联关系之后，仅代表上级变更，下级会刷新参数选项，并不代表下级能够利用上级的选项内容来限定选项</p>
</div>
</li>
<li>用户可以通过下面两种方式建立上下级选项直接的逻辑关系
2.1 <strong>方法1</strong> 上下级对应数据集中层级维度的上下级(后续的更新版本会尝试仅需要上下级在同一数据集即可建立逻辑关系)<div><p>维度层级</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220503220944.png" alt="" /></p>
</div>
2.2 <strong>方法2</strong> 上级关联环境变量，下级开启<code>可选值查询</code>，并在查询脚本中使用上级绑定的环境变量<div><p>上级国家绑定到country变量</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220503220353.png" alt="" /></p>
</div>
</li>
</ol>
<div><p>下级开启`可选值查询`</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220503220510.png" alt="" /></p>
</div>
<h3 id="下拉框选项远程搜索"> 下拉框选项远程搜索</h3>
<p>下拉框支持远程搜索使用场景，维度成员数量巨大超过阈值之后会被截断，远程搜索可以精确限定选项范围从而控制选项数量
维度字段上的远程搜索，自动通过字段like匹配,自动生成维度列查询如下：</p>
<div><pre><code><span>SELECT</span> sales_region <span>-- 维度字段</span>
<span>FROM</span> <span>(</span>
<span>-- 数据集查询定义</span>
<span>)</span> cb_view
<span>WHERE</span> sales_region <span>like</span> <span>'%we%'</span>
<span>GROUP</span> <span>BY</span> sales_region
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>您也可以在开启可选值查询中通过<code>keywords</code>内置变量自定义远程查询条件</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230421110041.png" alt="" /></p>
<h2 id="范围查询"> 范围查询</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141153080.png" alt="" /></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>交互类型</td>
<td>设置用户与筛选器之间的交互方式是滑动条还是输入框。</td>
</tr>
<tr>
<td>过滤类型</td>
<td>选择用于匹配输入值和数据集之间的关系类型，如[a,b]。</td>
</tr>
<tr>
<td>最小值</td>
<td>设置可选范围的下限。</td>
</tr>
<tr>
<td>最大值</td>
<td>设置可选范围的上限。</td>
</tr>
<tr>
<td>步长</td>
<td>设置滑动条每次移动的增量。</td>
</tr>
<tr>
<td>格式化</td>
<td>提供高级模式和配置格式化的选项，以便对显示的数据进行精细化控制。</td>
</tr>
<tr>
<td>信息栏宽度</td>
<td>设置滑动条右边展示的数据范围信息区域的宽度，单位为像素（px）。</td>
</tr>
</tbody>
</table>
<h2 id="输入框"> 输入框</h2>
<p>输入框多用于关键词搜索场景</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141151453.png" alt="" /></p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>过滤类型</td>
<td>选择用于匹配输入值和数据集之间的关系类型，如<code>like</code>, <code>not like</code>, <code>=</code>等。</td>
</tr>
<tr>
<td>多关键词</td>
<td>输入框中输入英文逗号会被拆解为多个关键词，<br>设置多个关键词之间的逻辑关系，可以选择<code>OR</code>或<code>AND</code>。</td>
</tr>
<tr>
<td>框内提示</td>
<td>为输入框提供提示信息，帮助用户理解应如何输入数据。</td>
</tr>
</tbody>
</table>
<h2 id="参数容器"> 参数容器</h2>
<p>默认情况下，看板参数通常被放置在看板头部的参数栏中。然而，如果需要在看板中间或特定位置添加查询参数，可以通过以下步骤实现：</p>
<ul>
<li><strong>在看板中间添加查询参数</strong></li>
<li><strong>添加看板参数容器</strong>：首先，在您希望添加查询参数的位置插入一个“看板参数容器”。这个容器可以像其他组件（例如图表、文本框等）一样，在看板上进行任意调整其位置和大小。</li>
<li><strong>调整看板参数容器</strong>：根据您的布局需求，调整该容器的位置和尺寸。这使得您可以精确控制查询参数出现在看板上的具体位置，并确保它与看板中的其他元素协调一致。</li>
<li><strong>在参数容器中添加参数组件</strong>：一旦参数容器就位，接下来就可以在其内部添加具体的参数组件了。这些组件可以包括但不限于日期范围选择器、下拉菜单、文本输入框等，用于接收用户的查询条件。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505141202226.png" alt="" /></p>
<h2 id="看板参数配置"> 看板参数配置</h2>
<ul>
<li>打开参数变更实时生效之后，每次改变参数内容不需要点击查询直接刷新看板</li>
<li>参数名宽度默认为80px，在参数配置中可以批量调整</li>
<li>看板参数支持设置参数名称在上输入项上方，支持统一设置高宽</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/param-position.gif" alt="" /></p>
<h2 id="网格看板参数隐藏"> 网格看板参数隐藏</h2>
<p>网格看板支持参数隐藏, 典型使用场景，看板间联动，传参且不希望该联动参数显示</p>
<ul>
<li>在编辑模式下，隐藏参数右上角会有已隐藏图标</li>
<li>在查看模式下，隐藏参数不显示</li>
<li>隐藏参数中如果有筛选条件，仍然生效</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-hide-param.gif" alt="" /></p>
<h2 id="环境变量控制参数是否显示"> 环境变量控制参数是否显示</h2>
<ul>
<li>环境变量控制参数是否显示, 参数显示时不生效</li>
<li>与隐藏不同，通过变量控制的是否显示的看板参数在不显示时，参数不参与筛选数据</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151808205.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-hidden-params.gif" alt="" /></p>
<h2 id="看板懒加载-v1-12"> 看板懒加载 <sup>v1.12</sup></h2>
<p>如果不希望打开看板之后图表立即加载，可开启看板被动加载，图表不会自动加载，在设置查询条件后手动点击查询按钮进行加载。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121111739.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/看板查询加载.gif" alt="" /></p>
<h2 id="我的常用参数组"> 我的常用参数组</h2>
<p>在看板参数上的参数比较多或者值选择比较复杂的时候, 为了避免用户重复的选择设置看板参数, 用户可以保存当前看板参数状态值为<code>常用参数组</code>, 之后需要改变条件时一键恢复</p>
<blockquote>
<p>保存的参数模板如果与当前看板上的参数不一致(模块保存之后, 某些参数被删除), 恢复参数组, 不会恢复被删除的参数</p>
</blockquote>
<div>
<img src="../../assets/board/cn-board-param-teamplate.gif"  />
<p>我的常用看板参数组</p>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">3D场景</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/_3d-model/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/_3d-model/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>从v1.14开始，大屏模板新增基于Threejs打造的3D模型组件，通过它您可以轻松制作的3D模型的展示效果</p>
<p>3D机房模型展示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_datacenter.gif" alt="" /></p>
<p>3D城市展示
<div style="text-align: center">
<img style="width: 100%" src="http://qiniu.ibidemo.cn/picgo/3d_city.gif" />
</div></p>
<div><p>我们从0-1支持了下列功能</p>
<ul>
<li>背景配置：支持透明背景、纯色背景、天空盒子(白天/夜晚等)</li>
<li>摄像机配置：
<ul>
<li>摄像机位置、朝向、Fov、Far</li>
<li>自动旋转</li>
</ul>
</li>
<li>灯光配置:
<ul>
<li>环境光</li>
<li>直线光：位置、照射目标、阴影、辅助器</li>
</ul>
</li>
<li>辅助器：
<ul>
<li>坐标轴辅助器</li>
<li>地面网格辅助器</li>
</ul>
</li>
<li>模型:
<ul>
<li>支持glb、gltf、obj模型上传</li>
<li>glb模型支持带draco压缩模型解析</li>
<li>根模型支持位置、旋转、缩放、投影、
<ul>
<li>添加模型网格线</li>
<li>光线扫描作色器(水平、横向、圆环扫描)</li>
<li>支持添加标注</li>
</ul>
</li>
<li>支持BI查询数据标注绑定
<ul>
<li>基于交叉表与模型名称的匹配的位置标注</li>
<li>支持多指标展示</li>
<li>支持边框、内边距、缩放、背景色等样式设置</li>
</ul>
</li>
</ul>
</li>
<li>钩子函数配置</li>
<li>支持看板联动配置
<ul>
<li>联动可以改变看板上其他图形的数据</li>
</ul>
</li>
<li>支持被联动配置
<ul>
<li>被联动改变数据标签内容</li>
</ul>
</li>
</ul>
</div>
<div><p>使用须知</p>
<p>在使用3D场景之前，需要您对3D场景有一些基础认知，比如：</p>
<ul>
<li>3D坐标系</li>
<li>摄像机</li>
<li>灯光</li>
<li>模型与材质
<ul>
<li>3D美术常用的三维建模软件，比如Blender、3dmax、C4D、maya等等</li>
</ul>
</li>
<li>3D项目中分工和流程
<ul>
<li>3D美术：使用三维建模软件绘制3D模型，导出gltf等常见格式</li>
<li>程序：加载解析三维软件导出的三维模型</li>
<li>比如使用Blender三维建模软件导出gltf格式模型，然后再通过程序加载三维模型</li>
</ul>
</li>
</ul>
</div>
<h2 id="添加3d模型组件"> 添加3D模型组件</h2>
<p>大屏菜单中选择<code>组件</code>→<code>3D场景</code>即可初始化一个空白3D场景到画布，点击3D场景，配置栏激活3D相关配置菜单</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_add_scene.gif" alt="" /></p>
<h2 id="背景"> 背景</h2>
<p>默认场景的<code>背景类型</code>为黑色背景色，可以配置背景色<code>透明度</code>，也可以改变<code>背景类型</code>为全透明的<code>无</code>便于更好的融入大屏，</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_scene_bg_none.gif" alt="" /></p>
<p>又或者调整为与大屏主题匹配的<code>天空盒子</code>，系统内置了白天、夜晚、沙漠三种场景</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_scene_skybox.gif" alt="" /></p>
<h2 id="摄像机"> 摄像机</h2>
<h3 id="摄像机原理简介"> 摄像机原理简介</h3>
<p>3D场景中摄像机可以理解为观测3D模型的介质，默认摄像头位置为(-30, 30, -30), 观测朝向为(0, 0, 0), fov垂直视野角度为50，
far最远可见远端距离为1000，超出far的内容则不可见</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428144140.png" alt="" />,</p>
<h3 id="摄像头控制器"> 摄像头控制器</h3>
<p>可以通过鼠标旋转摄像机和改变摄像机的朝向</p>
<ul>
<li>鼠标左键拖拽可以饶观测点上下左右旋转</li>
<li>鼠标滚轮可以调整与观测点的距离</li>
<li>鼠标右键拖拽可以平移摄像头，并改变观测对象</li>
</ul>
<p>调整摄像头位置之后，点击<code>获取当前摄像头位置</code>可以改变默认摄像头配置</p>
<h3 id="自动旋转"> 自动旋转</h3>
<p>开启自动旋转转之后，摄像机自动饶目标对象旋转观测，可以调旋转速度
上下旋转范围可以控制鼠标上下调整摄像头最大角度，默认90度, 可设置范围0-180度</p>
<h2 id="灯光"> 灯光</h2>
<h3 id="环境光"> 环境光</h3>
<p>场景默认增加强度为1的白色环境光，环境光会均匀的照亮场景中的所有物体，没有背光和朝光面之分，也不产生阴影。</p>
<h3 id="平行光"> 平行光</h3>
<p>如果希望产生类似太阳或者探照灯之类的效果可以添加平行光，由于开启阴影计算会有性能开销，默认平行光<code>投射阴影</code>为关闭状态。</p>
<div><p>注意</p>
<p>由于开启阴影计算会有性能开销，所以3D场景中物体产生阴影需要同时做三项设定</p>
<ol>
<li>灯光开启阴影</li>
<li>物体(网格对象Mesh如机架)投射阴影</li>
<li>物体(网格对象Mesh如地面)接受阴影</li>
</ol>
<p>为了方便设置投射和接受阴影的网格对象，我提供了在上传的根模型至少通过<code>名称规则</code>设置阴影的配置属性，在下面的模型配置章节会有介绍</p>
</div>
<h3 id="灯光辅助器"> 灯光辅助器</h3>
<p>开启灯光辅助器可以知道灯光在场景中的位置与照射方向(点光源没有照射方向)</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428152946.png" alt="" /></p>
<h2 id="辅助器配置"> 辅助器配置</h2>
<p>除了灯光对象辅助器之外，还可以通过配置开启<code>坐标轴</code>与<code>地面网格</code>辅助器, 辅助器配置简单且直观，故在此不再赘述。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428153400.png" alt="" /></p>
<h2 id="模型"> 模型</h2>
<h3 id="建模"> 建模</h3>
<p>3D美术常用的三维建模软件，比如Blender、3dmax、C4D、maya等等，BI仅提供加载解析三维软件导出的三维模型的功能。
建模工作一般由专业的3D美术建模师完成。</p>
<h3 id="模型上传"> 模型上传</h3>
<p>当前产品支持glb、gltf、obj模型上传，且glb模型支持带draco压缩模型解析。配置栏切换到模型，点击<code>上传模型</code>，选择支持格式的模型文件，
在模型上传成功且正常解析之后再<code>场景结构</code>中可见于模型文件名相同的对象分组, 该模型文件对应的模型对象后面称作<code>根模型</code>或<code>顶级模型</code>。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428154237.png" alt="" /></p>
<h3 id="位置-旋转-缩放"> 位置 旋转 缩放</h3>
<p><code>根模型</code>/<code>顶级模型</code>支持配置模型属性，如位置、旋转、缩放，旋转角度设置范围-360 ~ 360。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_trans.gif" alt="" /></p>
<h3 id="阴影生成规则"> 阴影生成规则</h3>
<p>再回顾一下我们在灯光配置章节提到的, 阴影生成规则：
由于开启阴影计算会有性能开销，所以3D场景中物体产生阴影需要同时做三项设定</p>
<ol>
<li>灯光开启阴影(在灯光配置项中开启)</li>
<li>物体(网格对象Mesh如机架)投射阴影</li>
<li>物体(网格对象Mesh如地面)接受阴影</li>
</ol>
<p>第2和第3点为了方便设置投射和接受阴影的网格对象，我提供了在上传的根模型至少通过<code>名称规则</code>设置阴影的配置属性, 如下图所示，通过设置投影网格名称为
<code>body,Desk,chair</code>，</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428163124.png" alt="" /></p>
<p>网格名称在建模软件中确定，可以在场景结构树中查看, 确保节点类型为网格(Mesh)，匹配名称不区分大小写</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240428181858.png" alt="" /></p>
<h3 id="添加模型网格线"> 添加模型网格线</h3>
<p>一键对顶层模型可以添加模型网格线</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_edge.gif" alt="" /></p>
<p>有贴图的物体，通过配合着色器覆盖原有表面贴图，从而实现纯色系网格模型</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_edge_shader.gif" alt="" /></p>
<h3 id="光线扫描作色器"> 光线扫描作色器</h3>
<h4 id="作色器颜色配置"> 作色器颜色配置</h4>
<p>请注意渐变色范围与物体本身的高度需匹配</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_shader_color.gif" alt="" /></p>
<h4 id="水平光动画"> 水平光动画</h4>
<p>可设置扫描光线宽度，扫描速度，颜色与扫描时最大高度</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_shader_rLightgif.gif" alt="" /></p>
<h4 id="平扫光动画"> 平扫光动画</h4>
<p>可设置扫描光线宽度，扫描速度，颜色与扫描时最大范围</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_shader_cLightgif.gif" alt="" /></p>
<h4 id="环形光动画"> 环形光动画</h4>
<p>可设置扫描光线宽度，扫描速度，颜色, 圆环中心，光环最大半径</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d_model_shader_circle.gif" alt="" /></p>
<h2 id="数据绑定"> 数据绑定</h2>
<p>在数据可视化中3D场景的引入核心还得与数据绑定，为了快速定义数据查询，我们提供了基于自助分析设计器的数据查询定义，操作步骤如下图所示(可点击图片放大查看)：</p>
<ol>
<li>点击<code>添加数据标签</code>或编辑已有数据标签</li>
<li>弹窗定义数据标签基础配置
<ul>
<li>别名: 区分不同类别的数据标签，保证模型中唯一</li>
<li>位置: 相对匹配到的模型对象相对位置偏移，默认位置为模型上方</li>
<li>触发类型: 定义单个数据标签在什么情况下显示，默认一直显示，可选点击和鼠标、悬停时显示</li>
<li>内边距：标签内边距定义</li>
<li>缩放: 3D场景中标签大小单位因为与场景单位一致，往往会出现标签过大的问题，通过缩放可更好的与场景匹配</li>
<li>定时刷新: 定义数据的更新间隔</li>
<li>边框图片: 点击改变边框图片</li>
</ul>
</li>
<li>配置数据：
<ul>
<li>点击配置数据按钮，进行自助分析数据查询界面</li>
<li>拖拽行维与指标，输出交叉表数据，输出结果的行维将会与模型中的节点名进行匹配，支持列维与多个指标</li>
</ul>
</li>
<li>数据配置完成点击保存数据配置关闭数据配置窗口，回到标签配置窗口点击确认数据标签配置将自动更新</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240429091408.png" alt="" /></p>
<h2 id="静态标签-标注"> 静态标签/标注</h2>
<p>动态数据标签的位置，由匹配模型节点决定，静态标注位置固定，操作步骤如下:</p>
<ol>
<li>点击场景结构后面的添加标注按钮</li>
<li>弹窗定义数据标签基础配置
<ul>
<li>别名: 区分不同类别的数据标签，保证模型中唯一</li>
<li>位置: 相对匹配到的模型对象相对位置偏移，默认位置为模型上方</li>
<li>触发类型: 定义单个数据标签在什么情况下显示，默认一直显示，可选点击和鼠标、悬停时显示</li>
<li>内边距：标签内边距定义</li>
<li>缩放: 3D场景中标签大小单位因为与场景单位一致，往往会出现标签过大的问题，通过缩放可更好的与场景匹配</li>
<li>定时刷新: 定义数据的更新间隔</li>
<li>边框图片: 点击改变边框图片</li>
</ul>
</li>
<li>支持配置动态数据内容
<ul>
<li>静态内容支持环境变量解析</li>
<li>切换动态数据内容支持API和Query两种请求方式</li>
<li>API请求要求返回数据结构内容为 <code>{text: '标签内容'}</code></li>
<li>Query请求展示首行字段中的<code>text</code>字段，如果没有<code>text</code>字段则取第一个字段内容展示</li>
</ul>
</li>
<li>每次点击树结构上的添加标注都会新建一个标注出来，树节点上的按钮仅为定位标注位置用，如果要编辑或者删除静态标注在标签列表操作</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240429134953.png" alt="" /></p>
<h2 id="联动配置"> 联动配置</h2>
<h3 id="联动"> 联动</h3>
<p>联动可以改变看板上其他图形的数据，</p>
<ul>
<li>由于3D场景中只有网格对象可以响应点击事件，所以联动事件只能定义到Mesh类型的节点</li>
<li>联动对象配置与图表联动配置一致，支持联动到数据集、图表、看板、环境变量等</li>
<li>源字段下拉选择常量</li>
<li>联动设置成功之后，可以被点击的对象会高亮提示</li>
<li>点击出发联动事件被点击物体自动聚焦</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240429143306.png" alt="" /></p>
<img style="width: 100%" src="http://qiniu.ibidemo.cn/picgo/3d_link.gif">
<h3 id="被联动"> 被联动</h3>
<ul>
<li>被联动改变数据标签内容, 作用原理，基于数据集的数据标签，在接收到数据集联动事件时，数据标签数值会被更新</li>
</ul>
<img style="width: 100%" src="http://qiniu.ibidemo.cn/picgo/3d_be_link.gif">
<h2 id="钩子函数"> 钩子函数</h2>
<p>同时为了实现更多个性化需求，支持在下列关键节点插入自定义代码：</p>
<ul>
<li>初始化之前(BeforeInit)</li>
<li>加载模型时(onLoadModel)</li>
<li>更新时(onAnimate/on requestAnimationFrame)</li>
<li>销毁时(onDispose)</li>
</ul>
<h3 id="context上下文中可使用变"> Context上下文中可使用变</h3>
<ul>
<li>vm: 指向vue组件</li>
<li>_3d: <code>const _3d = THREE;</code> 指向THREE库</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240429140513.png" alt="" /></p>
<h3 id="案例"> 案例</h3>
<p>在画面更新时使用下面的代码可以实现地面光线动画</p>
<div><pre><code><span>const</span> plane <span>=</span> vm<span>.</span>scene<span>.</span><span>getObjectByName</span><span>(</span><span>'polySurface136'</span><span>)</span><span>;</span>
<span>const</span> texture <span>=</span> plane<span>.</span>material<span>.</span>map<span>;</span>

<span>let</span> count <span>=</span> texture<span>.</span>repeat<span>.</span>y<span>;</span>
<span>if</span> <span>(</span>count <span>&lt;=</span> <span>10</span><span>)</span> <span>{</span>
  texture<span>.</span>repeat<span>.</span>x <span>+=</span> <span>0.01</span><span>;</span>
  texture<span>.</span>repeat<span>.</span>y <span>+=</span> <span>0.02</span><span>;</span>
<span>}</span> <span>else</span> <span>{</span>
  texture<span>.</span>repeat<span>.</span>x <span>=</span> <span>0</span><span>;</span>
  texture<span>.</span>repeat<span>.</span>y <span>=</span> <span>0</span><span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">监控大屏(驾驶舱设计)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/cockpit/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/cockpit/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="监控大屏-驾驶舱设计"> 监控大屏(驾驶舱设计)</h1>
<div><p>几点说明</p>
<ul>
  <li>驾驶舱布局, 与普通的看板不同的地方在于, 大屏一个固定的画布大小, 常用于监控或者大屏展示</li>
  <li>组件之间允许重叠, 可以设置图层, 图层值大的位于上层</li>
  <li>组件大小能够根据屏幕大小自适应</li>
  <li>组件的所有数据包含标题的文字内容修改, 都在右侧的配置栏里面(目前富文本编辑器除外), 点击不同的组件类型会激活相应的配置菜单</li>
  <li>点击画布上的空白处, 取消当前激活的组件</li>
  <li>图表组件依旧遵循数据集刷新间隔规则, 自动刷新</li>
  <li>预览的时候注意, 确认浏览器不要阻止弹窗</li>
  <li>驾驶舱布局新增了许多图表微调体验, 但是可能会成为一把双刃剑, 没有良好的设计, 最终的展现可能不会太好, 后续产品迭代我们会尽量追求让用户用最少的操作设计出效果最好的大屏</li>
</ul>
</div>
<div style="text-align:center">
  <img src="../../assets/board/cn-cockpit-disc.png"  />
</div>
<h2 id="操作界面介绍"> 操作界面介绍</h2>
<p>从左至右依次为: 功能按键、画布、参数微调区</p>
<h2 id="基础配置栏"> 基础配置栏</h2>
<p>新的大屏设计器为了支持用户在小屏幕上为高分辨率大屏设计看板，加入了屏幕分辨率预设、画布缩放、全局字体缩放，全局调色板等功能。
数据点击画布空白处显示全局样式</p>
<h3 id="画布尺寸"> 画布尺寸</h3>
<div>
  <img src="http://qiniu.ibidemo.cn/picgo/20220504150551.png"  />
</div> 
<ul>
<li>开始大屏设计的第一步是确定大屏将来需要展示屏幕分辨率、长宽比；</li>
<li>屏幕尺寸调整：常用屏幕支持预制了一些常用只存模板，2K, 4K, 8K；</li>
<li>模板选定之后会设定到下方的宽度和高度输入框，用户可根据实际情况再次进行调整；</li>
<li>大屏支持为预估值，在预览场景与预估值差异不大的情况下能够自适应全屏；</li>
<li>组件默认使用画布百分比宽度, 您可以通过大屏尺寸下面的<code>使用像素宽度、高度</code>开关切换百分比和像素宽度</li>
</ul>
<h3 id="位置与大小"> 位置与大小</h3>
<ul>
<li>画布中所有元素都可以任意拖动位置，调整大小，可重叠；重叠元素支持设置图层；</li>
<li>单选或多选之后，通过键盘方向键可以对位置进行微调, 画布缩放比例越大，微调位置越小；</li>
</ul>
<div><p>像素宽度与百分比宽度</p>
<p>百分比与像素高宽各有优劣势</p>
<ul>
<li><strong>百分比</strong>: 调整画布大小之后组件的位置与大小相对画布不会改变，如：大小50%的高宽，位置相对左边与上边10%的距离，无论画布如何调整组件的位置和大小都会动态的计算之后适应画布</li>
<li><strong>像素:</strong> 调整画布大小之后，原来的像素位置与大小仅保持之前的大小，如：画布尺寸从之前的2K调整为4K之后，如果原来的高宽使用的像素定位，那么之前的元素仅占1/4大小的空间
<ul>
<li><strong>适用场景</strong>: 长图、长页面制作，宽度不变的情况下，随着内容不断增加，画布高度需要不断增加</li>
</ul>
</li>
</ul>
</div>
<div><p>锁定高宽</p>
<p>默认预览模式下，画布会缩放适应屏幕尺寸，如果用户需要取消在高度/宽度上的缩放行为，可以锁定高宽避免缩放，常用于允许出滚动条的长图展示场景</p>
</div>
<h3 id="预览模式"> 预览模式</h3>
<p>预览模式不选择默认为<code>缩放(保持百分比)</code>, 不同的预览模式解释：</p>
<ol>
<li><strong>不缩放(百分比适配)</strong>
<ul>
<li>在使用百分比高宽的情境下，百分比适配预览可以根据实际展示的屏幕大小动态的调整画布上的元素的大小，而不是使用缩放</li>
<li>适用于实际展示的屏幕尺寸大于设计画布尺寸，即能适应全屏，又不会出现拉升引起的形变</li>
</ul>
</li>
<li><strong>缩放(保持百分比)</strong>
<ul>
<li>缩放适应屏幕，保持长宽比</li>
<li>实际展示屏幕尺寸与设计尺寸长宽比不一致会有白边出现</li>
</ul>
</li>
<li><strong>缩放(拉升全屏)</strong>
<ul>
<li>缩放适应屏幕，拉伸全屏铺满</li>
<li>实际展示屏幕尺寸与设计尺寸长宽比不一致，会产生形变，如: 原型变椭圆</li>
</ul>
</li>
<li><strong>设定尺寸(滚动条)</strong>
<ul>
<li>按设定尺寸展示画布，画布比屏幕大出滚动条，画布比屏幕小出白边</li>
</ul>
</li>
</ol>
<p><code>显示预览模式切换</code>的开关开启的情况下，用户可以在预览情况下右下角调整切换合适的预览模式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504161805.png" alt="" /></p>
<h3 id="画布背景"> 画布背景</h3>
<p>设置背景颜色，背景图、背景透明度、模糊度等。</p>
<p><img src="./../../assets/board/cockpit-tuning-backgroud.png" alt="" /></p>
<h3 id="全局字体颜色"> 全局字体颜色</h3>
<p>调色板用于调整图形系列色系，全局字体颜色用于调整组件字体颜色；</p>
<p><img src="./../../assets/board/cockpit-tuning-font-color.png" alt="" /></p>
<h2 id="组件基础"> 组件基础</h2>
<h3 id="单选"> 单选</h3>
<p>点击单个组件右边微调栏对应微调菜单被激活, 不同类型的组件都有特定的微调项，默认右边栏会激活组件对应的项目栏，通用配置是所有组件都支持的配置项</p>
<div>
  <img src="http://qiniu.ibidemo.cn/picgo/20220504163229.png"  />
  <p>文本组件对应配置项</p>
</div>
<h3 id="通用配置"> 通用配置</h3>
<div>
  <img src="http://qiniu.ibidemo.cn/picgo/20220504163523.png"  />
  <p>通用配置栏</p>
</div> 
<p>通用配置栏包含了</p>
<ul>
<li><strong>组件ID</strong>: 组件唯一标识，可用于看板参数环境变量改变定位缩放影响范围，避免全局组件刷新</li>
<li><strong>组件别名配置</strong></li>
<li><strong>大小与位置设置</strong></li>
<li>图层配置</li>
<li><strong>绑定标签页</strong>: 在看板上添加了标签组件滞后可以选定与某个标签对应</li>
<li>边框、背景、阴影配置</li>
<li><strong>旋转</strong>: 常用与异形边框对称显示<br>
<div>
<img src="http://qiniu.ibidemo.cn/picgo/20220504165715.png" height="350"  />
</div></li>
<li><strong>变换</strong>: 常用与配合2.5D字体贴图<br>
<div>
<img src="http://qiniu.ibidemo.cn/picgo/20220504170253.png"  />
</div></li>
</ul>
<h3 id="多选"> 多选</h3>
<ul>
<li>在画布空白处，按下鼠标左键并保持，可以框选多个组件</li>
<li>按住 shift/ctrl/alt 点击多个组件，可以增加选中组件，在已选中状态可以取消选中</li>
<li>在任何选中状态下点击画布空白处可以取消所有选中组件</li>
<li>在选中多个组件的状态下，右边栏多选操作相关菜单被激活可以对选中组件进行下列操作
<ul>
<li>对齐：上下左右对齐</li>
<li>居中：垂直、水平居中</li>
<li>统一调整组件尺寸</li>
<li>删除所有选中组件</li>
</ul>
</li>
</ul>
<div>
    <img src="http://qiniu.ibidemo.cn/picgo/20220504162242.png"  />
    <p>多选组件配置</p>
</div>
<h3 id="画布图层设置"> 画布图层设置</h3>
<ol>
<li>通过组件右上角<code>…</code>图标调出图标设置菜单，或者通过对应快捷键设置层</li>
<li>点击组件通过右边配置区，<code>基础-&gt;通用配置功能输入特定图层</code></li>
</ol>
<h3 id="拖拽对齐v1-6-0"> 拖拽对齐<sup>v1.6.0</sup></h3>
<p>拖拽对齐、大小调整对齐</p>
<ul>
<li>对应边对齐、垂直水平中线对齐、错位边对齐(上、下、中任意位置对齐)</li>
<li>大小调整上中下、左中右6边对齐</li>
<li>在组件较多的场景下支持开启仅对齐选中目标组件</li>
</ul>
<div><p>仅对齐选中组件</p>
<p>当画布上组件太多时，尤其是小组件需要对齐时，自动对齐便不太容易操作，甚至会出现不期望的对齐干扰<br>
解决方案：</p>
<ol>
<li>中间画布<code>底部菜单</code>勾选<code>仅对齐选中</code>，然后选中目标组件(可多选)，拖拽需要移动的组件(移动组件不需要选中)<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220504210647.png" alt="" /></li>
<li>使用多选对齐</li>
</ol>
</div>
<h3 id="组件锁定"> 组件锁定</h3>
<p>对边框、装饰、标题可以开启锁定</p>
<ul>
<li>组件锁定之后不能通过鼠标直接选中，好处是避免这类组件影响其他组件的选中操作(尤其是框选)</li>
<li>组件锁定之后可以在右边栏组件列表中定位组件选中，然后解锁组件</li>
<li>锁定组件可以通过框选选中</li>
</ul>
<h2 id="非图表组件"> 非图表组件</h2>
<p>添加组件: 文本、时钟、富文本编辑、静态边框、动态边框、分割线、iframe、图标等，点击单个组件右边微调栏对应微调菜单被激活</p>
<h3 id="文本"> 文本</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504212619.png" alt="" /></p>
<h4 id="文本超链支持js事件定义1-13"> 文本超链支持js事件定义<sup>1.13</sup></h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130171623.png" alt="" /></p>
<p>为了方便输入，我们贴心为您准备了便捷输入模板</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240220101639.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/label-js-event.gif" alt="" /></p>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span>paramArray<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br></div></div><ol>
<li>单个变量</li>
</ol>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span><span>[</span>
  <span>{</span><span>type</span><span>:</span> <span>'env'</span><span>,</span> <span>val</span><span>:</span> <span>{</span><span>id</span><span>:</span> <span>'year'</span><span>,</span> <span>value</span><span>:</span> <span>2019</span><span>}</span><span>}</span><span>,</span>
<span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><ol start="2">
<li>多个变量</li>
</ol>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span><span>[</span>
  <span>{</span><span>type</span><span>:</span> <span>'env'</span><span>,</span> <span>val</span><span>:</span> <span>{</span><span>id</span><span>:</span> <span>'year'</span><span>,</span> <span>value</span><span>:</span> <span>2019</span><span>}</span><span>}</span><span>,</span>
  <span>{</span><span>type</span><span>:</span> <span>'env'</span><span>,</span> <span>val</span><span>:</span> <span>{</span><span>id</span><span>:</span> <span>'month'</span><span>,</span> <span>value</span><span>:</span> <span>10</span><span>}</span><span>}</span><span>,</span>
<span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><ol start="3">
<li>弹窗图图表</li>
</ol>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span><span>[</span>
  <span>{</span>
    <span>type</span><span>:</span> <span>'popup-widget'</span><span>,</span>
    <span>targetId</span><span>:</span> <span>1</span><span>,</span> <span>// 图表ID</span>
    <span>val</span><span>:</span> <span>{</span> <span>alias</span><span>:</span> <span>'年'</span><span>,</span> <span>column</span><span>:</span> <span>'the_year'</span><span>,</span> <span>type</span><span>:</span> <span>"="</span><span>,</span> <span>values</span><span>:</span> <span>[</span><span>'2016'</span><span>]</span> <span>}</span>
  <span>}</span><span>,</span>
<span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><ol start="4">
<li>数据集联动</li>
</ol>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span><span>[</span>
  <span>{</span>
    <span>type</span><span>:</span> <span>"dataset"</span><span>,</span>
    <span>targetId</span><span>:</span> <span>1</span><span>,</span> <span>// 数据集ID</span>
    <span>val</span><span>:</span> <span>{</span> <span>alias</span><span>:</span> <span>'年'</span><span>,</span> <span>column</span><span>:</span> <span>'the_year'</span><span>,</span> <span>type</span><span>:</span> <span>"="</span><span>,</span> <span>values</span><span>:</span> <span>[</span><span>'2016'</span><span>]</span> <span>}</span>
  <span>}</span><span>,</span>
<span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><ol start="5">
<li>图表联动</li>
</ol>
<div><pre><code><span>this</span><span>.</span><span>linkCallback</span><span>(</span><span>[</span>
  <span>{</span>
    <span>type</span><span>:</span> <span>"widget"</span><span>,</span>
    <span>targetId</span><span>:</span> <span>'xp1lbw1j9cs'</span><span>,</span> <span>// 图表sid</span>
    <span>val</span><span>:</span> <span>{</span> <span>alias</span><span>:</span> <span>'年'</span><span>,</span> <span>column</span><span>:</span> <span>'the_year'</span><span>,</span> <span>type</span><span>:</span> <span>"="</span><span>,</span> <span>values</span><span>:</span> <span>[</span><span>'2016'</span><span>]</span> <span>}</span>
  <span>}</span><span>,</span>
<span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h3 id="富文本"> 富文本</h3>
<p><img src="./../../assets/board/cockpit-static-texteditor.png" alt="" /></p>
<h3 id="图标"> 图标</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504213424.png" alt="" /></p>
<h3 id="时钟"> 时钟</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504214030.png" alt="" /></p>
<p>通过调整时间格式实现只展示日期或只展示时间</p>
<h3 id="边框"> 边框</h3>
<ul>
<li>图片边框</li>
<li>svg边框</li>
<li>线条边框</li>
</ul>
<h3 id="装饰"> 装饰</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504214255.png" alt="" /></p>
<h3 id="图片"> 图片</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504214409.png" alt="" /></p>
<h4 id="组件网络资源变量"> 组件网络资源变量</h4>
<div><p>提示</p>
<p>当项目中有自己的UI设计师提供图片资源时，不建议通过文件上传的形式管理资源，而是建议用资源文件服务器的形式管理静态资源，这样在看板迁移的时候可以避免
上传资源文件访问不到的问题</p>
</div>
<p>IBI中装饰组件/边框/图片组件, 可以配置网络资源并且网络资源地址可以使用变量配置, 使用发放如下：</p>
<ol>
<li>在系统管理中添加系统级变量</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206205246.png" alt="" /></p>
<ol start="2">
<li>组件资源地址中使用变量</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230207210111.png" alt="" /></p>
<ol start="3">
<li>如果生产和测试环境资源服务器都有各自独立的资源服务器，可以通过修改系统变量的方式统一调整</li>
</ol>
<h3 id="iframe组件"> iframe组件</h3>
<p>iframe组件url支持使用环境变量</p>
<h3 id="轮播表"> 轮播表</h3>
<ul>
<li>轮播表数据常和动态数据配合使用
<ul>
<li>动态查询Query为普通查询最大支持返回查询的前1000条数据, 查询支持环境变量解析</li>
<li>api接口可适配任意结构的数据，具体数据结构，查看脚本适配中的模板</li>
<li>动态数据刷新间隔与滚动间隔均为秒，数据刷新之后不会立即更新表格，而是会在当前表格滚动结束之后更新表格</li>
</ul>
</li>
<li>表头、内容、序号样式可独立配置</li>
<li>开发者模式
<ul>
<li><code>Column Definition</code>: 包含列宽设置与列对齐，列宽为0时隐藏列</li>
<li>通过格式化函数可以对列内容做各种html内容变换</li>
<li>结合debugger与chrome开发者模式调试，<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/debugger" target="_blank" rel="noopener noreferrer">参考连接</a></li>
</ul>
</li>
</ul>
<h3 id="功能按钮"> 功能按钮</h3>
<p>功能按钮目前主要支持, 参数查询与重置功能, 有查询按钮的看板建议取消参数变更实时生效配置</p>
<h3 id="标签组件"> 标签组件</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504214524.png" alt="" /></p>
<p>与传统标签容器不同，标签组件通过标签信号控制组件是否是否显示</p>
<ul>
<li>标签绑定可以在多选配置中批量操作</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/tab-demo.gif" alt="" /></p>
<ul>
<li>也可以在组件通用配置中单独的对进行绑定标签操作</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220504220151.png" alt="" /></p>
<ul>
<li>默认同组标签直接互斥，可以通过配置标签ParentKey实现异组标签之间互斥让标签页布局更加灵活</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220208120014.png" alt="" /><br>
<img src="http://qiniu.ibidemo.cn/picgo/cockpit-tabs-pk.gif" alt="" /></p>
<h2 id="图表元素"> 图表元素</h2>
<p>为了满足用户个性化需求，新版本支持数百项图表微调项目，图表微调菜单伴随激活的图表类型动态变化</p>
<h3 id="轮播图组件1-9"> 轮播图组件<sup>1.9</sup></h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230206204653.png" alt="" /></p>
<h2 id="iframe组件联动交互"> IFrame组件联动交互</h2>
<p>大屏iframe消息交互与自由布局消息交互一致，<a href="./dashboard.html#iframe联动交互">点击查看</a></p>
<h2 id="动态组件-企业版-1-1-1"> 动态组件<sup style="color:red">(企业版 1.1.1)</sup></h2>
<p>结合看板参数中的关联到环境变量, 用户可以动态的获取数据切换部分静态组件, 目前支持的动态数据获取静态组件如下:</p>
<ul>
<li>文本</li>
<li>富文本</li>
<li>图片轮播</li>
<li>iframe</li>
</ul>
<blockquote>
<p>环境变量设置生成方式 <a href="./dashboard.html#参数关联到环境变量v1-1-1">参数</a>, <a href="./dashboard.html#联动参数到环境变量v1-1-1">联动</a></p>
</blockquote>
<h3 id="动态数据获取"> 动态数据获取</h3>
<ul>
<li><strong>API 方式</strong>: 数据请求会以 Post 形式发出, 用户需要填写请求 url, 所有环境变量会以 json 形式的数据体发送</li>
</ul>
<div>
  <img src="../../assets/board/cockpit-dyndata-api.png"  />
  <p>API 方式读取组件数据</p>
</div>
<p>!&gt; 如果请求返回数据结构和组件期望数据结构不一致, 可以使用脚本适配函数调整数据结构, <code>dataAdaptorFun</code> 为脚本适配函数别名</p>
<ul>
<li><strong>Query 方式</strong>: 用户可以直接对数据源进行查询, 查询脚本中可以使用环境变量动态生成不同条件, 不同结构的查询语句, 变量使用规范与<a href="./zh-cn/manual/dataset.html#_6-数据集变量使用企业版-v09">数据集变量语法</a>一致,
查询返回结果集之后, 不同组件根据约定列名获取数据, 如果约定列名不存在则按列顺序匹配数据</li>
</ul>
<div>
  <img src="../../assets/board/cockpit-dyndata-query.png"  />
  <p>Query方式读取组件数据</p>
</div>
<h4 id="文本组件"> 文本组件</h4>
<p>期望 API 请求返回数据结构</p>
<div><pre><code><span>{</span>
    <span>"text"</span><span>:</span> <span>false</span><span>,</span>
    <span>"link"</span><span>:</span> <span>"https//xxxx"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>sql 查询返回两列一行, 表头随意, 行数会限制会自动添加</p>
<table>
<thead>
<tr>
<th>text</th>
<th>link</th>
</tr>
</thead>
<tbody>
<tr>
<td>文本内容</td>
<td>http://xxxx</td>
</tr>
</tbody>
</table>
<p>!&gt; 文本样式, 是否支持超链, 不支持动态修改, 用户可以在页面设定</p>
<h4 id="富文本编辑器"> 富文本编辑器</h4>
<p>期望 API 请求返回数据结构</p>
<div><pre><code><span>{</span>
    <span>"text"</span><span>:</span> <span>"&lt;span class=\"ql-align-center\">&lt;span style=\"color: rgb(255, 255, 255);\">富文本编辑器我是动态的&lt;/span>&lt;/span>"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>返回一行一列</p>
<table>
<thead>
<tr>
<th>text</th>
</tr>
</thead>
<tbody>
<tr>
<td>html 内容</td>
</tr>
</tbody>
</table>
<h4 id="图片轮播组件"> 图片轮播组件</h4>
<p>期望 API 请求返回数据结构</p>
<div><pre><code><span>{</span>
    <span>"images"</span><span>:</span> <span>[</span>
        <span>{</span>
            <span>"url"</span><span>:</span> <span>"https://cboard_beta.gitee.io/ibi-doc/assets/ds-test-es.png"</span>
        <span>}</span><span>,</span>
        <span>{</span>
            <span>"url"</span><span>:</span> <span>"https://cboard_beta.gitee.io/ibi-doc/assets/saiku_crtbl.png"</span>
        <span>}</span>
    <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><p>返回最多返回 10 行, 暂定一列</p>
<table>
<thead>
<tr>
<th>url</th>
</tr>
</thead>
<tbody>
<tr>
<td>http://.../xxx.png</td>
</tr>
<tr>
<td>http://.../yyy.png</td>
</tr>
</tbody>
</table>
<h4 id="iframe-组件"> iframe 组件</h4>
<p>期望 API 请求返回数据结构</p>
<div><pre><code><span>{</span>
    <span>"url"</span><span>:</span> <span>"https://cn.bing.com/"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>返回一行</p>
<table>
<thead>
<tr>
<th>url</th>
</tr>
</thead>
<tbody>
<tr>
<td>https://cn.bing.com/</td>
</tr>
</tbody>
</table>
<h2 id="大屏组-多屏轮播1-9"> 大屏组/多屏轮播<sup>1.9</sup></h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230207202754.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230207202608.png" alt="" /></p>
<h3 id="文本点击事件支持大屏组切换v1-10"> 文本点击事件支持大屏组切换<sup>v1.10</sup></h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230515115526.png" alt="" /></p>
<p>切换效果, 实践可以做成虚拟的标签页，不同的页面定义相同的一组标签菜单，标签样式为当前屏对应标签项目为激活状态</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/cockpigroup-event.gif" alt="" /></p>
<h2 id="大屏组件入场动效配置"> 大屏组件入场动效配置</h2>
<p>大屏组件入场动效设置，入场动效由动作和方向两项配置组成，单个组件在组件通用配置栏配置、多选组件之后支持多选配置栏批量配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230207091224.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/enter-animation.gif" alt="" /></p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">对比分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/contrastive-analysis/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/contrastive-analysis/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<div><p>概念</p>
<p>对比分析为数据分析中常见的一种分析模式，一般用于对比二元维度之间的数据差异，如：两段日期，两种产品对应的指标差异，
下面的案例演示基于日期段的对比分析，设置了<code>基准日期</code>于<code>对比日期</code>两个看板参数，可分别选择</p>
</div>
<div><p>涉及到的新功能点</p>
<ul>
<li>范围衍生维度起始值支持变量</li>
<li>衍生维度过滤组外循环</li>
<li>值类型，滞后比较
<ul>
<li>行上计算</li>
<li>显示原值</li>
<li>滞后查找失败使用原值</li>
</ul>
</li>
<li>维度展开隐藏项</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026135842.png" alt="" /></p>
<h2 id="对比维度配置"> 对比维度配置</h2>
<p>在数据集配置中，新增加一个日期维度，用作日期对比维</p>
<ol>
<li>点击维度编辑，在基础配置栏，<code>分组数据</code>下来选择为范围分组, 添加两组范围值，组名和起始值、结束值都是用了变量，该案例中会用两个两个环境变量<code>baseDate</code>和<code>date</code>，均通过看板参数赋值</li>
<li>第一条记录为基准日期范围，起始值设置为<code>${arr.get(baseDate, 0, '2016-01-01')}</code>, 结束值为<code>${arr.get(baseDate, 1, '2016-12-31')}</code>，对应看板参数基准日期范围</li>
<li>第二条记录为对比日期范围，起始值设置为<code>${arr.get(date, 0, '2017-01-01')}</code>, 结束值为<code>${arr.get(date, 1, '2017-12-31')}</code>, 对应看板参数的对比日期范围</li>
<li>打开过滤组外值设定，即过滤两组日期范围之外的值</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026141615.png" alt="" /></p>
<div><p>组名</p>
<ul>
<li>组名可以根据实际情况设定，案例中使用了日期范围的起始值作为组名，内容与起始值设定相同</li>
<li>对比维度的配置可以在数据集编辑中统一设置，达到一次配置多次使用的效果</li>
</ul>
</div>
<h2 id="对比指标卡"> 对比指标卡</h2>
<p>指标卡的配置比较简单，如下图所示，在行维上配置对比维度，拖入指标，默认计算两行值的环比，在配置栏取消同比显示即可，请参照[图表设计-&gt;指标卡原理说明]</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026153340.png" alt="" /></p>
<h2 id="对比表格配置"> 对比表格配置</h2>
<ol>
<li>按表格的结构拖拽对应的维度和指标，得到如下表格有了对比日期范围内的两组指标</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026143647.png" alt="" /></p>
<div><p>对齐指标</p>
<p>细心的用户可能会发现，上表与正常情况下的交叉表稍有区别，指标名称表头放置到了第一行，该效果可以通过表头后者配置中对齐指标实现<br>
<img src="http://qiniu.ibidemo.cn/picgo/20221026144035.png" alt="" /></p>
</div>
<ol start="2">
<li>设置值类型展示对比值</li>
</ol>
<ul>
<li>编辑指标<code>值类型</code>配置，在更多弹窗中选择<code>环比/滞后比较</code>值类型</li>
<li>计算方向选择<code>行</code></li>
<li>第二行变化之后的值类型选择<code>变化率</code>，滞后量为1，并勾选显示原值（右边的格式化为原值的格式化，区别与变化率的格式化）</li>
<li>等值列为二元维度之后其他的维度，案例中列维上只用到了会员卡等级，我们选中即可</li>
<li>在指标格式化配置中把变化率值类型配置为百分数</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026144611.png" alt="" /></p>
<ol start="3">
<li>隐藏基准指标</li>
</ol>
<p>再次打开对比维度编辑，在<code>隐藏</code>标签也中添加隐藏值<code>@1</code>表示展开之后的第1个值, 即基准值对应所有列</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026145820.png" alt="" /></p>
<ol start="4">
<li>要添加其他的对比指标重复配置2即可</li>
</ol>
<h2 id="对比系列并列展示"> 对比系列并列展示</h2>
<ol>
<li>基础数据配置如下</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026151704.png" alt="" /></p>
<ol start="2">
<li>设置滞后比较<br>
如下图示意，设置日相等的之后比较效果如中间表格效果， 仅对比值列有值，原始值列找不到滞后值，故需要在值类型中配置NullSelf，在滞后值找不到时取自身效果如最下面表格所示</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026151630.png" alt="" /></p>
<p>完整的值类型配置如下：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026151914.png" alt="" /></p>
<ol start="3">
<li>隐藏基准日期行</li>
</ol>
<p>编辑行维度上的<code>日期维度</code>，隐藏每组日期维度展开的第一项<br>
<img src="http://qiniu.ibidemo.cn/picgo/20221026152352.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026152519.png" alt="" /></p>
<ol start="4">
<li>切换线图展示对比趋势图</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026152632.png" alt="" /></p>
<h2 id="日期参数配置"> 日期参数配置</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026152932.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">看板监控</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/dashboard-monitor/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/dashboard-monitor/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>通过看板监控任务可以让BI系统定时自动化检测数据异常, 发生异常时触发数据告警, 帮助您更高效更准确地了解重要信息。</p>
<div><p>提示</p>
<p>监控任务需要在服务器端模拟访问数据看板, 所以在开启依赖之前请检查确认<a href="./../ops/2-puppetter.html">邮件发送与服务端导出插件</a>是否已经正确安装配置.</p>
</div>
<h2 id="打开看板监控"> 打开看板监控</h2>
<p>目前看板监控向对看板<strong>有编辑权限</strong>的用户开放, 每个用户都可以针对自己的关注点定义不同的数据监控, 当然监控内容也和用户的数据权限相关, 不能自身所见数据权限外的数据进行监控.</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/monitor-open.gif" alt="" /></p>
<p>支持的监控预警形式有一下几种:</p>
<ul>
<li>邮件:
<ul>
<li>默认收件人为账号信息登记邮箱, 可以在用户基础信息弹窗中维护</li>
<li>通过输入框添加抄送收件人, 多个用户使用英文分号分割</li>
</ul>
</li>
<li>企业微信机器人:
<ul>
<li>企业微信群机器人开启, <a href="https://developer.work.weixin.qq.com/tutorial/detail/54" target="_blank" rel="noopener noreferrer">点击链接</a>, 之后用企业微信扫码查看教程, 也可以通过搜索引擎查找第三方教程</li>
<li>微信机器人webkey支持系统变量, 管理员可以在<code>管理-&gt;系统配置</code>菜单维护好常用webhook Key, <strong>key类型选择配置不要选择变量</strong></li>
</ul>
</li>
<li>钉钉机器人
<ul>
<li>钉钉机器人开启, <a href="https://open.dingtalk.com/document/robots/custom-robot-access" target="_blank" rel="noopener noreferrer">点击链接</a></li>
<li>机器人webkey支持系统变量, 管理员可以在<code>管理-&gt;系统配置</code>菜单维护好常用webhook Key, <strong>key类型选择配置不要选择变量</strong></li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220819172453.png" alt="" /></p>
<h2 id="打开图表监控设定"> 打开图表监控设定</h2>
<p>看板监控开启之后, 可以对大部分非明细数据图表进行监控</p>
<ul>
<li>在编辑模式下点击图标右上角监控铃铛图标</li>
</ul>
<h3 id="添加监控项"> 添加监控项</h3>
<ul>
<li>为每个监控项设定不同的名称</li>
<li>一个图可以有多个不同的监控项目</li>
</ul>
<h3 id="编辑监控项设定监控条件"> 编辑监控项设定监控条件</h3>
<ul>
<li>监控条件由1到多个维度/指标与阈值比较组成</li>
<li>多个条件之间可以设定同时满足时触发或满足其一出发</li>
<li>阈值支持变量, 常用于监控动态日期下的数据</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/monitor-chart.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">网格看板设计</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/dashboard/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/dashboard/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="网格看板设计"> 网格看板设计</h1>
<p><strong>数据看板</strong>（也称为数据仪表板，英文通常为 Dashboard）是一个可视化工具，用于组合展示多个关键数据指标（KPIs）、图表和分析结果，帮助用户快速理解业务状况、监控趋势和做出决策。</p>
<blockquote>
<p>点击顶部导航栏<strong>看板</strong> -&gt; <strong>网格看板</strong> 菜单, 进入网格看板设计页面</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220819162528.png" alt="" /></p>
<h2 id="数据看板的设计步骤"> 数据看板的设计步骤</h2>
<p>数据看板制作主要包括以下步骤：</p>
<ul>
<li><strong>添加图表</strong>：选择适合展示数据的图表类型，如柱状图、折线图等，并确定其在看板上的布局。</li>
<li><strong>添加查询参数</strong>：配置日期范围、下拉选框等查询条件，让用户能按需筛选和查看数据。</li>
<li><strong>设置联动</strong>：定义不同组件间的数据交互逻辑，比如点击某一图表元素更新其他图表内容，增强数据分析深度。</li>
<li><strong>其他配置</strong>：包括调整背景色、主题色、标题等界面细节，以及分享功能设置，确保看板既美观又实用。这些步骤共同作用，帮助用户有效洞察数据价值。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505061806010.png" alt="" /></p>
<h2 id="网格看板与大屏看板的区别"> <strong>网格看板</strong>与<strong>大屏看板</strong>的区别</h2>
<ul>
<li>网格布局画布高度可以无限延伸展, 驾驶舱(大屏)布局画布用于适应显示器全屏长宽比固定展示</li>
<li>网格布局的组件之间<strong>不能堆叠</strong>, 驾驶舱有涂层概念的组件可以自由<strong>堆叠</strong>(类比PPT和PS), 驾驶舱支持的元素更加丰富可以任意组合与堆叠</li>
</ul>
<div><p>提示</p>
<p>功能区菜单顺序与图标样式在产品升级的过程当中会有一些细微调整, 以实际发布版本为准</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505071051069.png" alt="" /></p>
<h2 id="新建与打开"> 新建与打开</h2>
<ul>
<li>文件菜单 -&gt; 新建看板/打开看板</li>
<li>点击打开菜单，看板目录树上双击看板打开</li>
<li>为了区分网格布局看板与驾驶舱布局看板, 两者设定了不同的图标;</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505071057996.png" alt="新建与打开看板" /></p>
<h2 id="布局宽度自适应"> 布局宽度自适应</h2>
<h3 id="组件快捷宽度设置"> 组件快捷宽度设置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-widget-quickwidth.gif" alt="" /></p>
<h3 id="剩余列宽补齐"> 剩余列宽补齐</h3>
<p>网格布局拖拽宽度自适应，<strong>拖拽块与目标块重叠之后</strong>，以目标块为相对块计算右侧剩余空间</p>
<div><p>拖拽技巧</p>
<p>下面的演示中拖拽块与<code>C块</code>重叠之后触发自适应计算，拖动块右侧无其他方块，自动填满剩余宽度</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/grid-autowidth-grow.gif" alt="" /></p>
<h3 id="夹缝列宽适应"> 夹缝列宽适应</h3>
<div><p>拖拽技巧</p>
<p>下面的演示中<code>B块</code>与<code>C块</code>重叠之后触发自适应计算，拖动块右侧有其他方块，计算最大允许宽度，<strong>当剩余宽度少于1/4时不做适应</strong></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/grid-autowidth-growfit.gif" alt="" /></p>
<h2 id="看板分享"> 看板分享</h2>
<h3 id="公开分享"> 公开分享</h3>
<ul>
<li>看板分享可以把看板分享给没有 IBI 平台账号或者没有当前看板查看权限的其他人</li>
<li>分享链接可用于外部系统集成</li>
<li>分享权限为只读分享</li>
<li>分享状态暂时只包含看板默认设置过的参数值, 不包含联动与修改之后的参数</li>
<li>为了分享数据安全, 分享链接需要设置有效期
<div>
<img src="../../assets/board/cn-board-share-list.png"  />
<p>我的看板分享列表</p>
</div>
<div>
<img src="../../assets/board/cn-board-share.gif"  />
<p>添加一个分享</p>
</div></li>
</ul>
<h3 id="看板分享为什么动态日期不生效"> 看板分享为什么动态日期不生效</h3>
<p>看板分享实例采用<strong>带状态的链接</strong>形式。为了确保查看者看到的数据与分享者一致，分享实例会包含分享生成时的看板查询参数值。</p>
<p>在参数优先级上，分享实例中的日期参数优先于动态日期设置。因此，如果分享实例中已配置了具体的日期值，则动态日期将不会生效。</p>
<p>若在看板集成中需要使用动态日期功能，可以通过编辑分享实例的参数配置，删除其中的日期参数设置，从而启用动态日期逻辑。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230421095601.png" alt="" /></p>
<h3 id="带参链接"> 带参链接</h3>
<p>带参链接是一种私密分享方式，生成链接时会保存看板的查询条件，接收者打开链接时看到的内容与分享者生成时保持一致。</p>
<table>
<thead>
<tr>
<th>分享类型</th>
<th>查询参数状态</th>
<th>是否需要登陆</th>
<th>数据权限范围</th>
</tr>
</thead>
<tbody>
<tr>
<td>带参链接</td>
<td>该链接仅保存了链接生成时看板参数状态</td>
<td>访问该链接需要登录</td>
<td>访问者所见数据范围与其自身权限相关，查看者可能与您当前展示的数据范围不一致</td>
</tr>
<tr>
<td>公开分享</td>
<td>该链接仅保存了链接生成时看板参数状态</td>
<td>免登陆</td>
<td>访问者所见数据范围与分享者权限相同</td>
</tr>
</tbody>
</table>
<h2 id="看板导出"> 看板导出</h2>
<ul>
<li>看板导出可选导出 Excel 和图片, Excel 形式导出对于表格组件有单独的工作表存储以便于用户二次与操作</li>
<li>新版本看板导出能够保持当前的看板参数状态与图表联动状态</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">ChatBI/问数</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/chatbi/0-chatbi/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/chatbi/0-chatbi/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>为了进一步<strong>降低数据分析的使用门槛</strong>，我们引入了智能问数模块，拥抱大模型技术的发展。这一创新使得用户能够通过语音指令实现数据查询与分析操作，而无需进行传统的拖拉拽交互方式来完成数据透视等复杂操作。</p>
<p>借助大模型的自然语言处理技术，<strong>用户只需简单地说出他们的数据查询需求或分析意图，系统就能智能解析并将其实时转化为相应的数据操作，如筛选、排序、分组汇总以及数据透视等</strong>。</p>
<p>这种方式不仅极大地简化了数据分析流程，还提升了用户体验，让用户能够更加专注于洞察数据背后的价值，而非操作工具本身。无论是对于数据分析新手还是专业人士，智能问数模块都提供了更为便捷、直观的数据探索途径。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161710115.png" alt="" /></p>
<div><p>注意</p>
<p><strong>当前问数功能处于智能分析的第一阶段</strong>，主要支持数据圈选和文本转自助分析配置，<strong>尚未涵盖增强分析功能</strong>。</p>
<p><span>这意味着它还不能处理需要多个分析查询才能得出的复杂分析答案，也无法自动生成完整的分析报告。</span></p>
</div>
<h2 id="开箱即用-个性化配置"> 开箱即用&amp;个性化配置</h2>
<h3 id="大模型服务配置"> 大模型服务配置</h3>
<p>我们支持对接主流的大模型云服务（如参数量70B以上的模型），同时也兼容自有大模型部署。对于‘<strong>猜您想问</strong>’这类功能，推荐使用较小参数量的轻量级模型，以有效节省token使用成本并提高响应速度。</p>
<p>以下是一些主流大模型厂商及其API服务地址的信息。请注意，具体的API访问方式、token获取流程及费用等细节可能会根据厂商的政策有所变化，因此建议直接访问各厂商的官方网站或开发者文档以获取最新信息。</p>
<ol>
<li><strong>OpenAI (GPT系列)</strong></li>
</ol>
<ul>
<li>官网: https://openai.com/</li>
<li>API文档: https://platform.openai.com/docs/api-reference</li>
<li>Token获取: 需要在官网注册并创建应用后获得API密钥</li>
</ul>
<ol start="2">
<li><strong>Anthropic (Claude系列)</strong></li>
</ol>
<ul>
<li>官网: https://www.anthropic.com/</li>
<li>API接入需联系官方或查看其开发者文档获取最新指引。</li>
</ul>
<ol start="3">
<li><strong>阿里云 (通义千问等)</strong></li>
</ol>
<ul>
<li>官网: https://www.aliyun.com/product/qianwen</li>
<li>API文档: 可通过阿里云官网进入相应的API文档页面查找详细信息。</li>
</ul>
<ol start="4">
<li><strong>百度智能云 (文心大模型系列)</strong></li>
</ol>
<ul>
<li>官网: https://cloud.baidu.com/product/wenxin.html</li>
<li>API文档: https://cloud.baidu.com/doc/WENXIN/index.html</li>
</ul>
<ol start="5">
<li><strong>腾讯云 (混元大模型等)</strong></li>
</ol>
<ul>
<li>官网: https://cloud.tencent.com/</li>
<li>需要登录腾讯云账号后，在产品服务中找到相关的大模型服务进行API调用。</li>
</ul>
<ol start="6">
<li><strong>华为云 (盘古大模型等)</strong></li>
</ol>
<ul>
<li>官网: https://www.huaweicloud.com/</li>
<li>类似地，需登录华为云账号后访问相应服务页面。</li>
</ul>
<ol start="7">
<li><strong>DeepSeek</strong></li>
</ol>
<ul>
<li>官网: https://www.deepseek.com/</li>
<li>具体API服务和token获取方式请参考其官方提供的指南。</li>
</ul>
<p>对于轻量级大模型用于“猜您想问”功能，可以考虑使用参数较少的模型如ERNIE Lite或类似的小型化版本，这些通常会更加经济高效，适合处理实时性要求高但计算资源消耗相对较低的任务。</p>
<p>为了确保信息准确无误，请直接访问上述链接或查阅各厂商最新的官方资料。</p>
<div><pre><code><span># 查询任务模型</span>
<span>ai.llm.url</span><span>=</span><span>https://api.siliconflow.cn/v1/chat/completions</span>
<span>ai.llm.token</span><span>=</span><span>sk-***</span>
<span>ai.llm.model</span><span>=</span><span>Qwen/Qwen2.5-72B-Instruct-128K</span>
<span># 阿里</span>
<span>#ai.llm.url=https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions</span>
<span>#ai.llm.token=sk-***</span>
<span>#ai.llm.model=qwen-plus-latest</span>
<span># deepseek</span>
<span>#ai.llm.url=https://api.deepseek.com/chat/completions</span>
<span>#ai.llm.token=sk-***</span>
<span>#ai.llm.model=deepseek-reasoner</span>
<span># 轻量级任务模型</span>
<span>#ai.llm.lite.url=https://api.siliconflow.cn/v1/chat/completions</span>
<span>#ai.llm.lite.token=sk-***</span>
<span>#ai.llm.lite.model=Qwen/Qwen2.5-7B-Instruct</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><p>大模型相关配置，可以在 <code>管理 -&gt; 系统配置 -&gt; 大模型服务</code> 中配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191753164.png" alt="" /></p>
<h3 id="快速启动"> 快速启动</h3>
<ul>
<li>快速启动：<strong>数据集无需额外配置，开箱即用</strong>
<ul>
<li>在BI系统中，历史数据集无需任何额外配置即可直接作为问数的数据集使用，简化了数据准备流程，让用户能够立即开始进行数据分析</li>
</ul>
</li>
</ul>
<div><p>0配置冷启动问数数据集配置建议</p>
<p>当我们选择问数的数据集对象之后，系统会把数据集维度指标字段告诉大模型，只有在大模型理解数据集字段的含义之后才能生成正确的配置因此</p>
<p>为了提升问数数据集的准确性和效果，建议采取以下措施：</p>
<ul>
<li><strong>优化字段命名</strong>：确保字段名称清晰易懂，避免复杂或模糊的表述，以便模型更好地理解和处理。</li>
<li><strong>提供详细字段描述</strong>：为每个字段添加详细的描述信息，帮助模型理解其含义和用途。</li>
<li><strong>丰富知识库信息</strong>：在知识库管理中添加和编辑当前数据集的额外知识，帮助大模型更好地理解用户意图和数据背景。</li>
<li>通过这些步骤，可以显著提高数据集的质量和问数功能的准确性。</li>
</ul>
</div>
<h3 id="个性化设置"> 个性化设置</h3>
<div><p>数据集问数相关配置</p>
<p>尽管BI系统支持开箱即用的历史数据集用于问数功能，但对于某些问数效果不理想的数据集，进行相应的个性化配置可以显著提升大模型对数据集的理解和用户提问的准确性。<br>
通过个性化配置，您可以优化数据结构、定义关键指标以及调整参数设置，确保更精准的数据分析结果和更符合预期的响应，从而改善整体问数体验和效果。<br>
这种定制化调整特别适用于复杂或特定领域的数据集，有助于克服通用处理方式的局限性。</p>
</div>
<ul>
<li><strong>业务定义</strong>: 对于一些专有名词或者口头用语，通过近义词和自然语言的解释，加强大模型对口语化提问及更深的业务场景的理解。</li>
<li><strong>预设问题</strong>: 预定义提问，即用户引导问题，用来设定用户在某一主题下查用的一些问题模板，便于对用户提问之前进行引导</li>
<li><strong>提示词设定</strong>: 用户可以在提示词中嵌入特定提示词，与大模型交互，引导模型更好的理解业务场景和生成自定义的内容</li>
<li><strong>维度成员获取定义等</strong>: 将所选维度数据字典导入，维度值在搜索时可以被联想出来</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161722978.png" alt="" /></p>
<h2 id="选择对话数据集"> 选择对话数据集</h2>
<ul>
<li>从顶部菜单栏，点击问数机器人图标进入问数模块</li>
<li>选择问数对象数据集</li>
<li>左边栏会显示当前对象数据集的维度、指标信息</li>
<li>开始问数</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/chatbi-start.gif" alt="" /></p>
<h2 id="图表生成"> 图表生成</h2>
<p>典型问数问题:</p>
<ul>
<li>2024年6月销售金额最多的10个门店</li>
<li>去年7月在售品类最多的3家门店</li>
<li>给我3家24年卖过书桌的门店。</li>
<li>给我3家24年没有卖过书桌但销量最高的门店</li>
<li>去年销售额最多的销售员是谁，他的销售额是多少</li>
<li>24年每个月的销量情况</li>
<li>24年的销售员销量top5</li>
<li>24年业绩大于50万的门店和销量</li>
<li>去年同比销售下降、上升的产品有哪些</li>
<li>按产品大类做销售额帕累托分析</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191725109.png" alt="" /></p>
<p>支持交叉表、柱线图、饼图等多种图表类型</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161737565.png" alt="" /></p>
<h3 id="sql-dsl查询"> SQL/DSL查询</h3>
<p>支持可调试的AIChart DSL和SQL查看，让用户能够详细检查并优化图表生成逻辑与数据查询语句。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161746174.png" alt="" /></p>
<h3 id="ai生成配置修改"> AI生成配置修改</h3>
<p>当AI生成的查询结果不符合预期时，用户可以便捷地介入并修改，包括调整排序、应用维度过滤或指标过滤等操作，确保查询结果精确匹配需求。这种可干预修正的能力让用户能够灵活优化AI建议的查询条件，提升数据检索和分析的准确性与适用性。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161729168.png" alt="" /></p>
<h3 id="切换至高级分析模式"> 切换至高级分析模式</h3>
<p>如果您希望使用完整自助分析的配置功能，可以切换至高级分析模式。这种模式专为那些需要更深入、更灵活的数据探索和分析的用户设计，提供了增强的功能集来支持复杂的数据操作和分析任务。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/chatbi2widgetdesign.gif" alt="" /></p>
<h2 id="数据解读"> 数据解读</h2>
<p>在使用数据解读功能时，默认情况下查询结果不会直接传递给大模型。如果需要大模型帮助解读和分析数据，您可以主动点击“数据解读”按钮以发起请求。</p>
<div><p>Context长度限制</p>
<p>当前所有大模型都有内容长度（context）的限制。这意味着当查询结果的数据量过大时，尝试发送这些数据给大模型进行解读可能会失败</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191714655.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161734566.png" alt="" /></p>
<h2 id="保存图表"> 保存图表</h2>
<p>通过AI图表保存功能，用户可以将生成的图表直接保存到自助分析模块中，或拷贝到看板，实现与BI分析平台各功能模块的无缝对接。
这一特性不仅让数据分析结果得以灵活应用和长期跟踪，还<strong>打破了单一会话输出的限制</strong>，支持更深入、连续的数据探索和展示。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161745403.png" alt="" /></p>
<h2 id="一键生成看板"> 一键生成看板</h2>
<p>一键生成看板功能可将对话中的图表快速保存并集成到看板中。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/chatbi2board.gif" alt="" /></p>
<h2 id="个性化设置-2"> 个性化设置</h2>
<div><p>数据集问数相关配置</p>
<p>尽管BI系统支持开箱即用的历史数据集用于问数功能，但对于某些问数效果不理想的数据集，进行相应的个性化配置可以显著提升大模型对数据集的理解和用户提问的准确性。<br>
通过个性化配置，您可以优化数据结构、定义关键指标以及调整参数设置，确保更精准的数据分析结果和更符合预期的响应，从而改善整体问数体验和效果。<br>
这种定制化调整特别适用于复杂或特定领域的数据集，有助于克服通用处理方式的局限性。</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161722978.png" alt="" /></p>
<h3 id="业务定义"> 业务定义</h3>
<p>对于一些专有名词或者口头用语，通过近义词和自然语言的解释，加强大模型对口语化提问及更深的业务场景的理解。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191640473.png" alt="" /></p>
<h3 id="预设问题"> 预设问题</h3>
<p>预定义提问，即用户引导问题，用来设定用户在某一主题下查用的一些问题模板，便于对用户提问之前进行引导</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191647593.png" alt="" /></p>
<h3 id="猜您想问-让大模型知道你字段内容"> 猜您想问, 让大模型知道你字段内容</h3>
<p>为了让大模型更好地理解您的数据集字段内容，并在用户提问时即使输入不完整或存在错误也能准确猜测用户的意图，可以采取以下措施：</p>
<p>维度成员获取定义：将所选维度的数据字典导入系统。例如，对于“产品”这个字段，您可以导入包含所有产品的详细列表。这样，在用户进行搜索或提问时，系统可以根据预导入的数据字典联想出相关的维度值（即具体的产品名称）。这不仅提高了查询的准确性，还增强了用户体验。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191655959.png" alt="" /></p>
<h3 id="提示词嵌入"> 提示词嵌入</h3>
<p>为了使大模型更好地理解特定的业务场景并生成符合用户需求的自定义内容，用户可以在提示词中嵌入特定的关键词或短语。
这种方法被称为“提示词嵌入”，它通过向模型提供更精确的上下文信息来引导其输出结果，从而提高交互的相关性和准确性。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505191702638.png" alt="" /></p>
<h2 id="检索增强生成-rag-知识库管理"> 检索增强生成(RAG)知识库管理</h2>
<p>对于复杂的分析指标和业务场景，如：帕累托分析、同比环比、反向过滤等，通过结构化存储名称、描述和DSL预定义，降低使用门槛，确保同类报表一致性，减少试错成本。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202505161725245.png" alt="" /></p>
<ul>
<li>DSL JSON 案例定义可以参考<a href="../../integrate/sdk/2-bo">前端SDK工具包中 Business Object</a> 中关于配置的解释</li>
<li>建议使用YAML描述配置，相对JSON更加精简</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">看板迁移</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/migrate/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/board/migrate/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>看板元数据不同部署环境迁移解决方案</p>
<ul>
<li>看板、看板相关元数据导出、导入</li>
<li>看板元数据导入支持统一文件夹配置</li>
</ul>
<h2 id="看板元数据导出"> 看板元数据导出</h2>
<p>当前看板定义导入、导出<strong>仅支持管理员操作</strong>，在看板页面和看板管理页面课进行操作, 1.8开始支持在看板管理页面一次性导出多个看板定义,</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221025185315.png" alt="" /></p>
<p>看板相关所有资源都会以json文件形式导出，不同资源独立存储，json文件每行对应一条完整记录。</p>
<div><pre><code>├── board.json
├── dataset.json
├── datasource.json
├── folder.json
├── user.json
└── widget.json
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="看板元数据导入"> 看板元数据导入</h2>
<p>管理员在看板管理目录上传并zip包并解析zip包内资源</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221026082418.png" alt="" /></p>
<h3 id="_1-上传zip包"> 1. 上传zip包</h3>
<ol>
<li>zip包为导出步骤导出的压缩包</li>
<li>可以拖入或者点击上传按钮选择目录</li>
<li>支持一次性上传个多zip包</li>
</ol>
<h3 id="_2-分析数据包"> 2.分析数据包</h3>
<p>上传步骤点击<code>下一步</code>，进入分析数据包步骤，点击右下角<code>解析</code>按钮，解析包。<br>
解析包内容包含：目录、用户、看板、数据源、数据集、图表、复杂报表。</p>
<div><p>功能点介绍</p>
<p>Q: <strong>为什么采用离线迁移而不是直接配置数据库对接？</strong><br>
A: 考虑到不同的环境网络可能不通所以采取离线迁移</p>
<p>Q: <strong>重复资源处理</strong><br>
A: 每条资源都有状态栏，通过资源ID分析是否已经存在于当前系统，重复资源操作栏不选择默认为<code>跳过</code>处理</p>
<p>Q: <strong>文件夹替换功能有什么用?</strong><br>
A: 解决不同环境下文件夹目录不一致的问题，迁移目前只支持统一替换目录, 统一目录设置之后不在导入新增目录</p>
<p>Q: <strong>用户替换的作用？</strong><br>
A: 解决不同环境下账号不一致的问题，迁移资源分析为所有资源统一分析，用户支持1对1替换</p>
<p>Q: <strong>数据源替换？</strong><br>
A: 解决不同环境下数据源连接问题, 支持1对1替换</p>
<p>Q: <strong>资源权限怎么办？</strong><br>
A: 资源权限比较复杂，不会迁移，在迁移结束之后用户需要手工授权，建议迁移统一文件夹迁移，迁移结束之后通过文件夹授权</p>
</div>
<h3 id="_3-导入执行"> 3. 导入执行</h3>
<p>资源处理方案配置完成之后，点击下一步进入执行导入步骤，点击<code>执行</code>，执行完成之后，在可以最后一栏查看资源处理结果</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">数据导入</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/datacenter/datacenter/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/datacenter/datacenter/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<div><p>前言</p>
<p><strong>数据导入</strong>模块是IBI数据接入模式的一次新的探索，从原来完全需要用户准备好数据库、数据仓库，IBI作为<strong>只读</strong>的分析前端，到帮助用户做一些简易的数据<strong>写入</strong>工作，
从而达到归集不同数据源的数据到内建数据库(ODS、数据仓库)，比如：用户可以定时导入多份Excel数据、不同业务系统数据库(ERP数据库、CRM数据库)，做一些与聚合以供BI分析使用</p>
<ul>
<li>让缺少数仓建设团队的小微企业也能轻松完成BI分析闭环工作</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230811141009.png" alt="" /></p>
<h2 id="功能列表"> 功能列表</h2>
<ul>
<li>轻量级ETL+数据仓库(MySQL/Clickhouse)解决方案</li>
<li>异构数据归集</li>
<li>导入数据字段选择、字段类型、字段注释可配置</li>
<li>支持多次导入字段增加、字段减少数据合并</li>
<li>全量与增量导入</li>
<li>数据按主键合并</li>
<li>定时同步</li>
<li>数据查看</li>
<li>同步表支持数据集图形化</li>
<li>同步日志查看</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230811105156.png" alt="" /></p>
<h2 id="快速开始"> 快速开始</h2>
<p>IBI支持默认使用的缓存数据库为嵌入式微型数据库H2，H2在每次系统重启之后数据会重置，因此使用数据导入功能之前请更改系统配置文件修改缓存数据类型为MySQL或Clickhouse</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230810155920.png" alt="" /></p>
<h3 id="mysql存储配置"> MySql存储配置</h3>
<div><p>提示</p>
<p>老版本升级，配置文件中没有MySQL配置项，需要新增下面的配置到配置文件</p>
</div>
<div><pre><code><span>aggregator.type</span><span>=</span><span>mysql</span>

<span># Mysql Aggregator</span>
<span>aggregator.mysql.name</span><span>=</span><span>mysql-aggregator</span>
<span>aggregator.mysql.driver-class-name</span><span>=</span><span>com.mysql.jdbc.Driver</span>
<span>aggregator.mysql.url</span><span>=</span><span>jdbc:mysql://localhost:3306/dbname?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>aggregator.mysql.username</span><span>=</span><span>xxx</span>
<span>aggregator.mysql.password</span><span>=</span><span>xxx</span>
<span>aggregator.mysql.initialSize</span><span>=</span><span>1</span>
<span>aggregator.mysql.max-active</span><span>=</span><span>10</span>
<span>aggregator.mysql.testWhileIdle</span><span>=</span><span>false</span>
<span>aggregator.mysql.maxWait</span><span>=</span><span>5000</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div><h3 id="clickhouse存储配置"> Clickhouse存储配置</h3>
<div><p>提示</p>
<p>老版本升级，原配置文件中包含有Clickhouse的配置项，建议增加initialSize防止连接信息错误连接池无限重试
aggregator.ck.initialSize=1</p>
</div>
<div><pre><code><span>aggregator.type</span><span>=</span><span>clickhouse</span>

<span># Clickhouse Aggregator</span>
<span>aggregator.ck.name</span><span>=</span><span>clickhouse</span>
<span>aggregator.ck.driver-class-name</span><span>=</span><span>ru.yandex.clickhouse.ClickHouseDriver</span>
<span>aggregator.ck.url</span><span>=</span><span>jdbc:clickhouse://xxx:8123/dbname</span>
<span>aggregator.ck.username</span><span>=</span><span>xxx</span>
<span>aggregator.ck.password</span><span>=</span><span>xxx</span>
<span>aggregator.ck.initialSize</span><span>=</span><span>1</span>
<span>aggregator.ck.min-idle</span><span>=</span><span>1</span>
<span>aggregator.ck.max-active</span><span>=</span><span>5</span>
<span>aggregator.ck.testWhileIdle</span><span>=</span><span>false</span>
<span>aggregator.ck.maxWait</span><span>=</span><span>5000</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><p>从顶部菜单<code>配置-&gt;数据导入</code>进入功能模块(需授权), 操作界面大致划分为两个区域，查询配置区、任务配置区, 如下图所示:</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230814134140.png" alt="" /></p>
<h2 id="编辑查询"> 编辑查询</h2>
<p>查询编辑与数据集模板查询编辑一样，首先选择数据源，不同的数据源会有不同的查询输入项表单，该处的查询对应每次从外部加载的数据范围</p>
<ul>
<li>JDBC数据配置查询sql语句</li>
<li>文本数据源上传文本文件或者配置服务器上已有文件路径</li>
</ul>
<blockquote>
<p>详细说明请参考数据集模块各种数据源配置说明</p>
</blockquote>
<h2 id="配置字段"> 配置字段</h2>
<p>查询配置完成之后，点击加载数据列，获取查询对应的字段，任务配置区<code>查看字段</code>:</p>
<ul>
<li>首次加载默认所有字段都为选中状态</li>
<li>后续加载如果查询配置项变动导致两次查询字段不一致(增加/减少)，对于前后两次加载的字段中字原始段名一样的，优先保留原始配置</li>
<li>取消字段勾选，则不会加载该字段</li>
<li>修改字段名称输入项，可以更改字段名称(对应数据库中表字段，简易使用英文、拼音字段名)</li>
<li>字段类型配置修改入库之后字段类型，前面四个快捷修改按钮对应常用的数据类型<code>文本</code>, <code>数值整数</code>, <code>浮点型</code>, <code>日期类型</code>， 下拉框选择所有可选字段类型</li>
<li>注释：对应数据库字段解释，配置了注释的字段，在数据集中可以被自动识别为字段别名</li>
</ul>
<h3 id="多次加载自动不一致"> 多次加载自动不一致</h3>
<ul>
<li><strong>字段增多</strong>: 新查询配置如果比现有表字段多，会自动修改原始表数据结构增加字段，历史数据中新增字段为空</li>
<li><strong>字段减少</strong>: 新查询配置如果比现有表字段少，直接按对应字段加载</li>
</ul>
<h2 id="全量与增量"> 全量与增量</h2>
<h3 id="全量加载"> 全量加载</h3>
<p>全量加载会清空当前表数据，新数据重新入库表</p>
<h3 id="增量加载"> 增量加载</h3>
<ul>
<li>在不配置数据合并主键的情况下, 新数据追加导入，</li>
<li>如果配置了合并主键，在导入新数据之前，会先删除原表中与新数据重复的数据，然后再加载新数据</li>
</ul>
<div><p>提示</p>
<p><strong>重新导入</strong>与<strong>追加导入</strong>对应全量加载与增量加载，每次查询配置与导入配置有变动时需要先保存配置，再执行导入操作<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814152352.png" alt="" /></p>
</div>
<h2 id="定时同步"> 定时同步</h2>
<p>您可以通过定时任务开关，开启定时同步任务，加载类型可以选全量同步与增量同步<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814152458.png" alt="" /></p>
<h2 id="数据查看"> 数据查看</h2>
<p>数据加载成功之后，可以在查看数据集栏预览数据<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814152629.png" alt="" /></p>
<h2 id="日志查看"> 日志查看</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230814153247.png" alt="" /></p>
<h2 id="使用导入数据建立数据集"> 使用导入数据建立数据集</h2>
<p>在数据集管理页面，新建数据集，选择数据源为InnerDB(该数据源为内置数据源不需要新建)<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814153438.png" alt="" /></p>
<p>自动进入图形化建模状态</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230814153636.png" alt="" /></p>
<div><p>注意</p>
<ol>
<li>该状态下可见的表名为数据导入配置的文件名，非真实表名，表的可见状态与<code>数据导入</code>资源可见一致</li>
<li>如果一个用户之前对导入表可见，之后由于权限调整对导入表不可见，只要该表还存在，则可以正常使用数据集</li>
</ol>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">JDBC关系型数据库数据集</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.1-jdbc-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.1-jdbc-dataset/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h2 id="查询语句"> 查询语句</h2>
<p>查询语句定义数据集对象，在不是用缓存的情况，数据集查询语句的结果不会被加载到BI服务器，而是通过子查询汇总的形式动态的汇总数据集的结果之后加载在BI服务器。</p>
<h2 id="使用缓存"> 使用缓存</h2>
<p>开启使用缓存配置之后，数据集查询语句会在首次分析查询时，全量加载(默认最大缓存数据量为30W行)到BI服务器缓存在内置的嵌入式数据库，之后的分析会基于该缓存数据。</p>
<blockquote>
<p>更多详细介绍请查看<a href="./../discuss/optimize.html">性能优化</a></p>
</blockquote>
<h2 id="查询语句使用变量"> 查询语句使用变量</h2>
<p>查询sql支持使用环境变量，变量可以来自看板参数或者看板中图标联动事件、内置变量等，如：</p>
<div><pre><code><span>SELECT</span>
      <span>-- .... 省略其他查询脚本 ...</span>
  <span>JOIN</span> foodmart<span>.</span>region r <span>ON</span> c<span>.</span>REGION_ID <span>=</span> r<span>.</span>REGION_ID
  <span>JOIN</span> foodmart<span>.</span>customer d <span>ON</span> a<span>.</span>CUSTOMER_ID <span>=</span> d<span>.</span>CUSTOMER_ID
<span>WHERE</span> r<span>.</span>sales_country <span>=</span> <span>'${country!"USA"}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><div><pre><code><span>select</span>
       <span>-- ....</span>
  <span>from</span> 
 <span>where</span> date_columen <span>between</span> 
             <span>'${arr.get(dt, 0) ! cdt.addDay(-10,"yyyy-MM-dd")}'</span> 
         <span>and</span> <span>'${arr.get(dt, 1) ! cdt.addDay(-1,"yyyy-MM-dd")}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>变量的使用请参考<a href="./../variable/8-variable.html">使用变量章节</a></p>
<h2 id="jdbc-数据源-with-子查询的"> JDBC 数据源 WITH 子查询的</h2>
<p>对于支持 WITH 子查询的 JDBC 数据源在定义数据集查询时候如果包含 WITH 子查询需要使用双箭头<code>&lt;&lt;&gt;&gt;</code>把子查询包裹起来</p>
<div><pre><code><span>&lt;&lt;</span>
  <span>WITH</span> log <span>AS</span> <span>(</span>
  <span>SELECT</span>
    extract<span>(</span><span>year</span> <span>from</span> LOG_TIME<span>)</span> <span>year</span><span>,</span>
    extract<span>(</span><span>month</span> <span>from</span> LOG_TIME<span>)</span> <span>month</span><span>,</span>
    extract<span>(</span><span>day</span> <span>from</span> LOG_TIME<span>)</span> <span>day</span><span>,</span>
    to_char<span>(</span>LOG_TIME<span>,</span> <span>'YYYY-MM-DD'</span><span>)</span> datestr<span>,</span>
    DATASET_NAME<span>,</span> USER_NAME<span>,</span> WIDGET_NAME<span>,</span>
    <span>1</span> cnt
  <span>FROM</span> LOG_DATA_ACCESS <span>where</span> LOG_TIME <span>></span> to_date<span>(</span><span>'2019-01-18'</span><span>,</span> <span>'yyyy-mm-dd'</span><span>)</span>
<span>)</span>
<span>>></span>
 <span>SELECT</span> <span>*</span> <span>FROM</span> log
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h2 id="图形化建模1-11"> 图形化建模<sup>1.11</sup></h2>
<p>图形化建模是sql数据集的替代功能，通过图形化选择表，配置表关联，选择字段即可轻松构建与sql一样的数据集（原理为根据图形化配置自动生成SQL脚本）<br>
打开图形化建模开关，从sql数据集模式切换图形化界面：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/jdbc-gui-switch.gif" alt="" /></p>
<h3 id="添加主表"> 添加主表</h3>
<p>点击添加主表按钮，在弹窗中选择主表</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230814165809.png" alt="" /></p>
<h3 id="添加关联子表"> 添加关联子表</h3>
<p>鼠标移到主表上，显示操作按钮，点击添加按钮，添加关联子表，<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814171524.png" alt="" /></p>
<p>设置关联条件<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230810144119.png" alt="" /></p>
<h3 id="选择表字段"> 选择表字段</h3>
<p>下来选择需要查询的表字段<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230814171800.png" alt="" /></p>
<h3 id="计算字段与过滤字段"> 计算字段与过滤字段</h3>
<div><p>提示</p>
<ul>
<li>使用对应数据库类型所支持的函数，语法同当前数据库语法一致</li>
<li>计算字段不能使用聚会函数 WHERE 前缀不用写</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230810145208.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">文本数据集</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.2-file-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.2-file-dataset/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>IBI支持读取纯文本、Excel(xls/xlsx)、CSV类型文本</p>
<div><p>注意</p>
<p>不能够通过改名的方式把Excel文件的后缀改为txt或者csv，否则会造成读取过程报错</p>
</div>
<h2 id="文件路径"> 文件路径</h2>
<h3 id="通过输入框配置"> 通过输入框配置</h3>
<p>输入框输入相对路径与文本数据源的基础路径组合形成文件绝对路径，这种方式需要文件已经存在于BI服务器上。</p>
<h3 id="通过上传配置"> 通过上传配置</h3>
<ul>
<li>通过上传文件的方式设置文件路径，支持上传csv、txt和excel文件</li>
<li>上传成功之后路径输入框不显示</li>
<li>上传路径为文本数据源基础路径 + 当前登录用户名 + 随机字符名称之下，通过点击文件路径前面的信息图标可以复制相对路径</li>
<li>通过文件列表删除功能可以删除上传的文件</li>
<li>复制文本数据集，不会复制上传文件, 但是删除的时候照样会被删除</li>
</ul>
<div><p>注意</p>
<p>已保存的文件类型数据集，在删除的时候会清空，未保存的数据集，跳转或切换数据集离开当前编辑页，之前的上传的文件会遗留在服务器之上</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230505174239.png" alt="" /></p>
<h2 id="数据类型"> 数据类型</h2>
<p>文本数据不配置数据类型默认都会以字符串的形式加载到缓存数据库，可以通过数据类型配置字段数据类型。<br>
字段下拉框选项在加载数据之后准备就绪</p>
<h2 id="高级配置"> 高级配置</h2>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>编码</td>
<td>影响中文文本读取效果，默认文件编码为utf-8</td>
</tr>
<tr>
<td>跳过行数</td>
<td>是否跳过前几行，在首行为标题的情况下需要配置</td>
</tr>
<tr>
<td>分隔符</td>
<td>默认分割为逗号“,” 文本类型如果为其他分隔符可以配置如 \t</td>
</tr>
<tr>
<td>字段名称</td>
<td>默认首行为字段名称，当读入的首行没有字段名称的时候，可以通过配置设置字段</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">LOD表达式</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.6-lod/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.6-lod/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>LOD函数的全称是详细级别表达式（Level Of Detail Expressions）。它主要是为了克服一些表达式之间计算粒度不一致的问题，本文将详细为您介绍如何使用LOD函数。</p>
<h2 id="使用场景"> 使用场景</h2>
<p>详细级别表达式，其中详细级别指数据聚合粒度的层次，不同的级别代表着数据不同的聚合度和粒度，能够处理在一个可视化视图中包含多个数据详细级别的问题。</p>
<p>如果分析过程中需要添加一个维度，其明细程度高于或者低于已有视图的可视化明细程度，但又不希望改变现有图形展示内容，就可采用详细级别表达式功能。</p>
<h2 id="语法说明"> 语法说明</h2>
<div><pre><code>{<span>[</span><span>FIXED</span> <span>|</span> INCLUDE <span>|</span> EXCLUDE<span>]</span> <span>&lt;</span>维度声明<span>></span> : <span>&lt;</span>聚合表达式<span>></span>}
</code></pre>
<div><span>1</span><br></div></div><h3 id="fixed"> FIXED</h3>
<blockquote>
<p>{FIXED &lt;维度声明&gt; : &lt;聚合表达式&gt;}</p>
</blockquote>
<ul>
<li>FIXED 详细级别表达式使用指定的维度计算值，而不引用视图详细级别，也就是说，不考虑视图中的任何其他维度。</li>
<li>FIXED 详细级别表达式会忽略除自助分析设计器上的筛选过滤。</li>
</ul>
<p>从FIXED的特性可看出，由于其计算时值考虑自身维度声明，不考虑视图上任何其他维度，所以其运行在计算字段生成阶段</p>
<p>详细介绍请参考 <a href="/zh-cn/manual/dataset/2.5-calColumn/#lod-fixed">计算字段#LOD FIXED</a></p>
<h2 id="汇总级lod表达式"> 汇总级LOD表达式</h2>
<p>EXCLUDE、INCLUDE的作用是排除或增加视图中的维度，再做汇总，由于增加维度之后，汇总的颗粒度与视图不再相同，因此这两种LOD表达式都运行在汇总表达式级别</p>
<h3 id="图形化配置"> 图形化配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410211400567.png" alt="" /></p>
<h3 id="表达式配置"> 表达式配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410211349204.png" alt="" /></p>
<h3 id="include"> INCLUDE</h3>
<div><pre><code>{ INCLUDE <span>&lt;</span>维度声明<span>></span> : <span>&lt;</span>聚合表达式<span>></span> <span>[</span>: <span>&lt;</span>过滤条件<span>></span><span>]</span> }
</code></pre>
<div><span>1</span><br></div></div><p>在现有的汇总粒度上增加维度, INCLUDE 数据颗粒度变细，要与现有视图合并则需要在INCLUDE维度之后再在视图颗粒度上做一次附加汇总</p>
<div><pre><code>{ INCLUDE <span><span>`</span>dim<span>`</span></span><span>[</span><span>,</span> <span><span>`</span>dim2<span>`</span></span><span>]</span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span> <span>[</span>: <span>&lt;</span>过滤条件<span>></span><span>]</span> }
</code></pre>
<div><span>1</span><br></div></div><div><pre><code><span>avg</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span>}<span>)</span>
<span>avg</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span>} : <span><span>`</span>type<span>`</span></span> <span>=</span> <span>1</span> <span>AND</span> <span><span>`</span>dt<span>`</span></span> <span>></span> <span>'2024-10-01'</span> <span>)</span>
<span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>a<span>`</span></span><span>)</span><span>/</span><span>sum</span><span>(</span><span><span>`</span>b<span>`</span></span><span>)</span>}<span>)</span>
<span>-- 其中dim可以是表达式如 avg({INCLUDE YEAR(`dt`) : sum(`sales`)})</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>注意</p>
<p>目前include表达式外层必须直接跟汇总函数，不能对INCLUDE整体做其他计算判断或者嵌套函数如：</p>
<div><pre><code><span>-- 错误1-Include表达式使用函数嵌套</span>
<span>sum</span><span>(</span><span>IF</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span>} <span>></span> <span>1000</span><span>,</span> <span><span>`</span>sales<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>
<span>-- 正确写法:</span>
<span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>IF</span><span>(</span><span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span> <span>></span> <span>1000</span><span>,</span> <span><span>`</span>sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>}<span>)</span>

<span>-- 错误2-多个INCLUDE计算:  </span>
<span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col1<span>`</span></span><span>)</span>} <span>+</span> {INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col2<span>`</span></span><span>)</span>}<span>)</span>
<span>-- 正确写法</span>
<span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col1<span>`</span></span><span>)</span>}<span>)</span> <span>+</span> <span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col2<span>`</span></span><span>)</span>}<span>)</span>
<span>sum</span><span>(</span>{INCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col1<span>`</span></span><span>)</span> <span>+</span> <span>sum</span><span>(</span><span><span>`</span>col2<span>`</span></span><span>)</span>}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div></div>
<div><p>下面我们用一个最简单的实例解释INCLUDE</p>
<p>现在有订单表，每个订单有产品类别、子类别、金额等属性，现在需计算每个大类中子类平均销售额,
最终视图中的颗粒度只有类别一列，LOD INCLUDE表达式如：</p>
<div><pre><code><span>avg</span><span>(</span>{INCLUDE <span><span>`</span>子类别<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span>}<span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p>LOD工作过程如图所示：</p>
<ol>
<li><strong>新增子类别</strong> : 在新增子类之后，颗粒度变细, 即一个大类下面有多个子类</li>
<li><strong>LOD 级别汇总</strong>*: 在LOD级别<code>类别</code>, <code>子类别</code>上做<code>sum(销售额)</code>汇总计算，得到每个子类别的销售额</li>
<li><strong>扩展粒度上求平均</strong>: 在扩展粒度上求平均值，让粒度与视图一直</li>
</ol>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221521987.png" alt="" /></p>
<h3 id="exclude"> EXCLUDE</h3>
<blockquote>
<p>{ EXCLUDE &lt;维度声明&gt; : &lt;聚合表达式&gt; [: &lt;过滤条件&gt;] }</p>
</blockquote>
<blockquote>
<p>{ EXCLUDE <code>dim</code>[, <code>dim2</code>] : sum(<code>col</code>) [: &lt;过滤条件&gt;] }</p>
</blockquote>
<p>EXCLUDE与INCLUDE颗粒度变化相反，在现有的汇总粒度上排除维度，由于排除维度之后，颗粒度变粗，原来多行数据变成一行，不需要外部汇总也能与原视图匹配</p>
<div><pre><code>{ EXCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span> }
{ EXCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>col<span>`</span></span><span>)</span> : <span><span>`</span>type<span>`</span></span> <span>=</span> <span>1</span> <span>AND</span> <span><span>`</span>dt<span>`</span></span> <span>></span> <span>'2024-10-01'</span> }
{ EXCLUDE <span><span>`</span>dim<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>a<span>`</span></span><span>)</span><span>/</span><span>sum</span><span>(</span><span><span>`</span>b<span>`</span></span><span>)</span> }
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>Exclude 判断规则</p>
<ol>
<li>LOD表达式中：默认按维度的字段名进行对比判断是否移除</li>
<li>如果视图中的字段配置了衍生维度，如<code>month</code>字段衍生为季度<code>Quarter</code>之后，EXCLUDE <code>month</code>将不能排除 <code>month</code>维度，取而代之可以使用衍生维度之后的别名排除</li>
<li>EXCLUDE <code>YEAR(dt)</code> 不能排除任何维度</li>
<li>如果使用图形化配置，下拉精确选定维度的方式，排除则不用考虑维度是否衍生</li>
</ol>
</div>
<h1 id="典型使用场景"> 典型使用场景</h1>
<h2 id="include典型案例"> INCLUDE典型案例</h2>
<h3 id="计算平均客户销售额"> 计算平均客户销售额</h3>
<p>当订单表中每个客户有多个订单，甚至一个订单有多条货品，我们要计算平均客户销售额</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241430854.png" alt="" /></p>
<div><pre><code><span>avg</span><span>(</span>{INCLUDE <span><span>`</span>客户 id<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span>}<span>)</span>
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>含义：按照客户id计算每个客户的总订单金额之后求平均, 详细级别中使用的sum汇总，外层使用的avg汇总</p>
</blockquote>
<p>习惯图形化配置的用户，也可以通过拖拽字段销售额，下拉配置<code>详细级别(LOD)</code>，实现相同效果</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241434735.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241436410.png" alt="" /></p>
<p>同时我们还可以进一步细分到不同类别产品之后，上面的平均值公式依旧有效</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241440612.png" alt="" /></p>
<h3 id="计算区域订单金额大于200万的区域对应的利润总额"> 计算区域订单金额大于200万的区域对应的利润总额</h3>
<p>按区域统计订单金额，计算大于50万的区域的利润总额。</p>
<div><pre><code><span>sum</span><span>(</span>{
  INCLUDE <span><span>`</span>区域<span>`</span></span> : <span>IF</span><span>(</span>
    <span>sum</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span> <span>></span> <span>2000000</span><span>,</span> <span>sum</span><span>(</span><span><span>`</span>利润<span>`</span></span><span>)</span><span>,</span> <span>0</span>
  <span>)</span>
}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410241455575.png" alt="" /></p>
<p>按区域展开验证数据，如下表所示，红色字体区域的销售额大于2000000, 对应的利润有数值，小于2000000的区域没有计算利润，列汇总值与上面的数值一致</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241457996.png" alt="" /></p>
<h3 id="计算2024年各产品类型的省份平均客户数"> 计算2024年各产品类型的省份平均客户数</h3>
<div><pre><code><span>avg</span><span>(</span>{
  INCLUDE <span><span>`</span>类别<span>`</span></span><span>,</span> <span><span>`</span>省/自治区<span>`</span></span> :
  <span>count</span><span>(</span><span>distinct</span> <span>IF</span><span>(</span><span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span><span>=</span><span>2024</span><span>,</span> <span><span>`</span>客户 id<span>`</span></span><span>,</span> <span>null</span><span>)</span><span>)</span>
}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410241620745.png" alt="" /></p>
<h2 id="exclude典型案例"> Exclude典型案例</h2>
<p>EXCLUDE详细级别表达式将去除表达式中指定的维度后进行计算。</p>
<h3 id="计算区域下各省份销售额占比"> 计算区域下各省份销售额占比</h3>
<p>场景描述
当您在分析区域下各省份的销售额数据情况时，同时还需要查看该区域的总销售数据、以及省份与其的销售额占比时，可以通过exclude函数先计算出除去当前省份后该地区的销售额，再通过聚合方式求和计算出该区域的总额。</p>
<p>字段表达式：</p>
<div><pre><code>{EXCLUDE `省/自治区` : sum(`销售额`)}
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410241723376.png" alt="" /></p>
<p>含义：计算除去当前省份后该地区的销售额。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241644984.png" alt="" /></p>
<h3 id="计算区域和大区平均值之间的差额"> 计算区域和大区平均值之间的差额</h3>
<div><pre><code><span>avg</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span> <span>-</span> {EXCLUDE <span><span>`</span>省/自治区<span>`</span></span> : <span>avg</span><span>(</span><span><span>`</span>销售额<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>设置分段样式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241652333.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241651393.png" alt="" /></p>
<h3 id="同环比计算"> 同环比计算</h3>
<p>从EXCLUDE的定义我们知道，EXCLUDE中的维度定义如果是函数将不会排除任何维度，利用该特性定义EXCLUDE表达式计算去年同期值，如下：</p>
<h4 id="同比"> 同比</h4>
<p>定义汇总表达式</p>
<div><pre><code><span>-- 同期值</span>
{EXCLUDE DATEADD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>-</span><span>1</span><span>,</span> <span>'year'</span><span>)</span> : <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span>}

<span>-- 同比</span>
chgRate<span>(</span>${同期值}<span>,</span> <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202411061532543.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411061532855.png" alt="" /></p>
<div><p>说明</p>
<ol>
<li>当视图中<strong>含有(且必须含有)字段r_date</strong>对应的维度时，将基于该字段计算同期值</li>
<li><strong>r_date</strong>可以设置为任意数据颗粒度，如: yyyy-MM、yyyy-Q、yyyy-MM-dd、yyyy-WW</li>
<li>基于LOD的同期值可以<strong>在任意数据颗粒度使用</strong>，您还可以添加任意维度和日期组合分析</li>
<li>与指标字段类型同环比区别: 基于LOD的同期值计算运行在数据库层面，数据库会有额外开销</li>
<li>且表面不需要去年数据，即: 可以在过滤中对<strong>r_date</strong>过滤只显示23年的数据，只要数据库中有22年的数据同期值首年的同期值依然能正确计算</li>
</ol>
</div>
<h4 id="环比"> 环比</h4>
<div><pre><code><span>-- 上月值: 日期往前一个月则为月环比</span>
{EXCLUDE DATEADD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>-</span><span>1</span><span>,</span> <span>'month'</span><span>)</span> : <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span>}
<span>-- 上周值：日期往前一周则为周环比</span>
{EXCLUDE DATEADD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>-</span><span>1</span><span>,</span> <span>'week'</span><span>)</span> : <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span>}

<span>-- 环比</span>
chgRate<span>(</span>${上月值}<span>,</span> <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202411061533914.png" alt="" /></p>
<h3 id="财务毛利率计算"> 财务毛利率计算</h3>
<p>财务还是业务都必然会分析的一个最简单的指标<strong>毛利率</strong>：</p>
<blockquote>
<p>毛利率 GP% = 毛利/收入 =（收入-成本）/收入</p>
</blockquote>
<table>
<thead>
<tr>
<th style="text-align:left">科目</th>
<th style="text-align:center">版本</th>
<th style="text-align:right">金额</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">收入</td>
<td style="text-align:center">实际</td>
<td style="text-align:right">100</td>
</tr>
<tr>
<td style="text-align:left">成本</td>
<td style="text-align:center">实际</td>
<td style="text-align:right">80</td>
</tr>
<tr>
<td style="text-align:left">收入</td>
<td style="text-align:center">预测</td>
<td style="text-align:right">110</td>
</tr>
<tr>
<td style="text-align:left">成本</td>
<td style="text-align:center">预测</td>
<td style="text-align:right">90</td>
</tr>
</tbody>
</table>
<p>用 PowerBI 做的话会有以下3步：</p>
<div><pre><code>收入 <span>=</span> Calculate <span>(</span> <span>SUM</span><span>(</span><span>[</span>金额<span>]</span><span>)</span><span>,</span> Filter<span>(</span><span>'科目表'</span><span>,</span><span>[</span>科目<span>]</span><span>=</span><span>"收入"</span><span>)</span><span>)</span>
成本 <span>=</span> Calculate <span>(</span> <span>SUM</span><span>(</span><span>[</span>金额<span>]</span><span>)</span><span>,</span> Filter<span>(</span><span>'科目表'</span><span>,</span><span>[</span>科目<span>]</span><span>=</span><span>"成本"</span><span>)</span><span>)</span>
毛利率 <span>=</span> Divide <span>(</span> <span>(</span><span>[</span>收入<span>]</span> <span>-</span> <span>[</span>成本<span>]</span><span>)</span> <span>,</span> <span>[</span>收入<span>]</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>这一步在我们BI中思路一样，做3个汇总表达式</p>
<div><pre><code>收入 <span>=</span> <span>sum</span><span>(</span><span>IF</span><span>(</span><span><span>`</span>科目<span>`</span></span><span>=</span><span>'收入'</span><span>,</span> <span><span>`</span>金额<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>
成本 <span>=</span> <span>sum</span><span>(</span><span>IF</span><span>(</span><span><span>`</span>科目<span>`</span></span><span>=</span><span>'成本'</span><span>,</span> <span><span>`</span>金额<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>
毛利率 <span>=</span> DIVIDE<span>(</span>${收入}<span>-</span>${成本}<span>,</span> ${收入}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410241703066.png" alt="" /></p>
<p>假如领导说，我要对比 24年实际的毛利率 和 24年预算的毛利率，要对比。PBI 只需要再写3个度量值：</p>
<div><pre><code>毛利率_24年实际 <span>=</span> Calculate <span>(</span> <span>[</span>毛利率<span>]</span> <span>,</span> Filter<span>(</span><span>'事实表'</span><span>,</span><span>[</span>版本<span>]</span><span>=</span><span>"24年实际"</span><span>)</span><span>)</span>
毛利率_24年预算 <span>=</span> Calculate <span>(</span> <span>[</span>毛利率<span>]</span> <span>,</span> Filter<span>(</span><span>'事实表'</span><span>,</span><span>[</span>版本<span>]</span><span>=</span><span>"24年预算"</span><span>)</span><span>)</span>
毛利率_预实差 <span>=</span> <span>[</span>毛利率_24年实际<span>]</span> <span>-</span> <span>[</span>毛利率_24年预算<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h4 id="不是用详细级别表达式"> 不是用详细级别表达式</h4>
<div><pre><code><span>[</span>毛利率_24年实际<span>]</span> <span>=</span> <span>(</span> 
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"收入"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年实际"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span> <span>-</span> 
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"成本"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年实际"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span> 
<span>)</span> <span>/</span>
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"收入"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年实际"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span> 

<span>[</span>毛利率_24年预测<span>]</span> <span>=</span> <span>(</span> 
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"收入"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年预测"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span> <span>-</span> 
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"成本"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年预测"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span> 
<span>)</span> <span>/</span>
<span>SUM</span> <span>(</span><span>IF</span><span>(</span><span>[</span>科目<span>]</span><span>=</span><span>"收入"</span> <span>and</span> <span>[</span>版本<span>]</span><span>=</span><span>"24年预测"</span> <span>,</span><span>[</span>金额<span>]</span> <span>,</span><span>0</span><span>)</span>

<span>[</span>差额<span>]</span> <span>=</span> <span>[</span>毛利率_24年实际<span>]</span> <span>-</span> <span>[</span>毛利率_24年预测<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><div><p>思考</p>
<p>可以看到上面虽然计算出来了差额，但是重复的定义了毛利率的计算公式，PowerBI的方案是先过滤表再复用毛利率计算公式，毛利率计算公式统一在毛利率表达式中维护，
如果毛利率计算方案调整只需要修改[毛利率]计算公式表达式即可，但是下面的版本需要修改三个计算公式</p>
<ul>
<li>[毛利率]</li>
<li>[毛利率_24年实际]</li>
<li>[毛利率_24年预测]
对比之下显然是PowerBI的逻辑更优</li>
</ul>
</div>
<h4 id="使用详细级别表达式"> 使用详细级别表达式</h4>
<p>用详细级别表达式怎么做呢，我们上面已经定义了毛利率的计算公式，怎么复用公式，而不是新增不同版本的毛利率公式呢</p>
<div><pre><code>实际毛利率 <span>=</span> {EXCLUDE : ${毛利率} : <span><span>`</span>版本<span>`</span></span> <span>=</span> <span>'实际'</span>}
预测毛利率 <span>=</span> {EXCLUDE : ${毛利率} : <span><span>`</span>版本<span>`</span></span> <span>=</span> <span>'预测'</span>}
差额 <span>=</span> ${实际毛利率<span>2</span>} <span>-</span> ${预测毛利率<span>2</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>解释</p>
<p>上面的毛利率表达式中，使用EXCLUDE详细级别调整毛利率计算公式，没有排除维度，仅增加了表过滤条件<code>版本</code> = 'xxx'</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410241713074.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">HTTP接口数据集</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.4-http-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.4-http-dataset/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="api接口数据集"> API接口数据集</h2>
<h3 id="数据集-查询配置"> 数据集/查询配置</h3>
<ul>
<li>请求路径, 与数据源服务地址链接组成完整请求地址, 不需要以斜杠开头</li>
<li>请求路径如果以http://, https://开头则不会使用服务地址</li>
<li>Method: get/post</li>
<li>请求头: 配置认证相关信息, 可使用环境变量, 如: ${loginName}, ${token}，(此处的token为内置变量)</li>
<li>请求体: 可使用环境变量, 如通过看板参数绑定的环境变量
<ul>
<li>form-data, 常规表单请求体</li>
<li>form-data/json, 当参数过多时简化form-data输入的一种形式, 以json形式输入表单信息, 服务端会自动解析为常规表单, 不支持嵌套json</li>
</ul>
<div><pre><code><span>{</span>
  <span>"area"</span><span>:</span><span>"${area!'上海'}"</span><span>,</span>
  <span>"timef"</span><span>:</span><span>"${timef!'2022-05-19 00:00:00'}"</span><span>,</span>
  <span>"timel"</span><span>:</span><span>"${timel!'2022-08-19 00:00:00'}"</span><span>,</span>
  <span>"day"</span><span>:</span><span>"${day!'1'}"</span><span>,</span>
  <span>"word"</span><span>:</span><span>"${word}"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><ul>
<li>application/json, json请求体数据</li>
</ul>
</li>
</ul>
<div><p>使用缓存</p>
<p>设定查询结果是否缓存重复之后重复使用, 如果在请求体或者请求头中使用了环境变量, 建议关闭使用缓存选项, 具体原因见 <a href="./8-variable.html#side-effect-副作用">变量的副作用</a></p>
</div>
<h2 id="请求返回数据结构"> 请求返回数据结构</h2>
<h3 id="返回类型是json对象"> 返回类型是JSON对象</h3>
<p>返回类型是JSON对象，配置解析属性(JPath)获取数据</p>
<ul>
<li>目前仅支持json结构的数据解析</li>
<li>解析属性使用jpath解析获取属性值, 解析属性必须为JSON数组,
<ul>
<li>数组成员为JSON对象时, 对象属性会解析为数据集可选字段</li>
<li>数组成员也可以为基础数据类型</li>
</ul>
</li>
<li>如: 请求返回数据结构如下所示可以使用<code>$.results</code>解析结果:</li>
</ul>
<div><pre><code><span>{</span>
  <span>"results"</span><span>:</span> <span>[</span>
    <span>"上海市"</span><span>,</span>
    <span>"北京"</span><span>,</span>
    <span>"广州"</span><span>,</span>
    <span>"深圳"</span>
  <span>]</span><span>,</span>
  <span>"success"</span><span>:</span> <span>true</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h4 id="数据字段为jsonobject数组"> 数据字段为JSONObject数组</h4>
<p>最外层为JSON对象，数据字段为JSONObject数组，这种数据结构</p>
<ul>
<li>仅需配<strong>置解析属性</strong>(JPath)即可，<code>$.results</code>:</li>
</ul>
<div><pre><code><span>{</span>
  <span>"results"</span><span>:</span> <span>[</span>
    <span>{</span>
      <span>"id"</span><span>:</span> <span>1</span><span>,</span>
      <span>"name"</span><span>:</span> <span>"张三"</span><span>,</span>
      <span>"salary"</span><span>:</span> <span>10000</span>
    <span>}</span><span>,</span>
    <span>{</span>
      <span>"id"</span><span>:</span> <span>2</span><span>,</span>
      <span>"name"</span><span>:</span> <span>"李四"</span><span>,</span>
      <span>"salary"</span><span>:</span> <span>12000</span>
    <span>}</span>
  <span>]</span><span>,</span>
  <span>"success"</span><span>:</span> <span>true</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h4 id="数据字段为原始数据二维数组v1-10"> 数据字段为原始数据二维数组<sup>v1.10</sup></h4>
<p>使用数组形式存储数据可以达到压缩数据传输体积, 当数据字段为原始类型数组时，需要配置</p>
<ul>
<li><strong>解析属性</strong>配置为: <code>$.data</code></li>
<li><strong>行数据结构</strong>选择为Array</li>
</ul>
<div><pre><code><span>{</span>
  <span>data</span><span>:</span> <span>[</span>
    <span>[</span><span>'Income'</span><span>,</span><span>'Life Expectancy'</span><span>,</span><span>'Population'</span><span>,</span><span>'Country'</span><span>,</span><span>'Year'</span><span>]</span><span>,</span>
    <span>[</span><span>815</span><span>,</span><span>34.05</span><span>,</span><span>351014</span><span>,</span><span>'Australia'</span><span>,</span><span>1800</span><span>]</span><span>,</span>
    <span>[</span><span>1314</span><span>,</span><span>39</span><span>,</span><span>645526</span><span>,</span><span>'Canada'</span><span>,</span><span>1800</span><span>]</span><span>,</span>
    <span>[</span><span>985</span><span>,</span><span>32</span><span>,</span><span>321675013</span><span>,</span><span>'China'</span><span>,</span><span>1800</span><span>]</span>
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h3 id="请求返回json数组的场景v1-12"> 请求返回JSON数组的场景<sup>v1.12</sup></h3>
<p>如果请求返回的数据结构最外层为数组</p>
<ul>
<li>解析属性不配置</li>
<li>行数据结构设定要选择为Array</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121084129.png" alt="" /></p>
<h4 id="数组中元素为原始数据类型"> 数组中元素为原始数据类型</h4>
<div><pre><code><span>[</span>
  <span>[</span> <span>"Income"</span><span>,</span> <span>"Life Expectancy"</span><span>,</span> <span>"Population"</span><span>,</span> <span>"Country"</span><span>,</span> <span>"Year"</span> <span>]</span><span>,</span>
  <span>[</span> <span>815</span><span>,</span> <span>34.05</span><span>,</span> <span>351014</span><span>,</span> <span>"Australia"</span><span>,</span> <span>1800</span> <span>]</span><span>,</span>
  <span>[</span> <span>1314</span><span>,</span> <span>39</span><span>,</span> <span>645526</span><span>,</span> <span>"Canada"</span><span>,</span> <span>1800</span> <span>]</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h4 id="数组中元素为json对象数据类型"> 数组中元素为JSON对象数据类型</h4>
<p>请求response结构Array + JSONObject</p>
<div><pre><code><span>[</span>
  <span>{</span>
    <span>"userId"</span><span>:</span> <span>1</span><span>,</span>
    <span>"id"</span><span>:</span> <span>1</span><span>,</span>
    <span>"title"</span><span>:</span> <span>"sunt aut facere repellat p"</span><span>,</span>
    <span>"body"</span><span>:</span> <span>"quia et suscipit\nsuscipit recusandae consequuntur "</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"userId"</span><span>:</span> <span>1</span><span>,</span>
    <span>"id"</span><span>:</span> <span>2</span><span>,</span>
    <span>"title"</span><span>:</span> <span>"qui est esse"</span><span>,</span>
    <span>"body"</span><span>:</span> <span>"est rerum tempore vitae\nsequi sint nihil "</span>
  <span>}</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h2 id="字段属性v1-10"> 字段属性<sup>v1.10</sup></h2>
<p>接口返回的字段, 如请求返回的结构如下，包含字段columns字段，字段描述了results中每列的数据类型与别名</p>
<div><pre><code><span>{</span>
    <span>columns</span><span>:</span> <span>[</span>
        <span>{</span> <span>column</span><span>:</span> <span>'id'</span><span>,</span> <span>type</span><span>:</span> <span>'number'</span> <span>}</span><span>,</span>
        <span>{</span> <span>column</span><span>:</span> <span>'name'</span><span>,</span> <span>type</span><span>:</span> <span>'string'</span><span>,</span> <span>alias</span><span>:</span> <span>'姓名'</span><span>,</span> <span>}</span><span>,</span>
        <span>{</span> <span>column</span><span>:</span> <span>'salary'</span><span>,</span> <span>type</span><span>:</span> <span>'number'</span><span>,</span> <span>alias</span><span>:</span> <span>'薪资'</span><span>,</span> <span>}</span><span>,</span>
    <span>]</span><span>,</span>
    <span>data</span><span>:</span> <span>[</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>1</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"张三"</span><span>,</span>
            <span>"salary"</span><span>:</span> <span>10000</span>
        <span>}</span><span>,</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>2</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"李四"</span><span>,</span>
            <span>"salary"</span><span>:</span> <span>12000</span>
        <span>}</span>
    <span>]</span>
<span>}</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230505184211.png" alt="" /></p>
<h2 id="数据类型"> 数据类型</h2>
<p>文本数据不配置数据类型默认都会以字符串的形式加载到缓存数据库，可以通过数据类型配置字段数据类型。<br>
字段下拉框选项在加载数据之后准备就绪</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Elastcsearch数据集</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.3-es-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.3-es-dataset/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p><img src="./../../assets/dataset/es_dataset.png" alt="" /></p>
<div><p>Tips</p>
<p>为了减少对ES版本以及第三方ES库的依赖，CBoard采取<mark>restful + DSL连接与查询模式</mark>。所以ES的使用需要使用者（尤其是建模者）对ES基本概念有所了解，之外还需要掌握一些DSL语法。
ES查询需要参数需要精确到<code>Type，Index</code>名称可使用通配符原理与ES DSL查询URL参数一样。<br>
由于ES里面存储的数据大多为明细数据，时间维度聚合的时候粒度需要调整为时间段<code>date_histgram</code>，而默认的聚合级别为<code>term</code>也就是关键词，所以在使用时间维度聚合之前需要调整聚合粒度。</p>
</div>
<h2 id="聚合覆盖"> 聚合覆盖</h2>
<p>CBoard 提供了三类常见的聚合 Bulket 覆盖辅助输入，具体可配置参数请参考官方文档<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html" target="_blank" rel="noopener noreferrer">Bucket Aggregations</a></p>
<ol>
<li>date_hist: 日期类型直方图聚合</li>
<li>number_range: 数字区间聚合</li>
<li>number_hist：数字直方图</li>
</ol>
<p><img src="./../../assets/dataset/es-override.png" alt="" /></p>
<div><pre><code>语法如下(可以重复覆盖多个列的聚合)<span>:</span>
<span>{</span>
  <span>"columnname"</span><span>:</span><span>{</span>
    <span>"&lt;aggregation_type>"</span> <span>:</span> <span>{</span>
      &lt;aggregation_body>
    <span>}</span>
  <span>}</span>
<span>}</span>
---------------------------------
样例：
对时间戳字段timestamp(long类型)按每<span>10</span>分钟一段进行聚合<span>,</span> 数字memory按自定义区间聚合
<span>{</span>
  <span>"timestamp"</span><span>:</span> <span>{</span>
    <span>"date_histogram"</span><span>:</span> <span>{</span>
      <span>"field"</span><span>:</span> <span>"timestamp"</span><span>,</span>
      <span>"format"</span><span>:</span> <span>"yyyy-MM-dd HH:mm:ss"</span><span>,</span>
      <span>"interval"</span><span>:</span> <span>"10m"</span><span>,</span>
      <span>"time_zone"</span><span>:</span> <span>"+08:00"</span>
    <span>}</span>
  <span>}</span><span>,</span>
  <span>"memory"</span><span>:</span> <span>{</span>
    <span>"range"</span><span>:</span> <span>{</span>
      <span>"field"</span><span>:</span> <span>"memory"</span><span>,</span>
      <span>"ranges"</span><span>:</span> <span>[</span>
        <span>{</span>
          <span>"to"</span><span>:</span> <span>10000</span>
        <span>}</span><span>,</span>
        <span>{</span>
          <span>"from"</span><span>:</span> <span>10000</span><span>,</span>
          <span>"to"</span><span>:</span> <span>30000</span>
        <span>}</span><span>,</span>
        <span>{</span>
          <span>"from"</span><span>:</span> <span>30000</span>
        <span>}</span>
      <span>]</span>
    <span>}</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br></div></div><h2 id="日期字段-区间"> 日期字段+区间</h2>
<p>用于生成按索引的日期后缀与查询过滤, 该功能属于维护，可能不太稳定</p>
<p>当设置有日期字段之后，默认索引以 indexName-yyyy.MM.dd名称，</p>
<ul>
<li>字段获取时使用通配符路径 http://localhost:9200/index_name-*/_mapping</li>
<li>查询搜索是日期字段没有设置过滤条件，使用默认的日期组件 http://localhost:9200/index_name-2023.01.01,index_name-2023.01.02,index_name-2023.01.03/_mapping</li>
<li>当日期字段带有过滤条件时，日期后缀会结合过滤条件自动生成</li>
</ul>
<h2 id="timezone"> TimeZone</h2>
<p>索引日期时区配置，支持配置<code>+02:00</code>与时区名称<code>Asia/Shanghai</code></p>
<h2 id="全局过滤条件"> 全局过滤条件</h2>
<p>可以设置单个或者多个全局过滤条件，过滤条件中可以使用内置日期变量，从而实现动态全局过滤的效果</p>
<div><pre><code><span>{</span>
  <span>"range"</span><span>:</span> <span>{</span>
    <span>"time"</span><span>:</span> <span>{</span>
      <span>"gt"</span><span>:</span> <span>"${cdt.addMonth(-1, 'yyyy-MM-dd')}"</span>
    <span>}</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><div><pre><code><span>[</span>
  <span>{</span>
    <span>"range"</span><span>:</span> <span>{</span>
      <span>"time"</span><span>:</span> <span>{</span>
        <span>"gt"</span><span>:</span> <span>"xx"</span>
      <span>}</span>
    <span>}</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"term"</span><span>:</span> <span>{</span>
      <span>"status"</span><span>:</span> <span>"published"</span>
    <span>}</span>
  <span>}</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h2 id="脚本衍生维度配置"> 脚本衍生维度配置</h2>
<p>在前面中的聚合覆盖设置在数据集查询之上，相当于全局查询列聚合覆盖；同时如果想对一个列采取多种分桶策略，可以在 Schema 树上多次引用可选列，然后编辑 custom 信息</p>
<p><img src="./../../assets/dataset/selects_custom_override.png" alt="" /></p>
<div><pre><code><span>{</span>
  <span>"esBucket"</span><span>:</span> <span>{</span>
    <span>"&lt;aggregation_type>"</span> <span>:</span> <span>{</span>
      &lt;aggregation_body>
    <span>}</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><div><p>注意</p>
<p><code>esBucket</code>为内置关键词，不能替换</p>
</div>
<h2 id="高级聚合表达式"> 高级聚合表达式</h2>
<p>除了常规聚合统计之外，ES 的聚合表达式还支持<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html" target="_blank" rel="noopener noreferrer">Filter Aggregation</a>, 用作条件统计，或者静态占比</p>
<div><pre><code>语法如下<span>:</span>
count/sum/avg/max/min("<span>{</span>
  'coulumn'<span>:</span> '用于聚合的column'<span>,</span>
  'filter'<span>:</span> &lt;filter_body>
<span>}</span>")
-------------------------------
count("<span>{</span>
    'column'<span>:</span> 'orderId'<span>,</span>
    'filter'<span>:</span> <span>{</span>
        'term'<span>:</span> <span>{</span>
          'order.platform'<span>:</span> 'online'
        <span>}</span>
    <span>}</span>
<span>}</span>")
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><p><img src="./../../assets/dataset/ES-CM.png" alt="" /></p>
<blockquote>
<p>CBoard 也内建了一些常用过滤器输入辅助</p>
</blockquote>
<p><img src="./../../assets/dataset/es-cm-completer.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">计算字段</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.5-calColumn/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.5-calColumn/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>在数据分析时，如果基础数据没有包括回答问题所需的所有字段，可以增加计算字段，增加的计算字段将作为原始明细数据字段的一部分参与运算</p>
<div><p>场景</p>
<ol>
<li>普通字段类型转换</li>
</ol>
<ul>
<li><strong>日期格式转换</strong>: 将一个日期字段从字符串格式转换为日期格式。例如，将”20230809”转换为”2023-08-09”。</li>
<li><strong>数值转换</strong>: 将文本格式的数值转换为实际数值类型，如将”1000”转换为整数1000，或将”3.14”转换为浮点数。</li>
<li><strong>货币转换</strong>: 将一个货币值从一种货币单位转换为另一种货币单位，例如从美元转换为欧元。</li>
</ul>
<ol start="2">
<li>字段间的运算</li>
</ol>
<ul>
<li><strong>销售金额计算</strong>: 通过乘法计算单价和数量，得出销售金额(Sales Amount = Unit Price * Quantity)。</li>
<li><strong>折扣后的价格</strong>: 计算应用折扣后的最终价格，如Final Price = Original Price - (Original Price * Discount)。</li>
<li><strong>时间差计算</strong>: 计算两个日期或时间字段之间的差值，例如计算一个项目的完成时间或订单的处理时间(Processing Time = End Date - Start Date)。</li>
</ul>
<ol start="3">
<li>逻辑判断</li>
</ol>
<ul>
<li><strong>分类判断</strong>: 基于特定条件对数据进行分类，如Case When Age &gt;= 18 Then 'Adult' Else 'Minor' End。</li>
<li><strong>评分计算</strong>: 根据多条件对记录进行评分，如计算客户的信用评分或产品的质量等级。</li>
<li><strong>状态标记</strong>: 基于某些业务规则为记录添加状态标记，例如，如果库存量低于某个阈值，标记为“缺货”。</li>
</ul>
<ol start="4">
<li>汇总字段</li>
</ol>
<p><strong>累计总和</strong>: 计算一个列的累计总和，如SUM(Sales) OVER (ORDER BY Date)，用以分析销售趋势。
<strong>排名</strong>: 使用ROW_NUMBER()或RANK()函数对记录进行排名，如根据销售额对销售人员排名。
<strong>分区求和</strong>: 使用SUM(Sales) OVER (PARTITION BY Region)按区域对销售进行分组汇总。</p>
</div>
<h2 id="使用须知"> 使用须知</h2>
<div><p>使用须知</p>
<p>对于jdbc数据源，汇总类型计算字段需要数据库支持窗口函数, <strong>常用数据除mysql8.0之前的版本均已支持窗口函数</strong><br>
数据源大类上目前支持<strong>关系型数据库</strong>、<strong>文本</strong>、<strong>Http</strong>、<strong>在线表格</strong>，ES和MongoDB暂不支持，此外关系型数据库如果使用汇总类型的计算字段对数据库版本也有一定要求，<br>
<strong>再次特别提示：MySQL需要8.0以上版本, 8.0以下的汇总级计算字段可以用LOD FIXED表达式，实现同样的效果</strong>
mysql版本查询语法如下：</p>
<div><pre><code>SELECT VERSION()
</code></pre>
<div><span>1</span><br></div></div></div>
<h2 id="添加计算字段"> 添加计算字段</h2>
<p>在字段列表下方的<code>计算字段</code>栏，点击加号，添加计算字段</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408171134263.png" alt="" /></p>
<ul>
<li>图形化定义普通计算字段与窗口函数计算字段</li>
</ul>
<p>计算字段编辑器如下：</p>
<ul>
<li><strong>字段命名</strong>：必填相当于数据库表字段名，命名支持中文</li>
<li><strong>字段列表</strong>：为原始字段列表，点击字段自动插入字段定义编辑器</li>
<li><strong>计算列段列表</strong>：为其他计算字段，<strong>如果自身是汇总类型计算字段则不能引用其他汇总类型计算字段</strong></li>
<li><strong>字段定义</strong>：计算字段定义表达式</li>
<li><strong>汇总字段开关</strong>：切换字段是否需要进行汇总</li>
<li><strong>汇总函数列表</strong>：常用汇总函数列表，点击函数自动插入字段定义编辑器</li>
<li><strong>分组字段栏</strong>：可拖拽原始0个或多个字段作为分组栏，不拖入字段则为全表汇总</li>
<li><strong>组内排序字段</strong>：可拖拽原始字段到组内排序，<strong>注意：如果使用的是sum、count、avg，排序之后计算值会变成累计值</strong></li>
<li><strong>模式切换</strong>：普通模式、高级模式，高级模式下可以相当于用纯sql脚本定义计算字段可以是普通计算字段，也可以是带窗口函数的汇总计算字段</li>
<li><strong>查看字段值</strong>：计算字段定义完成之后，点击确认关闭窗口，在数据集编辑的预览查询中查看计算字段值，汇总计算字段开销比较大，当数据量比较大，而且有多个汇总字段时预览会比原始数据预览要慢</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808172609.png" alt="" /></p>
<h3 id="添加计算字段到模型"> 添加计算字段到模型</h3>
<div><p>添加到模型</p>
<p>计算字段定义完成之后与普通字段列表一样，需要拖拽添加到数据集模型</p>
</div>
<ul>
<li>拖拽到维度之后，可以编辑维度节点设置原始数据类型</li>
<li>日期类型计算字段拖拽到模型之后，需要编辑维度节点，设置原始数据类型为日期</li>
</ul>
<h3 id="计算字段间引用"> 计算字段间引用</h3>
<div><pre><code><span>CASE</span> 
     <span>WHEN</span> <span>#{首次下单时间} = `order date` THEN '新客'</span>
     <span>ELSE</span> <span>'老客'</span>
<span>END</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202408160943793.png" alt="" /></p>
<div><p>计算字段间任意易用</p>
<p>1.15汇总计算字段不能引用其他汇总字段，在1.16之后所有的计算字段只要引用不成死循环，都可以任意引用。</p>
</div>
<h3 id="动态计算"> <strong>动态计算</strong></h3>
<p>只有在分析中用到的计算字段才会在查询中构造，避免无用的运算开销</p>
<h3 id="配套支持"> <strong>配套支持</strong></h3>
<p>过滤组合、维度成员获、指标字段统计取均已支持使用计算字段</p>
<div><p>Q&A</p>
<ol>
<li>
<p><strong>问:</strong> 我使用SQL数据集，这些计算字段能分分钟设计出来，还需要使用计算字段吗？<br>
<strong>答:</strong>  如果是非汇总类型字段(不需要使用窗口函数)，可以直接在数据集sql中添加，但是如果是汇总类型<strong>计算字段</strong>，BI引擎会根据分析中是否使用到该字段<strong>动态决定是否构造查询</strong>，相较直接在sql中增加汇总运算字段在性能上会比有好一些.
此外如果多个计算之间有运算，利用计算字段间的引用也能减少一些sql编写工作量, 比如上面案例中case when中使用了汇总字段。</p>
</li>
<li>
<p><strong>问:</strong> 计算字段与数据集表达式字段有什么区别？<br>
<strong>答:</strong> 数据集表达式使用场景是针对汇总结果之后的字段间运算，而计算字段运行在汇总之前明细数据级别，相当于给原始表新增了列。
<img src="http://qiniu.ibidemo.cn/picgo/202408161007110.png" alt="" /></p>
</li>
<li>
<p><strong>问:</strong> 哪些类型数据源可以使用计算字段?<br>
<strong>答:</strong> 数据源大类上目前支持<strong>关系型数据库</strong>、<strong>文本</strong>、<strong>Http</strong>、<strong>在线表格</strong>，ES和MongoDB暂不支持，此外关系型数据库如果使用汇总类型的计算字段对数据库版本也有一定要求，<strong>特别提示：MySQL需要8.0以上版本</strong>。</p>
</li>
</ol>
</div>
<h2 id="统一函数"> 统一函数</h2>
<p>为了方面用户使用，在BI平台上我们提供了一套统一的计算函数，详情请参考 <a href="/zh-cn/manual/dataset/2.7-union-functions">统计计算函数</a>, 如:</p>
<div><pre><code><span>YEAR</span><span>(</span>dt<span>)</span> <span>-- 获取到日期的年份</span>
</code></pre>
<div><span>1</span><br></div></div><h2 id="lod-fixed"> LOD FIXED</h2>
<ul>
<li>LOD FIXED 详细级别表达式使用指定的维度计算汇总值，而不引用视图中的维度。</li>
<li>FIXED为计算字段，运行在视图汇总之前。</li>
</ul>
<table>
  <tr>
    <td>语法</td>
    <td>{FIXED [维度声明] : [聚合表达式]} </td>
  </tr>
  <tr>
      <td>参数说明</td>
      <td>
         <div><b>维度声明</b>：指定聚合表达式要连接到的一个或多个维度。使用逗号分隔各个维度, 如果没有维度声明则计算总体汇总。</div>
         <div><b>聚合表达式</b>：聚合表达式是所执行的计算，用于定义目标维度。</div>
      </td>
  </tr>
  <tr>
    <td>定义</td>
    <td>根据指定维度进行聚合计算，不引用其他任何维度。 </td>
  </tr>
  <tr>
    <td>说明</td>
    <td>
        维度声明中的元素可以是单个字段，或者是计算字段或计算字段的引用
    </td>
  </tr>
</table>
<p>示例1. FIXED 详细级别表达式计算每个区域的销售额总和：</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>Region<span>`</span></span> : <span>SUM</span><span>(</span><span><span>`</span>Sales<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>示例2. 计算客户最早下单时间</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>客户名称<span>`</span></span> : <span>min</span><span>(</span><span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>示例3. 计算客户每年订单数量</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>客户名称<span>`</span></span><span>,</span> <span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span> : <span>distinct</span><span>(</span><span><span>`</span>订单ID<span>`</span></span><span>)</span>}
<span>-- 或者</span>
{<span>FIXED</span> <span><span>`</span>客户名称<span>`</span></span><span>,</span> <span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span> : <span>count</span><span>(</span>distint <span><span>`</span>订单ID<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h3 id="fixed过滤"> FIXED过滤</h3>
<p>由于FIXED是计算字段，所以不受视图上的维度过滤影响, 如果要在FIXED中过滤可以使用条件计算如：</p>
<div><pre><code>{<span>FIXED</span> <span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span> : <span>sum</span><span>(</span> 
   <span>IF</span><span>(</span><span>YEAR</span><span>(</span><span><span>`</span>订单日期<span>`</span></span><span>)</span><span>=</span><span>2023</span> <span>AND</span> <span><span>`</span>装运模式<span>`</span></span> <span>=</span> <span>'一级'</span><span>,</span> <span><span>`</span>销售额<span>`</span></span><span>,</span> <span>0</span><span>)</span> 
   <span>)</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>注意</p>
<p>使用汇总级计算字段时，在自助分析中的汇总类型请选择<strong>min/max</strong></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410211140562.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">统一计算函数</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.7-union-functions/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.7-union-functions/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="背景说明"> 背景说明</h2>
<blockquote>
<p>我们知道不同的数据库函数语法都会有一些差异，俗称SQL方言，BI提供的统一计算函数，类似中间翻译，可屏蔽底层数据库的方言差异。</p>
</blockquote>
<p>在新建<strong>计算字段</strong>/<strong>汇总表达式</strong>时，您可以使用BI提供的系统内置函数，或者使用原生数据库函数。</p>
<p><strong>系统内置函数</strong>：本文将会详细介绍每一个函数的定义和用法，并提供了详细的示例，具体请参见系统内置函数。</p>
<p><strong>原生数据库函数</strong>：底层数据库提供的原生函数，不同数据库会有不同的原生函数。若有需要，您可以自行查找对应的官方文档获取函数使用方法。</p>
<p>此外，还有一些常用的计算函数在某些数据库中可能并未直接支持。针对这些情况，我们提供了一些便捷的解决方案，例如：</p>
<ul>
<li><strong>DIVIDE 函数</strong>：当数据库中执行两数相除操作且除数为 0 时，通常会报错。为此，我们提供了 DIVIDE 函数，用于安全处理这种情况。</li>
<li><strong>CHRATE 函数</strong>：在计算变化率时，除了确保除数不为 0，还需要计算变化的差值。为此，我们引入了 CHRATE 函数，简化计算过程。</li>
</ul>
<div><pre><code><span>-- 不使用CHRATE</span>
<span>CASE</span> <span>WHEN</span> col_a <span>=</span> <span>0</span> <span>THEN</span> <span>0</span> 
     <span>ELSE</span> <span>(</span>col_b <span>-</span> col_a<span>)</span> <span>*</span> <span>1.0</span> <span>/</span> col_a 
<span>END</span> <span>as</span> <span><span>`</span>chgrate<span>`</span></span>
<span>-- 使用CHRATE</span>
CHRATE<span>(</span>col_a<span>,</span> col_b<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ul>
<li>MySQL 不支持日期截断 <code>DATETRUNC</code>，PostgreSQL 不支持 <code>IF(test, then, else)</code> 函数，Oracle 不支持字符串 <code>SPLIT</code> 等等。</li>
<li>最麻烦的是日期操作，比如对日期增加或减少时间单位、格式化日期、计算两个日期的时间差。这类函数在数据分析中是最常用的，但在不同数据库中的用法却千差万别，简直让人抓狂。</li>
</ul>
<p>我们提供的统一计算函数，可以屏蔽底层数据库的方言差异，支持国内使用率最高的多种数据库：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411190934896.png" alt="" /></p>
<p>在新建 <strong>计算字段</strong> 或 <strong>汇总表达式</strong> 时，您可以选择使用 BI 提供的系统内置函数，或者直接使用原生数据库函数。</p>
<h3 id="常用函数体系"> 常用函数体系</h3>
<p>2.0 版本一次性带来了近 50 个常用函数，全面满足您的日常分析需求，包括：</p>
<ul>
<li><strong>逻辑函数</strong>：如 <code>CASE</code>、<code>IF</code> 等。</li>
<li><strong>日期函数</strong>：20 个，涵盖日期计算与格式化。</li>
<li><strong>字符串函数</strong>：13 个，支持字符串操作与处理。</li>
<li><strong>数学函数</strong>：8 个，用于常见数值计算。</li>
<li><strong>类型转换函数</strong>：3 个，支持数据类型灵活转换。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411190954656.png" alt="" /></p>
<h3 id="支持范围"> 支持范围</h3>
<ul>
<li><strong>计算字段</strong></li>
<li><strong>汇总表达式</strong></li>
<li><strong>维度字段脚本衍生维度</strong></li>
</ul>
<h3 id="函数目录树"> 函数目录树</h3>
<p>首次使用函数时，您可以通过函数目录树查询函数列表及简要介绍，也可以通过在线文档查看详细介绍。点击函数目录树中的函数名称，可以快速将其插入到编辑器中。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/uni-funs-click.gif" alt="" /></p>
<h3 id="编辑器函数自动补全"> 编辑器函数自动补全</h3>
<p>为了帮助熟练使用 BI 的用户，我们提供了函数快速补全功能。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/uni-funs-ac.gif" alt="" /></p>
<div><p>提示</p>
<p>如果遇到上面数据库类型清单中函数翻译不正确的情况，请与我们联系。</p>
</div>
<h3 id="支持范围-2"> 支持范围</h3>
<div><p>您可以在以下场景使用内置函数</p>
<ul>
<li>数据集自定义字段(包含LOD FIX)</li>
<li>数据集汇总表达式(包含LOD INCLUDE / LOD EXCLUDE 中定义的的维度与汇总指标)</li>
<li>Script类型维度衍生字段</li>
</ul>
</div>
<div><p>错误场景</p>
<p>暂不支持在数据集定义查询中直接使用统一计算函数</p>
</div>
<h2 id="逻辑函数"> 逻辑函数</h2>
<p>为什么使用逻辑计算
逻辑计算允许您确定某个特定条件为真还是假（布尔逻辑）。例如，您可能希望根据某些条件对值进行分类。</p>
<p>逻辑计算可能如下所示：</p>
<div><pre><code><span>CASE</span>
    <span>WHEN</span> gender<span>=</span><span>'F'</span> <span>THEN</span> sales
    <span>ELSE</span> <span>0</span> 
<span>END</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="case-when"> CASE WHEN</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    [ELSE default]
END
</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>根据when条件判断输出值, 如果所有WHEN条件均不满足则返回(可选)默认值。如果默认值不存在返回Null。</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>取决于 then 值的数据类型, 请注意大部分数据库需要保证不同分支输出的数值类型一致，否则会出现运行时语法错误。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>
CASE
    WHEN `订单rn` = 1 THEN `订单利润`
    ELSE null
END
        </pre>
        <pre>
CASE
    WHEN `gender` = 'F' THEN 1
    ELSE 0
END
        </pre>
    </td>
  </tr>
</table>
<div><p>警告</p>
<p>请注意大部分数据库需要保证不同分支输出的数值类型一致，否则会出现运行时语法错误。</p>
</div>
<h3 id="if"> IF</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>IF(test, then, else) </pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>测试test条件是否为真，如果为真返回then，否则返回else，可以看成case-when的二元分支</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>取决于 then 值的数据类型。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>IF(`订单rn` = 1, `订单利润`, null) </pre>
        <pre>IF(`gender` = 'F', 1, 0) </pre>
    </td>
  </tr>
</table>
<div><p>警告</p>
<p>请注意大部分数据库需要保证不同分支输出的数值类型一致，否则会出现运行时语法错误。</p>
</div>
<h3 id="decodev2-3"> DECODE<sup>v2.3</sup></h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>DECODE(expression, value, result[, value, result]…[, else]) </pre></td>
  </tr> 
  <tr>
    <td>定义</td>
    <td><pre>对第一个参数的表达式进行解码，相当与case when, 后面每两个参数组成一个key，value对，<br/>表达式的值等于key则翻译为对应的value值，最后一个参数为匹配失败的默认值 </pre></td>
  </tr> 
  <tr>
    <td>案例</td>
    <td><pre>DECODE(`code`, 
    'count', '数量', 
    'money', '金额', 
    '其他'
) </pre></td>
  </tr>
</table>
<h2 id="数学函数"> 数学函数</h2>
<h3 id="round"> ROUND</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>ROUND(number, [precise])</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>将 [number] 四舍五入为指定位数。 precise 可选参数指定要在最终结果中包含的小数位数精度。如果省略 decimals，则 number 舍入为最接近的整数。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ROUND(1/3, 2) = 0.33</pre>
    </td>
  </tr>
</table>
<h3 id="floor"> FLOOR</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>FLOOR(number)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>顾名思义Floor英文意思为地板，将 [number] 向下取整。与之对应的向上取整CEIL和四舍五入ROUND。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>FLOOR(7.9) = 7</pre>
    </td>
  </tr>
</table>
<h3 id="ceil"> CEIL</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>CEIL(number)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>顾名思义Ceil英文意思为天花板，将 [number] 向上取整。与之对应的向上取整FLOOR和四舍五入ROUND。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CEIL(7.1) = 8</pre>
    </td>
  </tr>
</table>
<h3 id="abs"> ABS</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>ABS(number)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回参数 number 的绝对值。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ABS(-7) = 7</pre>
    </td>
  </tr>
</table>
<h3 id="greatest"> GREATEST</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>GREATEST(number1, number2,...)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回多个参数中取最大的数。与之相反的函数为LEAST。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>GREATEST(1, 2, 3) -- Out: 3</pre>
    </td>
  </tr>
</table>
<h3 id="least"> LEAST</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>LEAST(number1, number2,...)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回多个参数中取最小的数。与之相反的函数为GREATEST。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>LEAST(1, 2, 3) -- Out: 1</pre>
    </td>
  </tr>
</table>
<h3 id="divide"> DIVIDE</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>DIVIDE(number1, number, [nullValue])</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>除法 A/B，兼容除数为0, 解决数据库中直接用A/B，除数为0时报错的问题。除数为0时返回[nullValue], 没有传入nullValue返回Null。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DIVIDE(3, 2) -- Out: 1.5</pre>
        <pre>DIVIDE(3, 0, 0) -- Out: 0</pre>
    </td>
  </tr>
</table>
<h3 id="chgrate"> CHGRATE</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>CHGRATE(from, to, [nullValue])</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>从[from]到[to]变化率计算: <b>(to - from) / from</b> <br>
        兼容from为0, from为0时返回[nullValue], 没有传入nullValue返回Null。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CHGRATE(2, 3) -- Out: 0.5</pre>
        <pre>CHGRATE(0, 2, 0) -- Out: 0</pre>
    </td>
  </tr>
</table>
<h2 id="字符串函数"> 字符串函数</h2>
<h3 id="concat"> CONCAT</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>CONCAT('a', ',', 'b')</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>字符串拼接函数。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CONCAT('a', ',', 'b') -- Out: a,b </pre>
    </td>
  </tr>
</table>
<h3 id="lower"> LOWER</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>LOWER(string)</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>字符串转小写。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>LOWER('ABc') -- Out: 'abc' </pre>
    </td>
  </tr>
</table>
<h3 id="upper"> UPPER</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>UPPER([string])</pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>字符串转大写。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>UPPER('ABc') -- Out: 'ABC' </pre>
    </td>
  </tr>
</table>
<h3 id="lpad"> LPAD</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>LPAD(string, length, pad_string) </pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>当string长度不够length时用pad_string字符串左补位。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>LPAD('abc', 5, ' ') -- Out: '  abc' </pre>
    </td>
  </tr>
</table>
<h3 id="rpad"> RPAD</h3>
<table>
  <tr>
    <td>语法</td>
    <td><pre>RPAD(string, length, pad_string) </pre></td>
  </tr>
  <tr>
    <td>定义</td>
    <td>当string长度不够length时用pad_string字符串右补位。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>RPAD('abc', 5, ' ') -- Out: 'abc  ' </pre>
    </td>
  </tr>
</table>
<h3 id="trim"> TRIM</h3>
<table>
  <tr>
    <td>语法</td>
    <td>trim(string) </td>
  </tr>
  <tr>
    <td>定义</td>
    <td>去掉字符串string首尾空格。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>TRIM(' abc ') -- Out: 'abc' </pre>
    </td>
  </tr>
</table>
<h3 id="find"> FIND</h3>
<table>
  <tr>
    <td>语法</td>
    <td>FIND(string, substring) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>查找子字符串substring在原字符串string中的位置。如果未找到子字符串，则返回 0。字符串中第一个字符的位置为 1。如果第一个参数为null返回null</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>FIND('Hello how are you', 'how') -- Out: 7 </pre>
        <pre>FIND('Hello how are you', 'what') -- Out: 0 </pre>
        <pre>FIND(null, 'how') -- Out: NULL </pre>
    </td>
  </tr>
</table>
<h3 id="contains"> CONTAINS</h3>
<table>
  <tr>
    <td>语法</td>
    <td>CONTAINS(string, substring) </td>
  </tr>
    <tr>
    <td>输出</td>
    <td>布尔值</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>检查字符串string中是否包含子字符串substring</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CONTAINS('Hello how are you', 'How') -- Out: true </pre>
    </td>
  </tr>
</table>
<h3 id="endswith"> ENDSWITH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ENDSWITH(string, substring) </td>
  </tr>
    <tr>
    <td>输出</td>
    <td>布尔值</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>如果给定字符串以指定子字符串结尾，则返回 true。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CONTAINS('Hello how are you', 'you') -- Out: true </pre>
    </td>
  </tr>
</table>
<h3 id="startswith"> STARTSWITH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>STARTSWITH(string, substring) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>如果给定字符串以指定子字符串开始，则返回 true。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>STARTSWITH('Hello how are you', 'He') -- Out: true </pre>
    </td>
  </tr>
</table>
<h3 id="length"> LENGTH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>LENGTH(string) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回字符串string的长度。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>LENGTH('Hello') -- Out: 5 </pre>
    </td>
  </tr>
</table>
<h3 id="replace"> REPLACE</h3>
<table>
  <tr>
    <td>语法</td>
    <td>REPLACE(string, substring, replacement) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>字符串</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>替换字符串string中的substring为replacement。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>REPLACE('Version 3.8', '3.8', '4x') = "Version 4x" -- Out: "Version 4x" </pre>
    </td>
  </tr>
</table>
<h3 id="split"> SPLIT</h3>
<table>
  <tr>
    <td>语法</td>
    <td>SPLIT(string, delimiter, token number) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>字符串</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回字符串中的一个子字符串，并使用分隔符字符将字符串分为一系列标记。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>SPLIT ('a-b-c-d', '-', 2) = "b" </pre>
    </td>
  </tr>
  <tr>
    <td>说明</td>
    <td>
        某些数据源在拆分字符串时会有限制, 当token number超出拆分的子字符串数量时，有些数据库会返回null，有一些会返回最后一个字符串
    </td>
  </tr>
</table>
<h2 id="日期函数"> 日期函数</h2>
<h3 id="dateadd"> DATEADD</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DATEADD(date, interval, dateunit) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]个日期单位[dateUnit]。
    <div><b>DateUnit</b>支持: 'year', 'quarter', 'month', 
          'day', 'week', 'hour', 'minute', 'second'</div>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DATEADD(`birth_day`, 1, 'year') 将生日加上1年时间</pre>
    </td>
  </tr>
</table>
<h3 id="addyear"> ADDYEAR</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ADDYEAR(date, interval) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]年, interval为负数则减少, 等同于 DATEADD(`birth_day`, 1, 'year')。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ADDYEAR(`dt`, -1) 获取dt对应上1年日期</pre>
    </td>
  </tr>
</table>
<h3 id="addmonth"> ADDMONTH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ADDMONTH(date, interval) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]月, interval为负数则减少, 等同于 DATEADD(`birth_day`, 1, 'month')。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ADDMONTH(`dt`, -1) 获取dt对应上1个月的日期</pre>
    </td>
  </tr>
</table>
<h3 id="addday"> ADDDAY</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ADDDAY(date, interval) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]天, interval为负数则减少, 等同于 DATEADD(`birth_day`, 1, 'day')。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ADDDAY(`dt`, -1) 获取dt对应的前1天日期</pre>
    </td>
  </tr>
</table>
<h3 id="addweek"> ADDWEEK</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ADDWEEK(date, interval) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]周, interval为负数则减少, 等同于 DATEADD(`birth_day`, 1, 'week')。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ADDWEEK(`dt`, -1) 获取dt对应的上1周日期</pre>
    </td>
  </tr>
</table>
<h3 id="addhour"> ADDHOUR</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ADDHOUR(date, interval) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期时间</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>给参数[date]增加指定数字[interval]小时, interval为负数则减少, 等同于 DATEADD(`birth_day`, 1, 'hour')。</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>ADDHOUR(`dt`, -1) 获取dt对应的前1小时日期时间</pre>
    </td>
  </tr>
</table>
<h3 id="datediff"> DATEDIFF</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DATEDIFF(dateUnit, startDate, endDate) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>返回 [startDate] 与 [endDate[ 之差（以 [dateUnit] 的单位表示）。
    <div><b>DateUnit</b>支持: 'year', 'quarter', 'month', 
          'day', 'week', 'hour', 'minute', 'second'</div>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DATEDIFF('year', `BIRTH_DATE`, CURRENT_DATE()) -- Out: age </pre>
    </td>
  </tr>
</table>
<h3 id="datetrunc"> DATETRUNC</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DATETRUNC(dataUnit, date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>日期截断，返回日期 DATETRUNC(dataUnit, date)。
    <div><b>DateUnit</b>支持: 'year', 'quarter', 'month', 
          'day', 'week', 'hour', 'minute', 'second'</div>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DATETRUNC('year', `BIRTH_DATE`) -- Out: Date('1985-01-01') </pre>
    </td>
  </tr>
</table>
<h3 id="datepart"> DATEPART</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DATETRUNC(dataUnit, date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>获取日期部分的名称 DATEPART(datePart, date)。
    <div><b>DatePart</b>支持: : 'year', 'month', 'dayofyear', 'dayofmonth', 
           'dayofweek', 'isodayofweek', 'weekofyear'</div>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DATETRUNC('year', `BIRTH_DATE`) -- Out: Date('1985-01-01') </pre>
    </td>
  </tr>
  <tr>
    <td>说明</td>
    <td>更推荐使用日期部分函数获取如dayOfMonth(date), YEAR(date)等具体函数获取日期部分。</td>
  </tr>
</table>
<h3 id="year"> YEAR</h3>
<table>
  <tr>
    <td>语法</td>
    <td>YEAR(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 的年份。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>YEAR(`BIRTH_DATE`) -- Out: 1985 </pre>
    </td>
  </tr>
</table>
<h3 id="month"> MONTH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>MONTH(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 的月份。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>YEAR(`BIRTH_DATE`) -- Out: 1985 </pre>
    </td>
  </tr>
</table>
<h3 id="dayofmonth"> DAYOFMONTH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DAYOFMONTH(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 为日(月份中的第几天)。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DAYOFMONTH(`BIRTH_DATE`) -- Out: 1-31 </pre>
    </td>
  </tr>
</table>
<h3 id="quarter"> QUARTER</h3>
<table>
  <tr>
    <td>语法</td>
    <td>QUARTER(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 为季度。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>QUARTER(`BIRTH_DATE`) -- Out: 1-4 </pre>
    </td>
  </tr>
</table>
<h3 id="dayofweek"> DAYOFWEEK</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DAYOFWEEK(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 为星期几。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DAYOFWEEK(`BIRTH_DATE`) -- Out: 1-7 </pre>
    </td>
  </tr>
  <tr>
    <td>说明</td>
    <td>
        该函数不排除由于数据库差异，返回的星期计数以周一为第一天或周日为第一天, 相关函数ISODAYOFWEEK会返回以周一为第一天的星期
    </td>
  </tr>
</table>
<h3 id="isodayofweek"> ISODAYOFWEEK</h3>
<table>
  <tr>
    <td>语法</td>
    <td>ISODAYOFWEEK(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 为星期几(周一为第一天)。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DAYOFWEEK(`BIRTH_DATE`) -- Out: 1-7 </pre>
    </td>
  </tr>
</table>
<h3 id="weekofyear"> WEEKOFYEAR</h3>
<table>
  <tr>
    <td>语法</td>
    <td>WEEKOFYEAR(date) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>整数</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>以整数形式返回给定 [date] 为一年中的第几周。 </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>WEEKOFYEAR(`BIRTH_DATE`) -- Out: 17 </pre>
    </td>
  </tr>
</table>
<h3 id="string2date"> STRING2DATE</h3>
<table>
  <tr>
    <td>语法</td>
    <td>string2date(dateString, dateFormat) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>字符串转日期。 
        <pre><b>Date part List</b>
    yyyy: Year(2022)
    yy: Short Year(22)
    MM: Month(01-12)
    dd: Day of Month(01-31)
    HH: Hour (00..23)
    ww: week of year(01..53), Monday is first day of wee</pre>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>string2date('2024-10-01', 'yyyy-MM-dd') -- Out: Date('2024-10-01') </pre>
    </td>
  </tr>
</table>
<h3 id="date-format"> DATE_FORMAT</h3>
<table>
  <tr>
    <td>语法</td>
    <td>DATE_FORMAT(date, dateFormat) </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>字符串</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>将日期转换为指定格式的日期字符串。 
        <pre><b>Date part List</b>
    yyyy: Year(2022)
    yy: Short Year(22)
    MM: Month(01-12)
    dd: Day of Month(01-31)
    HH: Hour (00..23)
    ww: week of year(01..53), Monday is first day of wee</pre>
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>DATE_FORMAT(CURRENT_DATE(), 'yyyy-MM') -- Out: '2024-10' </pre>
    </td>
  </tr>
</table>
<h3 id="now"> NOW</h3>
<table>
  <tr>
    <td>语法</td>
    <td>NOW() </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>当期日期+时间</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>当期日期+时间 
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>NOW() -- Out: 2024-10-21T10:33:37 </pre>
    </td>
  </tr>
</table>
<h3 id="current-date"> CURRENT_DATE</h3>
<table>
  <tr>
    <td>语法</td>
    <td>CURRENT_DATE() </td>
  </tr>
  <tr>
    <td>输出</td>
    <td>当期日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>当期日期
    </td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>CURRENT_DATE() -- Out: DATE('2024-10-21') </pre>
    </td>
  </tr>
</table>
<h3 id="startofyear"> STARTOFYEAR</h3>
<table>
  <tr>
    <td>语法</td>
    <td>STARTOFYEAR()<br>STARTOFYEAR(date)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>获取日期所在年份的第一天</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>STARTOFYEAR() -- Out: 当前日期所在年份第一天（如 DATE('2024-01-01')）</pre>
        <pre>STARTOFYEAR(DATE('2025-06-15')) -- Out: DATE('2025-01-01')</pre>
    </td>
  </tr>
</table>
<h3 id="startofquarter"> STARTOFQUARTER</h3>
<table>
  <tr>
    <td>语法</td>
    <td>STARTOFQUARTER()<br>STARTOFQUARTER(date)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>获取日期所在季度的第一天</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>STARTOFQUARTER() -- Out: 当前日期所在季度第一天（如 DATE('2024-07-01')）</pre>
        <pre>STARTOFQUARTER(DATE('2025-05-20')) -- Out: DATE('2025-04-01')</pre>
    </td>
  </tr>
</table>
<h3 id="startofmonth"> STARTOFMONTH</h3>
<table>
  <tr>
    <td>语法</td>
    <td>STARTOFMONTH()<br>STARTOFMONTH(date)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>获取日期所在月份的第一天</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>STARTOFMONTH() -- Out: 当前日期所在月份第一天（如 DATE('2024-10-01')）</pre>
        <pre>STARTOFMONTH(DATE('2025-02-18')) -- Out: DATE('2025-02-01')</pre>
    </td>
  </tr>
</table>
<h3 id="startofweek"> STARTOFWEEK</h3>
<table>
  <tr>
    <td>语法</td>
    <td>STARTOFWEEK()<br>STARTOFWEEK(date)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>日期</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>获取日期所在周的第一天</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>STARTOFWEEK() -- Out: 当前日期所在周第一天（如 DATE('2024-10-21')，默认周日/周一为周首，遵循系统配置）</pre>
        <pre>STARTOFWEEK(DATE('2025-03-12')) -- Out: 2025年3月12日所在周的第一天</pre>
    </td>
  </tr>
</table>
<h3 id="inytd"> INYTD</h3>
<table>
  <tr>
    <td>语法</td>
    <td>INYTD(date)<br>INYTD(date, specDate)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值（TRUE/FALSE）</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>判断传入日期是否在年累计日期范围内</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>INYTD(DATE('2024-06-30')) -- Out: TRUE（若当前年份为2024）</pre>
        <pre>INYTD(DATE('2024-06-30'), DATE('2023-12-15')) -- Out: FALSE（2023年年累计范围为2023-01-01至2023-12-15）</pre>
        <pre>INYTD(DATE('2023-10-20'), DATE('2023-12-15')) -- Out: TRUE</pre>
    </td>
  </tr>
</table>
<h3 id="inqtd"> INQTD</h3>
<table>
  <tr>
    <td>语法</td>
    <td>INQTD(date)<br>INQTD(date, specDate)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值（TRUE/FALSE）</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>判断传入日期是否在季度累计日期范围内</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>INQTD(DATE('2024-08-15')) -- Out: TRUE（若当前季度为2024年Q3，范围2024-07-01至当前日期）</pre>
        <pre>INQTD(DATE('2024-05-20'), DATE('2024-06-30')) -- Out: TRUE（2024年Q2累计范围为2024-04-01至2024-06-30）</pre>
        <pre>INQTD(DATE('2024-07-05'), DATE('2024-06-30')) -- Out: FALSE</pre>
    </td>
  </tr>
</table>
<h3 id="inmtd"> INMTD</h3>
<table>
  <tr>
    <td>语法</td>
    <td>INMTD(date)<br>INMTD(date, specDate)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值（TRUE/FALSE）</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>判断传入日期是否在月份累计日期范围内</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>INMTD(DATE('2024-10-12')) -- Out: TRUE（若当前月份为2024年10月，范围2024-10-01至当前日期）</pre>
        <pre>INMTD(DATE('2024-10-05'), DATE('2024-10-20')) -- Out: TRUE（2024年10月累计范围为2024-10-01至2024-10-20）</pre>
        <pre>INMTD(DATE('2024-09-28'), DATE('2024-10-20')) -- Out: FALSE</pre>
    </td>
  </tr>
</table>
<h3 id="inwtd"> INWTD</h3>
<table>
  <tr>
    <td>语法</td>
    <td>INWTD(date)<br>INWTD(date, specDate)</td>
  </tr>
  <tr>
    <td>输出</td>
    <td>布尔值（TRUE/FALSE）</td>
  </tr>
  <tr>
    <td>定义</td>
    <td>判断传入日期是否在周累计日期范围内</td>
  </tr>
  <tr>
    <td>示例</td>
    <td>
        <pre>INWTD(DATE('2024-10-23')) -- Out: TRUE（若当前周为2024年第43周，范围为该周第一天至当前日期）</pre>
        <pre>INWTD(DATE('2024-10-22'), DATE('2024-10-25')) -- Out: TRUE（该周累计范围为周第一天至2024-10-25）</pre>
        <pre>INWTD(DATE('2024-10-21'), DATE('2024-10-20')) -- Out: FALSE</pre>
    </td>
  </tr>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Tableau</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.8-lod15/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.8-lod15/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="tableau-15大lod表达式-进行案例挑战"> Tableau&lt;15大LOD表达式&gt;进行案例挑战</h1>
<div><p>提示</p>
<p>本篇中使用的测试数据和Tableau的中的数据略有差异，以分析与解决问题的过程为主。</p>
</div>
<h2 id="_0-分析数据集"> 0. 分析数据集</h2>
<p>超市销售订单明细表: 包含有关产品、销售和利润的信息，您可以使用这些信息来确定该虚构公司中需要改进的关键领域。</p>
<ul>
<li>Row ID</li>
<li>Order ID</li>
<li>Order Date</li>
<li>Ship Date</li>
<li>Ship Mode</li>
<li>Customer ID</li>
<li>Customer Name</li>
<li>Segment</li>
<li>Country/Region</li>
<li>City</li>
<li>State/Province</li>
<li>Postal Code</li>
<li>Region</li>
<li>Product ID</li>
<li>Category</li>
<li>Sub-Category</li>
<li>Product Name</li>
<li>Sales</li>
<li>Quantity</li>
<li>Discount</li>
<li>Profit</li>
</ul>
<h2 id="_1-客户订单频率"> 1. 客户订单频率</h2>
<p>找出每个客户订购的订单数相对简单，但是如果我们想了解订购过一个订单、两个订单、三个订单（依次类推）的客户数目，该怎么办呢？<br>
要生成相应视图，<strong>我们必须按订购的订单数划分客户数</strong>。这是一个简单的问题，但是如果没有详细级别表达式(Tableau Lod)，按照某一度量划分另一度量将非常困难。</p>
<h3 id="tableau-lod范例"> TABLEAU LOD范例</h3>
<p>每个顾客的购买次数：{ FIXED [Customer ID]:COUNTD([Order ID])}</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221645902.png" alt="" /></p>
<h3 id="bi-lod"> BI LOD</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221649110.png" alt="" /></p>
<div><pre><code> {<span>FIXED</span> <span><span>`</span>customer id<span>`</span></span> : <span>distinct</span><span>(</span><span><span>`</span>order id<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221652395.png" alt="" /></p>
<h2 id="_2-阵列分析"> 2. 阵列分析</h2>
<p>合作时间越长的客户对销售额的贡献越大吗？<br>
下面的视图按照客户首次购买的年份将客户分组，以便对比各个阵列的年度销售贡献额。<br>
每个客户的最早订单日期将体现出首次购买日期。不过，由于视图中的数据为订单明细，没有客户信息，我们需要新增一个客户【首次下单时间】字段</p>
<h3 id="tableau-lod范例-2"> TABLEAU LOD范例</h3>
<p>每个顾客的首次购买日期：{ FIXED [Customer ID]:MIN([Order Date])}</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221715201.png" alt="" /></p>
<h3 id="bi-lod-2"> BI LOD</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221718263.png" alt="" /></p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>customer id<span>`</span></span> : <span>min</span><span>(</span><span><span>`</span>order date<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><ul>
<li>拖拽【order date】到行维，并设置日期粒度为年</li>
<li>拖拽【首次下单时间】到列维，并设置原始字段类型为<code>日期</code>，日期格式化为年
<img src="http://qiniu.ibidemo.cn/picgo/20240808173829.png" alt="" /></li>
<li>拖拽【sales】到指标，并设置汇总函数为sum</li>
<li>图表类型选择为柱线图, 展示样式为<code>堆叠柱状</code></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221720297.png" alt="" /></p>
<h3 id="bi-计算字段"> BI 计算字段</h3>
<p>增加计算字段【首次下单时间】, 因为我们要按客户汇总订单数量，</p>
<ol>
<li>首先打开【汇总字段】开关</li>
<li>拖拽【customer id】字段到分组字段栏</li>
<li>拖拽【order date】字段到组内排序字段栏，并设置升序</li>
<li>在【字段定义】中输入<em>first_value(`order date`)</em>, 取组内第一个下单时间做为字段值</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808172609.png" alt="" /></p>
<p>图表设计配置如下：</p>
<ul>
<li>拖拽【order date】到行维，并设置日期粒度为年</li>
<li>拖拽【首次下单时间】到列维，并设置原始字段类型为<code>日期</code>，日期格式化为年
<img src="http://qiniu.ibidemo.cn/picgo/20240808173829.png" alt="" /></li>
<li>拖拽【sales】到指标，并设置汇总函数为sum</li>
<li>图表类型选择为柱线图, 展示样式为<code>堆叠柱状</code></li>
</ul>
<h2 id="_3-每日利润-kpi"> 3. 每日利润 KPI</h2>
<p>我们可以查看利润随时间的变化趋势，但如果我们想按照每个工作日的总利润来衡量成功，该怎么办？<br>
我们可能想要了解每个月或每年的盈利天数，尤其是在我们想了解季节影响时。<br>
下面的视图显示了在以交易级别记录基础数据的情况下，我们如何利用详细级别表达式轻松根据聚合数据创建分级（例如每日利润）。</p>
<h3 id="tableau-lod"> Tableau LOD</h3>
<p>在给每天返回标签时，我们需要用到每天的盈利额，这里就需要fixed 返回每一天的盈利额。</p>
<div><pre><code>Profit per <span>Day</span> <span>=</span> { <span>FIXED</span> <span>[</span><span>Order</span> <span>Date</span><span>]</span> : <span>SUM</span><span>(</span><span>[</span>Profit<span>]</span><span>)</span> }
</code></pre>
<div><span>1</span><br></div></div><p>根据每天的盈利额，按照标准，给每天返回一个盈利标签：Daily Profit KPI</p>
<div><pre><code><span>IF</span> <span>[</span>Profit per <span>Day</span><span>]</span> <span>></span> <span>2000</span> <span>THEN</span> “Highly Profitable”
<span>ELSEIF</span> <span>[</span>Profit per <span>Day</span><span>]</span> <span>&lt;=</span><span>0</span> <span>THEN</span> “Unprofitable”
<span>ELSE</span> “Profitable” <span>END</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221732337.png" alt="" /></p>
<h3 id="bi-lod-3"> BI LOD</h3>
<p>在给每天返回标签时，我们需要用到每天的盈利额，这里就需要fixed 返回每一天的盈利额。</p>
<div><pre><code>Profit per <span>Day</span> <span>=</span> {<span>FIXED</span> <span><span>`</span>order date<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>profit<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221733087.png" alt="" /></p>
<p>根据每天的盈利额，按照标准，给每天返回一个盈利标签：Daily Profit KPI</p>
<div><pre><code><span>CASE</span>
    <span>WHEN</span> <span>#{Profit per Day} > 2000 THEN "Highly Profitable"</span>
    <span>WHEN</span> <span>#{Profit per Day} > 0 THEN "Profitable"</span>
    <span>ELSE</span> <span>"Unprofitable"</span>
<span>END</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221734689.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221735056.png" alt="" /></p>
<h3 id="bi-计算字段-2"> BI 计算字段</h3>
<p>增加计算字段【每日利润】字段，配置如下比较简单，不在赘述</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808175551.png" alt="" /></p>
<p>图表配置如下：</p>
<ul>
<li>行维：【order date】设置日期粒度为月</li>
<li>列维：【order date】设置日期粒度为年，【每日利润】并设置维度分组
<img src="http://qiniu.ibidemo.cn/picgo/20240808180324.png" alt="" /></li>
<li>指标：【order date】汇总函数为count</li>
<li>图表类型选择为柱线图，面积折线，</li>
<li>样式配置：布局-&gt;拆分图表，取消图列显示</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808175506.png" alt="" /></p>
<h2 id="_4-总额百分比"> 4. 总额百分比</h2>
<p>每个国家/地区的收入对全球销售额有何贡献？<br>
如果我们按照贡献百分比着色，即可看出美国对全球销售收入的贡献最大。</p>
<h3 id="tableau-lod-2"> Tableau LOD</h3>
<div><pre><code><span>SUM</span><span>(</span><span>[</span>Sales<span>]</span><span>)</span> <span>/</span> <span>SUM</span><span>(</span>{<span>SUM</span><span>(</span>Sales<span>)</span>}<span>)</span>
</code></pre>
<div><span>1</span><br></div></div><h3 id="bi-lod-4"> BI LOD</h3>
<h4 id="exclude-计算"> EXCLUDE 计算</h4>
<div><pre><code><span>sum</span><span>(</span><span><span>`</span>sales<span>`</span></span><span>)</span> <span>/</span> <span>sum</span><span>(</span>{EXCLUDE <span><span>`</span>country<span>`</span></span> : <span><span>`</span>sales<span>`</span></span>}<span>)</span>
</code></pre>
<div><span>1</span><br></div></div><h4 id="fixed-计算"> FIXED 计算</h4>
<ol>
<li>增加计算字段总销售</li>
</ol>
<div><pre><code>{<span>FIXED</span>  : <span>sum</span><span>(</span><span><span>`</span>Sales<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>增加汇总表达式计算占比, 由于计算字段在每行中都有总销售数值，在汇总计算的时候需要用min/max/avg取值</li>
</ol>
<div><pre><code><span>sum</span><span>(</span><span><span>`</span>Sales<span>`</span></span><span>)</span> <span>/</span> <span>max</span><span>(</span><span><span>`</span>总销售<span>`</span></span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221744356.png" alt="" /></p>
<h3 id="bi-快速计算"> BI 快速计算</h3>
<p>图表配置如下：</p>
<ul>
<li>行维：国家</li>
<li>指标：[sales], 第二个指标也是[Sales]，值类型设置为【列占比】</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808182315.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808182101.png" alt="" /></p>
<h2 id="_5-新客户争取率"> 5. 新客户争取率</h2>
<p>各个市场总客户争取率的每日趋势如何？<br>
了解这一数据趋势后，可帮助我们了解地区营销和销售组织在发展新业务方面的表现。线越陡，则争取率趋势越好。如果线逐渐变平，则必须采取一些措施来增加潜在客户流。
详细级别表达式可确保回头客不会误计入新客户，这是因为虽然数据按照市场和天数直观显示，但是必须在客户层面上进行评估。</p>
<h3 id="tableau"> Tableau</h3>
<p>给每个客户一个标签，标记在当前日期下的状态</p>
<p>首次购买日期：</p>
<div><pre><code>{<span>FIXED</span> <span>[</span>Customer ID<span>]</span>:<span>MIN</span><span>(</span><span>[</span><span>Order</span> <span>Date</span><span>]</span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>根据购买日期是否等于首次购买日期判断新老客户：</p>
<div><pre><code><span>IF</span> <span>[</span><span>Order</span> <span>Date</span><span>]</span> <span>=</span> <span>[</span>首次购买日期<span>]</span> <span>THEN</span> “新客户” <span>ELSE</span> “老客户” <span>END</span>
</code></pre>
<div><span>1</span><br></div></div><p>通过快速表计算，计算汇总累计客户数。</p>
<h3 id="bi-lod-5"> BI LOD</h3>
<p>计算字段中新增，首次下单时间、是否为新客户
首次下单时间(1st order date)</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>customer id<span>`</span></span> : <span>min</span><span>(</span><span><span>`</span>order date<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>是否为新客户(New or Existing)</p>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>order date<span>`</span></span> <span>=</span> <span>#{1st order date }, 'New', 'Existing')</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221753201.png" alt="" /></p>
<h3 id="bi-计算字段-3"> BI 计算字段</h3>
<p>增加计算字段【是否为新客】字段，该字段使用了前面定义的字段字段【首次下单时间】</p>
<div><pre><code><span>CASE</span>
    <span>WHEN</span> <span>#{首次下单时间} = `order date` THEN '新客'</span>
    <span>ELSE</span> <span>'老客'</span>
<span>END</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>小技巧</p>
<p>case when输入有快捷模板, 输入case选case-when snippet即可<br>
<img src="http://qiniu.ibidemo.cn/picgo/20240809092359.png" alt="" /></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240809092045.png" alt="" /></p>
<p>图表配置如下：</p>
<ul>
<li>行维：【order date】</li>
<li>列维：【region】</li>
<li>过滤：【是否新客】选择新客</li>
<li>指标：distinct【customer id】，值类型配置为累加</li>
<li>图表类型：柱线图，样式配置，线条样式-&gt; 空值处理-&gt;connect连接</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240809091827.png" alt="" /></p>
<h2 id="_6-对比销售额分析"> 6. 对比销售额分析</h2>
<p>找出与平均值之间的差异相对简单，但是如果您想找出与选定类别的差异，该怎么办？</p>
<h3 id="tableau-2"> Tableau</h3>
<ol>
<li>计算字段选中销售额</li>
</ol>
<div><pre><code><span>IF</span> <span>[</span>Sub<span>-</span>Category<span>]</span> <span>=</span> <span>[</span>Parameters<span>]</span><span>.</span><span>[</span>Sub<span>-</span>Category<span>]</span> <span>THEN</span> Sales <span>ELSE</span> <span>0</span> <span>END</span>
</code></pre>
<div><span>1</span><br></div></div><h3 id="bi-lod-6"> BI LOD</h3>
<ol>
<li>计算字段选中销售额</li>
</ol>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>sub-category<span>`</span></span> <span>=</span> <span>'${subcate!"Art"}'</span><span>,</span> <span><span>`</span>sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p>增加一列<code>Selected Sales</code>，当该列类别与选中类型一致时值设置为sales，否则为0，特殊的地方这个计算字段使用了环境变量，也就是在变量改变的时候
每次这一列的值也会跟着改变</p>
<ol start="2">
<li>汇总表达式计算选中类别销售额 Sales of Selected Category</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221808953.png" alt="" /></p>
<p>当我们在行维度上配置了类别时，如果直接sum(<code>Selected Sales</code>), 这时候只有选中的类别有值，所以为了让每个类别都有值，需要用EXCLUDE排除类别，让所有类别都有选中类别销售额</p>
<div><pre><code>{EXCLUDE <span><span>`</span>sub-category<span>`</span></span> : <span>sum</span><span>(</span><span><span>`</span>Selected Sales<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><div><p>思考</p>
<p>前面两步也可以用LOD Fixed实现, 一步即可让所有行拥有选中类型销售额</p>
<div><pre><code>{<span>FIXED</span> : <span>SUM</span><span>(</span><span>IF</span><span>(</span><span><span>`</span>sub-category<span>`</span></span> <span>=</span> <span>'${subcate!"Art"}'</span><span>,</span> <span><span>`</span>sales<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div></div>
<ol start="3">
<li>汇总表达式 Difference From Selected, 销售额与选中销售额的差异</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221804852.png" alt="" /></p>
<div><pre><code><span>sum</span><span>(</span><span><span>`</span>sales<span>`</span></span><span>)</span> <span>-</span> ${Sales <span>of</span> Selected Category}
</code></pre>
<div><span>1</span><br></div></div><ol start="4">
<li>实现效果如下</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221804331.png" alt="" /></p>
<ol start="5">
<li>改变变量值
<img src="http://qiniu.ibidemo.cn/picgo/202410221813025.png" alt="" /></li>
</ol>
<h3 id="bi-计算字段-4"> BI 计算字段</h3>
<p>增加计算字段【指定类别销售额】，开启汇总，但是不选分组字段，即全体汇总，汇总定义中使用了条件汇总，只有在【sub-category】等于环境变量${subcate}传入值时才计入汇总</p>
<div><pre><code><span>sum</span><span>(</span><span>CASE</span>
    <span>WHEN</span> <span><span>`</span>sub-category<span>`</span></span> <span>=</span> <span>'${subcate}'</span> <span>THEN</span> <span><span>`</span>Sales<span>`</span></span>
    <span>ELSE</span> <span>0</span>
<span>END</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20240809103314.png" alt="" /></p>
<p>增加数据集表达式, 因为新增字段【指定类别差额】，所有会全体汇总字段，所有数据值都相同，所以选择max或者min维持聚合后原值输出即可</p>
<div><pre><code><span>sum</span><span>(</span><span><span>`</span>sales<span>`</span></span><span>)</span> <span>-</span> <span>max</span><span>(</span><span><span>`</span>指定类别销售额<span>`</span></span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20240809103712.png" alt="" /></p>
<p>新建看板如下：<br>
左图为按类别排序的柱线图，行维【sub-category】不排序，指标选择【sales】求和升序
图表选择柱线图-主轴选柱图，样式微调-&gt;轴样式-&gt;值轴选择水平轴</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240809104054.png" alt="" /></p>
<p>右图为按类别排序的柱线图，行维【sub-category】不排序，指标选择【指定类别差额】
图表选择柱线图-主轴选柱图，样式微调-&gt;轴样式-&gt;值轴选择水平轴</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240809104151.png" alt="" /></p>
<p>看板中左图增加联动，行维联动到环境变量subcate，</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240809104555.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/tbl-compare-sales.gif" alt="" /></p>
<h2 id="_7-各个销售代表的平均最大额交易数额"> 7. 各个销售代表的平均最大额交易数额</h2>
<p><strong>场景描述：</strong>
每个销售代表达成的最大交易额是多少？然后想一想，对于各个销售代表达成的最大额交易数额，按国家/地区计算的平均值是多少？</p>
<p>利用详细级别表达式，即使数据按照国家/地区级别直观显示，我们也可以向下查看销售代表详细级别。在下面的视图中，销售代表的平均最大额交易数额在颜色为蓝色的国家/地区较高，而在颜色为橙色的国家/地区较低。我们可以使用这些信息指导对从国家/地区到销售代表的深入分析。</p>
<p><strong>可视化关键：</strong>
不同地区的“最大订单金额”的平均值</p>
<h3 id="tableau-lod-3"> Tableau LOD</h3>
<p>计算各销售代表的最大订单金额：{INCLUDE [Sales Rep]:MAX([Sales])}</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221818218.png" alt="" /></p>
<h3 id="bi-lod-7"> BI LOD</h3>
<p>直接用图形化配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410221821474.png" alt="" /></p>
<p>或者用汇总LOD INCLUDE</p>
<div><pre><code><span>avg</span><span>(</span>{INCLUDE <span><span>`</span>sales rep<span>`</span></span> : <span>max</span><span>(</span><span><span>`</span>sales<span>`</span></span><span>)</span>}<span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410221823564.png" alt="" /></p>
<h2 id="_8-实际对比目标"> 8. 实际对比目标</h2>
<p><strong>场景描述：</strong>
在本可视化视图中，我们描述了每个州连锁咖啡厅的实际利润与目标利润之间的差异。在顶部视图中，我们可以清楚地看出哪些州超额完成目标，哪些州未完成目标。但是采用这种聚合方式，我们会漏掉重要的细微差别。某些州超出目标是因为在该州销售的每项产品都超出目标，另外一些州超出目标是因为单项产品超额完成其目标，足以弥补未完成目标的所有其他产品。我们可以使用详细级别表达式，确定某州内销售的产品中超出目标产品所占百分比。</p>
<p><strong>可视化关键：</strong>
每个州，销售超过目标计划的商品占总数占比</p>
<p>LOD分成几步完成：</p>
<ol>
<li>行级别计算利润利润差异<br>
自定义字段 Difference Between Actual and Target Profit</li>
</ol>
<blockquote>
<p>[Profit]- [Target Profit]</p>
</blockquote>
<ol start="2">
<li>在商品级别，判断利润和任务的差异<br>
自定义字段：Difference Between Actual and Target by Product</li>
</ol>
<div><pre><code>{ INCLUDE <span>[</span>Product<span>]</span> : <span>SUM</span><span>(</span> <span>[</span>Difference <span>Between</span> Actual <span>and</span> Target Profit<span>]</span> <span>)</span> }
<span>// 每个商品都分为很多天的销售，计算每个商品的利润差异汇总</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><ol start="3">
<li>差异大于0，标记1，否则为0，这样求和即 计数</li>
</ol>
<p>自定义字段： Number of Products Above Target</p>
<blockquote>
<p>IIF([Difference Between Actual and Target by Product] &gt; 0, 1, 0)</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230848138.png" alt="" /></p>
<ol start="4">
<li>计算完成任务的商品数量，上面返回了1/0，求和即可</li>
</ol>
<p>自定义字段：Percentage of Products Above Target</p>
<blockquote>
<p>SUM([Number of Products Above Target]) / COUNTD([Product])</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230933652.png" alt="" /></p>
<h3 id="bi-lod-8"> BI LOD</h3>
<ol>
<li>行级别计算利润利润差异<br>
自定义字段 Difference Between Actual and Target Profit</li>
</ol>
<div><pre><code><span><span>`</span>Profit<span>`</span></span> <span>-</span> <span><span>`</span>Target_profit<span>`</span></span>
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>新建LOD INCLUDE 汇总字段，Product级别汇总利润差异， 差异大于0，标记1，否则为0，这样求和即计数</li>
</ol>
<p>自定义字段： Number of Products Above Target</p>
<div><pre><code><span>sum</span><span>(</span>{INCLUDE <span><span>`</span>Product<span>`</span></span> :
    <span>IF</span><span>(</span><span>sum</span><span>(</span><span><span>`</span>Difference Between Actual and Target Profit<span>`</span></span><span>)</span> <span>></span> <span>0</span><span>,</span> <span>1</span><span>,</span> <span>0</span><span>)</span>
}<span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>提示</p>
<p>在BI中LOD INCLUDE不能单独存在，直接一步实现Tableau中的2、3两步计算，Tableau中是先定义LOD INCLUDE计算字段，拖入视图自动添加sum汇总，<br>
<strong>而BI中汇总计算字段自带汇总</strong>，也不能拖入视图再配合或修改汇总</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230914807.png" alt="" /></p>
<ol start="3">
<li>计算完成任务的商品数量，上面返回了1/0，求和即可</li>
</ol>
<p>自定义字段：Percentage of Products Above Target</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230921592.png" alt="" /></p>
<div><pre><code>${Number <span>of</span> Products Above Target} <span>/</span> <span>distinct</span><span>(</span><span><span>`</span>Product<span>`</span></span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410230922979.png" alt="" /></p>
<h2 id="_9-周期最后一天的价值"> 9. 周期最后一天的价值</h2>
<p><strong>场景描述：</strong>
表示具体某天状态的数据（如库存数、员工实际人数或存货的日清算值）需要与可以聚合的指标（例如销售额或利润）区别对待。处理这些数据时，可能希望显示日历月最后一天的值。此外，我们可能希望从每月下钻到每周后，视图能够更新显示每周最后一天的值。</p>
<p>在下面的示例中，我们记录了每天多个时间点的库存数据。该视图对比了平均日清算值和周期最后一天的清算值。使用简单的详细级别表达式，我们可以向下查看每日级别，虽然数据直观显示的是较高级别。</p>
<p><strong>可视化关键：</strong>
视图中日期维度（上面为月份）最后一天的闭市价格（close value）</p>
<h3 id="tableau-lod-4"> Tableau LOD</h3>
<p>可视化日期详细级别中中，最后一天的闭市价格。</p>
<p>最后一天：{ INCLUDE:MAX([Date])} , 视图中拖入了日期，颗粒度设置为月份，INCLUDE没有添加维度，也就是月份的最后一天</p>
<p>最后一天的闭市价格：IF { INCLUDE:MAX([Date])}=[Date] THEN [Adj Close] ELSE 0 END</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230945081.png" alt="" /></p>
<h3 id="bi-lod-9"> BI LOD</h3>
<p>最后一天 Max Date</p>
<div><pre><code>{ <span>FIXED</span> DATE_FORMAT<span>(</span><span><span>`</span>date<span>`</span></span><span>,</span> <span>'yyyy-MM'</span><span>)</span> : <span>max</span><span>(</span><span><span>`</span>date<span>`</span></span><span>)</span> }
</code></pre>
<div><span>1</span><br></div></div><p>计算字段，最后一天的闭市价格, 拖入指标，选择MAX/MIN，：</p>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>date<span>`</span></span> <span>=</span> <span>#{Max Date}, `adj close`, 0)</span>
</code></pre>
<div><span>1</span><br></div></div><p>或者使用汇总计算字段</p>
<div><pre><code><span>sum</span><span>(</span><span>IF</span><span>(</span><span><span>`</span>date<span>`</span></span> <span>=</span> <span><span>`</span>Max Date<span>`</span></span><span>,</span> <span><span>`</span>adj close<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><div><p>注意计算字段和汇总计算中Max Date语法使用差异</p>
<p>因为<strong>Max Date</strong>为第一步中添加的计算字段</p>
<ul>
<li>在其他计算字段中引用语法为#{Max Date}</li>
<li>在<strong>汇总计算中</strong>所有字段包含计算字段都是字段，直接使用字段包裹即可</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230941512.png" alt="" /></p>
<h2 id="_10-各个阵列的回头客"> 10. 各个阵列的回头客</h2>
<p><strong>场景描述：</strong>
争取新客户的成本可能非常高，因此我们希望能够确保现有客户会重复购买。在一个、两个、三个、N 个季度重复购买的客户数目是多少？从未重复购买的客户数目是多少？如果按季度阵列划分重复购买行为，会怎么样？我们可以使用 FIXED 表达式找到每个客户的第一次和第二次购买日期，并从中计算出重复购买的季度数。</p>
<p><strong>可视化关键：</strong>
订单日期与顾客两次购买间隔，对应的顾客数量</p>
<h3 id="tableau-lod-5"> Tableau LOD</h3>
<p>顾客两次购买的时间间隔。</p>
<p>首次购买日期：{FIXED [Customer ID]:MIN([Order Date])}</p>
<p>剔除首次购买日期：IIF([Order Date]&gt; [首次购买日期],[Order Date],NULL)</p>
<p>第二次购买日期：{ FIXED [Customer ID]: MIN([剔除首次购买日期])}</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231001588.png" alt="" /></p>
<p>计算两次消费日期间隔：DATEDIFF(‘quarter’,[首次购买日期],[第二次购买日期])</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410230959196.png" alt="" /></p>
<div><p>注意</p>
<p>Tableau 的季度差异计算不太精确，导致结果会有明显差异，如下客户，首次下单时间2014-08-22，第二次下单2014-10-24, 严格来说季度差异没有一个季度，
只是跨了季度, 也就是在Tableau中只要日期上跨越了季度，哪怕是1天时间季度差异也是1，这与数据库中的季度差异或者业务中的季度差异不太一致</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231007216.png" alt="" /></p>
</div>
<h3 id="bi-lod-10"> BI LOD</h3>
<p>顾客两次购买的时间间隔。</p>
<p>首次购买日期 1st Purchase：</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>customer id<span>`</span></span> : <span>min</span><span>(</span><span><span>`</span>order date<span>`</span></span><span>)</span>}
</code></pre>
<div><span>1</span><br></div></div><p>剔除首次购买日期 Repeat Purchase：</p>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>order date<span>`</span></span> <span>></span> <span>#{1st Purchase}, `order date`, null)</span>
</code></pre>
<div><span>1</span><br></div></div><p>第二次购买日期 2nd Purchase, ：</p>
<div><pre><code>{<span>FIXED</span> <span><span>`</span>customer id<span>`</span></span> : <span>min</span><span>(</span><span>#{Repeat Purchase})}</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410231001588.png" alt="" /></p>
<p>计算两次消费日期间隔 Quarter to repeat purchase：</p>
<div><pre><code>DATEDIFF<span>(</span><span>'quarter'</span><span>,</span> <span>#{1st Purchase}, #{2nd Purchase})</span>
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410231016551.png" alt="" /></p>
<p>热力图</p>
<p>列维 首次购买时间转换为季度</p>
<div><pre><code>CONCAT<span>(</span><span>YEAR</span><span>(</span><span>#{1st Purchase}), '-Q', QUARTER(#{1st Purchase}))</span>
</code></pre>
<div><span>1</span><br></div></div><p>行维 使用计算字段[Quarter to repeat purchase]</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231018773.png" alt="" /></p>
<h2 id="_12-相对周期筛选"> 12. 相对周期筛选</h2>
<p><strong>场景描述：</strong>
与前一年的年初至今和月初至今进行对比是分析业绩的常用指标。通过筛选相对于今天，我们能够轻松得出分析，但如果数据每周都刷新一次，这时该怎么办？
假设您最近一次刷新是在 3 月 1 日，但当前日期是 3 月 7 日。月初至今对比会显示前一年 3 月 1 日到 3 月 7 日与今年的 3 月 1 日的对比。
这会导致出现严重警报，但这种情况下不该出现警报！我们可以采用简单的详细级别表达式找出数据集中的最晚日期。</p>
<p><strong>可视化关键：</strong>
今年同比去年的利润, 按周、月同比时，最后一个周期的天数，要根据数据日期在最后一个周期的天数决定</p>
<h3 id="tableau-lod-6"> Tableau LOD</h3>
<p>缺少去年YTD的截止日期，需要从今年的max日期中做比照。</p>
<div><pre><code><span>Day</span> <span>of</span> <span>Year</span> <span>of</span> Max <span>Date</span> <span>=</span> DATEPART<span>(</span>‘dayofyear’<span>,</span> {<span>MAX</span><span>(</span><span>[</span><span>Order</span> <span>Date</span><span>]</span><span>)</span>} <span>)</span>
<span>Day</span> <span>of</span> <span>Year</span> <span>of</span> <span>Order</span> <span>Date</span> <span>=</span> DATEPART<span>(</span>‘dayofyear’<span>,</span> <span>[</span><span>Order</span> <span>Date</span><span>]</span> <span>)</span>
筛选字段  
Period Filter <span>=</span> <span>[</span><span>Day</span> <span>of</span> <span>Year</span> <span>of</span> Max <span>Date</span><span>]</span> <span>>=</span> <span>[</span><span>Day</span> <span>of</span> <span>Year</span> <span>of</span> <span>Order</span> <span>Date</span><span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="bi-lod-11"> BI LOD</h3>
<div><pre><code><span>Day</span> <span>of</span> <span>Year</span> <span>of</span> Max <span>Date</span> <span>=</span> DAYOFYEAR<span>(</span>{<span>FIXED</span>  : <span>max</span><span>(</span><span><span>`</span>order date<span>`</span></span><span>)</span>}<span>)</span>
<span>Day</span> <span>of</span> <span>Year</span> <span>of</span> <span>Order</span> <span>Date</span> <span>=</span> DAYOFYEAR<span>(</span><span><span>`</span>order date<span>`</span></span><span>)</span>
<span>-- 筛选字段</span>
Period Filter <span>=</span> <span>#{Day of Year of Max Date} >= #{Day of Year Order Date}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>两年的日期均截止8-23日</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231128593.png" alt="" /></p>
<h2 id="_13-用户登录频率"> 13. 用户登录频率</h2>
<p>场景13：用户登录频率
场景描述：
每月一次、每两月一次、每三月一次（依次类推）登录网站或应用程序的用户数目是多少？平均登录率是多少？这一平均值周围的分布偏斜如何？
数据粒度为每个用户 ID 的登录日期。也就是说，用户登录的每一天都记录为一行。生成此视图需要按照登录率划分客户数，即我们必须按照某个度量划分另一个度量。
我们在示例 1 中了解了如何使用详细级别表达式轻松进行此类分析。</p>
<p><strong>可视化关键：</strong>
首次和二次登录的间隔，对应的用户数量</p>
<h3 id="tableau-lod-7"> Tableau LOD</h3>
<p>首次和二次登录间隔，以及每个用户的登录次数。</p>
<div><pre><code>首次登录日期<span>+</span>最近登录日期， <span>fixed</span><span>+</span>min<span>/</span>max函数：
{<span>FIXED</span> <span>[</span><span>User</span> ID<span>]</span>:<span>MIN</span><span>(</span><span>[</span>Log <span>in</span> <span>Date</span><span>]</span><span>)</span>}、{<span>FIXED</span> <span>[</span><span>User</span> ID<span>]</span>:<span>MAX</span><span>(</span><span>[</span>Log <span>in</span> <span>Date</span><span>]</span><span>)</span>}

计算上述两个日期的间隔，用datediff函数，同时参数定为<span>month</span>：
DATEDIFF<span>(</span>‘<span>month</span>’<span>,</span><span>[</span>首次登录日期<span>]</span><span>,</span><span>[</span>最近登录日期<span>]</span><span>)</span>

计算每个用户的登录次数，<span>fixed</span> <span>+</span>countd：
{<span>FIXED</span><span>[</span><span>User</span> ID<span>]</span>:COUNTD<span>(</span><span>[</span>Log <span>in</span> <span>Date</span><span>]</span><span>)</span>}

计算每个用户的平均登录周期，间隔<span>/</span>次数：
<span>ROUND</span><span>(</span><span>[</span>间隔日期<span>]</span><span>/</span><span>[</span>每个客户的登录次数<span>]</span><span>)</span>

参考线，所有用户的平均登录周期：
{EXCLUDE <span>[</span>平均登录周期<span>]</span>:<span>AVG</span><span>(</span><span>[</span>平均登录周期<span>]</span><span>)</span>}

柱子的渐变颜色：
<span>AVG</span><span>(</span><span>[</span>平均登录周期<span>]</span><span>)</span><span>-</span><span>AVG</span><span>(</span><span>[</span>所有用户的平均登录周期<span>]</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><h3 id="bi-lod-12"> BI LOD</h3>
<div><pre><code>首次登录日期<span>+</span>最近登录日期， <span>fixed</span><span>+</span>min<span>/</span>max函数：
{<span>FIXED</span> <span><span>`</span>User ID<span>`</span></span> : <span>MIN</span><span>(</span><span><span>`</span>Log in Date<span>`</span></span><span>)</span>}、{<span>FIXED</span> <span><span>`</span>User ID<span>`</span></span>:<span>MAX</span><span>(</span><span><span>`</span>Log in Date<span>`</span></span><span>)</span>}

计算上述两个日期的间隔，用datediff函数，同时参数定为<span>month</span>： 
Total Months <span>User</span> <span>is</span> Active <span>=</span> DATEDIFF<span>(</span><span>'month'</span><span>,</span> <span>#{1st Login Date}, #{Last Login Date})</span>

计算每个用户的登录次数，<span>fixed</span> <span>+</span>countd：
Total Months <span>User</span> <span>is</span> Active <span>=</span> {<span>FIXED</span> <span><span>`</span>User ID<span>`</span></span>: <span>DISTINCT</span><span>(</span><span><span>`</span>Log in Date<span>`</span></span><span>)</span>}

计算每个用户的平均登录周期，间隔<span>/</span>次数：
Log <span>in</span> Frequency <span>=</span> <span>ROUND</span><span>(</span><span>#{Total Months User is Active} / #{Number of logins per user})</span>

参考线，所有用户的平均登录周期：
Average Log <span>in</span> Frequency <span>=</span> {EXCLUDE <span><span>`</span>Log in Frequency<span>`</span></span> : <span>avg</span><span>(</span><span><span>`</span>Log in Frequency<span>`</span></span><span>)</span>}

柱子的渐变颜色：
<span>max</span><span>(</span><span><span>`</span>Log in Frequency<span>`</span></span><span>)</span> <span>-</span> ${Average Log <span>in</span> Frequency}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202410231215800.png" alt="" /></p>
<h2 id="_14-成比例笔刷"> 14 成比例笔刷</h2>
<p><strong>场景描述：</strong>
任何分析中最基本的问题都是：“对比对象是什么？” 在筛选时，我们有时会需要对比所选内容和总量，而不是简单地向下筛选所选内容。这种技巧称为按比例笔刷。</p>
<p><strong>可视化关键：</strong>
国家在每个分类的销售的占比</p>
<h3 id="lod-tableau"> LOD Tableau</h3>
<p>全部的销售数量（聚合级别更高）</p>
<p>该子分类在所有国家的销售额：{Fixed [Sub-Category] : Sum([Sales]) }</p>
<p>占比：SUM([sales])/SUM([该子分类在所有国家的销售额])</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231332471.png" alt="" /></p>
<h3 id="bi-lod-13"> BI LOD</h3>
<div><pre><code><span>-- 该子分类在所有国家的销售额：</span>
{<span>Fixed</span> <span>[</span>Sub<span>-</span>Category<span>]</span> : <span>Sum</span><span>(</span><span>[</span>Sales<span>]</span><span>)</span> }

选定国家销售额：
<span>IF</span><span>(</span><span><span>`</span>country<span>`</span></span><span>=</span><span>'${country!"China"}'</span><span>,</span> <span><span>`</span>sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><p>选择进度占比图，值轴选定为水平轴</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202410231347699.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">性能调优</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/discuss/optimize/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/discuss/optimize/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="性能调优"> 性能调优</h1>
<hr>
<h2 id="聚合下推"> 聚合下推</h2>
<div id="callout-focus-demo">
    <p>每一次OLAP操作都包含对定义数据集的再聚合操作！</p>
</div>
<ul>
<li>使用过<code>CBoard v0.2</code>或者更早版本的用户应该知道，之前CBoard<strong>数据处理定位</strong>为<mark>聚合结果集再聚合</mark>，二次聚合操作在客户端浏览器进行，大数据集聚合需要用户自己通过修改数据集聚合粒度聚合下推，这对于维度较多的数据集使用不太太方便。</li>
<li>0.3升级了的<code>DataProvider</code>，以及变更了数据流处理逻辑，一方面<code>离线数据集聚合</code>不再在前端做聚合方面操作，数据聚合只在服务端进行（下图左）；另一方面对于某些超大规模计算与存储数据源，可选聚合下推数据源进而完全释放CBoard本身计算压力（下图右）</li>
</ul>
<div>
    <img src="../../assets/discuss/push-agg-down.png" style="width: 60%;"/>
</div>
<h3 id="离线数据集聚合下推服务端"> 离线数据集聚合下推服务端</h3>
<ul>
<li>聚合下推服务端对用户来说是透明的，CBoard使用JDK8 Stream + Lambda模拟数据库的聚合计算功能。聚合好之后的数据抛前端，浏览器只负责渲染图表</li>
<li>数据首次获取的时间由数据查询性能决定。请尽量优化自己的数据查询语句</li>
<li>尽可能的控制<code>数据集</code>与<code>查询</code>返回的数据量。我们压力测试下来，100W数据利用<code>SELECT * FROM TABLE</code>从后端传输到前端大概需要30s时间，浏览器使用100M左右内存，再聚合时间在5s以内，</li>
</ul>
<p>!&gt; 在非数据源聚合场景下，绝对不推荐这种用法，请尽量的控制后端返回数据在30W以内</p>
<ul>
<li>CBoard之前自带性能优化机制仍然有效</li>
<li>在没有建立<strong>数据集</strong>的前提下，相同的查询语句在同一看板页面只会加载一次</li>
<li>在事前定义了<strong>数据集</strong>的情况下，相同数据集查询后台一次，<strong>自定义聚合表达式</strong>和<strong>维度数据过滤</strong>都能够起到简化设计、减少查询的效果</li>
<li>查询缓存，一次数据加载会在服务器缓存12小时，避免第二次查询重复获取数据</li>
</ul>
<h3 id="聚合下推数据源"> 聚合下推数据源</h3>
<ul>
<li>我们对JDBC、Kylin、ES DataProvider实现了聚合下推数据源的功能。其中ES、Kylin只能在数据源进行聚合, JDBC开启数据源聚合需要在建立数据源的时候勾选<code>数据源聚合</code>选项</li>
<li>通过用户前端拖拽操作的图表配置（Query Config）后端动态生成不同数据源产品的Query语句查询维度成员与最终聚合结果集</li>
<li>数据源聚合使用场景定位与高性能数据源，查询延时低，<mark>故此场景我们不会对查询查询结果进行任何缓存</mark></li>
</ul>
<h3 id="jdbc数据源下推原理"> JDBC数据源下推原理</h3>
<p>使用数据源聚合的JDBC连接，用户可以定义一个类似<code>SELECT * FROM foodmart.sales_fact</code>的查询，或者再复杂一些的查询，下图用户拖拽CUSTOM_ID和PRODUCT_ID，定义一个聚合算法count(TIME_ID)之后会,预览查看可以看到下面语句, 用户写的查询语句被当成一个子查询做了再一次聚合</p>
<div><pre><code><span>SELECT</span> CUSTOMER_ID<span>,</span> PRODUCT_ID <span>,</span><span>COUNT</span><span>(</span>__view__<span>.</span>TIME_ID<span>)</span>
  <span>FROM</span> <span>(</span> <span>SELECT</span> <span>*</span> <span>FROM</span> foodmart<span>.</span>sales_fact <span>)</span> cb_view
 <span>GROUP</span> <span>BY</span> CUSTOMER_ID<span>,</span> PRODUCT_ID
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p><img src="./../../assets/discuss/select-2.png" alt="" /></p>
<hr>
<h2 id="整体优化路线图★"> 整体优化路线图★</h2>
<p><img src="./../../assets/discuss/tunning-roadmap.png" alt="" /></p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">函数使用案例</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.9-function-eg/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/dataset/2.9-function-eg/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="日环比"> 日环比</h2>
<div><p>变量 dt</p>
<p>可以通过看板参数赋值，从而实现动态查看选定日期的销售额与日环比</p>
</div>
<ol>
<li>增加计算字段<strong>今日销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>r_date<span>`</span></span> <span>=</span> <span>'${dt!cdt.now("yyyy-MM-dd")}'</span><span>,</span> <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>增加计算字段<strong>昨日销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span>addDay<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>1</span><span>)</span> <span>=</span> <span>'${dt!cdt.now("yyyy-MM-dd")}'</span><span>,</span> <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="3">
<li>增加汇总表达式<strong>日环比</strong></li>
</ol>
<div><pre><code>CHGRATE<span>(</span><span>sum</span><span>(</span><span><span>`</span>昨日销售额<span>`</span></span><span>)</span><span>,</span> <span>sum</span><span>(</span><span><span>`</span>今日销售额<span>`</span></span><span>)</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="4">
<li>拖拽<strong>今日销售额</strong>、<strong>昨日销售额</strong>到指标栏，汇总类型选择sum, 拖拽汇总表达式<strong>日环比</strong>到指标
<ul>
<li>图表类型选择 <strong>指标卡</strong></li>
<li>配置 &gt; 样式 &gt; 风格 &gt; 选择朴素</li>
<li>多指标配置 &gt; 打开按列维组合</li>
</ul>
</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151152009.png" alt="" /></p>
<h2 id="月环比"> 月环比</h2>
<div><p>变量 dt</p>
<p>可以通过看板参数赋值，从而实现动态查看选定日期的销售额与日环比</p>
</div>
<ol>
<li>增加计算字段<strong>本月销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span> 
  DATETRUNC<span>(</span><span>'month'</span><span>,</span> <span><span>`</span>r_date<span>`</span></span><span>)</span> <span>=</span> <span>'${cdt.startOfMonth(dt, "yyyy-MM-dd")}'</span><span>,</span> 
  <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><ol start="2">
<li>增加计算字段<strong>上月销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span>
  DATETRUNC<span>(</span><span>'month'</span><span>,</span> addMonth<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>1</span><span>)</span><span>)</span> <span>=</span> <span>'${cdt.startOfMonth(dt, "yyyy-MM-dd")}'</span><span>,</span> 
  <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><ol start="3">
<li>增加汇总表达式<strong>月环比</strong></li>
</ol>
<div><pre><code>CHGRATE<span>(</span><span>sum</span><span>(</span><span><span>`</span>上月销售额<span>`</span></span><span>)</span><span>,</span> <span>sum</span><span>(</span><span><span>`</span>本月销售额<span>`</span></span><span>)</span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="4">
<li>拖拽<strong>本月销售额</strong>、<strong>上月销售额</strong>到指标栏，汇总类型选择sum, 拖拽汇总表达式<strong>月环比</strong>到指标</li>
</ol>
<p><strong>月环比总结:</strong></p>
<ol>
<li>本月销售额中把日期字段通过DATETRUNC('month', <code>r_date</code>)函数处理到月初第一天，然后利用环境变量函数把传入的日期也调整到月初第一天<code>${cdt.startOfMonth(dt, &quot;yyyy-MM-dd&quot;)}</code></li>
<li>上月销售额即把销售日期<code>r_date</code>通过addMonth增加一个月，其他处理和本月销售额一直</li>
<li>注意上面的案例中传入的dt环境变量格式必须为'yyyy-MM-dd'</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151159937.png" alt="" /></p>
<h2 id="年累计"> 年累计</h2>
<p>数据集汇总表达式定义:</p>
<div><pre><code><span>-- 年累计销售额-方案1: </span>
<span>sum</span><span>(</span><span>IF</span><span>(</span>INYTD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>)</span><span>,</span> <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span><span>)</span>
<span>-- 年累计销售额-方案2: </span>
{EXCLUDE : <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span> : INYTD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>)</span>}

<span>-- 去年同期-方案1: </span>
<span>sum</span><span>(</span>
  <span>IF</span><span>(</span> INYTD<span>(</span>
        <span><span>`</span>r_date<span>`</span></span><span>,</span> 
        addYear<span>(</span><span>CURRENT_DATE</span><span>(</span><span>)</span><span>,</span> <span>-</span><span>1</span><span>)</span> 
      <span>)</span><span>,</span> 
  <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
<span>)</span>
<span>-- 去年同期-方案2: </span>
{ 
    EXCLUDE : <span>sum</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span> : 
    INYTD<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> addYear<span>(</span><span>CURRENT_DATE</span><span>(</span><span>)</span><span>,</span> <span>-</span><span>1</span><span>)</span><span>)</span> 
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">常见问题</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/discuss/faq/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/discuss/faq/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="常见问题"> 常见问题</h1>
<h2 id="新建数据源保存失败"> 新建数据源保存失败</h2>
<blockquote>
<p><strong>解决办法</strong>： 查看 CBoard 源数据库连接配置是否正确，CBoard/src/main/resources/config.properties</p>
</blockquote>
<div><pre><code>validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/cboard
jdbc_username=root
jdbc_password=111111
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h2 id="mysql-保存中文元数据乱码问题"> Mysql 保存中文元数据乱码问题</h2>
<blockquote>
<p>进入 mysql 命令行, 查看 mysql 相关编码</p>
</blockquote>
<div><pre><code>mysql&gt; show variables like &#39;character_set_%&#39;;
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><p>确保下面两项编码为 utf-8</p>
<div><pre><code>| character_set_database | utf8
| character_set_server | utf8
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><p>character_set_server 如果编码不对，有两种解决方案，</p>
<ul>
<li>修改 config.properties 里面 mysql 的 jdbc_url 添加参数 characterEncoding=utf-8</li>
</ul>
<div><pre><code>jdbc_url=jdbc:mysql://localhost:3306/cboard?characterEncoding=utf-8
</code></pre>
<div><span>1</span><br></div></div><p>如果你的数据源查询也出现了乱码, 或者本来有的数据加上中文条件之后查询不出来, 可以尝试通过同样的方式修复</p>
<ul>
<li>参考这个网页，<a href="http://www.2cto.com/database/201310/248493.html" target="_blank" rel="noopener noreferrer">重新设置 mysql 服务</a>, 设置完成之后，重新 cboard 数据库
如果只有第一项数据库编码不对，可以先尝试 drop 掉 DB 之后重新创建
CREATE DATABASE cboard CHARACTER SET utf8;</li>
<li>MAC 用户修改 my.cnf, 在[mysqld]之后添加一行 character-set-server = utf8 behind</li>
</ul>
<h2 id="保存数据源提示invalidkeyexception-no-installed-provider-supports-this-key-javax-crypto-spec-secretkeyspec"> 保存数据源提示InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec</h2>
<p>如果使用的OracleJDK请升级jdk1.8的版本到1.8.0_162以上或1.8最高版本，或换成OpenJDK</p>
<h2 id="保存数据源提示invalidkeyexception-illegal-key-size-or-default-parametersx"> 保存数据源提示InvalidKeyException: Illegal key size or default parametersx</h2>
<p>如果使用的OracleJDK请升级jdk1.8的版本到1.8.0_162以上或1.8最高版本，或换成OpenJDK</p>
<h2 id="图表样式改变了看板上为什么没有生效"> 图表样式改变了看板上为什么没有生效</h2>
<p>因为引用图加到看板的时候会复制一套首次加入看板时的样式配置, 这样才能做到一个引用图在不同的看板有不同的样式效果，如果引用图主图有样式更改，
强行同步所有看板中的样式会导致看板中个性化配置被覆盖，当然您可以手工同步引用图的样式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210729110426.png" alt="" /></p>
<h2 id="看板分享为什么动态日期不生效"> 看板分享为什么动态日期不生效</h2>
<p>看板分享实例为带状态的链接，为了让分享查看者看到的数据与分享者相同，分享实例会包含分享实例生成时的日期值<br>
动态日期的优先级低于分享实例参数赋值，所以当分享实例的日期参数有值时动态日期不会生效，如果分享日期用于看板集成需要动态日期，可以通过编辑分享实例的参数状态，删除日期参数对应配置即可</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230421095601.png" alt="" /></p>
<h2 id="关于缓存"> 关于缓存</h2>
<blockquote>
<p>首先声明缓存使用场景是: 查询慢, 但是返回数据量不大的数据集(对此我们也特意对离线数据集结果集大小做了合理限制), 对于数据源聚合的数据集, 默认你的数据源应该有比较强的计算能力, 故系统不会对数据源聚合的数据集做缓存
缓存从 0.1 到 0.4 经历了不同阶段的演进:</p>
</blockquote>
<ul>
<li>第一阶段: 最早引入 jvm 缓存是为了解决离线数据集太多之后, JVM 压力过大引起内存溢出, 为此首先想到的是采用 redis 把数据移到外部分布式缓存;</li>
<li>第二阶段: 考虑到 redis 本身也不是所有小规模公司都会有现成的集群, 在加上 redis 对于大规模的读写性能也不是太好, 我们引入了 ehchace 可以混用 JVM 和文件系统做存储</li>
<li>第三阶段: 上述两个缓存策略都还只是解决了存储问题, 大家知道 CBoard 存储离线数据集之后是需要二次聚合操作的, 这就需要 CBoard 从 redis/ehcahce 里面把数据从 JVM 堆外读到堆内, 然后用最早的 JvmAggregator 做二次聚合操作.
实践下来, 这个过程当中两次 IO 加上大量的 JVM 计算开销, 性能并不好; 如是就有了内嵌数据库 h2, 该数据库可以把数据存在内存或者文件系统, 同时还可以做聚合操作, 相比如自己实现的聚合算法性能还非常好, 同样有帖子对此做跟踪解释
<a href="https://github.com/TuiQiao/CBoard/issues/276" target="_blank" rel="noopener noreferrer">关于 redis 缓存</a>, 下面是 config.properteis 里面 h2 相关配置:<div><pre><code><span># Storage File Syatem</span>
<span># 1 Stores data in file system</span>
<span>aggregator.h2.url</span><span>=</span><span>jdbc:h2:~/H2Data/cboard;AUTO_SERVER=TRUE;LOG=0;UNDO_LOG=0</span>
<span># 2 Stores data outside of the VM's heap - useful for large memory DBs without incurring GC costs.</span>
<span>#aggregator.h2.url=jdbc:h2:nioMemFS:cboard;LOG=0;UNDO_LOG=0</span>
<span>aggregator.h2.database.name</span><span>=</span><span>cboard</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div></li>
</ul>
<h2 id="为什么交叉表数据不全"> 为什么交叉表数据不全</h2>
<p>为了让BI系统能以较高的性能运行，我们在以下场景做了数据量上限控制，防止误操作导致系统卡顿、内存压力过大甚至宕机发生</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>dataprovider.agg.resultLimit</td>
<td>聚合结果集大小限制，所有汇总类型的图表，实际执行查询之后返回数据量都受该配置限制，调大会增加服务端压力, 默认:1万</td>
</tr>
<tr>
<td>dimension.member.resultLimit</td>
<td>维度成员查询返回结果集大小限定，影响维度过滤框加载维度成员与看板参数下拉框选择加载， 默认:2000</td>
</tr>
<tr>
<td>dataprovider.resultLimit</td>
<td>离线数据集缓存大小限制，默认:30万</td>
</tr>
</tbody>
</table>
<p>交叉表数据不全一般是受dataprovider.agg.resultLimit影响</p>
<div><p>注意</p>
<p>问: 但是有些用户可能会说，我的交叉表数据行明明就不到默认的1万行，为什么还是数据不完整呢？<br>
答: 那是因为上面配置项控制的是多维计算处理之前的数据量，如下图所示，设计1和设计2发起的数据库查询脚本是一模一样的，<strong>都是4行数据(对应聚合结果集大小限制)</strong>，设计1的性别在行维，展示在交叉表记录数为4行，
设计2的性别在列维，展示记录数为2行，也就是我们俗称的行转列操作，所以行转列之后行记录数可能会减少，前端交叉表显示的不到1万行，实际在后天汇总实际可能已经超过阈值了</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104163351.png" alt="" /></p>
</div>
<p>该配置在v1.10支持配置页面，管理员可以进行更新</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230529161855.png" alt="" /></p>
<p>在v1.10之前可通过添加配置项修改, 或者修改系统运行配置文件</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230529162118.png" alt="" /></p>
<h2 id="关于企业版"> 关于企业版</h2>
<h3 id="为什么要做商业版"> 为什么要做商业版</h3>
<p>随着时间推移, CBoard 从开源到商业历时6年多时间, 从默默无闻到现在越来越多的用户开始接受, 并且在大大小小的众多公司得到了很好的实践与生产检验. 这个过程当中我们没有做过任何市场推广与宣传.</p>
<p>同时两年多时间我们培养了一大批用户, 包括之前从来没有接触过 BI, OLAP, 多维分析概念的用户, 这让我们感到欣慰. 但是真正参与项目社区开发的人少之又少; 再加上从一开始这个项目就没有得到公司的支持, 只是社区上几个小伙伴利用工作之余的时间进行开发与维护(当中付出了无数工作日的夜晚与节假日).
这种状态下, 几个开发者本质工作稍微有些变动或是公司政策上稍有约束就不能继续参与到项目开发中来, 确实我们几个开发者都经历这种遭遇, 类似单点故障, 这样的结果当然是发起者和用户都最不愿意看到的.</p>
<p>在这个过程当中, 我们见过太多从一开始就想在社区产品之上独立二次开发包装成自己产品, 导致在社区版有重大更新的时候和项目脱节; 又或是用户投入了大量的人力物力, 结果开发思路就和产品本身不符合, 最终半途而废;
经过很长一段时间的挣扎, 我们决定依托于商业支持主导项目的发展.</p>
<h3 id="企业版的定位"> 企业版的定位</h3>
<p>企业版后期的定位是在尽量提供通用分析能力的基础上, 做一个开放的 BI 产品开放平台, 允许用户和二次开发商能够自定定制 UI 与交互形式. 一方面兼容社区版的 CBoard 的元数据与操作流程, 另一方面在核心前后端 SDK 丰富的前提下用户可以基于之前社区版主要设计理念做自己的定制开发工作.
最重要的是保证性价比还要高, 让大家都能用得起;</p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">概述与配置</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/0-form/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/0-form/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>数据填报用于数据收集，主要用于辅助完成数据仓库、业务数据库之外的数据的收集与录入工作。同时也可以做一些问卷数据收集功能。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511041714018.png" alt="" /></p>
<h2 id="填报数据库配置"> 填报数据库配置</h2>
<p>数据填报功能支持对接MySQL、Postgresql，开启数据填报功能请先在 <code>apllication.properties</code> 文件中添加填报数据存储数据库信息, <strong>增加填报数据库之后请重启服务</strong></p>
<h3 id="mysql数据库配置"> MySQL数据库配置</h3>
<div><pre><code><span>datasource.form.driver-class-name</span><span>=</span><span>com.mysql.jdbc.Driver</span>
<span>datasource.form.database</span><span>=</span><span>form_data</span>
<span>datasource.form.url</span><span>=</span><span>jdbc:mysql://localhost:3306/${datasource.form.database}?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>datasource.form.username</span><span>=</span><span>root</span>
<span>datasource.form.password</span><span>=</span><span>xxx</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h3 id="postgresql数据库配置"> Postgresql数据库配置</h3>
<p>Postgresql对比MySQL增加了schema概念，默认使用<code>public</code>schema，支持修改<code>datasource.form.schema</code>配置文件调整</p>
<div><pre><code><span>datasource.form.driver-class-name</span><span>=</span><span>org.postgresql.Driver</span>
<span>datasource.form.database</span><span>=</span><span>cboard</span>
<span># datasource.form.schema=form_data # 不配置schema默认使用public schema</span>
<span>datasource.form.url</span><span>=</span><span>jdbc:postgresql://locahost:5432/${datasource.form.database}?currentSchema=${datasource.form.schema}</span>
<span>datasource.form.username</span><span>=</span><span>postgres</span>
<span>datasource.form.password</span><span>=</span><span>xxx</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="进入填报页面"> 进入填报页面</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511041731261.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">表单设计</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/1-form-design/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/1-form-design/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="_0-新建表单"> 0.新建表单</h2>
<p>从顶部菜单进入动态表单模板，点击左侧或页面中间新建表单菜单创建一个新的表单设计器</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051018840.png" alt="" /></p>
<h2 id="_1-表单设计"> 1.表单设计</h2>
<h3 id="标题配置"> 标题配置</h3>
<p>点击标题区，激活右侧标题文案配置区域，也可以直接在右边栏选择 <code>表单属性</code> -&gt; <code>表单标题</code> 进行标题配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-title-input.gif" alt="" /></p>
<h3 id="添加组件"> 添加组件</h3>
<p>左侧表单组件栏选择需要添加的组件类型，再通过点击组件栏的组件，或者拖拽组件栏的组件，将组件添加到表单中</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-addcomp.gif" alt="" /></p>
<h3 id="组件替换"> 组件替换</h3>
<p>组件数据在数据库中存储字段为标签名称，如果用户在表达发布后(已经收集了历史数据)，需要修改组件交互类型，如：从<code>文本输入</code>改为<code>下拉选择</code>，<br>
可以通过组件<code>替换</code>功能仅改变表单组件类型，其他通用属性不变更</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-item-repleace.gif" alt="" /></p>
<h3 id="组件通用配置"> 组件通用配置</h3>
<p>点击表单设计器中已添加的组件<strong>激活组件</strong>，激活组件之后，右边栏对激活的组件进行配置。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511041814240.png" alt="" /></p>
<h4 id="_1-标签相关配置"> 1. <strong>标签相关配置</strong></h4>
<ul>
<li><strong>标签名称</strong>：用于定义组件的标识，如图中“单行文本”，明确该输入框的用途（如“姓名”“手机号”等）。</li>
<li><strong>显示标签开关</strong>：可控制是否在表单中显示标签，若关闭则仅保留输入区域，适用于对界面简洁性有要求的场景。</li>
<li><strong>标签宽度</strong>：定义标签区域的宽度（图中为100px），确保标签显示整齐，避免因文字长度差异导致布局混乱。</li>
</ul>
<div><p>标签名称与数据存储</p>
<p><strong>标签的名称为数据库中表字段名称</strong>, 如果填加了两个相同标签名的组件，保存表单时会自动重命名组件标签名</p>
</div>
<h4 id="_2-布局与宽度配置"> 2. <strong>布局与宽度配置</strong></h4>
<ul>
<li><strong>表单栅格</strong>：是表单布局的网格系统参数（完整行栅格为24，图中为18），用于控制组件在表单画布中的横向占位比例，帮助实现多组件的整齐排列（类似前端框架的栅格布局逻辑）。</li>
<li><strong>组件宽度</strong>：设置当前组件自身的宽度占比（图中为50%），可灵活调整输入区域的视觉大小，适配不同长度的内容输入需求。</li>
</ul>
<h4 id="_3-交互状态配置"> 3. <strong>交互状态配置</strong></h4>
<ul>
<li><strong>是否禁用开关</strong>：开启后组件将变为不可编辑状态，常用于“查看模式”或需要控制用户输入时机的场景。</li>
<li><strong>是否必填开关</strong>：开启后该组件为必填项，提交表单时会触发校验，确保关键信息不缺失。</li>
</ul>
<h4 id="_4-数据类型配置"> 4. <strong>数据类型配置</strong></h4>
<ul>
<li><strong>字段类型下拉框</strong>：用于指定组件接收的数据类型（如文本、数字、日期等），用于调整字段在数据库中的存储数据类型。</li>
</ul>
<h3 id="输入型组件"> 输入型组件</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051155805.png" alt="" /></p>
<p>输入型组件用于收集用户的文本、数字类输入信息，是表单中最基础的交互单元。</p>
<h4 id="单行文本"> 单行文本</h4>
<p>适用于短文本输入场景，如姓名、用户名、简单备注等，仅支持单行内容输入。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051413341.png" alt="" /></p>
<h4 id="多行文本"> 多行文本</h4>
<p>用于长文本输入，如意见反馈、详细描述等，支持多行内容的输入和编辑。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051425045.png" alt="" /></p>
<h4 id="数字"> 数字</h4>
<p>专门用于数字类数据的输入，避免用户用户输入非数字内容。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051435764.png" alt="" /></p>
<h3 id="选择型组件"> 选择型组件</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051001705.png" alt="" /></p>
<h4 id="下拉"> 下拉</h4>
<p>以下拉列表的形式呈现多个选项，用户可从中选择一个，适用于选项较多的场景，如城市选择、学历选择等。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051523021.png" alt="" /></p>
<h4 id="单选框"> 单选框</h4>
<p>在多个互斥选项中选择一个，如性别（男/女）、是否同意协议等。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051551376.png" alt="" /></p>
<h4 id="多选框"> 多选框</h4>
<p>可同时选择多个选项，如兴趣爱好（阅读、运动、音乐等）。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051702767.png" alt="" /></p>
<h4 id="开关"> 开关</h4>
<p>用于二选一的场景，如是否启用某项功能、是否接收通知等，操作直观如物理开关。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051753532.png" alt="" /></p>
<blockquote>
<p>默认<code>关闭/开启值</code>为：0/1, 数据存储类型为字符串，用户可以根据使用场景调整， 如上图中红框中将 <code>关闭/开启值</code> 设置为 <code>坏/好</code></p>
</blockquote>
<h4 id="滑块"> 滑块</h4>
<p>通过拖动滑块选择数值范围，适用于评分、进度等需要直观调整数值的场景。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051938767.png" alt="" /></p>
<h4 id="时间选择"> 时间选择</h4>
<p>用于选择具体的时间，如会议时间、航班时间等，可精确到时分秒。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511051957443.png" alt="" /></p>
<h4 id="日期选择"> 日期选择</h4>
<p>用于选择具体的日期，如生日、合同签订日期等。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511061009558.png" alt="" /></p>
<div><p>时间类型</p>
<p>时间类型设置的日期控件显示日期的类型，后台存储字段均为日期类型，存储值为选择日期周期的第一天，如：月份选择存储是月份的第一天。</p>
</div>
<h4 id="评分"> 评分</h4>
<p>以星级等形式让用户对事物进行评分，如商品评价、服务满意度评价等。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511061040025.png" alt="" /></p>
<h4 id="上传"> 上传</h4>
<p>支持用户上传文件、图片等资源，如身份证照片、简历文档、产品图片等。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511061454114.png" alt="" /></p>
<ul>
<li><strong>文件大小</strong>
设置允许上传的单个文件最大体积，图中为 “1MB”。
可根据业务需求调整（如 5MB、10MB），超出限制的文件会被拦截，避免服务器存储压力或传输超时。</li>
<li><strong>列表类型</strong>
控制上传文件的展示样式，图中选择 “picture-card”（图片卡片式），上传的图片会以带预览功能的卡片形式展示。
其他常见样式如 “text”（纯文本列表）、“picture”（仅图片预览）等，可根据界面风格选择。</li>
<li><strong>多选文件</strong>
开关开启后，支持一次选择并上传多个文件（需配合 “文件数量限制” 使用）；若关闭，则仅允许单次上传一个文件。</li>
<li><strong>文件数量限制</strong>
设置最多可上传的文件总数，图中为 “2”，即用户最多可上传 2 张图片。
可根据业务场景调整（如 1 张、5 张等），超出数量的文件无法继续上传。</li>
</ul>
<h3 id="布局型组件"> 布局型组件</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511061531200.png" alt="" /></p>
<p>布局型、描述性组件是不负责数据收集的辅助组件，目前有文字描述性组件与分割线组件</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511071357671.png" alt="" /></p>
<h3 id="联系人组件"> 联系人组件</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511050950302.png" alt="" /></p>
<p>联系人组件为普通组件的预定义模板，专为收集联系人相关信息设计的组件集合，覆盖了联系人的基本信息、社交信息、职业信息等维度。
其中, 身份证、邮箱、手机号预置了输入验证规则</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511061540177.png" alt="" /></p>
<h2 id="_2-提交后-配置"> 2.提交后 配置</h2>
<p>这是动态表单 “提交后” 页面的配置界面，用于设置用户提交表单后的反馈样式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511071159350.png" alt="" /></p>
<ul>
<li><strong>自定义图片</strong>：可上传个性化图片（如品牌 Logo、成功标识），替代默认的成功图标，增强品牌识别或视觉体验。</li>
<li><strong>提示标题</strong>：设置提交成功后的标题文案，如图中 “提交成功！”，用于快速传递操作结果。</li>
<li><strong>提示文本</strong>：补充详细说明，如图中 “我们已收到您的反馈，感谢填写！”，向用户解释后续流程或表达感谢。</li>
<li><strong>显示按钮</strong>：开启后可添加交互按钮（如图中 “返回”），支持用户点击后返回表单页<strong>修改</strong>填写内容。</li>
</ul>
<h2 id="_4-外观配置"> 4 外观配置</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511100940183.png" alt="" /></p>
<h3 id="样式配置"> 样式配置</h3>
<ol>
<li>标签相关配置<br>
<strong>标签对齐</strong>：支持左对齐、右对齐、顶部对齐，图中选择 “右对齐”，使标签与输入组件的布局更规整；
<strong>标签宽度</strong>：设置为 100px，确保标签区域宽度统一，提升表单视觉一致性。</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-label-position.gif" alt="" /></p>
<ol start="2">
<li>布局与尺寸配置<br>
<strong>表单尺寸</strong>：选择 “中等”，宽度设为 700px，适配多数设备的显示场景；
<strong>元素间隔</strong>：0px，控制表单内元素的纵向间距，可根据界面密度调整。</li>
</ol>
<h3 id="表头外观配置"> 表头外观配置</h3>
<p>右边栏选择 <code>外观</code> -&gt; <code>表头区</code> 进行表头样式配置</p>
<ul>
<li><strong>背景</strong>: 表头背景支持图片背景和背景色两种方案</li>
<li><strong>图片背景</strong>: 在图片背景模式下，可以选择内置的图片作为背景，或者用户自己上传图片作为背景</li>
<li><strong>背景色</strong>: 在背景色模式下，可以通过颜色拾取器配置背景颜色</li>
<li><strong>高度</strong>*: 指表头部分的高度，通常用于调整高度以匹配图片的百分比，防止图片拉伸变形</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511041822408.png" alt="" /></p>
<h3 id="页面与提交区"> 页面与提交区</h3>
<h4 id="页面"> 页面</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511100947371.png" alt="" /></p>
<h4 id="提交区"> 提交区</h4>
<p>提交区样式配置支持配置</p>
<ul>
<li>按钮颜色</li>
<li>文字颜色</li>
<li>按钮宽度</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">表单发布</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/2-form-release/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/2-form-release/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>表单设计完成之后，保存表单。点击<code>3.发布表单</code>进去表单发布页面, 添加表单发布实例。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511101006633.png" alt="" /></p>
<h2 id="表单发布实例"> 表单发布实例</h2>
<p><strong>表单发布实例</strong>：是指基于同一个表单模板，在不同场景、时间或业务需求下生成的独立发布版本。<br>
其核心机制是：<strong>多个发布实例共享同一张数据表存储数据</strong>，通过发布实例 ID（如链接中releaseId参数）和发布实例名（如 “发布二 3”“新的发布”）进行区分；</p>
<p><strong>数据分析场景</strong>：既支持多实例数据的联合分析（如对比不同实例的填报趋势），也能实现单实例的独立分析（如聚焦某一实例的填报详情）。</p>
<h2 id="关键属性与功能"> 关键属性与功能</h2>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明与价值</th>
</tr>
</thead>
<tbody>
<tr>
<td>发布实例名</td>
<td>如“发布二3”“发布测试”，用于直观识别不同实例的用途（如区分“春季调研”“秋季调研”），支持快速检索与管理。</td>
</tr>
<tr>
<td>发布链接</td>
<td>每个实例生成唯一访问链接，支持“打开链接”直接访问表单、“复制链接”用于分享（如嵌入网页、发送邮件）。</td>
</tr>
<tr>
<td>填报数</td>
<td>统计该实例的表单填报总量（如“发布测试”填报数为9），反映实例的参与度。</td>
</tr>
<tr>
<td>未读数</td>
<td>统计未处理的填报数据量（如“发布二3”未读数为1），便于及时跟进新提交的表单。</td>
</tr>
<tr>
<td>过期时间</td>
<td>设定实例的有效截止时间（如“2025-12-07 10:21:36”），时间到期后表单自动下架，控制数据收集的时间范围。</td>
</tr>
<tr>
<td>是否过期</td>
<td>标识实例当前状态（“正常”或“过期”），帮助快速判断实例是否仍可接收填报。</td>
</tr>
<tr>
<td>操作</td>
<td>支持删除实例（垃圾桶图标），便于清理无效或冗余的发布版本。</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">表单填写</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/3-form-input/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/3-form-input/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="发布链接"> 发布链接</h2>
<p>通过发布链接，表单填写人可以免登录，填写表单。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511101027728.png" alt="" /></p>
<h2 id="二维码"> 二维码</h2>
<p>也可以生成二维码，让填写用户扫描填报。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-input-qr.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">管理数据</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/4-form-data/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/form/4-form-data/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="查看数据"> 查看数据</h2>
<p>您可以通过以下几种形式查看表单数据</p>
<ol>
<li>表单设计器 -&gt; 表单发布列表</li>
<li>表单数据管理 -&gt; 查看所有表单发布实例以及数据填报情况</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-data-table.gif" alt="" /></p>
<h2 id="修改单条数据"> 修改单条数据</h2>
<p>表单数据表格支持编辑，文本组件、下拉选择、日期选择、上传组件等，双击单元格切换单元格状态进入编辑模式，多选、单选、开关、评分等组件，编辑状态与查看状态采用视图统一，
即不用双击，直接编辑数据。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-data-editor.gif" alt="" /></p>
<h2 id="批量导入数据"> 批量导入数据</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511101421127.png" alt="" /></p>
<p>数据管理支持<strong>批量数据导入</strong>，用于将Excel文件中的数据映射到系统字段中：</p>
<ol>
<li>文件上传</li>
</ol>
<ul>
<li>支持<strong>拖放或点击上传</strong>Excel文件（仅支持.xlsx格式，单个文件不超过10MB），图中已选择示例文件“示例-超市-20250919_155521.xlsx”。</li>
</ul>
<ol start="2">
<li>跳过行数配置</li>
</ol>
<ul>
<li>可设置需要跳过的行数（如标题行、说明行），图中设为“1”，用于过滤Excel中无需导入的前置行数据。</li>
</ul>
<ol start="3">
<li>字段映射区域</li>
</ol>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明与价值</th>
</tr>
</thead>
<tbody>
<tr>
<td>源字段</td>
<td>对应Excel文件中的原始字段（如“订单日期”“发货日期”），是数据导入的来源。</td>
</tr>
<tr>
<td>目标字段</td>
<td>选择系统中匹配的字段（如“发货日期”“数量”），或新建字段（如“订单日期”对应新建的“日期”字段）。</td>
</tr>
<tr>
<td>是否新建</td>
<td><strong>在不选择目标字段的前提下</strong>，勾选后可创建系统中不存在的字段，支持选择字段类型（如“日期(Date)”）并命名（如“日期”），满足自定义数据结构的需求。</td>
</tr>
</tbody>
</table>
<p>通过该界面，可实现Excel数据与系统字段的精准映射，既支持直接匹配已有字段，也能灵活新建字段拓展数据维度，确保导入数据的规范性和可用性。</p>
<h2 id="基于批量导入的表单数据初始化表单"> 基于批量导入的表单数据初始化表单</h2>
<p>通过“<strong>批量导入新建字段+后期组件类型替换</strong>”的流程，可快速实现<strong>空白表单的结构化数据初始化</strong>，既利用已有数据搭建表单基础框架，又支持后续精细化的组件与数据类型优化，大幅提升表单创建效率。</p>
<h3 id="操作流程"> 操作流程</h3>
<ol>
<li>新建空白表单并发布</li>
</ol>
<ul>
<li>创建一个无任何组件的空白表单，直接发布生成表单实例。</li>
</ul>
<ol start="2">
<li>数据管理中批量导入初始化</li>
</ol>
<ul>
<li>进入该表单的<strong>数据管理模块</strong>，使用“<strong>批量导入</strong>”功能上传包含目标字段的Excel文件（如含“客户姓名”“订单金额”“成交日期”的业务数据）。</li>
<li>利用“新建字段”特性，将Excel中的每一列数据映射为表单的<strong>文本输入框字段</strong>（默认数据类型为文本），完成表单的初步数据结构搭建。</li>
</ul>
<ol start="3">
<li>组件与数据类型优化</li>
</ol>
<ul>
<li><strong>替换组件</strong>：针对不同字段的业务属性，将默认的文本输入框替换为对应组件（如“成交日期”替换为“日期选择器”，“订单金额”替换为“数字输入框”）。</li>
<li><strong>修改数据类型</strong>：同步调整字段的数据类型（如文本→日期、文本→数字），确保数据存储和校验规则的准确性。</li>
</ul>
<h3 id="优势与适用场景"> 优势与适用场景</h3>
<table>
<thead>
<tr>
<th>优势</th>
<th>适用场景</th>
</tr>
</thead>
<tbody>
<tr>
<td>效率高</td>
<td>需快速基于已有数据搭建表单结构的场景（如历史业务数据迁移、批量信息采集表单创建）。</td>
</tr>
<tr>
<td>灵活性强</td>
<td>支持先“快速搭建框架”再“精细优化组件”，适配业务需求从粗到细的迭代过程。</td>
</tr>
<tr>
<td>数据规范性保障</td>
<td>后期组件和数据类型的调整，可确保数据录入、校验、分析的规范性（如数字字段的范围校验、日期字段的格式约束）。</td>
</tr>
</tbody>
</table>
<p>该方案将“数据导入的便捷性”与“表单组件的灵活性”结合，既解决了空白表单从零开始配置的繁琐问题，又满足了业务对数据类型和交互组件的个性化要求。</p>
<h2 id="数据分析"> 数据分析</h2>
<h3 id="临时分析-即席分析"> 临时分析(即席分析)</h3>
<p>点击<code>分析按钮</code>一键进入自助数据分析</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/form-data2analysis.gif" alt="" /></p>
<h3 id="创建数据集"> 创建数据集</h3>
<p>基于表单数据创建数据集，支持表单关联分析</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511101503747.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">以 iframe 形式嵌入看板</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/1-iframe-dashboard/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/1-iframe-dashboard/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h2 id="集成认证"> 集成认证</h2>
<p>为了页面访问安全，IBI支持一下形式的认证方式:</p>
<ul>
<li>通过看板分享生成的分享ID认证，参数：<code>shareid</code>，shareid包含看板id<code>boardId</code>信息</li>
<li>通过用户名和密码认证，参数：<code>userName</code>/<code>password</code>，password支持明文或者md5加密认证</li>
<li>通过jwt token认证，参数：<code>token</code></li>
</ul>
<div><p>认证检测优先级</p>
<p><code>token</code> &gt; <code>shareid</code> &gt; <code>用户名和密码</code></p>
</div>
<h2 id="pc端单看板集成"> PC端单看板集成</h2>
<p>单看板集成url地址格式如下</p>
<div><pre><code>http://ibi—ip:port/appname/render.html?[key=value]
</code></pre>
<div><span>1</span><br></div></div><p>在外部系统集成方面, 通过看板分享功能, 利用该功能可以生成一个外部能够访问到的链接, 操作如下:</p>
<blockquote>
<p>自由布局看板 → 分享 → 选择一个分享链接有效期限 →  点击 Add:</p>
</blockquote>
<p><img src="./../../assets/board/cn-board-share.gif" alt="" /></p>
<p>之后便可以在其他地方访问到这个看板, 通过这个链接访问的看板不带周边菜单栏和看板参数</p>
<h3 id="iframe-过滤参数传递"> IFrame 过滤参数传递</h3>
<blockquote>
<p>key 区分大小写，后面的解释不再赘述</p>
</blockquote>
<table>
<thead>
<tr>
<th>Key</th>
<th>描述</th>
<th>默认</th>
</tr>
</thead>
<tbody>
<tr>
<td>shareid</td>
<td>通过看板分享生成，shareid中包含看板id和分享实例生成时的看板参数状态</td>
<td></td>
</tr>
<tr>
<td>boardId</td>
<td>看板ID，使用shareid不需要传递boardId</td>
<td></td>
</tr>
<tr>
<td>showParam</td>
<td>全局控制是否显示看板上的参数栏，可选值：0/1, true/false;</td>
<td>true</td>
</tr>
<tr>
<td>hiddenPNames</td>
<td>控制参数栏中的指定参数隐藏，传递参数名数组， ['参数名 1','参数名 2']</td>
<td></td>
</tr>
<tr>
<td>showTitle</td>
<td>是否显示看板标题，可选值：0/1, true/false;</td>
<td>true</td>
</tr>
<tr>
<td>showExport</td>
<td>是否显示导出按钮</td>
<td>false</td>
</tr>
<tr>
<td>filters</td>
<td>控制看板参数的过滤内容，值格式为 JSON 对象</td>
<td></td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
<td>cn/en</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数会被解释为环境变量</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="参数详解"> 参数详解</h3>
<h4 id="showparam"> showParam</h4>
<p>全局控制是否显示看板上的参数栏，可选值：0/1, true/false; 不给值，默认为显示参数栏</p>
<div><pre><code>http://localhost:8088/render.html?shareid=N9SYIQ9r&amp;showParam=false
http://localhost:8088/render.html?shareid=N9SYIQ9r&amp;showParam=0
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230104160757.png" alt="" /></p>
<h4 id="hiddenpnames"> hiddenPNames</h4>
<p>控制参数栏中的指定参数隐藏，传递参数名数组, 如下面的请求可以把看板上名称为<code>用户</code>的参数隐藏，以防止用户修改,</p>
<div><pre><code>http://localhost:8088/render.html?shareid=N9SYIQ9r&amp;hiddenPNames=[&#39;用户&#39;]
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>参数名称单引号、双引号都能兼容</p>
</blockquote>
<h4 id="showtitle"> showTitle</h4>
<p>控制是否显示看板原始标题</p>
<div><pre><code>http://localhost:8088//render.html?shareid=N0zt6xJw&amp;showTitle=false#/
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230104160814.png" alt="" /></p>
<h4 id="showexport"> showExport</h4>
<div><pre><code>http://localhost:8088//render.html?shareid=N0zt6xJw&amp;showExport=true#/
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230104160830.png" alt="" /></p>
<h4 id="filters"> filters</h4>
<p>看板参数的状态可以通过传递一个 json 对象设定(一般用户可由外部集成系统代码生成)，具体格式如下：</p>
<div><pre><code><span>{</span>
    <span>"boardParams"</span><span>:</span> <span>[</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>"mpgxi01ev6k"</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"用户"</span><span>,</span>
            <span>"type"</span><span>:</span> <span>"="</span><span>,</span>
            <span>"values"</span><span>:</span> <span>[</span><span>"aaa"</span><span>,</span> <span>"bbb"</span><span>]</span>
        <span>}</span><span>,</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>"2khmtv1s63p"</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"用户名"</span><span>,</span>
            <span>"type"</span><span>:</span> <span>"="</span><span>,</span>
            <span>"values"</span><span>:</span> <span>[</span><span>]</span>
        <span>}</span>
    <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><ul>
<li>该 json 对象可以通过<code>URL参数工具</code>提取，用户根据参数值内容复杂程度决定是否进行 urlEncode 再传递
<img src="http://qiniu.ibidemo.cn/picgo/20230421090432.png" alt="" /></li>
<li>通过 id 与看板上的参数进行关联，关联不上则会被丢弃，filter项目中name属性为非必须属性，删除可以减少参数长度</li>
<li>type：不同的参数类型 type 值有所区别，设置前建议通过<code>URL参数工具</code>查看之后调试确认<div><pre><code><span>const</span> <span>EQ</span> <span>=</span> <span>'='</span><span>,</span>
    <span>NEQ</span> <span>=</span> <span>'≠'</span><span>,</span>
    <span>GT</span> <span>=</span> <span>'>'</span><span>,</span>
    <span>LT</span> <span>=</span> <span>'&lt;'</span><span>,</span>
    <span>GET</span> <span>=</span> <span>'≥'</span><span>,</span>
    <span>LET</span> <span>=</span> <span>'≤'</span><span>,</span>
    <span>LIKE</span> <span>=</span> <span>'like'</span><span>,</span>
    <span>NOT_LIKE</span> <span>=</span> <span>'not like'</span><span>,</span>
    <span>GEL</span> <span>=</span> <span>'(a,b]'</span><span>,</span>
    <span>EGL</span> <span>=</span> <span>'[a,b)'</span><span>,</span>
    <span>GL</span> <span>=</span> <span>'(a,b)'</span><span>,</span>
    <span>EGEL</span> <span>=</span> <span>'[a,b]'</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div></li>
</ul>
<table>
<thead>
<tr>
<th>参数形式</th>
<th>支持类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>通用过滤器</td>
<td>支持所有类型</td>
</tr>
<tr>
<td>日期范围</td>
<td>支持闭区间[a,b]</td>
</tr>
<tr>
<td>复选框, 下拉框</td>
<td>支持相等过滤 =</td>
</tr>
<tr>
<td>关键词输入</td>
<td>Like</td>
</tr>
</tbody>
</table>
<div><pre><code>http://host/render.html?shareid=N9SYIQ9r&amp;filters={&quot;boardParams&quot;:[{&quot;id&quot;:&quot;mpgxi01ev6k&quot;,&quot;name&quot;:&quot;用户&quot;,&quot;type&quot;:&quot;=&quot;,&quot;values&quot;:[&quot;aaa&quot;,&quot;bbb&quot;]},{&quot;id&quot;:&quot;2khmtv1s63p&quot;,&quot;name&quot;:&quot;用户名&quot;,&quot;type&quot;:&quot;=&quot;,&quot;values&quot;:[]}]}

// filters 调用encodeURIComponent之后
http://host/render.html?shareid=N9SYIQ9r&amp;filters=filters=%7B%22boardParams%22%3A%5B%7B%22id%22%3A%22mpgxi01ev6k%22%2C%22name%22%3A%22%E7%94%A8%E6%88%B7%22%2C%22type%22%3A%22%3D%22%2C%22values%22%3A%5B%22aaa%22%2C%22bbb%22%5D%7D%2C%7B%22id%22%3A%222khmtv1s63p%22%2C%22name%22%3A%22%E7%94%A8%E6%88%B7%E5%90%8D%22%2C%22type%22%3A%22%3D%22%2C%22values%22%3A%5B%5D%7D%5D%7D
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h4 id="locale"> locale</h4>
<p>系统菜单项多语言支持</p>
<div><pre><code>http://localhost:8088//render.html?shareid=N0zt6xJw&amp;showExport=true&amp;locale=en#/
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230104160850.png" alt="" /></p>
<h2 id="pc端单个图表集成"> PC端单个图表集成</h2>
<p>单个图表集成url地址格式如下</p>
<div><p>集成认证</p>
<p>认证信息推荐token认证</p>
</div>
<div><pre><code>http://ibi—ip:port/appname/render.html?widgetId=xxx
</code></pre>
<div><span>1</span><br></div></div><h2 id="pc端单个复杂报表集成"> PC端单个复杂报表集成</h2>
<p>单个复杂报表集成url地址格式如下</p>
<div><p>集成认证</p>
<p>认证方式推荐token认证</p>
</div>
<div><pre><code>http://ibi—ip:port/appname/render.html?reportId=xxx
</code></pre>
<div><span>1</span><br></div></div><h2 id="pc端主题分析集成"> PC端主题分析集成</h2>
<p>主题分析集成格式如下，id参数为主题分析的id</p>
<div><p>集成认证</p>
<p>认证方式推荐token认证</p>
</div>
<div><pre><code>http://ibi—ip:port/appname/mini-app.html?id=appId
</code></pre>
<div><span>1</span><br></div></div><h2 id="pc端一次集成多个网格看板"> PC端一次集成多个网格看板</h2>
<p>集成url地址格式如下</p>
<div><pre><code>http://ibi—ip:port/appname/render-lite.html?boards=[json数组]&amp;其他变量定义
</code></pre>
<div><span>1</span><br></div></div><p><img src="./../../assets/board/cn-iframe-boards.png" alt="" /></p>
<h3 id="url-变量解释"> URL 变量解释</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td>  多看板集成不支持shareid</td>
</tr>
<tr>
<td>boards</td>
<td>要集成的多个看板对象定义</td>
</tr>
<tr>
<td>baseServerUrl</td>
<td>重定向服务端地址，使用场景把前端作为一个独立模块分布式部署的场景可以使用</td>
</tr>
<tr>
<td>boardStyle</td>
<td>多看板集成影响看板展示区域样式</td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
<h3 id="boards"> boards</h3>
<p>boards 为一个JSON数组字符串，里面每个成员对应集成的一个标签页（一个看板），接受的传参与单看板集成基本一致</p>
<div><pre><code>[
    {
        showParam: true,
        showExport: true,
        title: &#39;第一个看板&#39;,
        boardId: 63,
        hiddenParamNames: [],
        filters: {&quot;boardParams&quot;:[{&quot;id&quot;:&quot;5chiv3mmalw&quot;,&quot;name&quot;:&quot;国家&quot;,&quot;type&quot;:&quot;=&quot;,&quot;values&quot;:[&quot;美国&quot;]}]},
        variables: {
          country: &#39;美国&#39;
        }
    },
    ...
]
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><div><p>Tips</p>
<p>该集成链接一般由用户读取 IBI 元数据之后，通过代码自动生成</p>
</div>
<h3 id="boardstyle"> boardStyle</h3>
<p>看板展示区域的样式，为encode之后的css字符串</p>
<div><pre><code>http://localhost:8088/render-lite.html?userName=peter&amp;password=xxxboardStyle=background-color%3Ared
</code></pre>
<div><span>1</span><br></div></div><h2 id="大屏集成url"> 大屏集成url</h2>
<div><pre><code>http://ibi—ip:port/appname/cockpit.html?boardId=id&amp;其他变量定义
</code></pre>
<div><span>1</span><br></div></div><h3 id="url-变量解释-2"> URL 变量解释</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td></td>
</tr>
<tr>
<td>boardId</td>
<td>要集成的多个看板对象定义, 分享链接集成不需要boardId</td>
</tr>
<tr>
<td>filters</td>
<td></td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
<h2 id="大屏组集成传参"> 大屏组集成传参</h2>
<p>通过分享功能生成集成地址</p>
<div><pre><code>http://ibi—ip:port/appname/cockpit-group.html?boardId=大屏组ID&amp;其他变量定义
</code></pre>
<div><span>1</span><br></div></div><h3 id="url-变量解释-3"> URL 变量解释</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td>shareid, username/password, token, 通过大屏组分享生成</td>
</tr>
<tr>
<td>boardId</td>
<td>通过shareid集成不需要传递该参数</td>
</tr>
<tr>
<td>filters</td>
<td>大屏组需要传递多个看板参数，所以格式和单看板参数有所不同具体参考下方说明</td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
<h3 id="filters参数格式"> filters参数格式</h3>
<p>可以通过分享窗口中的<code>URL参数工具</code>提取生成, filter加入url中需要encode，参数项目中的name属性可以不要，参数匹配通过id关联</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230420185627.png" alt="" /></p>
<div><pre><code><span>{</span>
    <span>boardParams</span><span>:</span> <span>[</span><span>{</span>
        <span>boardId</span><span>:</span> xxx<span>,</span>
        <span>filters</span><span>:</span> <span>[</span><span>{</span><span>"id"</span><span>:</span><span>"5chiv3mmalw"</span><span>,</span><span>"name"</span><span>:</span><span>"国家"</span><span>,</span><span>"type"</span><span>:</span><span>"="</span><span>,</span><span>"values"</span><span>:</span><span>[</span><span>"美国"</span><span>]</span><span>}</span><span>]</span>
    <span>}</span><span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="移动端单看板集成"> 移动端单看板集成</h2>
<div><pre><code>http://ibi—ip:port/mobile部署地址/render.html?boards=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td></td>
</tr>
<tr>
<td>boardId</td>
<td>通过shareid集成不需要传递该参数</td>
</tr>
<tr>
<td>filters</td>
<td></td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
<h2 id="移动端多看板集成"> 移动端多看板集成</h2>
<div><pre><code>http://ibi—ip:port/mobile部署地址/render.html?boards=xxx
</code></pre>
<div><span>1</span><br></div></div><h3 id="url-变量解释-4"> URL 变量解释</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td>  多看板集成不支持shareid</td>
</tr>
<tr>
<td>boards</td>
<td>要集成的多个看板对象定义, 与PC端多看板集成一致, </td>
</tr>
<tr>
<td>locale</td>
<td>多语言支持，只会影响系统菜单项</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
<h2 id="移动端专题分析集成"> 移动端专题分析集成</h2>
<div><pre><code>http://ibi—ip:port/mini-app.html?id=appId
</code></pre>
<div><span>1</span><br></div></div><h3 id="url-变量解释-5"> URL 变量解释</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>认证</td>
<td>  不支持shareid</td>
</tr>
<tr>
<td>id</td>
<td>专题分析id</td>
</tr>
<tr>
<td>其他参数</td>
<td>其他参数可以用于全局变量，局部变量variables, 可以覆盖全局变量</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">多看板集成-父页面异步消息交互</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/2-passiveBoards/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/2-passiveBoards/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h2 id="_0-流程概览"> 0 流程概览</h2>
<ol>
<li>url里面传入一个参数waitMsg=true，标记不要直接加载看板等消息</li>
<li>iframe所有相关资源加载好之后，postMessage给父页面，消息内容为‘ready’</li>
<li>父页面接到消息之后，再把之前所有在url里面传递的数据传给iframe</li>
</ol>
<h2 id="常规多看板集成"> 常规多看板集成</h2>
<h3 id="_1-开启异步交互模式"> 1 开启异步交互模式</h3>
<div><pre><code>url传参waitMessage=true
http://ip:port[/ibi]/render-lite.html?waitMessage=true
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="_2-等待iframe资源加载完毕消息"> 2 等待iframe资源加载完毕消息</h3>
<p>当集成iframe展示看板需要的js、css资源加载完毕之后，iframe会向父页面发送加载完毕消息,加载完毕消息为'ready'字符串</p>
<div><pre><code>window<span>.</span><span>addEventListener</span><span>(</span><span>'message'</span><span>,</span> 
    <span>function</span> <span>(</span><span>event</span><span>)</span> <span>{</span>
        <span>if</span> <span>(</span>event<span>.</span>data <span>==</span> <span>'ready'</span><span>)</span> <span>{</span>
            vm<span>.</span><span>loadBoard</span><span>(</span><span>)</span><span>;</span>
        <span>}</span>
    <span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="_3-向iframe发送初次加载看板所需数据"> 3 向iframe发送初次加载看板所需数据</h3>
<p>消息格式为js对象，需要有type='loadBoard'属性，该消息只会在iframe中触发一次</p>
<table>
<thead>
<tr>
<th>属性值</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>type</td>
<td>'loadBoard'，必须值，标识该消息类型</td>
</tr>
<tr>
<td>token</td>
<td>必须值，jwt token, 用于权限认证</td>
</tr>
<tr>
<td>userName</td>
<td>必须值，ibi用户名</td>
</tr>
<tr>
<td>password</td>
<td>必须值，ibi密码</td>
</tr>
<tr>
<td>boards</td>
<td>必须值，指定加载看板</td>
</tr>
<tr>
<td>baseServerUrl</td>
<td>可选值，切换ibi服务端地址</td>
</tr>
<tr>
<td>height</td>
<td>可选值，iframe页面内容器高度，为css style字符串</td>
</tr>
<tr>
<td>background</td>
<td>可选值，看板容器背景色</td>
</tr>
<tr>
<td>locale</td>
<td>可选值，国际化语言，cn/en</td>
</tr>
</tbody>
</table>
<div><pre><code><span>const</span> iframe <span>=</span> document<span>.</span><span>getElementById</span><span>(</span><span>'frm'</span><span>)</span><span>;</span>
iframe<span>.</span>contentWindow<span>.</span><span>postMessage</span><span>(</span><span>{</span>
    <span>type</span><span>:</span> <span>'loadBoard'</span><span>,</span>
    <span>boards</span><span>:</span> <span>[</span>
                <span>{</span><span>boardId</span><span>:</span> <span>1</span><span>,</span> <span>title</span><span>:</span> <span>"表格看板2"</span><span>}</span><span>,</span>
                <span>{</span><span>boardId</span><span>:</span> <span>2</span><span>,</span> <span>title</span><span>:</span> <span>"综合看板2"</span><span>}</span><span>,</span>
            <span>]</span><span>,</span>
    <span>userName</span><span>:</span> <span>'peter'</span><span>,</span>
    <span>password</span><span>:</span> <span>'peter'</span><span>,</span>
    <span>// token: 'xxx',</span>
    <span>background</span><span>:</span> <span>'white'</span><span>,</span>
    <span>height</span><span>:</span> <span>'calc(100vh - 40px)'</span><span>,</span>
<span>}</span><span>,</span> <span>'*'</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h3 id="_4-更新boards数据"> 4 更新boards数据</h3>
<p>消息格式为js对象，boards为新看板数据</p>
<div><pre><code><span>function</span> <span>updateBoard</span><span>(</span><span>)</span> <span>{</span>
    <span>const</span> iframe <span>=</span> document<span>.</span><span>getElementById</span><span>(</span><span>'frm'</span><span>)</span><span>;</span>
    iframe<span>.</span>contentWindow<span>.</span><span>postMessage</span><span>(</span><span>{</span>
        <span>type</span><span>:</span> <span>'updateBoard'</span><span>,</span>
        <span>boards</span><span>:</span> <span>[</span>
            <span>{</span><span>boardId</span><span>:</span> <span>3</span><span>,</span> <span>title</span><span>:</span> <span>"地图合集"</span><span>}</span><span>,</span>
            <span>{</span><span>boardId</span><span>:</span> <span>4</span><span>,</span> <span>title</span><span>:</span> <span>"其他图形综合看板"</span><span>}</span><span>,</span>
        <span>]</span><span>,</span>
    <span>}</span><span>,</span> <span>'*'</span><span>)</span><span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h3 id="_5-完整实例"> 5 完整实例</h3>
<div><pre><code>&lt;template&gt;
    &lt;div style=&quot;height: calc(100vh - 160px);overflow: hidden&quot;&gt;
        &lt;button @click=&quot;updateBoard&quot;&gt;UpdateBoard1&lt;/button&gt;
        &lt;button @click=&quot;updateBoard2&quot;&gt;UpdateBoard2&lt;/button&gt;
        &lt;iframe id=&quot;frm&quot; :src=&quot;shareUrl&quot; style=&quot;width:100%; height: 100vh;border: none&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;

    export default {
        name: &#39;demo-iframe-tab2&#39;,
        props: {},
        components: {},
        data() {
            return {
                boards: [
                    {boardId: 1, title: &quot;表格看板&quot;},
                    {boardId: 9, title: &quot;综合看板&quot;},
                ]
            }
        },
        computed: {
            shareUrl() {
                let ret = `http://localhost:8026/cboard/render-lite.html?waitMessage=true`;
                return ret;
            }
        },
        methods: {
            loadBoard() {
                const iframe = document.getElementById(&#39;frm&#39;);
                iframe.contentWindow.postMessage({
                    type: &#39;loadBoard&#39;,
                    boards: this.boards,
                    userName: &#39;peter&#39;,
                    password: &#39;peter&#39;,
                    background: &#39;white&#39;,
                    height: &#39;calc(100vh - 40px)&#39;,
                }, &#39;*&#39;);
            },
            updateBoard() {
                const iframe = document.getElementById(&#39;frm&#39;);
                iframe.contentWindow.postMessage({
                    type: &#39;updateBoard&#39;,
                    boards: [
                        {boardId: 1, title: &quot;表格看板2&quot;},
                        {boardId: 2, title: &quot;综合看板2&quot;},
                    ],
                }, &#39;*&#39;);
            },
            updateBoard2() {
                const iframe = document.getElementById(&#39;frm&#39;);
                iframe.contentWindow.postMessage({
                    type: &#39;updateBoard&#39;,
                    boards: [
                        {boardId: 3, title: &quot;地图合集&quot;},
                        {boardId: 4, title: &quot;其他图形综合看板&quot;},
                    ],
                }, &#39;*&#39;);
            },
        },
        mounted() {
            let vm = this;
            // 等待iframe资源准备完毕立即发送加载看板消息
            window.addEventListener(&#39;message&#39;, function (event) {
                if (event.data == &#39;ready&#39;) {
                    vm.loadBoard();
                }
            });
        }
    }
&lt;/script&gt;

&lt;style&gt;
&lt;/style&gt;

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br><span>72</span><br><span>73</span><br><span>74</span><br><span>75</span><br><span>76</span><br></div></div><h2 id="专题分析集成"> 专题分析集成</h2>
<p>专题分析也是一种多看板组合形式，相较普通的多看板集成，专题分析有如下优势:</p>
<ul>
<li>支持树形目录</li>
<li>支持多级目录结构</li>
<li>支持风格调整</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121142333.png" alt="" /></p>
<h3 id="_1-页面集成url规范"> 1 页面集成url规范</h3>
<div><pre><code>url传参waitMessage=true
http://&lt;ip&gt;[:port][/ibi]/mini-app.html?waitMessage=true
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="_2-等待iframe资源加载完毕消息-2"> 2 等待iframe资源加载完毕消息</h3>
<p>当集成iframe展示看板需要的js、css资源加载完毕之后，iframe会向父页面发送加载完毕消息,加载完毕消息为'ready'字符串</p>
<div><pre><code>window<span>.</span><span>addEventListener</span><span>(</span><span>'message'</span><span>,</span> 
    <span>function</span> <span>(</span><span>event</span><span>)</span> <span>{</span>
        <span>if</span> <span>(</span>event<span>.</span>data <span>==</span> <span>'ready'</span><span>)</span> <span>{</span>
           <span>const</span> iframe <span>=</span> document<span>.</span><span>getElementById</span><span>(</span><span>'frm'</span><span>)</span><span>;</span>
                iframe<span>.</span>contentWindow<span>.</span><span>postMessage</span><span>(</span><span>{</span>
                    <span>type</span><span>:</span> <span>'load'</span><span>,</span>
                    <span>miniApp</span><span>:</span> <span>{</span>
                        <span>// 专题分析结构</span>
                    <span>}</span><span>,</span>
                    <span>token</span><span>:</span> <span>'xxx'</span><span>,</span> <span>// 也可以是userName + password</span>
                <span>}</span><span>,</span> <span>'*'</span><span>)</span><span>;</span> 
        <span>}</span>
    <span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h3 id="_3-更新专题"> 3 更新专题</h3>
<div><pre><code><span>const</span> iframe <span>=</span> document<span>.</span><span>getElementById</span><span>(</span><span>'frm'</span><span>)</span><span>;</span>
iframe<span>.</span>contentWindow<span>.</span><span>postMessage</span><span>(</span><span>{</span>
    <span>type</span><span>:</span> <span>'update'</span><span>,</span>
    <span>miniApp</span><span>:</span> <span>{</span>
        <span>// 专题分析结构</span>
    <span>}</span><span>,</span>
<span>}</span><span>,</span> <span>'*'</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h3 id="_4-专题结构定义"> 4 专题结构定义</h3>
<div><pre><code><span>const</span> miniApp <span>=</span> <span>{</span>
    <span>config</span><span>:</span> <span>{</span>
        <span>navMode</span><span>:</span> <span>'left'</span><span>,</span> <span>// 导航栏位置，left/top</span>
        <span>topCenter</span><span>:</span> <span>false</span><span>,</span> <span>// navMode为top时是否居中</span>
        <span>header</span><span>:</span> <span>{</span>
            <span>img</span><span>:</span> <span>{</span>
                <span>show</span><span>:</span> <span>true</span><span>,</span> <span>// 是否显示logo, 此处的logo与系统的logo一致</span>
                <span>height</span><span>:</span> <span>32</span><span>,</span> <span>// logo</span>
            <span>}</span><span>,</span>
            <span>title</span><span>:</span> <span>{</span>
                <span>name</span><span>:</span> <span>'专题名称'</span><span>,</span>
            <span>}</span><span>,</span>
            <span>backgroundColor</span><span>:</span> <span>null</span><span>,</span>
        <span>}</span><span>,</span>
        <span>nodes</span><span>:</span> <span>[</span>
            <span>{</span>
                <span>layoutType</span><span>:</span> <span>'freelayout'</span><span>,</span>
                <span>label</span><span>:</span> <span>'节点名称1'</span><span>,</span>
                <span>id</span><span>:</span> <span>231019110345677</span><span>,</span>
                <span>type</span><span>:</span> <span>'board'</span><span>,</span>
                <span>sid</span><span>:</span> <span>'board-s3dsmfki9lf'</span><span>,</span>
            <span>}</span><span>,</span>
            <span>{</span>
                <span>layoutType</span><span>:</span> <span>'freelayout'</span><span>,</span>
                <span>label</span><span>:</span> <span>'节点名称1'</span><span>,</span>
                <span>id</span><span>:</span> <span>220321175747615</span><span>,</span>
                <span>type</span><span>:</span> <span>'board'</span><span>,</span>
                <span>sid</span><span>:</span> <span>'board-8bdxzbfwuq8'</span><span>,</span>
                <span>isDefault</span><span>:</span> <span>true</span><span>,</span>
            <span>}</span>
        <span>]</span><span>,</span>
        <span>navMode</span><span>:</span> <span>'left'</span><span>,</span>
        <span>topCenter</span><span>:</span> <span>false</span><span>,</span>
    <span>}</span>
<span>}</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">IBI功能模块整合到外部系统</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/5-module-integrate/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/5-module-integrate/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="页面结构"> 页面结构</h2>
<p>本章节介绍如何把IBI中的各个模块以iframe的形式集成到外部系统, 在开始之前我们先来了解一下IBI页面结构，如下图所示:</p>
<ul>
<li>Header: 头部，用于展示IBI的各个功能模块菜单</li>
<li>Footer: 页脚，显示公司、版权、版本、License信息</li>
<li>Body: 各个模块具体内容，也就是后续我们需要整合到外部系统的页面部分</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230522105543.png" alt="" /></p>
<h3 id="整合地址结构"> 整合地址结构</h3>
<div><pre><code>${baseUrl}?bodyOnly=true&amp;token=${token}#${moduleRoute}[?模块参数]
</code></pre>
<div><span>1</span><br></div></div><div><pre><code><span><span><span>&lt;</span>iframe</span> <span>id</span><span><span>=</span><span>"</span>frm<span>"</span></span>
        <span>:src</span><span><span>=</span><span>"</span>url<span>"</span></span>
        <span><span>style</span><span><span>=</span><span>"</span><span><span>width</span><span>:</span> 100%<span>;</span> <span>height</span><span>:</span> 100%<span>;</span><span>border</span><span>:</span> none</span><span>"</span></span></span><span>></span></span>
<span><span><span>&lt;/</span>iframe</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><ul>
<li>baseUrl: ibi应用地址，如：https://192.168.0.11:8026/cboard</li>
<li>应用参数
<ul>
<li>bodyOnly： 仅展示Body部分, 隐藏Header和Footer</li>
<li>token: 认证token, 用于IBI访问认证，如果当前访问没有传递token，则会跳转到登录页面，访问一次之后token会缓存到浏览器</li>
<li>showList: 在数据源、数据集模块是否展示资源树</li>
<li>其他url参数会被解析为环境变量</li>
</ul>
</li>
<li>moduleRoute模块路由: 指定当前整合的页面模块</li>
<li>模块参数(哈希参数)：传递到模块的参数区别于</li>
</ul>
<div><p>注意事项</p>
<ul>
<li>如果ibi部署的地址没有context，即通过<code>https://192.168.0.11:8026/</code>即可直接访问，<code>baseUrl</code>也不需要<code>/cboard</code></li>
<li>url参数的最后一个参数与<code>#</code>号直接不要有斜杠，否则会被解析为参数的一部分，如: <code>https://192.168.0.11:8026/cboard?bodyOnly=true/#/...</code>， bodyOnly的值为<code>true/</code>而不是<code>true</code>导致参数传递失败</li>
<li>注意前面的baseUrl+url参数与模块路由之间的<code>#</code>不能缺失</li>
</ul>
</div>
<p>下图为整合自助分析模板到外部系统的示例截图</p>
<ul>
<li>图中红色部分IBI模块，其余部分外部系统</li>
<li>在外部点击主题数据菜单，分析模块能自动切换数据集</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210727184032.png" alt="" /></p>
<h2 id="各模块设计器页面路由"> 各模块设计器页面路由</h2>
<p>路由页面参数也可以通过浏览器地址对照</p>
<h3 id="数据源"> 数据源</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/datasource?id=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>数据源id，传递参数或者变更id参数，内容可以切换</td>
</tr>
</tbody>
</table>
<h3 id="数据集"> 数据集</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/dataset?id=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>数据集id，传递参数或者变更id参数，内容可以切换</td>
</tr>
</tbody>
</table>
<h3 id="自助分析"> 自助分析</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/widget?id=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>图表id，传递参数或者变更id参数，内容可以切换</td>
</tr>
<tr>
<td>datasetId</td>
<td>数据集id，当没有传递图表id，仅传递数据集id时，切换为该数据集的分析模式</td>
</tr>
</tbody>
</table>
<h3 id="复杂报表"> 复杂报表</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/report?id=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>报表id，传递参数或者变更id参数，内容可以切换</td>
</tr>
</tbody>
</table>
<h3 id="网格看板"> 网格看板</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/freelayout?boardId=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>boardId</td>
<td>看板id，传递参数或者变更id参数，内容可以切换</td>
</tr>
</tbody>
</table>
<h3 id="大屏"> 大屏</h3>
<div><pre><code>${baseUrl}?bodyOnly=true#/config/cockpit?boardId=xxx
</code></pre>
<div><span>1</span><br></div></div><table>
<thead>
<tr>
<th>参数</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>boardId</td>
<td>看板id，传递参数或者变更id参数，内容可以切换</td>
</tr>
</tbody>
</table>
<h2 id="消息交互"> 消息交互</h2>
<h3 id="资源操作postmessage消息-ibi发送消息给外部页面"> 资源操作postMessage消息(IBI发送消息给外部页面)</h3>
<div><pre><code>window.parent.postMessage({
    from: &#39;IBI&#39;,
    type: &#39;operation&#39;,
    ops, // insert/update/delete
    module, // datasource/dataset/widget/report/board
    id,
}, &quot;*&quot;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h3 id="资源编辑postmessage消息-ibi发送消息给外部页面"> 资源编辑postMessage消息(IBI发送消息给外部页面)</h3>
<p>资源首次被修改时发送一次消息给外部</p>
<div><pre><code>window.parent.postMessage({
    from: &#39;IBI&#39;,
    type: &#39;change&#39;,
    id, // 新建状态下没有id
}, &quot;*&quot;);
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h3 id="接收保存消息-外部页面传消息给ibi页面"> 接收保存消息(外部页面传消息给IBI页面)</h3>
<div><pre><code>const iframe = document.getElementById(&#39;frm&#39;);
iframe.contentWindow.postMessage(&#39;save&#39;, &#39;*&#39;);
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Vue2组件化集成</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/3-components/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/3-components/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="安装依赖"> 安装依赖</h2>
<ul>
<li>项目与关键模块版本</li>
</ul>
<div><pre><code><span>{</span>
  <span>"vue"</span><span>:</span> <span>"^2.6.14"</span><span>,</span>
  <span>"vue-i18n"</span><span>:</span> <span>"^8.28.2"</span><span>,</span>
  <span>"vuex"</span><span>:</span> <span>"^3.0.1"</span><span>,</span>
  <span>"axios"</span><span>:</span> <span>"^1.2.0"</span><span>,</span>
  <span>"element-ui"</span><span>:</span> <span>"^2.15.12"</span><span>,</span>
  <span>"exceljs"</span><span>:</span> <span>"^4.3.0"</span><span>,</span>
  <span>"lodash"</span><span>:</span> <span>"^4.17.21"</span><span>,</span>
  <span>"moment"</span><span>:</span> <span>"^2.29.4"</span><span>,</span>
  <span>"numbro"</span><span>:</span> <span>"^2.3.6"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><ul>
<li>安装第三方npm依赖</li>
</ul>
<div><pre><code><span>npm</span> <span>install</span> element-ui axios numbro moment 
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>如果你的项目中已经存在的依赖可以不用重复安装</p>
</blockquote>
<details><summary>ElementUI按需引入</summary>
<ul>
<li>如果您项目中没有用到明细表格，可以不引入element-ui</li>
<li>如果您项目中使用的是其他的ui库，又需要使用明细表格，可以按需导入明细表依赖的组件</li>
</ul>
<p>借助 babel-plugin-component，我们可以只引入需要的组件，以达到减小项目体积的目的。
首先，安装 babel-plugin-component：</p>
<div><pre><code><span>npm</span> <span>install</span> babel-plugin-component <span>-D</span>
</code></pre>
<div><span>1</span><br></div></div><p>然后，将 .babelrc 修改为：</p>
<div><pre><code><span>{</span>
  <span>"presets"</span><span>:</span> <span>[</span>
    <span>[</span>
      <span>"es2015"</span><span>,</span>
      <span>{</span>
        <span>"modules"</span><span>:</span> <span>false</span>
      <span>}</span>
    <span>]</span>
  <span>]</span><span>,</span>
  <span>"plugins"</span><span>:</span> <span>[</span>
    <span>[</span>
      <span>"component"</span><span>,</span>
      <span>{</span>
        <span>"libraryName"</span><span>:</span> <span>"element-ui"</span><span>,</span>
        <span>"styleLibraryName"</span><span>:</span> <span>"theme-chalk"</span>
      <span>}</span>
    <span>]</span>
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br></div></div><div><pre><code><span>import</span> <span>{</span>
    Table<span>,</span>
    TableColumn<span>,</span>
    Loading<span>,</span>
    Row<span>,</span>
    Pagination<span>,</span>
    Popover<span>,</span>
    Input<span>,</span>
    Select<span>,</span>
    Option<span>,</span>
    CheckboxGroup<span>,</span>
    Checkbox
<span>}</span> <span>from</span> <span>'element-ui'</span><span>;</span>

<span>[</span>Table<span>,</span> TableColumn<span>,</span> Loading<span>,</span> Row<span>,</span> Pagination<span>,</span> Popover<span>,</span> Input<span>,</span> Select<span>,</span> Option<span>,</span> CheckboxGroup<span>,</span> Checkbox<span>]</span><span>.</span><span>forEach</span><span>(</span><span>e</span> <span>=></span> Vue<span>.</span><span>use</span><span>(</span>e<span>)</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div></details>
<details><summary>IBI使用的element-ui定制化说明</summary>
<p>IBI对element-ui做了一些个性化定制工作，如：明细表分页按钮样式配置、颜色拾取器风格、各种表单样式属性等，但基本不影响原生功能，
如果您需要整合之后呈现的效果与IBI一致可以把</p>
<div><pre><code><span>import</span> ElementUI <span>from</span> <span>'element-ui'</span><span>;</span>

Vue<span>.</span><span>use</span><span>(</span>ElementUI<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>修改为</p>
<div><pre><code><span>import</span> ChuguoUI <span>from</span> <span>'chuguo-ui'</span><span>;</span>

Vue<span>.</span><span>use</span><span>(</span>ChuguoUI<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div></details>
<ul>
<li>安装IBI npm依赖</li>
</ul>
<div><pre><code>npm install @chuguotech/ibi-vue2-comp
</code></pre>
<div><span>1</span><br></div></div><ul>
<li>其他外挂依赖</li>
</ul>
<div><pre><code>$ tree -L 1 vendor
vendor
├── echarts
├── font-awesome-4.7.0
├── jQuery
├── jQueryUI
├── jquery-contextmenu
└── exceljs.min.js

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h2 id="demo项目地址"> Demo项目地址</h2>
<p>如果你使用的vue-cli创建的项目，可以参考下面的demo项目</p>
<p><a href="https://gitee.com/cboard_beta/ibi-vue2-comp-use" target="_blank" rel="noopener noreferrer">Demo项目地址</a></p>
<h2 id="开始"> 开始</h2>
<h3 id="组件注册"> 组件注册</h3>
<div><pre><code><span>import</span> IbiComp <span>from</span> <span>'@chuguotech/ibi-vue2-comp'</span><span>;</span>
<span>import</span> ElementUI <span>from</span> <span>'element-ui'</span><span>;</span>
<span>import</span> <span>'element-ui/lib/theme-chalk/index.css'</span><span>;</span>

<span>// ElementUI</span>
Vue<span>.</span><span>use</span><span>(</span>ElementUI<span>)</span><span>;</span>

<span>// 安装IbiComp</span>
Vue<span>.</span><span>use</span><span>(</span>IbiComp<span>,</span> <span>{</span>
    <span>baseServerUrl</span><span>:</span> <span>'http://localhost:8026/cboard'</span> <span>// IBI 服务地址</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><h3 id="整合外部vue-i18n"> 整合外部vue-i18n</h3>
<p>如果您的项目中已经存在i18n国际化配置，可以使用下面办法融合ibi国际化配置</p>
<div><pre><code><span>import</span> Vue <span>from</span> <span>'vue'</span>
<span>import</span> VueI18n <span>from</span> <span>'vue-i18n'</span><span>;</span>
<span>import</span> <span>{</span> enLocale<span>,</span> zhLocale <span>}</span> <span>from</span> <span>'@chuguotech/ibi-vue2-comp'</span>

<span>const</span> messages <span>=</span> <span>{</span>
    <span>en</span><span>:</span> <span>{</span>
        <span>...</span>enLocale<span>,</span>
        <span>message</span><span>:</span> <span>{</span>
            <span>hello</span><span>:</span> <span>'hello world'</span>
        <span>}</span>
    <span>}</span><span>,</span>
    <span>cn</span><span>:</span> <span>{</span>
        <span>...</span>zhLocale<span>,</span>
        <span>message</span><span>:</span> <span>{</span>
            <span>hello</span><span>:</span> <span>'你好世界'</span>
        <span>}</span>
    <span>}</span>
<span>}</span><span>;</span>

Vue<span>.</span><span>use</span><span>(</span>VueI18n<span>)</span><span>;</span>

<span>const</span> i18n <span>=</span> <span>new</span> <span>VueI18n</span><span>(</span><span>{</span>
    <span>locale</span><span>:</span> <span>'cn'</span><span>,</span> <span>// 设置地区</span>
    messages<span>,</span> <span>// 设置地区信息</span>
<span>}</span><span>)</span><span>;</span>


Vue<span>.</span><span>use</span><span>(</span>IbiComp<span>,</span> <span>{</span>
    <span>baseServerUrl</span><span>:</span> <span>'http://localhost:8026/cboard'</span> <span>// IBI 服务地址</span>
    i18n <span>//注册IbiComps时传入i18n对象</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div><h3 id="整合外部vuex"> 整合外部Vuex</h3>
<p>如果您的项目中已经存在Vuex, 可以用下面的办法混入ibiStore模块</p>
<div><pre><code><span>import</span> Vue <span>from</span> <span>'vue'</span><span>;</span>
<span>import</span> Vuex <span>from</span> <span>'vuex'</span><span>;</span>
<span>import</span> <span>{</span> ibiStore <span>}</span> <span>from</span> <span>'@chuguotech/ibi-vue2-comp'</span><span>;</span>

Vue<span>.</span><span>use</span><span>(</span>Vuex<span>)</span><span>;</span>

<span>const</span> store <span>=</span> Vuex<span>.</span><span>Store</span><span>(</span><span>{</span>
    <span>state</span><span>:</span> <span>{</span>
        <span>...</span> <span>// 您的项目中原有啊Vuex定义</span>
    <span>}</span><span>,</span>
    <span>modules</span><span>:</span> <span>{</span>
        <span>...</span>ibiStore<span>.</span>modules <span>// 混入ibiStore模块</span>
    <span>}</span>
<span>}</span><span>)</span><span>;</span>

Vue<span>.</span><span>use</span><span>(</span>IbiComp<span>,</span> <span>{</span>
    <span>baseServerUrl</span><span>:</span> <span>'http://localhost:8026/cboard'</span> <span>// IBI 服务地址</span>
    store <span>//注册IbiComps时传入store对象</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br></div></div><h2 id="ibichart组件"> IbiChart组件</h2>
<p>用来展示IBI中的所有图表</p>
<ul>
<li>支持图表类型包含：交叉表、ECharts图表、KPI、明细表</li>
<li>支持参数配置响应</li>
<li>支持联动事件</li>
<li>支持表格数据下载</li>
</ul>
<div><pre><code><span><span><span>&lt;</span>ibi-chart</span>
        <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
        <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h3 id="认证"> 认证</h3>
<p>我们知道访问IBI中的资源需要权限认证，IbiChart组件支持以下认证方式</p>
<ul>
<li>用户名密码props传递认证</li>
<li>SDK API统一认证</li>
<li>IBI Token认证</li>
</ul>
<h4 id="用户名密码props传递认证"> 用户名密码props传递认证</h4>
<p>对于安全性要求不高的整合可以使用用户名密码的形式认证，认证用户名和密码可以通过表单动态传入，比如在展示图表之前让用户交互式传入用户名密码</p>
<div><pre><code><span><span><span>&lt;</span>ibi-chart</span>
        <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
        <span>username</span><span><span>=</span><span>"</span>xxx<span>"</span></span>
        <span>password</span><span><span>=</span><span>"</span>xxx<span>"</span></span>
        <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h4 id="sdk-api统一认证"> SDK API统一认证</h4>
<p>在图表加载之前认证一次即可，</p>
<div><pre><code>import IbiComp, { cboardCommon } from '@chuguotech/ibi-vue2-comp';

cboardCommon.loginService.auth('xxx', 'xxx').then(response => {
  const {valid} = response.data;
  if (valid) {
    new Vue({
      i18n,
      store,
      router,
      render: h => h(App),
    }).$mount('#app')
  }
});

// 后续组件加载不需要传入认证信息

<span><span><span>&lt;</span>ibi-chart</span>
    <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
    <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br></div></div><h4 id="token认证"> Token认证</h4>
<p>需要传入IBI认可的Token</p>
<div><pre><code><span><span><span>&lt;</span>ibi-chart</span>
        <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
        <span>token</span><span><span>=</span><span>"</span>xxx<span>"</span></span>
        <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="参数"> 参数</h3>
<div><pre><code><span><span><span>&lt;</span>div</span><span>></span></span>
<span><span><span>&lt;</span>el-select</span> <span>v-model</span><span><span>=</span><span>"</span>params[0].values<span>"</span></span> <span>multiple</span><span>></span></span>
    <span><span><span>&lt;</span>el-option</span> <span>value</span><span><span>=</span><span>"</span>Mexico<span>"</span></span><span>></span></span><span><span><span>&lt;/</span>el-option</span><span>></span></span>
    <span><span><span>&lt;</span>el-option</span> <span>value</span><span><span>=</span><span>"</span>Canada<span>"</span></span><span>></span></span><span><span><span>&lt;/</span>el-option</span><span>></span></span>
<span><span><span>&lt;/</span>el-select</span><span>></span></span>
<span><span><span>&lt;</span>el-button</span> <span>@click</span><span><span>=</span><span>"</span>query<span>"</span></span><span>></span></span>Query<span><span><span>&lt;/</span>el-button</span><span>></span></span>
<span><span><span>&lt;/</span>div</span><span>></span></span>

<span><span><span>&lt;</span>ibi-chart</span>
    <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
    <span>:params</span><span><span>=</span><span>"</span>params<span>"</span></span>
    <span>isInBoard</span>
    <span>watchParam</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h4 id="查询参数-params-格式"> 查询参数(params)格式</h4>
<div><pre><code><span>// 参数数据，一个图可以接收多个参数</span>
params<span>:</span> <span>[</span>BoardParam<span>]</span>

<span>// 参数对象</span>
<span>class</span> <span>BoardParam</span> <span>{</span>
    type<span>:</span> String <span>// 过滤的类型 =, ≠, >, &lt;, ≥, ≤, like, not like, [a, b]</span>
    values<span>:</span> String<span>[</span><span>]</span> <span>// 过滤设定值</span>
    col<span>:</span> ParamLink<span>[</span><span>]</span> <span>// 参数关联对象，一个参数可以关联到对个对象</span>
<span>}</span>

<span>// 关联对象, 一个参数可以关联到对个对象</span>
<span>class</span> <span>ParamLink</span> <span>{</span>
    <span>// 设定关联对象类型</span>
    type<span>:</span> String <span>// ‘dataset’, 'widget', 'report,</span>
    <span>// 设定关联对象ID</span>
    targetId<span>:</span> String <span>|</span> Number <span>// 如: 数据集ID， 图表</span>
    <span>// 设定具体关联的维度或者字段，当type为dataset、widget的时候设定</span>
    col<span>:</span> String <span>// 字段名</span>
    <span>// 当type为report的时候设定</span>
    targetId<span>:</span> String  <span>// ibi-report组件的sid</span>
    datasetName<span>:</span> String <span>// 报表组件中的数据集名称</span>
    column<span>:</span> <span>{</span>
        name<span>:</span> String <span>// 改报表数据集的字段</span>
    <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br></div></div><div><pre><code><span>// 参数格式简单样例</span>
<span>params</span><span>:</span> <span>[</span><span>{</span>
    <span>col</span><span>:</span> <span>[</span><span>{</span><span>datasetId</span><span>:</span> <span>1</span><span>,</span> <span>col</span><span>:</span> <span>'sales_country'</span><span>,</span><span>}</span><span>]</span><span>,</span>
    <span>type</span><span>:</span> <span>'='</span><span>,</span>
    <span>values</span><span>:</span> <span>[</span><span>'Canada'</span><span>]</span><span>,</span>
<span>}</span><span>,</span> <span>{</span>
    <span>col</span><span>:</span> <span>[</span><span>{</span><span>datasetId</span><span>:</span> <span>1</span><span>,</span> <span>col</span><span>:</span> <span>'age'</span><span>,</span><span>}</span><span>]</span><span>,</span>
    <span>type</span><span>:</span> <span>'>'</span><span>,</span>
    <span>values</span><span>:</span> <span>[</span><span>30</span><span>]</span><span>,</span>
<span>}</span><span>]</span>

<span>// report参数格式样例</span>
<span>rptParams</span><span>:</span> <span>[</span><span>{</span>
    <span>type</span><span>:</span> <span>'='</span><span>,</span>
    <span>values</span><span>:</span> <span>[</span><span>]</span><span>,</span>
    <span>col</span><span>:</span> <span>[</span><span>{</span>
        <span>type</span><span>:</span> <span>'report'</span><span>,</span>
        <span>targetId</span><span>:</span> rptId<span>,</span>
        <span>datasetName</span><span>:</span> <span>'invoice-mtd'</span><span>,</span>
        <span>column</span><span>:</span> <span>{</span>
            <span>name</span><span>:</span> <span>'bus_type'</span>
        <span>}</span>
    <span>}</span><span>]</span>
<span>}</span><span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br></div></div><h4 id="watchparam"> watchParam</h4>
<p>监控参数变动即时更新图表</p>
<h4 id="通过vuex-store发送全局图表更新消息"> 通过vuex store发送全局图表更新消息</h4>
<div><pre><code><span><span><span>&lt;</span>el-button</span> <span>@click</span><span><span>=</span><span>"</span>query<span>"</span></span><span>></span></span>Query<span><span><span>&lt;/</span>el-button</span><span>></span></span>

import { boardStore } from '@chuguotech/ibi-vue2-comp';

methods: {
  query() {
    this.updateBoardParamsTick(true);
  },
  ...boardStore.boardMapMutations({
    updateBoardParamsTick: boardStore.M_BOARD_PARAMS_TICK,
  }),
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div><h3 id="联动"> 联动</h3>
<h4 id="relations联动定义"> relations联动定义</h4>
<div><pre><code><span><span><span>&lt;</span>ibi-chart</span>
        <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
        <span>:relations</span><span><span>=</span><span>"</span>relations<span>"</span></span>
        <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><pre><code><span>relations</span><span>:</span> <span>{</span>
    <span>excludeSelf</span><span>:</span> <span>true</span><span>,</span>
    <span>links</span><span>:</span> <span>[</span><span>{</span>
      <span>type</span><span>:</span> <span>'dataset'</span><span>,</span>
      <span>targetId</span><span>:</span> <span>1</span><span>,</span>
      <span>conditions</span><span>:</span> <span>[</span><span>{</span>
          <span>source</span><span>:</span> <span>{</span>
              <span>type</span><span>:</span> <span>'row'</span><span>,</span>
              <span>index</span><span>:</span> <span>0</span><span>,</span>
              <span>column</span><span>:</span> <span>'the_year'</span><span>,</span>
          <span>}</span><span>,</span>
          <span>target</span><span>:</span> <span>{</span>
              <span>column</span><span>:</span> <span>'the_year'</span>
          <span>}</span><span>,</span>
        <span>}</span><span>]</span><span>,</span>
    <span>}</span><span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><h3 id="样式"> 样式</h3>
<div><pre><code><span><span><span>&lt;</span>ibi-chart</span>
        <span>:chart-id</span><span><span>=</span><span>"</span>chartId<span>"</span></span>
        <span>:relations</span><span><span>=</span><span>"</span>relations<span>"</span></span>
        <span>:extOption</span><span><span>=</span><span>"</span>extOption<span>"</span></span>
        <span>isInBoard</span>
<span>></span></span>
<span><span><span>&lt;/</span>ibi-chart</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h4 id="expoption格式"> expOption格式</h4>
<ul>
<li>配置Option样式融合
通过传入与原图样式配置结构一致的对象覆盖修改样式</li>
</ul>
<div><pre><code>extOption <span>=</span> <span>{</span>
    <span>title</span><span>:</span> <span>{</span>
        <span>text</span><span>:</span> <span>'名称改变'</span>
    <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><ul>
<li>钩子函数</li>
</ul>
<p><strong>优势</strong>：通过回调函数修改样式，该方法的优势是能够debug，与IBI中ECharts图表开发者模式原理一致，在render之前被调用，然后通过代码修改，好处是方便debug<br>
<strong>缺点</strong>：该模式目前仅支持ECharts图表</p>
<div><pre><code> extOption <span>=</span> <span>{</span>
    <span>devTool</span><span>:</span> <span>{</span>
        <span>beforeRender</span><span>(</span><span>option</span><span>)</span> <span>{</span>
            console<span>.</span><span>log</span><span>(</span>option<span>)</span><span>;</span>
            _<span>.</span><span>merge</span><span>(</span>option<span>,</span> <span>{</span>
                <span>title</span><span>:</span> <span>{</span>
                    <span>text</span><span>:</span> <span>'名称改变'</span><span>,</span>
                <span>}</span>
            <span>}</span><span>)</span>
        <span>}</span><span>,</span>
        <span>beforeDestroy</span><span>(</span><span>echartsInstance</span><span>)</span> <span>{</span>
            <span>//</span>
        <span>}</span>
    <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h2 id="ibiboard组件"> IbiBoard组件</h2>
<div><pre><code><span><span><span>&lt;</span>ibi-board</span> <span>:boardId</span><span><span>=</span><span>"</span>boardId<span>"</span></span> <span>height</span><span><span>=</span><span>"</span>calc(100vh - 100px)<span>"</span></span><span>></span></span><span><span><span>&lt;/</span>ibi-board</span><span>></span></span>
</code></pre>
<div><span>1</span><br></div></div><div><p>注意</p>
<p>看板组件仅支持自由布局看板，大屏看板暂不支持</p>
</div>
<h3 id="认证-2"> 认证</h3>
<p>目前看板组件不支持认证传参，认证需要在组件加载之前通过api认证</p>
<h3 id="参数props"> 参数props</h3>
<h4 id="boardid"> boardId</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>boardId</td>
<td>Number/String</td>
<td>看板ID属性，当看板ID变化时组件会监控并切换看板内容</td>
</tr>
</tbody>
</table>
<h4 id="showboardparam"> showBoardParam</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>showBoardParam</td>
<td>Boolean</td>
<td>是否显示看板查询参数</td>
</tr>
</tbody>
</table>
<h4 id="showtitle"> showTitle</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>showTitle</td>
<td>Boolean</td>
<td>是否显示标题</td>
</tr>
</tbody>
</table>
<h4 id="hiddenparamnames"> hiddenParamNames</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>hiddenParamNames</td>
<td>Array[String]</td>
<td>需要隐藏的参数名数组</td>
</tr>
</tbody>
</table>
<h4 id="background"> background</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>background</td>
<td>String</td>
<td>看板背景色</td>
</tr>
</tbody>
</table>
<h4 id="height"> height</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>height</td>
<td>String</td>
<td>看板高度，如：'100px', '100vh', 'calc(100vh - 100px)'</td>
</tr>
</tbody>
</table>
<h4 id="filters"> filters</h4>
<p>看板参数的状态可以通过传递一个js对象赋值，具体格式如下：</p>
<div><pre><code><span>{</span>
    <span>"boardParams"</span><span>:</span> <span>[</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>"mpgxi01ev6k"</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"用户"</span><span>,</span>
            <span>"type"</span><span>:</span> <span>"="</span><span>,</span>
            <span>"values"</span><span>:</span> <span>[</span><span>"aaa"</span><span>,</span> <span>"bbb"</span><span>]</span>
        <span>}</span><span>,</span>
        <span>{</span>
            <span>"id"</span><span>:</span> <span>"2khmtv1s63p"</span><span>,</span>
            <span>"name"</span><span>:</span> <span>"用户名"</span><span>,</span>
            <span>"type"</span><span>:</span> <span>"="</span><span>,</span>
            <span>"values"</span><span>:</span> <span>[</span><span>]</span>
        <span>}</span>
    <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><ul>
<li>通过 id 与看板上的参数进行关联，关联不上则会被废弃</li>
<li>type：不同的参数类型 type 值有所区别，设置前建议通过<code>URL参数工具</code>查看之后调试确认<div><pre><code><span>const</span> <span>EQ</span> <span>=</span> <span>'='</span><span>,</span>
    <span>NEQ</span> <span>=</span> <span>'≠'</span><span>,</span>
    <span>GT</span> <span>=</span> <span>'>'</span><span>,</span>
    <span>LT</span> <span>=</span> <span>'&lt;'</span><span>,</span>
    <span>GET</span> <span>=</span> <span>'≥'</span><span>,</span>
    <span>LET</span> <span>=</span> <span>'≤'</span><span>,</span>
    <span>LIKE</span> <span>=</span> <span>'like'</span><span>,</span>
    <span>NOT_LIKE</span> <span>=</span> <span>'not like'</span><span>,</span>
    <span>GEL</span> <span>=</span> <span>'(a,b]'</span><span>,</span>
    <span>EGL</span> <span>=</span> <span>'[a,b)'</span><span>,</span>
    <span>GL</span> <span>=</span> <span>'(a,b)'</span><span>,</span>
    <span>EGEL</span> <span>=</span> <span>'[a,b]'</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div></li>
</ul>
<table>
<thead>
<tr>
<th>参数形式</th>
<th>支持类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>通用过滤器</td>
<td>支持所有类型</td>
</tr>
<tr>
<td>日期范围</td>
<td>支持闭区间[a,b]</td>
</tr>
<tr>
<td>复选框, 下拉框</td>
<td>支持相等过滤 =</td>
</tr>
<tr>
<td>关键词输入</td>
<td>like</td>
</tr>
</tbody>
</table>
<div><pre><code></code></pre>
<div></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">集成演示</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/4-integrate-demo/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/4-integrate-demo/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="集成演示"> 集成演示</h1>
<hr>
<ul>
<li><a href="http://www.ibidemo.cn:81/ibi-integrate/" target="_blank" rel="noopener noreferrer">在线集成演示地址</a></li>
</ul>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">快速开始</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/0-quick-start/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/0-quick-start/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="快速开始"> 快速开始</h1>
<h1 id="概述"> 概述</h1>
<p>本 SDK 提供了一系列 <strong>基于原生Javascript、前端框架无关的</strong> API 以支持数据可视化、用户认证、用户管理、数据管理、资源管理等功能。开发者可以使用 SDK 轻松集成数据服务并进行数据交互。</p>
<p>下面是前端依赖模块全景图</p>
<table>
<thead>
<tr>
<th>包名</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>ee-library</td>
<td>负责把二维数据表格处理为多维数据结构(暂不直接对外开放)</td>
</tr>
<tr>
<td>cboard-chart</td>
<td>负责把多维数据转换为图表配置，如: EChart Option</td>
</tr>
<tr>
<td><strong>cboard-common</strong></td>
<td>数据服务相关包：BO对象结构定义，工具包、后端 Restful 服务请求封装</td>
</tr>
<tr>
<td><strong>chart-services</strong></td>
<td>图表绘制相关包：主要负责 DOM 操作绘制图表</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202503311429787.png" alt="" /></p>
<h1 id="安装与配置"> 安装与配置</h1>
<h2 id="数据服务"> 数据服务</h2>
<p>如果不需要使用SDK的图表绘制功能，只需要通过npm安装<code>cboard-common</code>层及以下的依赖</p>
<h3 id="npm依赖"> npm依赖</h3>
<div><pre><code><span>{</span>
  <span>"dependencies"</span><span>:</span> <span>{</span>
    <span>"axios"</span><span>:</span> <span>"^1.8.4"</span><span>,</span>
    <span>"cboard-common"</span><span>:</span> <span>"~2.1.2"</span><span>,</span>
    <span>"cboard-chart"</span><span>:</span> <span>"~2.1.0"</span><span>,</span>
    <span>"file-saver"</span><span>:</span> <span>"^2.0.5"</span><span>,</span>
    <span>"ee-library"</span><span>:</span> <span>"~2.1.0"</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><div><pre><code><span>import</span> <span>{</span> _axios<span>,</span> commonService<span>,</span> loginService<span>,</span> widgetService<span>,</span>  <span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>

<span>// 设置登陆服务为SDK模式，避免认证失败页面重定向到BI登录页</span>
loginService<span>.</span>isSDK <span>=</span> <span>true</span><span>;</span>
<span>// 设置BI服务端地址</span>
commonService<span>.</span><span>setBaseServerUrl</span><span>(</span><span>'http://localhost:8026/cboard'</span><span>)</span><span>;</span>

<span>// 用模板_axios实例发送请求</span>
_axios<span>.</span><span>get</span><span>(</span><span>'admin/envBaseInfo'</span><span>)</span><span>.</span><span>then</span><span>(</span><span>(</span><span><span>{</span>data<span>}</span></span><span>)</span> <span>=></span> <span>{</span>
  console<span>.</span><span>log</span><span>(</span>data<span>)</span><span>;</span>
<span>}</span><span>)</span><span>;</span>

<span>// 认证</span>
loginService<span>.</span><span>auth</span><span>(</span><span>'username'</span><span>,</span> <span>'password'</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  <span>const</span> <span>{</span>valid<span>,</span> token<span>}</span> <span>=</span> res<span>.</span>data<span>;</span>
  <span>if</span> <span>(</span>valid<span>)</span> <span>{</span>
    <span>this</span><span>.</span>token <span>=</span> token<span>;</span>
    <span>// 获取图表列表</span>
    widgetService<span>.</span><span>getWidgetList</span><span>(</span><span>)</span><span>.</span><span>then</span><span>(</span><span>(</span><span><span>{</span>data<span>}</span></span><span>)</span> <span>=></span> <span>{</span>
      console<span>.</span><span>log</span><span>(</span>data<span>)</span><span>;</span>
      <span>const</span> <span>{</span>folderList<span>,</span> resList<span>}</span> <span>=</span> data<span>;</span>
    <span>}</span><span>)</span><span>;</span>
  <span>}</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br></div></div><div><p>重要提示</p>
<p>SDK初始化调用前必须设定为SDK模式和服务器地址</p>
<div><pre><code><span>import</span> <span>{</span> commonService<span>,</span> loginService <span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>
<span>// 设置登陆服务为SDK模式，避免认证失败页面重定向到BI登录页</span>
loginService<span>.</span>isSDK <span>=</span> <span>true</span><span>;</span>

<span>// 设置BI服务端地址</span>
commonService<span>.</span><span>setBaseServerUrl</span><span>(</span><span>'http://localhost:8026/cboard'</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div></div>
<h2 id="图表服务"> 图表服务</h2>
<p>如果您需要用SDK在前端绘制图表，需要npm安装<code>chart-services</code>及以下的依赖; <strong>此外，还需要外部导入外部依赖</strong></p>
<ul>
<li><strong>ECharts</strong>相关依赖</li>
<li><strong>jQuery</strong>相关依赖</li>
<li><strong>font-awesome</strong>图标</li>
<li><strong>jquery-contextmenu</strong> 交叉表下钻菜单依赖</li>
</ul>
<h3 id="npm依赖-2"> npm依赖</h3>
<div><pre><code><span>{</span>
  <span>"dependencies"</span><span>:</span> <span>{</span>
    <span>"axios"</span><span>:</span> <span>"^1.8.4"</span><span>,</span>
    <span>"cboard-chart"</span><span>:</span> <span>"~2.1.0"</span><span>,</span>
    <span>"cboard-common"</span><span>:</span> <span>"~2.1.2"</span><span>,</span>
    <span>"chart-services"</span><span>:</span> <span>"~2.1.0"</span><span>,</span>
    <span>"ee-library"</span><span>:</span> <span>"~2.1.0"</span><span>,</span>
    <span>"file-saver"</span><span>:</span> <span>"^2.0.5"</span><span>,</span>
    <span>"tippy.js"</span><span>:</span> <span>"^6.3.1"</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><p>外部依赖库作用解释</p>
<ul>
<li><strong>file-saver</strong>: 用于交叉表导出数据保存</li>
<li><strong>axios</strong>: ajax请求库，如果项目中已有可以不添加</li>
</ul>
</div>
<h3 id="外部依赖"> 外部依赖</h3>
<p>为了减少内部包的体积，我们把部分依赖包以external的形式引入项目, 这部JS需要用户在页面中静态引入<br>
以vue2cli创建的项目为例, 修改public下面index.html导入上面的依赖</p>
<div><pre><code>$ tree -L 2 public 
public
├── index.html
└── vendor
    ├── echarts
    ├── font-awesome-4.7.0
    ├── jQuery
    └── jquery-contextmenu
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><div><pre><code><span><span><span>&lt;</span>head</span><span>></span></span>
    <span><span><span>&lt;</span>meta</span> <span>charset</span><span><span>=</span><span>"</span>utf-8<span>"</span></span><span>></span></span>
    <span><span><span>&lt;</span>meta</span> <span>http-equiv</span><span><span>=</span><span>"</span>X-UA-Compatible<span>"</span></span> <span>content</span><span><span>=</span><span>"</span>IE=edge<span>"</span></span><span>></span></span>
    <span><span><span>&lt;</span>meta</span> <span>name</span><span><span>=</span><span>"</span>viewport<span>"</span></span> <span>content</span><span><span>=</span><span>"</span>width=device-width,initial-scale=1.0<span>"</span></span><span>></span></span>
    
    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/jQuery/jquery-2.2.3.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/jquery-contextmenu/jquery.contextMenu.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/jquery-contextmenu/jquery.ui.position.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
    <span><span><span>&lt;</span>link</span> <span>rel</span><span><span>=</span><span>"</span>stylesheet<span>"</span></span> <span>href</span><span><span>=</span><span>"</span>vendor/jquery-contextmenu/jquery.contextMenu.min.css<span>"</span></span><span>></span></span>
    <span><span><span>&lt;</span>link</span> <span>rel</span><span><span>=</span><span>"</span>stylesheet<span>"</span></span> <span>href</span><span><span>=</span><span>"</span>vendor/font-awesome-4.7.0/css/font-awesome.min.css<span>"</span></span><span>></span></span>

    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/echarts/echarts-5.3.2.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/echarts/echarts-liquidfill.3.1.0.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
    <span><span><span>&lt;</span>script</span> <span>src</span><span><span>=</span><span>"</span>vendor/echarts/echarts-wordcloud.2.0.min.js<span>"</span></span><span>></span></span><span></span><span><span><span>&lt;/</span>script</span><span>></span></span>
<span><span><span>&lt;/</span>head</span><span>></span></span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><div><p>依赖版本注意</p>
<p>请确保 <code>ee-library</code>、<code>cboard-chart</code>, <code>cboard-common</code>, <code>chart-services</code>, 版本前两位与BI服务版本一致</p>
</div>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">前端SDK工具包</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/1-sdk/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/1-sdk/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="前端sdk工具包"> 前端SDK工具包</h1>
<h1 id="数据服务-cboard-common"> 数据服务/cboard-common</h1>
<p>cboard-common 依赖包含：</p>
<ul>
<li>所有restful请求服务接口</li>
<li>数据转换服务</li>
<li>工具包</li>
<li>部分业务对象BO定义</li>
</ul>
<p>包含下列模块：</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>_axios</td>
<td>HTTP 请求单例</td>
</tr>
<tr>
<td>commonService</td>
<td>基础服务</td>
</tr>
<tr>
<td>loginService</td>
<td>登录认证服务</td>
</tr>
<tr>
<td>adminService</td>
<td>用户角色管理服务</td>
</tr>
<tr>
<td>datasourceService</td>
<td>数据源管理服务</td>
</tr>
<tr>
<td>datasetService</td>
<td>数据集管理服务</td>
</tr>
<tr>
<td>widgetService</td>
<td>组件管理服务</td>
</tr>
<tr>
<td>boardService</td>
<td>仪表板管理服务</td>
</tr>
<tr>
<td>dashboardService</td>
<td>仪表盘服务</td>
</tr>
<tr>
<td>dataService</td>
<td>数据处理服务</td>
</tr>
<tr>
<td>jobService</td>
<td>任务管理服务</td>
</tr>
<tr>
<td>metaService</td>
<td>元数据管理服务</td>
</tr>
<tr>
<td>folderService</td>
<td>文件夹管理服务</td>
</tr>
<tr>
<td>chartConf</td>
<td>图表配置</td>
</tr>
<tr>
<td>DateUtil</td>
<td>日期工具</td>
</tr>
</tbody>
</table>
<p>Business Object</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>Widget</td>
<td>图表BO</td>
</tr>
</tbody>
</table>
<h2 id="commonservice"> CommonService</h2>
<p>CommonService 包含一些基础服务方法, 对外主要包含以下两个方法</p>
<table>
<thead>
<tr>
<th>方法名</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getBaseServerUrl()</td>
<td>获取基础服务器 URL</td>
<td>无</td>
<td>String</td>
</tr>
<tr>
<td>setBaseServerUrl(url)</td>
<td>设置基础服务器 URL</td>
<td>BI服务器地址, 确保Restful服务请求之前设置一次</td>
<td>无</td>
</tr>
</tbody>
</table>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>CommonService</span> <span>{</span>
    <span>getBaseServerUrl</span><span>(</span><span>)</span>
    <span>setBaseServerUrl</span><span>(</span>url<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><pre><code><span>import</span> <span>{</span>commonService<span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>

commonService<span>.</span><span>setBaseServerUrl</span><span>(</span><span>'http://localhost:8026/cboard'</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h2 id="loginservice"> LoginService</h2>
<p>登陆认证服务</p>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>loginService</span> <span>{</span>
    isSDK<span>:</span> Boolean
    <span>getTokenInfo</span><span>(</span>key<span>)</span>
    <span>getToken</span><span>(</span><span>)</span>
    <span>getUserName</span><span>(</span><span>)</span>
    <span>getUserId</span><span>(</span><span>)</span>
    <span>auth</span><span>(</span>username<span>,</span> password<span>)</span>
    <span>authDigest</span><span>(</span>username<span>,</span> password<span>)</span>
    <span>authByJwtToken</span><span>(</span>token<span>)</span>
    <span>authByShareId</span><span>(</span>shareId<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>isSDK</td>
<td>属性: 是否为 SDK 模式</td>
<td>默认: false, 设置为 true 防止登录失败跳转 BI 登录页面</td>
<td>boolean</td>
</tr>
<tr>
<td>getTokenInfo(key)</td>
<td>获取指定 Token 信息</td>
<td>key - Token 键名</td>
<td>Token 信息对象</td>
</tr>
<tr>
<td>getToken()</td>
<td>获取当前 Token</td>
<td>无</td>
<td>string（Token 字符串）</td>
</tr>
<tr>
<td>getUserName()</td>
<td>获取当前用户名</td>
<td>无</td>
<td>string（用户名）</td>
</tr>
<tr>
<td>getUserId()</td>
<td>获取当前用户 ID</td>
<td>无</td>
<td>string（用户ID）</td>
</tr>
<tr>
<td>auth(username, password)</td>
<td>后端服务请求，进行用户名密码认证</td>
<td>username - 用户名，password - 密码</td>
<td>Promise(AuthResult)</td>
</tr>
<tr>
<td>authDigest(username, password)</td>
<td>进行 MD5 加密密码认证</td>
<td>username - 用户名，password - 密码</td>
<td>Promise(AuthResult)</td>
</tr>
<tr>
<td>authByJwtToken(token)</td>
<td>使用 JWT Token 认证</td>
<td>token - JWT 令牌</td>
<td>Promise(AuthResult)</td>
</tr>
<tr>
<td>authByShareId(shareId)</td>
<td>使用看板分享 ID 认证</td>
<td>shareId - 分享 ID</td>
<td>Promise(AuthResult)</td>
</tr>
</tbody>
</table>
<div><pre><code><span>import</span> <span>{</span> loginService <span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>

loginService<span>.</span>isSDK <span>=</span> <span>true</span><span>;</span>
loginService<span>.</span><span>auth</span><span>(</span><span>'admin'</span><span>,</span> <span>'root123'</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
    console<span>.</span><span>log</span><span>(</span>res<span>)</span>
    <span>const</span> <span>{</span>valid<span>,</span> token<span>}</span> <span>=</span> res<span>.</span>data<span>;</span>
    <span>if</span> <span>(</span>valid<span>)</span> <span>{</span>
       console<span>.</span><span>log</span><span>(</span>res<span>)</span>
       <span>this</span><span>.</span>token <span>=</span> token<span>;</span>
    <span>}</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><h3 id="authresult"> AuthResult</h3>
<div><pre><code><span>public</span> <span>class</span> <span>AuthResult</span> <span>{</span>
  <span>boolean</span> valid<span>;</span>
  <span>String</span> token<span>;</span>
  <span>User</span> user<span>;</span>
  <span>String</span> msg<span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="widgetbo"> WidgetBO</h2>
<div><pre><code><span>export</span> <span>class</span> <span>Widget</span> <span>{</span>
  <span>constructor</span><span>(</span><span>args</span><span>)</span> <span>{</span>
    <span>let</span> <span>{</span>name<span>}</span> <span>=</span> args <span>||</span> <span>{</span><span>}</span><span>;</span>
    Object<span>.</span><span>assign</span><span>(</span><span>this</span><span>,</span> <span>{</span>
      name<span>,</span>
      <span>data</span><span>:</span> <span>{</span>
        <span>datasetId</span><span>:</span> <span>null</span><span>,</span>
        <span>datasource</span><span>:</span> <span>null</span><span>,</span>
        <span>query</span><span>:</span> <span>{</span>
          <span>_sid</span><span>:</span> <span>randomId</span><span>(</span><span>)</span><span>,</span>
        <span>}</span><span>,</span>
        <span>config</span><span>:</span> <span>{</span>
          <span>chart_type</span><span>:</span> <span>'table'</span><span>,</span>
          <span>selects</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>keys</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>groups</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>values</span><span>:</span> <span>[</span>
            <span>{</span><span>series_type</span><span>:</span> <span>null</span><span>,</span> <span>name</span><span>:</span> <span>''</span><span>,</span> <span>cols</span><span>:</span> <span>[</span><span>]</span><span>}</span>
          <span>]</span><span>,</span>
          <span>filters</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>option</span><span>:</span> <span>{</span><span>}</span><span>,</span>
          <span>calColumns</span><span>:</span> <span>[</span><span>]</span><span>,</span><span>// 图表级计算字段</span>
        <span>}</span><span>,</span>
        <span>expressions</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级表达式</span>
        <span>filterGroups</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级过滤组合</span>
        <span>variables</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级变量</span>
      <span>}</span>
    <span>}</span><span>)</span><span>;</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br></div></div><table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
<th>后续简称</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>widget的配置数据</td>
<td>WidgetConfig</td>
</tr>
<tr>
<td>data.config</td>
<td>多维查询配置/图表配置</td>
<td>ChartConfig</td>
</tr>
</tbody>
</table>
<div><pre><code><span>import</span> <span>{</span> Widget <span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>
<span>new</span> <span>Widget</span><span>(</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="widgetconfig"> WidgetConfig</h3>
<div><pre><code><span>class</span> <span>WidgetConfig</span> <span>{</span>
  <span>// 数据源查询配置</span>
  datasetId<span>:</span> <span>null</span><span>;</span>
  datasource<span>:</span> <span>null</span><span>;</span>
  query<span>:</span> <span>{</span> _sid<span>:</span> randomId<span>,</span> <span>}</span><span>;</span>
  <span>// 多维查询配置/图表配置</span>
  config<span>:</span> ChartConfig
  <span>// 图表级表达式</span>
  expressions<span>:</span> <span>[</span><span>]</span><span>;</span>
  <span>// 图表级过滤组合</span>
  filterGroups<span>:</span> <span>[</span><span>]</span><span>;</span>
  <span>// 图表级变量</span>
  variables<span>:</span> <span>[</span><span>]</span><span>;</span> 
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="chartconfig"> ChartConfig</h3>
<p>多维查询配置/图表配置</p>
<div><pre><code><span>class</span> <span>ChartConfig</span> <span>{</span>
  <span>String</span> chart_type<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> keys<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> groups<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> filters<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Value</span><span>></span></span> values<span>;</span>
  <span>Object</span> option <span>=</span> <span>new</span> <span>Object</span><span>(</span><span>)</span><span>;</span>
  calColumns<span>:</span> <span>[</span><span>]</span><span>;</span><span>// 图表级计算字段</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><div><pre><code><span>// 维度</span>
<span>class</span> <span>Dim</span> <span>{</span>
  <span>//String sid; // 在DSL中唯一id</span>
  <span>//如果需要使用层级下钻功能，id必须与维度层级下面的维度相对应</span>
  <span>String</span> id<span>;</span> <span>// 数据集节点id</span>
  <span>String</span> rawDataType<span>;</span> <span>// 原始数据类型</span>
  <span>String</span> alias<span>;</span> <span>// 字段别名</span>
  <span>@required</span>
  <span>String</span> column<span>;</span> <span>// 字段</span>
  <span>String</span> dateFormat<span>;</span> <span>// 日期字段格式化, 与Java中日期格式化对应</span>
  <span>FilterType</span> type<span>;</span> <span>// 过滤类型  3.1中 &lt;filterType> 类型</span>
  <span>List</span><span><span>&lt;</span><span>Object</span><span>></span></span> values<span>;</span> <span>// 比较值 参照3.1 过滤之数组 &lt;filterValues></span>
  <span>String</span> sort <span>=</span> <span>"asc"</span><span>;</span> <span>// 维度值排序 ['asc', 'desc']</span>
<span>}</span>

<span>// 指标栏</span>
<span>class</span> <span>Value</span> <span>{</span>
  <span>String</span> sort <span>=</span> <span>"asc"</span><span>;</span> <span>// 维度值排序 ['asc', 'desc']</span>
  <span>// 双轴图: 'line', 'arealine', 'stackline', 'percentline', 'bar', 'stackbar', 'percentbar'; </span>
  <span>// 饼图: 'pie', 'coxcomb', 'doughnut'</span>
  <span>String</span> series_type<span>;</span> 
  <span>List</span><span><span>&lt;</span><span>Metric</span><span>></span></span> cols<span>;</span> <span>// 指标列</span>
<span>}</span>

<span>// 与SQL中的聚合函数类似 `aggregate_type(col)`</span>
<span>class</span> <span>Metric</span>  <span>{</span>
  <span>String</span> sid<span>;</span> <span>// 在DSL中唯一id</span>
  <span>String</span> id<span>;</span> <span>// 数据集节点id</span>
  <span>String</span> alias<span>;</span> <span>// 数据集节点.a 可以修改为新的名称</span>
  <span>AggType</span> aggregate_type<span>;</span> <span>// 汇总类型, 聚合函数</span>
  <span>@required</span>
  <span>String</span> col<span>;</span> <span>// 数据集节点.column</span>
  <span>String</span> f_type<span>;</span> <span>// 过滤类型 枚举 只能选择3.1中 &lt;filterType> 类型</span>
  <span>ValueType</span> valueType<span>;</span> <span>// 值显示方式</span>
  <span>List</span><span><span>&lt;</span><span>Object</span><span>></span></span> f_values<span>;</span>
  <span>@required</span>
  <span>String</span> type<span>;</span> <span>// 数据集节点.t</span>
  <span>String</span> exp<span>;</span> <span>// 非必须, String, 汇总表达式, measure 的 exp 属性</span>
<span>}</span>

<span>/**
- &lt;filterValues>: 过滤值数组，与&lt;filterType>组合形成过滤条件，数组中多余的值会被忽略，如
- &lt;dateFormat>: String, 日期格式化, 当 字段 为 'date' 类型时，可以对字段进行格式化 Pattern列表:
  - yyyy,年,2025
  - Q,季度, 1-4
  - MM,月,01-12
  - dd,日,01-31
**/</span>
<span>enum</span> <span>FilterType</span> <span>{</span>
  <span>// 等值与不等值 相当于sql中的`in`与`not in`</span>
  <span>'='</span><span>,</span> <span>'≠'</span>
  <span>// 开区间</span>
  <span>'≥'</span><span>,</span> <span>'≤'</span><span>,</span>
  <span>// 闭区间</span>
  <span>'[a,b]'</span><span>,</span> <span>// 相当于sql中的between</span>
  <span>'like'</span><span>,</span> 'not like'
<span>}</span>

<span>enum</span> <span>AggType</span> <span>{</span>
  sum<span>,</span> min<span>,</span> max<span>,</span> avg<span>,</span> distinct
<span>}</span>

<span>enum</span> <span>ValueType</span> <span>{</span>
  value<span>,</span> <span>//原始值</span>
  percentByColumn<span>,</span> <span>// 列占比, 行维度方向上计算占比</span>
  percentByRow<span>,</span> <span>// 行占比, 列维度方向上计算占比</span>
  percentByTotal<span>,</span> <span>// 总占比</span>
  row_number<span>,</span> <span>// 序号</span>
  cum_cum<span>,</span> <span>// 累加</span>
  cum_sum_<span>%</span> <span>// 累加占比</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br></div></div><h2 id="dataservice"> DataService</h2>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>newChartConfig()</td>
<td>新建组件配置</td>
<td>图表组件配置对象</td>
</tr>
<tr>
<td>linkDataset(args)</td>
<td>关联数据集更新图表配置</td>
<td>Promise()</td>
</tr>
<tr>
<td>replaceWgtCfgVariable(widgetConfig)</td>
<td>替换组件配置变量</td>
<td>Promise(replacedWgtCfg)</td>
</tr>
<tr>
<td>setEnvVariables(variables, clean)</td>
<td>设置环境变量</td>
<td>无</td>
</tr>
<tr>
<td>deleteEnvVariables(envArr)</td>
<td>删除环境变量</td>
<td>无</td>
</tr>
<tr>
<td>getVariables(args)</td>
<td>获取变量列表</td>
<td>变量列表</td>
</tr>
<tr>
<td>getDimMembers(args)</td>
<td>获取维度成员</td>
<td>Promise(维度成员数据)</td>
</tr>
<tr>
<td>getColumnStat(args)</td>
<td>获取列统计信息</td>
<td>Promise(统计数据)</td>
</tr>
<tr>
<td>directQuery(datasourceId, query, opt)</td>
<td>直接查询数据</td>
<td>Promise(查询结果)</td>
</tr>
<tr>
<td>getDetailData(args)</td>
<td>获取明细数据</td>
<td>Promise(明细数据)</td>
</tr>
<tr>
<td>downloadDetailData(args)</td>
<td>导出明细数据到Excel</td>
<td>Promise()</td>
</tr>
<tr>
<td>queryDefer(chartConfig)</td>
<td>查询检查配置是否符合图表配置要求</td>
<td>Boolean</td>
</tr>
<tr>
<td>queryBasicAggData(args)</td>
<td>查询基本二维聚合数据表格</td>
<td>Promise(二维聚合数据)</td>
</tr>
<tr>
<td>getDataSeries(args)</td>
<td>获取多维数据序列</td>
<td>Promise(数据序列)</td>
</tr>
<tr>
<td>viewQuery(args)</td>
<td>预览生成的查询脚本</td>
<td>Promise(String[])</td>
</tr>
<tr>
<td>getColumns(args)</td>
<td>获取查询字段</td>
<td>Promise(字段列表)</td>
</tr>
</tbody>
</table>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>DataService</span> <span>{</span>
    <span>newWidgetConfig</span><span>(</span><span>)</span>
    <span>// @ts-ignore</span>
    <span>linkDataset</span><span>(</span>args<span>)</span>
    <span>replaceWgtCfgVariable</span><span>(</span>widgetConfig<span>)</span>
    <span>// 环境变量设置</span>
    <span>setEnvVariables</span><span>(</span>variables<span>:</span> Object<span>,</span> clean<span>:</span> <span>boolean</span><span>)</span>
    <span>getVariables</span><span>(</span>chartConfig<span>)</span>
    <span>// 获取维度成员信息</span>
    <span>getDimMembers</span><span>(</span>args<span>)</span>
    <span>getColumnStat</span><span>(</span>args<span>)</span>
    <span>// @ts-ignore</span>
    <span>directQuery</span><span>(</span>datasourceId<span>,</span> query<span>,</span> opt<span>)</span>
    <span>queryForList</span><span>(</span>args<span>)</span>
    <span>getDetailData</span><span>(</span>args<span>)</span>
    <span>downloadDetailData</span><span>(</span>args<span>)</span>

    <span>queryDefer</span><span>(</span>chartConfig<span>)</span>
    <span>queryAggData</span><span>(</span>args<span>)</span>
    <span>queryBasicAggData</span><span>(</span>args<span>)</span>
  
    <span>getDataSeries</span><span>(</span>widgetConfig<span>)</span>
    <span>viewQuery</span><span>(</span>args<span>)</span>
  
    <span>getColumns</span><span>(</span>args<span>)</span>
    <span>getColumnsByWidgetId</span><span>(</span>widgetId<span>)</span>
  
    <span>castRawData2Series</span><span>(</span>aggData<span>,</span> chartConfig<span>,</span> sortCfg<span>)</span>
  
    <span>getAllDimensions</span><span>(</span>datasetId<span>,</span> datasourceId<span>,</span> query<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div><h3 id="replacewgtcfgvariable"> replaceWgtCfgVariable</h3>
<p>替换widgetConfig中的keys、groups、values中的环境变量模板</p>
<div><pre><code>dataService<span>.</span><span>replaceWgtCfgVariable</span><span>(</span><span>{</span>
  <span>// 省略其他属性</span>
  <span>keys</span><span>:</span> <span>[</span><span>{</span>
    <span>column</span><span>:</span> <span>'month'</span><span>,</span>
    <span>type</span><span>:</span> <span>'='</span><span>,</span>
    <span>values</span><span>:</span> <span>[</span><span>'${cdt.now(), "yyyy-MM-dd"}'</span><span>]</span>
  <span>}</span><span>]</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><div><pre><code>res <span>=</span> <span>{</span> <span>column</span><span>:</span> <span>'month'</span><span>,</span> <span>type</span><span>:</span> <span>'='</span><span>,</span> <span>values</span><span>:</span> <span>[</span><span>'2025-04-02'</span><span>]</span> <span>}</span>
</code></pre>
<div><span>1</span><br></div></div><h3 id="setenvvariables"> setEnvVariables</h3>
<div><pre><code><span>// 设置环境变量</span>
dataService<span>.</span><span>setEnvVariables</span><span>(</span><span>{</span><span>foo</span><span>:</span> <span>'bar'</span><span>,</span> <span>key</span><span>:</span> <span>1</span><span>,</span> <span>dateRange</span><span>:</span> <span>[</span><span>'2025-01-01'</span><span>,</span> <span>'2025-04-05'</span><span>]</span><span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="getvariables"> getVariables</h3>
<div><pre><code><span>/** 获取环境变量
 * @param vars 赋值优先级最高变量
 * @param objectResult 是否以对象形式返回，默认返回字符串
 * @returns {{}|string}
 */</span>
<span>function</span> <span>getVariables</span><span>(</span><span>vars<span>,</span> objectResult <span>=</span> <span>false</span></span><span>)</span> <span>{</span>  <span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><pre><code><span>// 设置环境变量</span>
dataService<span>.</span><span>setEnvVariables</span><span>(</span><span>{</span><span>foo</span><span>:</span> <span>'bar'</span><span>,</span> <span>key</span><span>:</span> <span>1</span><span>,</span> <span>dateRange</span><span>:</span> <span>[</span><span>'2025-01-01'</span><span>,</span> <span>'2025-04-05'</span><span>]</span><span>}</span><span>)</span><span>;</span>
<span>// 返回对象 {foo: 'bar', key: 3, dateRange: ['2025-01-01', '2025-04-05']}</span>
dataService<span>.</span><span>getVariables</span><span>(</span><span>{</span><span>key</span><span>:</span> <span>3</span><span>}</span><span>,</span> <span>true</span><span>)</span><span>;</span>
<span>// 返回对象字符串 "{foo: 'bar', key: 2, dateRange: ['2025-01-01', '2025-04-05']}"</span>
dataService<span>.</span><span>getVariables</span><span>(</span><span>{</span><span>key</span><span>:</span> <span>2</span><span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="getdataseries"> getDataSeries</h3>
<div><pre><code>dataService<span>.</span><span>getDataSeries</span><span>(</span><span>{</span>
  <span>widgetConfig</span><span>:</span> <span>{</span>
    <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
    <span>// chartConfig</span>
    <span>config</span><span>:</span> <span>{</span>
      <span>chart_type</span><span>:</span> <span>'table'</span><span>,</span>
      <span>keys</span><span>:</span> <span>[</span><span>{</span>
        <span>column</span><span>:</span> <span>'the_year'</span><span>,</span>
      <span>}</span><span>]</span><span>,</span>
      <span>groups</span><span>:</span> <span>[</span><span>{</span>
        <span>column</span><span>:</span> <span>'sales_country'</span>
      <span>}</span><span>]</span><span>,</span>
      <span>filters</span><span>:</span> <span>[</span><span>]</span><span>,</span>
      <span>values</span><span>:</span> <span>[</span><span>{</span>
        <span>cols</span><span>:</span> <span>[</span><span>{</span>
          <span>aggregate_type</span><span>:</span> <span>'sum'</span><span>,</span>
          <span>col</span><span>:</span> <span>'store_sales'</span><span>,</span>
        <span>}</span><span>]</span>
      <span>}</span><span>]</span><span>,</span>
      <span>option</span><span>:</span> <span>{</span><span>}</span><span>,</span>
    <span>}</span>
  <span>}</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>seriresData</span> <span>=></span> <span>{</span>
  <span>this</span><span>.</span>jsonData <span>=</span> seriresData<span>;</span>
<span>}</span><span>)</span><span>.</span><span>catch</span><span>(</span><span>e</span> <span>=></span> <span>{</span>
  <span>this</span><span>.</span>jsonData <span>=</span> e<span>;</span>
<span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br></div></div><p>Series 返回数据结构描述</p>
<div><pre><code>{
  &quot;keys&quot;: [...],
  &quot;groups&quot;: [...],
  &quot;metrics&quot;: [...],
  &quot;series&quot;: [...],
  &quot;data&quot;: [...],
  &quot;seriesConfig&quot;: {...},
  &quot;chartConfig&quot;: {...},
  &quot;pivotModel&quot;: {...},
  &quot;keyInfos&quot;: [...],
  &quot;groupInfos&quot;: [...],
  &quot;aggData&quot;: {...},
  &quot;drill&quot;: {...}
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><table>
<thead>
<tr>
<th>字段名</th>
<th>类型</th>
<th>描述</th>
<th>示例值/结构</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>keys</code></td>
<td>二维数组</td>
<td>年份维度数据，每个子数组为行维对应的一行数据</td>
<td>[[2021],[2022],[2024],[2023],[2020],[2025]]</td>
</tr>
<tr>
<td><code>groups</code></td>
<td>二维数组</td>
<td>国家/地区分组，每个子数组列维对应的一列数据</td>
<td>[[&quot;USA&quot;],[&quot;Mexico&quot;],[&quot;Canada&quot;]...]</td>
</tr>
<tr>
<td><code>metrics</code></td>
<td><code>string[]</code></td>
<td>指标名称</td>
<td>[&quot;store_sales&quot;,&quot;store_sales&quot;,...]</td>
</tr>
<tr>
<td><code>series</code></td>
<td>二维数组</td>
<td>系列名称 <code>groups + series</code></td>
<td>[[&quot;USA&quot;,&quot;store_sales&quot;], [&quot;Mexico&quot;,&quot;store_sales&quot;], ...]</td>
</tr>
<tr>
<td><code>data</code></td>
<td>二维数组</td>
<td>列结构的数据, 每个子数组为一列数据可与series对应</td>
<td>[[123,132,...], [771,827,...], ...]</td>
</tr>
<tr>
<td><code>keyInfos</code></td>
<td>二维数组</td>
<td>keys的对象数组</td>
<td>[[{&quot;col&quot;:&quot;the_year&quot;,&quot;value&quot;:2021}], ...]</td>
</tr>
<tr>
<td><code>groupInfos</code></td>
<td>二维数组</td>
<td>groups的对象数组</td>
<td>[[{&quot;col&quot;:&quot;sales_country&quot;,&quot;value&quot;:&quot;USA&quot;}], ...]</td>
</tr>
<tr>
<td><code>aggData</code></td>
<td><code>object</code></td>
<td>聚合后的原始数据</td>
<td>见下方详细结构</td>
</tr>
<tr>
<td><code>seriesConfig</code></td>
<td><code>object</code></td>
<td>系列配置对象，key为系列名</td>
<td>见下方详细结构</td>
</tr>
<tr>
<td><code>chartConfig</code></td>
<td><code>object</code></td>
<td>返回最终图表基础配置, 必要时SDK会对用户传入ChartConfig调整与加工</td>
<td></td>
</tr>
<tr>
<td><code>pivotModel</code></td>
<td><code>object</code></td>
<td>数据透视表模型（包含与根对象重复的 keys/data/seriesConfig 等字段）</td>
<td>结构同根对象对应字段</td>
</tr>
</tbody>
</table>
<hr>
<h4 id="aggdata-原始聚合数据"> aggData 原始聚合数据</h4>
<table>
<thead>
<tr>
<th>字段名</th>
<th>类型</th>
<th>描述</th>
<th>示例值/结构</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>columnList</code></td>
<td>Object[]</td>
<td>字段描述数组对象</td>
<td></td>
</tr>
<tr>
<td><code>data</code></td>
<td>二维数组</td>
<td>行结构二维数组</td>
<td>[[ &quot;Canada&quot;, &quot;F&quot;, 2021, 60237.11 ],...]</td>
</tr>
<tr>
<td><code>subData</code></td>
<td>子集</td>
<td>行列汇总、小计下推数据源时产生</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="seriesconfig-系列对象"> seriesConfig 系列对象</h4>
<div><pre><code>{
   [系列名]: {
      seriesName: &#39;&#39;,
      seriesIdx: 0,
      data: [], // 系列数据
      valueConfig: {}, // 指标配置
      groupInfos: [], // 列维信息数组
   },
   ...
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h3 id="viewquery"> viewQuery</h3>
<div><pre><code>dataService<span>.</span><span>viewQuery</span><span>(</span><span>{</span>
  widgetConfig
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  <span>// res为查询脚本数组</span>
  <span>// ['sql1', 'sql2']</span>
<span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="getdetaildata"> getDetailData</h3>
<div><pre><code>dataService<span>.</span><span>getDetailData</span><span>(</span><span>{</span>
    widgetConfig<span>,</span>
    resultLimit<span>,</span> <span>// 查询结果集大小限制，默认: 2000</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
    
<span>}</span><span>)</span><span>.</span><span>catch</span><span>(</span><span>e</span> <span>=></span> <span>{</span>
  <span>// 异常处理</span>
<span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><p>res 返回数据结构</p>
<div><pre><code>{
  data: {
    columnList: [{}, ...], // 字段对象
    data: [[&quot;United States of America&quot;, &quot;F&quot;, 2021, &quot;#NULL&quot;], ...], // 二维数据
    count: 55264, // 总记录数
    detail: true,
  },
  chartConfig: {...},
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h3 id="getdimmembers"> getDimMembers</h3>
<p>维度成员查询</p>
<div><pre><code>dataService<span>.</span><span>getDimMembers</span><span>(</span><span>{</span>
  <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
  <span>dimCfg</span><span>:</span> <span>{</span> <span>column</span><span>:</span> <span>'sales_country'</span> <span>}</span><span>,</span> <span>// dimCfg可以是对象或者字段字符串</span>
  <span>// dimCfg:'sales_country', </span>
  <span>keywords</span><span>:</span> <span>'a'</span> <span>// 关键词限定，模糊查询值中包含字母a的成员</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  <span>// 返回 [{value: 'Canada'}, {value: 'Mexico'}]</span>
<span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h4 id="其他字段限定-级联限定"> 其他字段限定/级联限定</h4>
<p>查询 'sales_country' 下面 'sales_region' 成员</p>
<div><pre><code>dataService<span>.</span><span>getDimMembers</span><span>(</span><span>{</span>
  <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
  <span>dimCfg</span><span>:</span> <span>{</span> <span>column</span><span>:</span> <span>'sales_region'</span> <span>}</span><span>,</span> <span>// dimCfg可以是对象或者字段字符串</span>
  <span>chartConfig</span><span>:</span> <span>{</span>
    <span>keys</span><span>:</span> <span>[</span><span>{</span>
      <span>id</span><span>:</span> <span>'8clz4jnwc'</span><span>,</span>
      <span>column</span><span>:</span> <span>'sales_country'</span><span>,</span>
      <span>type</span><span>:</span> <span>'='</span><span>,</span>
      <span>values</span><span>:</span> <span>[</span><span>'Canada'</span><span>]</span>
    <span>}</span><span>]</span><span>,</span>
  <span>}</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  <span>// 当前返回值为Ajax原始的Response对象，后续版本迭代可能会做解构操作</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="getcolumnstat"> getColumnStat</h3>
<p>获取指标字段的最小值、最大值、平均值、记录数信息</p>
<div><pre><code>dataService<span>.</span><span>getColumnStat</span><span>(</span><span>{</span>
  <span>datasetId</span><span>:</span> <span>1</span><span>,</span>
  <span>dimCfg</span><span>:</span> <span>{</span> <span>column</span><span>:</span> <span>'store_sales'</span> <span>}</span><span>,</span> <span>// dimCfg可以是对象或者字段字符串</span>
<span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  <span>this</span><span>.</span>jsonData <span>=</span> res<span>.</span>data<span>;</span>
<span>}</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>返回</p>
<div><pre><code><span>{</span>
  <span>"min"</span><span>:</span> <span>0.5</span><span>,</span>
  <span>"max"</span><span>:</span> <span>49.99</span><span>,</span>
  <span>"avg"</span><span>:</span> <span>8.31538858</span><span>,</span>
  <span>"count"</span><span>:</span> <span>55265</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="directquery"> directQuery</h3>
<table>
<thead>
<tr>
<th>位置参数</th>
<th>参数类型</th>
<th>说明</th>
<th>样例</th>
</tr>
</thead>
<tbody>
<tr>
<td>datasourceId</td>
<td>Long</td>
<td>数据源ID</td>
<td>1</td>
</tr>
<tr>
<td>query</td>
<td>String</td>
<td>查询脚本</td>
<td>查询对象需要与数据源匹配</td>
</tr>
<tr>
<td>opt</td>
<td>Object</td>
<td>其他参数</td>
<td>{ resultLimit = 2000, variables }</td>
</tr>
</tbody>
</table>
<div><pre><code>dataService<span>.</span><span>directQuery</span><span>(</span><span>1</span><span>,</span>
  <span>'select * from department'</span><span>,</span>
  <span>{</span>
    <span>resultLimit</span><span>:</span> <span>5</span><span>,</span> 
    <span>variables</span><span>:</span> <span>{</span><span>foo</span><span>:</span> <span>'bar'</span><span>}</span><span>,</span> <span>// 环境变量</span>
  <span>}</span>
<span>)</span><span>.</span><span>then</span><span>(</span><span>res</span> <span>=></span> <span>{</span>
  res<span>.</span>data<span>;</span>
<span>}</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><div><pre><code>{
  &quot;data&quot;: [
    [ 1, &quot;HQ General Management&quot; ],
    [ 2, &quot;HQ Information Systems&quot; ],
    ...
  ],
  &quot;columns&quot;: [
    {
      &quot;columnName&quot;: &quot;DEPARTMENT_ID&quot;,
      &quot;remarks&quot;: null,
      &quot;dataType&quot;: null,
      &quot;typeCategory&quot;: null,
      &quot;innerTypeName&quot;: null,
      &quot;type&quot;: &quot;INT&quot;,
      &quot;ordinalPosition&quot;: null
    },
    {
      &quot;columnName&quot;: &quot;DEPARTMENT_DESCRIPTION&quot;,
      &quot;remarks&quot;: null,
      &quot;dataType&quot;: null,
      &quot;typeCategory&quot;: null,
      &quot;innerTypeName&quot;: null,
      &quot;type&quot;: &quot;STRING&quot;,
      &quot;ordinalPosition&quot;: null
    }
  ],
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br></div></div><h2 id="adminservice"> AdminService</h2>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>changePwd(user)</td>
<td>修改用户密码</td>
<td>user: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>getUserDetails()</td>
<td>获取用户详情</td>
<td>无</td>
<td>Promise(用户详情对象)</td>
</tr>
<tr>
<td>getUserList()</td>
<td>获取用户列表</td>
<td>无</td>
<td>Promise(用户列表)</td>
</tr>
<tr>
<td>getUserRoleList()</td>
<td>获取用户角色列表</td>
<td>无</td>
<td>Promise(角色列表)</td>
</tr>
<tr>
<td>getRoleList()</td>
<td>获取角色列表</td>
<td>无</td>
<td>Promise(角色列表)</td>
</tr>
<tr>
<td>getRoleResList()</td>
<td>获取角色资源列表</td>
<td>无</td>
<td>Promise(资源列表)</td>
</tr>
<tr>
<td>grantUserRoles(userIds, roleIds)</td>
<td>授予用户角色</td>
<td>userIds: string[], roleIds: string[]</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>revokeRoleOfUser(userIds, roleIds)</td>
<td>撤销用户角色</td>
<td>userIds: string[], roleIds: string[]</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>shareResources(roleIds, resIds)</td>
<td>共享资源</td>
<td>roleIds: string[], resIds: string[]</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>updateRoleRes(roleIds, resIds)</td>
<td>更新角色资源</td>
<td>roleIds: string[], resIds: string[]</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>isAdmin()</td>
<td>当前用户是否为Admin</td>
<td>无</td>
<td>Promise(boolean)</td>
</tr>
<tr>
<td>newUser(user)</td>
<td>新建用户</td>
<td>user</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>updateUser(user)</td>
<td>更新用户</td>
<td>user</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>deleteUser(userId)</td>
<td>删除用户</td>
<td>userId</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>handoverAcl(srcUserId, toUserId)</td>
<td>权限交接</td>
<td>srcUserId,  toUserId</td>
<td>Promise(JSONObject)</td>
</tr>
</tbody>
</table>
<hr>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>AdminService</span> <span>{</span>
    <span>changePwd</span><span>(</span>user<span>)</span>
    <span>getUserDetails</span><span>(</span><span>)</span>
    <span>getUserList</span><span>(</span><span>)</span>
    <span>getUserRoleList</span><span>(</span><span>)</span>
    <span>getRoleList</span><span>(</span><span>)</span>
    <span>getRoleResList</span><span>(</span><span>)</span>
    <span>grantUserRoles</span><span>(</span>userIds<span>,</span> roleIds<span>)</span>
    <span>revokeRoleOfUser</span><span>(</span>userIds<span>,</span> roleIds<span>)</span>
    <span>shareResources</span><span>(</span>roleIds<span>,</span> resIds<span>)</span>
    <span>updateRoleRes</span><span>(</span>roleIds<span>,</span> resIds<span>)</span>
    <span>grantRoleRes</span><span>(</span>roleIds<span>,</span> resources<span>)</span>
    <span>revokeRoleRes</span><span>(</span>roleIds<span>,</span> resources<span>)</span>
    <span>updateUserRes</span><span>(</span>userIds<span>,</span> resIds<span>)</span>
    <span>grantUserRes</span><span>(</span>userIds<span>,</span> resIds<span>)</span>
    <span>revokeUserRes</span><span>(</span>userIds<span>,</span> resIds<span>)</span>
    <span>getAllUserResList</span><span>(</span><span>)</span>
    <span>newUser</span><span>(</span>user<span>)</span>
    <span>updateUser</span><span>(</span>user<span>)</span>
    <span>deleteUser</span><span>(</span>userId<span>)</span>
    <span>newRole</span><span>(</span>role<span>)</span>
    <span>updateRole</span><span>(</span>role<span>)</span>
    <span>deleteRole</span><span>(</span>roleId<span>)</span>
    <span>isAdmin</span><span>(</span><span>)</span>
    <span>getJobList</span><span>(</span><span>)</span>
    <span>handoverAcl</span><span>(</span>srcUserId<span>,</span> toUserId<span>)</span>
    <span>getResUserList</span><span>(</span>resType<span>,</span> resId<span>)</span>
<span>}</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br></div></div><h2 id="datasourceservice"> DatasourceService</h2>
<p>数据源相关API</p>
<blockquote>
<p><strong>specFolderId</strong> 选填参数，获取指定目录下面的资源</p>
</blockquote>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getById(id)</td>
<td>获取数据源</td>
<td>Promise(数据源对象)</td>
</tr>
<tr>
<td>getDatasourceList(lite, specFolderId?)</td>
<td>获取数据源列表</td>
<td>Promise(数据源列表)</td>
</tr>
<tr>
<td>getDatasourceTreeData(specFolderId?)</td>
<td>获取数据源树形数据</td>
<td>Promise(树形数据)</td>
</tr>
<tr>
<td>new(datasource)</td>
<td>新建数据源</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>update(datasource)</td>
<td>更新数据源</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>delete(id)</td>
<td>删除数据源</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>getDatasourceParams(dpType)</td>
<td>获取数据源连接参数</td>
<td>Promise(Object)</td>
</tr>
<tr>
<td>getQueryParams(sourceType, pageType)</td>
<td>获取数据源查询参数</td>
<td>Promise(Object)</td>
</tr>
<tr>
<td>listDatabases(datasourceId)</td>
<td>获取数据库列表</td>
<td>Promise(数据库列表)</td>
</tr>
<tr>
<td>listSchemas(datasourceId, databaseName)</td>
<td>获取数据库模式列表</td>
<td>Promise(模式列表)</td>
</tr>
<tr>
<td>listTables(datasourceId, databaseName,<br> schemaName)</td>
<td>获取数据表列表</td>
<td>Promise(数据表列表)</td>
</tr>
<tr>
<td>listColumns(datasourceId, databaseName,<br> schemaName, <br> tableName)</td>
<td>获取数据表字段列表</td>
<td>Promise(字段列表)</td>
</tr>
</tbody>
</table>
<hr>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>DatasourceService</span> <span>{</span>
    <span>getById</span><span>(</span>id<span>)</span>
    <span>getDatasourceList</span><span>(</span>lite <span>=</span> <span>true</span><span>,</span> specFolderId<span>?</span><span>)</span>
    <span>getDatasourceTreeData</span><span>(</span>specFolderId<span>?</span><span>)</span>
    <span>new</span><span>(</span>datasource<span>)</span>
    <span>update</span><span>(</span>datasource<span>)</span>
    <span>delete</span><span>(</span>id<span>)</span>
    <span>getDatasourceParams</span><span>(</span>dpType<span>)</span>
    <span>getQueryParams</span><span>(</span>sourceType<span>,</span> pageType<span>)</span>
    <span>testQuery</span><span>(</span>datasource<span>,</span> queryObj<span>)</span>
    <span>listDatabases</span><span>(</span>datasourceId<span>)</span>
    <span>listSchemas</span><span>(</span>datasourceId<span>,</span> databaseName<span>)</span>
    <span>listTables</span><span>(</span>datasourceId<span>,</span> databaseName<span>,</span> schemaName<span>)</span>
    <span>listColumns</span><span>(</span>datasourceId<span>,</span> databaseName<span>,</span> schemaName<span>,</span> tableName<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h2 id="datasetservice"> DatasetService</h2>
<p>数据集相关API</p>
<blockquote>
<p><strong>specFolderId</strong> 选填参数，获取指定目录下面的资源</p>
</blockquote>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getById(datasetId)</td>
<td>获取数据集</td>
<td>datasetId: string</td>
<td>Promise(数据集对象)</td>
</tr>
<tr>
<td>getByIds(ids)</td>
<td>批量获取数据集</td>
<td>ids: string[]</td>
<td>Promise(数据集列表)</td>
</tr>
<tr>
<td>getDatasetList(specFolderId?)</td>
<td>获取数据集列表</td>
<td>specFolderId?: string</td>
<td>Promise(数据集列表)</td>
</tr>
<tr>
<td>new(dataset)</td>
<td>新建数据集</td>
<td>dataset: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>update(dataset)</td>
<td>更新数据集</td>
<td>dataset: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>delete(datasetId)</td>
<td>删除数据集</td>
<td>datasetId: string</td>
<td>Promise(ServiceStatus)</td>
</tr>
</tbody>
</table>
<hr>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>DatasetService</span> <span>{</span>
    <span>getById</span><span>(</span>datasetId<span>)</span>
    <span>getByIds</span><span>(</span>ids<span>)</span>
    <span>getDatasetList</span><span>(</span>specFolderId<span>?</span><span>)</span>
    <span>getDatasetTreeData</span><span>(</span>specFolderId<span>?</span><span>)</span>
    <span>getDatasetListByDsr</span><span>(</span>datasourceId<span>)</span>
    <span>new</span><span>(</span>dataset<span>)</span>
    <span>update</span><span>(</span>dataset<span>)</span>
    <span>delete</span><span>(</span>datasetId<span>)</span>
    <span>getDimByIdFromDataset</span><span>(</span>nodeId<span>,</span> dataset<span>)</span>
    <span>testTemplateRuleMatch</span><span>(</span>input<span>,</span> regex<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div><h2 id="widgetservice"> WidgetService</h2>
<p>图表资源相关API</p>
<blockquote>
<p><strong>specFolderId</strong> 选填参数，获取指定目录下面的资源</p>
</blockquote>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getById(widgetId)</td>
<td>获取组件</td>
<td>widgetId: string</td>
<td>Promise(组件对象)</td>
</tr>
<tr>
<td>getWidgetList(specFolderId?)</td>
<td>获取组件列表</td>
<td>specFolderId?: string</td>
<td>Promise(组件列表)</td>
</tr>
<tr>
<td>getWidgetListByDsr(datasourceId)</td>
<td>按数据源ID获取图表组件</td>
<td>datasourceId: string</td>
<td>Promise(组件列表)</td>
</tr>
<tr>
<td>new(widget)</td>
<td>新建组件</td>
<td>widget: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>update(widget)</td>
<td>更新组件</td>
<td>widget: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>delete(widgetId)</td>
<td>删除组件</td>
<td>widgetId: string</td>
<td>Promise(ServiceStatus)</td>
</tr>
</tbody>
</table>
<hr>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>WidgetService</span> <span>{</span>
    <span>getById</span><span>(</span>widgetId<span>)</span>
    <span>getWidgetList</span><span>(</span>specFolderId<span>?</span><span>)</span>
    <span>getWidgetListByDsr</span><span>(</span>datasourceId<span>)</span>
    <span>getWidgetListByDst</span><span>(</span>datasetId<span>)</span>
    <span>getWidgetTreeData</span><span>(</span>datasetList<span>,</span> datasourceList<span>,</span> specFolderId<span>?</span><span>)</span>
    <span>new</span><span>(</span>widget<span>)</span>
    <span>update</span><span>(</span>widget<span>)</span>
    <span>delete</span><span>(</span>widgetId<span>)</span>
    <span>checkWidget</span><span>(</span>widgetId<span>)</span>
    <span>compileChartConfig</span><span>(</span>chartConfig<span>)</span>
<span>}</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h2 id="boardservice"> BoardService</h2>
<table>
<thead>
<tr>
<th>方法名/属性</th>
<th>说明</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getBoardData(boardId)</td>
<td>获取看板数据</td>
<td>boardId: string</td>
<td>Promise(看板数据对象)</td>
</tr>
<tr>
<td>getBoardList(specFolderId)</td>
<td>获取看板列表</td>
<td>specFolderId: string</td>
<td>Promise(看板列表)</td>
</tr>
<tr>
<td>getBoardTreeData(layoutType, specFolderId)</td>
<td>获取看板树形结构数据</td>
<td>layoutType: string, specFolderId: string</td>
<td>Promise(树形结构数据)</td>
</tr>
<tr>
<td>new(board)</td>
<td>新建看板</td>
<td>board: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>update(board)</td>
<td>更新看板</td>
<td>board: object</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>delete(boardId)</td>
<td>删除看板</td>
<td>boardId: string</td>
<td>Promise(ServiceStatus)</td>
</tr>
<tr>
<td>cacheParams(boardId, filters)</td>
<td>缓存看板参数</td>
<td>boardId: string, filters: object</td>
<td></td>
</tr>
<tr>
<td>getCachedParams(key)</td>
<td>获取缓存参数</td>
<td>key: string</td>
<td>参数对象</td>
</tr>
</tbody>
</table>
<hr>
<div><pre><code><span>export</span> <span>declare</span> <span>class</span> <span>BoardService</span> <span>{</span>
    <span>getBoardData</span><span>(</span>boardId<span>)</span>
    <span>getBoardList</span><span>(</span>specFolderId<span>)</span>
    <span>getBoardTreeData</span><span>(</span>layoutType<span>,</span> specFolderId<span>)</span>
    <span>getBoardNestLoopTreeData2</span><span>(</span>layoutType<span>,</span> specFolderId<span>)</span>
    <span>new</span><span>(</span>board<span>)</span>
    <span>update</span><span>(</span>board<span>)</span>
    <span>delete</span><span>(</span>boardId<span>)</span>
    <span>cacheParams</span><span>(</span>boardId<span>,</span> filters<span>)</span>
    <span>getCachedParams</span><span>(</span>key<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><h1 id="图表服务-chart-services"> 图表服务/chart-services</h1>
<p>图表服务库，渲染dom为图表</p>
<h2 id="drawchart"> drawChart</h2>
<div><pre><code>import { chartService } from &#39;chart-services&#39;

this.drawChart(containerDom, widgetConfig, options = {}) { ... }
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><pre><code><span>this</span><span>.</span>chartDom <span>=</span> <span>this</span><span>.</span>$el<span>.</span><span>querySelector</span><span>(</span><span>'.view-div'</span><span>)</span><span>;</span>
<span>try</span> <span>{</span>
  chartService<span>.</span><span>drawChart</span><span>(</span><span>$</span><span>(</span><span>this</span><span>.</span>chartDom<span>)</span><span>,</span> <span>{</span>
    <span>widgetName</span><span>:</span> <span>'去年的总销售额'</span><span>,</span>
    <span>datasetId</span><span>:</span> <span>240820113813950</span><span>,</span>
    <span>config</span><span>:</span> <span>{</span>
      <span>chart_type</span><span>:</span> <span>'line'</span><span>,</span>
      <span>keys</span><span>:</span> <span>[</span>
        <span>{</span>
          <span>column</span><span>:</span> <span>'订单日期'</span><span>,</span>
          <span>dateFormat</span><span>:</span> <span>'yyyy'</span><span>,</span>
        <span>}</span>
      <span>]</span><span>,</span>
      <span>groups</span><span>:</span> <span>[</span><span>]</span><span>,</span>
      <span>filters</span><span>:</span> <span>[</span><span>]</span><span>,</span>
      <span>values</span><span>:</span> <span>[</span><span>{</span>
        <span>cols</span><span>:</span> <span>[</span>
          <span>{</span>
            <span>sid</span><span>:</span> <span>'v1'</span><span>,</span>
            <span>// id: 'qjjm6fjtuq',</span>
            <span>col</span><span>:</span> <span>'销售额'</span><span>,</span>
            <span>aggregate_type</span><span>:</span> <span>'sum'</span>
          <span>}</span>
        <span>]</span>
      <span>}</span><span>]</span><span>,</span>
      <span>option</span><span>:</span> <span>{</span>
        <span>title</span><span>:</span> <span>{</span>
          <span>show</span><span>:</span> <span>true</span><span>,</span>
        <span>}</span><span>,</span>
        <span>drillConfig</span><span>:</span> <span>{</span>
          <span>allow</span><span>:</span> <span>true</span><span>,</span>
          <span>freeMode</span><span>:</span> <span>true</span><span>,</span>
        <span>}</span><span>,</span>
        <span>devTool</span><span>:</span> <span>{</span>
          <span>beforeRender</span><span>(</span><span>option</span><span>)</span> <span>{</span>
            console<span>.</span><span>log</span><span>(</span><span>JSON</span><span>.</span><span>stringify</span><span>(</span>option<span>)</span><span>)</span><span>;</span>
            _<span>.</span><span>merge</span><span>(</span>option<span>,</span> <span>{</span>
              <span>title</span><span>:</span> <span>{</span>
                <span>text</span><span>:</span> <span>'名称改变'</span><span>,</span>
              <span>}</span><span>,</span>
            <span>}</span><span>)</span>
          <span>}</span><span>,</span>
        <span>}</span>
      <span>}</span>
    <span>}</span>
  <span>}</span><span>)</span><span>.</span><span>then</span><span>(</span><span>response</span> <span>=></span> <span>{</span>
    <span>let</span> <span>{</span>
      <span>//updater,</span>
      render
    <span>}</span> <span>=</span> response<span>;</span>
    <span>this</span><span>.</span>render <span>=</span> render<span>;</span>
  <span>}</span><span>)</span>
<span>}</span> <span>catch</span> <span>(</span>e<span>)</span> <span>{</span>
  console<span>.</span><span>log</span><span>(</span>e<span>)</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br></div></div>]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Business Object</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/2-bo/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/integrate/sdk/2-bo/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="business-object"> Business Object</h1>
<h2 id="widget"> Widget</h2>
<p>Widget 为新建自助分析图表时创建出来的对象</p>
<div><pre><code><span>export</span> <span>class</span> <span>Widget</span> <span>{</span>
  <span>constructor</span><span>(</span><span>args</span><span>)</span> <span>{</span>
    <span>let</span> <span>{</span>name<span>}</span> <span>=</span> args <span>||</span> <span>{</span><span>}</span><span>;</span>
    Object<span>.</span><span>assign</span><span>(</span><span>this</span><span>,</span> <span>{</span>
      name<span>,</span> <span>// 组件名称</span>
      <span>data</span><span>:</span> <span>{</span>
        <span>datasetId</span><span>:</span> <span>null</span><span>,</span>
        <span>datasource</span><span>:</span> <span>null</span><span>,</span>
        <span>query</span><span>:</span> <span>{</span>
          <span>_sid</span><span>:</span> <span>randomId</span><span>(</span><span>)</span><span>,</span>
        <span>}</span><span>,</span>
        <span>config</span><span>:</span> <span>{</span>
          <span>chart_type</span><span>:</span> <span>'table'</span><span>,</span>
          <span>selects</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>keys</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>groups</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>values</span><span>:</span> <span>[</span>
            <span>{</span><span>series_type</span><span>:</span> <span>null</span><span>,</span> <span>name</span><span>:</span> <span>''</span><span>,</span> <span>cols</span><span>:</span> <span>[</span><span>]</span><span>}</span>
          <span>]</span><span>,</span>
          <span>filters</span><span>:</span> <span>[</span><span>]</span><span>,</span>
          <span>option</span><span>:</span> <span>{</span><span>}</span><span>,</span>
          <span>calColumns</span><span>:</span> <span>[</span><span>]</span><span>,</span><span>// 图表级计算字段</span>
        <span>}</span><span>,</span>
        <span>expressions</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级表达式</span>
        <span>filterGroups</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级过滤组合</span>
        <span>variables</span><span>:</span> <span>[</span><span>]</span><span>,</span> <span>// 图表级变量</span>
      <span>}</span>
    <span>}</span><span>)</span><span>;</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br></div></div><table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
<th>后续简称</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>widget的配置数据，后面大部分SDK传递的图表配置参数</td>
<td>WidgetConfig</td>
</tr>
<tr>
<td>data.config</td>
<td>多维查询配置/图表配置</td>
<td>ChartConfig</td>
</tr>
</tbody>
</table>
<div><pre><code><span>import</span> <span>{</span> Widget <span>}</span> <span>from</span> <span>'cboard-common'</span><span>;</span>
<span>new</span> <span>Widget</span><span>(</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h2 id="widgetconfig"> WidgetConfig</h2>
<div><pre><code><span>class</span> <span>WidgetConfig</span> <span>{</span>
  <span>// 数据源查询配置</span>
  datasetId<span>:</span> <span>null</span><span>;</span>
  datasource<span>:</span> <span>null</span><span>;</span>
  query<span>:</span> <span>{</span> _sid<span>:</span> randomId<span>,</span> <span>}</span><span>;</span>
  <span>// 多维查询配置/图表配置</span>
  config<span>:</span> ChartConfig
  <span>// 图表级汇总表达式，同数据集配置汇总表达式</span>
  expressions<span>:</span> <span>[</span><span>]</span><span>;</span>
  <span>// 图表级过滤组合，同数据集预定义过滤组合</span>
  filterGroups<span>:</span> <span>[</span><span>]</span><span>;</span>
  <span>// 图表级变量</span>
  variables<span>:</span> <span>[</span><span>{</span>foo<span>:</span> <span>'bar'</span><span>}</span><span>]</span><span>;</span> 
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="数据源查询"> 数据源查询</h3>
<p>数据源查询可以通过数据集查询，数据集中包含了数据源和查询对象<code>query</code></p>
<div><pre><code>{
  datasetId: 1,
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><p>或者直接通过数据源和和<code>query</code>对象查询, 下面是JDBC查询配置</p>
<div><pre><code>{
  datasource: 123;
  query: { 
    _sid: randomId,
    ...其他属性
    sql: &#39;select ...&#39; 
  };
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="chartconfig"> ChartConfig</h2>
<p>多维查询配置/图表配置</p>
<div><pre><code><span>class</span> <span>ChartConfig</span> <span>{</span>
  <span>String</span> chart_type<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> keys<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> groups<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Dim</span><span>></span></span> filters<span>;</span>
  <span>List</span><span><span>&lt;</span><span>Value</span><span>></span></span> values<span>;</span>
  <span>Object</span> option <span>=</span> <span>new</span> <span>Object</span><span>(</span><span>)</span><span>;</span>
  calColumns<span>:</span> <span>[</span><span>]</span><span>;</span><span>// 图表级计算字段</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><div><pre><code><span>// 指标栏</span>
<span>class</span> <span>Value</span> <span>{</span>
  <span>String</span> sort <span>=</span> <span>"asc"</span><span>;</span> <span>// 维度值排序 ['asc', 'desc']</span>
  <span>// 双轴图: 'line', 'arealine', 'stackline', 'percentline', 'bar', 'stackbar', 'percentbar'; </span>
  <span>// 饼图: 'pie', 'coxcomb', 'doughnut'</span>
  <span>String</span> series_type<span>;</span> 
  <span>List</span><span><span>&lt;</span><span>Metric</span><span>></span></span> cols<span>;</span> <span>// 指标列</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="dim"> Dim</h2>
<p>维度配置, 最精简的维度配置可以只保存<code>column</code>属性，其他的属性在需要使用对应特性时传递</p>
<h3 id="维度基础属性"> 维度基础属性</h3>
<div><pre><code><span>// 维度</span>
<span>class</span> <span>Dim</span> <span>{</span>
  <span>@required</span>
  <span>String</span> column<span>;</span> <span>// 字段</span>
  <span>//String sid; // 在DSL中唯一id</span>
  <span>//如果需要使用层级下钻功能，id必须与维度层级下面的维度相对应</span>
  <span>String</span> id<span>;</span> <span>// 数据集节点id</span>
  <span>String</span> rawDataType<span>;</span> <span>// 原始数据类型</span>
  <span>String</span> alias<span>;</span> <span>// 字段别名</span>
  
  <span>String</span> dateFormat<span>;</span> <span>// 日期字段格式化, 与Java中日期格式化对应</span>
  <span>FilterType</span> type<span>;</span> <span>// 枚举 过滤类型  3.1中 &lt;filterType> 类型</span>
  <span>List</span><span><span>&lt;</span><span>Object</span><span>></span></span> values<span>;</span> <span>// 比较值 参照3.1 过滤之数组 &lt;filterValues></span>
  <span>String</span> sort <span>=</span> <span>"asc"</span><span>;</span> <span>// 维度值排序 ['asc', 'desc'];</span>
  
  <span>DimCustom</span> custom<span>;</span> <span>// 衍生维度配置</span>
  <span>String</span> dataType<span>;</span> <span>// 衍生维度字段类型</span>
  
  <span>SortConfig</span> sortConfig<span>;</span> <span>// 自定义排序配置</span>
  <span>String</span> calId<span>;</span> <span>// 计算字段ID</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br></div></div><h3 id="dateformat"> DateFormat</h3>
<p>String, 日期格式化, 当字段数据类型为 'date' 类型时, 可以对字段进行格式化 Pattern列表:</p>
<table>
<thead>
<tr>
<th>标记</th>
<th>含义</th>
<th>示例/范围</th>
</tr>
</thead>
<tbody>
<tr>
<td>yyyy</td>
<td>年</td>
<td>2025</td>
</tr>
<tr>
<td>yy</td>
<td>年</td>
<td>25</td>
</tr>
<tr>
<td>Q</td>
<td>季度</td>
<td>1-4</td>
</tr>
<tr>
<td>MM</td>
<td>月</td>
<td>01-12</td>
</tr>
<tr>
<td>dd</td>
<td>日</td>
<td>01-31</td>
</tr>
<tr>
<td>HH</td>
<td>小时</td>
<td>0-23</td>
</tr>
<tr>
<td>mm</td>
<td>分钟</td>
<td>0-59</td>
</tr>
<tr>
<td>ww</td>
<td>年中的第几周</td>
<td>01-53，周一为一周第一天</td>
</tr>
</tbody>
</table>
<h3 id="dimcustom"> DimCustom</h3>
<p>衍生维度配置</p>
<div><pre><code>{
  ...其他Dim属性
  custom: {
    custType: &#39;list&#39;, //&#39;list&#39;, &#39;range&#39;, &#39;bin&#39;
    uniOthers: true, // 是否统一组外
    othersName: &#39;组外名&#39; 
    filterOthers: false, // 是否过滤组外成员
    buckets: [Bucket], // list, range的分组
    bin: {}, // 数值类型字段直方图配置
  }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><pre><code>
<span>class</span> Bucket <span>{</span>
  <span>var</span> name<span>:</span> <span>String</span> <span>// 分组名</span>
  <span>var</span> valueList<span>:</span> List<span>[</span>Object<span>]</span> <span>// 用于列表分组</span>
  <span>// from, to 用于Range范围分组</span>
  <span>var</span> from<span>:</span> <span>String</span> <span>=</span> _
  <span>var</span> to<span>:</span> <span>String</span> <span>=</span> _
<span>}</span>

<span>class</span> Bin <span>{</span>
  <span>var</span> min<span>:</span> <span>Double</span> <span>=</span> <span>0</span>
  <span>var</span> max<span>:</span> <span>Double</span> <span>=</span> <span>100</span>
  <span>var</span> binSize<span>:</span> <span>Int</span> <span>=</span> <span>20</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="sortconfig"> SortConfig</h3>
<p>如果升序、降序不能满足用户对维度排序的需求，可以使用 自定义排序 配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504111013166.png" alt="" /></p>
<h4 id="排序参照静态数组"> 排序参照静态数组</h4>
<div><pre><code>{
    ... 其他Dim属性
    sort: &#39;custom&#39;,
    sortConfig: {
      useQuery: false, // 否使用参照查询
      referArr: [&quot;Mexico&quot;, &quot;Canada&quot;], // 自定义排序参照数组
      sort: &#39;asc&#39;, // 没有在参照数组中的元素默认排序方式, asc/desc/null
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h4 id="排序参照查询模板"> 排序参照查询模板</h4>
<div><pre><code>{
    ... 其他Dim属性
    sort: &#39;custom&#39;,
    sortConfig: {
      useQuery: true, 
      referArr: [], 
      sort: &#39;asc&#39;, // 没有在参照数组中的元素默认排序方式, asc/desc/null
      query: { 
        impl: &quot;tplt&quot;, // 使用查询模板&#39;tplt&#39;
        datasourceId: null,
        query: &quot;&quot;,
        tpltId: &quot;bCqXj6zH&quot;
      }
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h4 id="排序参照查询脚本"> 排序参照查询脚本</h4>
<p>查询模板可以在BI的 <code>管理</code> -&gt; <code>查询模板</code> 页面配置</p>
<div><pre><code>{
    ... 其他Dim属性
    sort: &#39;custom&#39;,
    sortConfig: {
      useQuery: true, 
      referArr: [], 
      sort: &#39;asc&#39;, // 没有在参照数组中的元素默认排序方式, asc/desc/null
      query: { 
        impl: &quot;script&quot;, // 使用查询脚本 &#39;script&#39;
        datasourceId: 123,
        query: &quot;select col from order_table&quot;,
      }
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h2 id="metric"> Metric</h2>
<p>指标配置, 对应指标栏中的一个项目</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504111044683.png" alt="" /></p>
<h3 id="指标基础属性"> 指标基础属性</h3>
<div><pre><code><span>// 与SQL中的聚合函数类似 `aggregate_type(col)`</span>
<span>class</span> <span>Metric</span>  <span>{</span>
  <span>String</span> sid<span>;</span> <span>// 在DSL中唯一id</span>
  <span>String</span> id<span>;</span> <span>// 数据集节点id</span>
  <span>String</span> alias<span>;</span> <span>// 数据集节点.a 可以修改为新的名称</span>
  <span>String</span> aggregate_type<span>;</span> <span>// 枚举值 汇总类型, 聚合函数: sum, min, max, avg, distinct</span>
  <span>@required</span>
  <span>String</span> col<span>;</span> <span>// 数据集节点.column</span>
  <span>FilterType</span> f_type<span>;</span> <span>// 过滤类型 枚举 只能选择3.1中 &lt;filterType> 类型</span>
  <span>ValueType</span> valueType<span>;</span> <span>// 值显示方式</span>
  <span>List</span><span><span>&lt;</span><span>Object</span><span>></span></span> f_values<span>;</span>
  <span>@required</span>
  <span>String</span> type<span>;</span> <span>// 数据集节点.t</span>
  <span>String</span> exp<span>;</span> <span>// 非必须, String, 汇总表达式, measure 的 exp 属性</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h3 id="valueformat"> ValueFormat</h3>
<p>指标格式化</p>
<h4 id="numbro-pattern"> Numbro Pattern</h4>
<p>使用一个字符串Pattern标识格式化，具体参照<a href="https://numbrojs.com/old-format.html" target="_blank" rel="noopener noreferrer">numbro old format (v1)</a></p>
<div><pre><code>{
    ... Metric其他配置
    formatter: &#39;0,0[.]00&#39;
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h4 id="formater-object"> Formater Object</h4>
<p>指标格式化对象</p>
<div><pre><code>{
    ... Metric其他配置
    formatter: {
      type: &quot;default&quot;, // default, percent, exp, abbr, none
      abbrLocale: null, // cn/en
      decimal: 0,
      divisor: null, // 除以
      prefix: &quot;&quot;, // 前缀
      suffix: &quot;&quot;, // 后缀
      ts: false // 千分位
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div><h3 id="valuetype"> ValueType</h3>
<p>值类型快速计算, <code>Metric</code> 中设置 <code>valueType</code> 与其对应的配置之后实现值类型的快速转换</p>
<div><pre><code><span>enum</span> <span>ValueType</span> <span>{</span>
  value<span>,</span> <span>//原始值</span>
  percentByColumn<span>,</span> <span>// 列占比, 行维度方向上计算占比</span>
  percentByRow<span>,</span> <span>// 行占比, 列维度方向上计算占比</span>
  percentByTotal<span>,</span> <span>// 总占比</span>
  row_number<span>,</span> <span>// 序号</span>
  cum_cum<span>,</span> <span>// 累加</span>
  cum_sum_<span>%</span> <span>// 累加占比</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h4 id="列占比"> 列占比</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504101850850.png" alt="" /></p>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;percentByColumn&#39;,
    // 子分组, key: 0 为整列, key: 1; 按第一列分组, key: 2 按前两列分组, 依次类推
    subGrp: {key: 0}, 
    statHidden: false, // 是统计隐藏单元格
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h4 id="行占比"> 行占比</h4>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;percentByRow&#39;,
    // 子分组, key: 0 为整行, key: 1; 按第一行分组, key: 2 按前两行分组, 依次类推
    subRowGrp: {key: 0}, 
    statHidden: false, // 是统计隐藏单元格
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h4 id="总占比"> 总占比</h4>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;percentByTotal&#39;,
    statHidden: false, // 是统计隐藏单元格
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h4 id="rank-dense-rank"> Rank/Dense Rank</h4>
<p>在列或行上计算排序，可以设置计算方向与子分组</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504101852081.png" alt="" /></p>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;rank&#39;, // rank/dense_rank
    statHidden: false, // 是统计隐藏单元格
    lagDirection: &#39;column&#39;, // 计算方向 &#39;column&#39;: 列 / &#39;row&#39;: 行 
    
    // 行方向子分组, lagDirection 为 &#39;column&#39;时生效 
    // key: 0 为整列, key: 1 按第一列分组, key: 2 按前两列分组, 依次类推
    subGrp: {key: 0}, 
    
    // 行方向子分组, lagDirection 为 &#39;row&#39;时生效 
    // key: 0 为整行, key: 1 按第一行分组, key: 2 按前两行分组, 依次类推
    subRowGrp: {key: 0}, 
    rankSortType: &#39;asc&#39; // asc, desc
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h4 id="row-number"> Row Number</h4>
<p>序号, 与<code>rank</code>配置类型一样, 没有 <code>rankSortType</code>属性</p>
<div><pre><code>{
    ...Metric其他配置
    valueType: &#39;row_number&#39;, // rank/dense_rank
    statHidden: false, // 是统计隐藏单元格
    lagDirection: &#39;column&#39;, // 计算方向 &#39;column&#39;: 列 / &#39;row&#39;: 行 
    
    // 行方向子分组, lagDirection 为 &#39;column&#39;时生效 
    // key: 0 为整列, key: 1 按第一列分组, key: 2 按前两列分组, 依次类推
    subGrp: {key: 0}, 
    
    // 行方向子分组, lagDirection 为 &#39;row&#39;时生效 
    // key: 0 为整行, key: 1 按第一行分组, key: 2 按前两行分组, 依次类推
    subRowGrp: {key: 0}, 
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h4 id="累加-累加占比"> 累加/累加占比</h4>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;cum_sum&#39;, // 累加占比: &quot;cum_sum_%&quot;
    lagDirection: &#39;column&#39;, // 计算方向 &#39;column&#39;: 列 / &#39;row&#39;: 行 
    
    // 行方向子分组, lagDirection 为 &#39;column&#39;时生效 
    // key: 0 为整列, key: 1 按第一列分组, key: 2 按前两列分组, 依次类推
    subGrp: {key: 0}, 
    
    // 行方向子分组, lagDirection 为 &#39;row&#39;时生效 
    // key: 0 为整行, key: 1 按第一行分组, key: 2 按前两行分组, 依次类推
    subRowGrp: {key: 0},  
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h4 id="环比-滞后比较"> 环比/滞后比较</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504101746527.png" alt="" /></p>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;lag&#39;,
    nullSelf: false, // 滞后查找失败是否取自身
    lagType: &#39;diff&#39;, // &#39;diff&#39;: 差值, &#39;changeRate&#39;: 变化值, &#39;value&#39;: 滞后原值
    lagNo: 1, // 滞后量
    lagDirection: &#39;column&#39;, // 计算方向 &#39;column&#39;: 列滞后 / &#39;row&#39;: 行滞后
    lagCompares: [{index: 1, col: &#39;xxx&#39;}], // 滞后比较比较等值的字段, index与lagDirection组合定位字段
    statHidden: false, // 是否比较隐藏单元格
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h4 id="同比"> 同比</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/202504101754527.png" alt="" /></p>
<div><pre><code>{
    ... Metric其他配置
    valueType: &#39;yoy&#39;,
    nullSelf: false, // 滞后查找失败是否取自身 
    lagDirection: &#39;column&#39;, // 滞后方向 &#39;column&#39;: 列滞后 / &#39;row&#39;: 行滞后
    yoyRefDateCol: {index: 0, col: &#39;year&#39;}, // 包含年份信息的字段, index为参考维的序号
    yoyDateFormat: &#39;YYYY&#39;, // 包含年份信息的字段日期格式 YYYY-MM-DD
    yoyCompareSkip: [{index: 1, col: &#39;xxx&#39;}], // 需要忽略的字段，index与lagDirection组合定位字段
    statHidden: false, // 是否比较隐藏单元格
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h3 id="valuesummary"> ValueSummary</h3>
<p>配置交叉表行、列汇总，总计</p>
<div><p>注意</p>
<p>汇总配置仅在交叉表表中展示</p>
</div>
<h4 id="column-summary"> Column Summary</h4>
<div><pre><code>{
    ... Metric其他配置
    colSummaryType: null,
    colSummaryExp: null,
    colSummaryFormat: null,
    colSummaryStatHidden: false,
    colSummaryStyle: {
        vStyleType: null,
    },
    colSummaryValueType: {
        valueType: &#39;value&#39;,
        lagDirection: &#39;row&#39;,
        pushAggToDsr: false,
        dsrExpId: null,
    },
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h4 id="row-summary"> Row Summary</h4>
<div><pre><code>{
    ... Metric其他配置
    rowSummaryType: &#39;none&#39;,
    rowSummaryExp: &#39;&#39;,
    rowSummaryFormat: null,
    rowSummaryStatHidden: false,
    rowSummaryStyle: {
        vStyleType: null,
    },
    rowSummaryValueType: {
        valueType: &#39;value&#39;,
        pushAggToDsr: false,
        dsrExpId: null,
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h4 id="total-summary"> Total Summary</h4>
<div><pre><code>{
    ... Metric其他配置
    totalSummaryType: null,
    totalSummaryExp: null,
    totalSummaryFormat: null,
    totalSummaryStatHidden: false,
    totalSummaryStyle: {
        vStyleType: null,
    },
    totalSummaryValueType: {
        pushAggToDsr: false,
        dsrExpId: null,
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="valuesubsummary"> ValueSubSummary</h3>
<p>行列小计配置</p>
<h4 id="column-subsummary"> Column SubSummary</h4>
<div><pre><code>{
    ... Metric其他配置
    subSumType: 1,
    subSumFunc: &#39;sum&#39;,
    subSumGlobal: true,
    subSumGrps: [],
    subSumValueType: {
        valueType: &#39;value&#39;,
        pushAggToDsr: false,
        dsrExpId: null,
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br></div></div><h4 id="row-subsummary"> Row SubSummary</h4>
<div><pre><code>{
    ... Metric其他配置
    rowSubSum: {
        subSumType: 1,
        subSumFunc: &#39;sum&#39;,
        subSumGlobal: true,
        subSumGrps: [],
        subSumValueType: {
            valueType: &#39;value&#39;,
            pushAggToDsr: false,
            dsrExpId: null,
        },
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="指标过滤配置"> 指标过滤配置</h3>
<div><pre><code>{
  FilterType: f_type,
  List&lt;Number&gt; f_values,
  Int f_top, // 相当于Limit N配置
}

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><ul>
<li>指标过滤
<ul>
<li>销售额大于1千: <code>{f_type: '&gt;', f_values: [1000]}</code></li>
<li>销售额大于1千小于2千: <code>{f_type: '[a,b]', f_values: [1000, 2000]}</code></li>
</ul>
</li>
</ul>
<h2 id="filtertype"> FilterType</h2>
<div><pre><code><span>/**
 * &lt;filterType>与&lt;filterValues>(过滤值数组), 组合形成过滤条件
 * 数组中多余的值会被忽略
 **/</span>
<span>enum</span> <span>FilterType</span> <span>{</span>
  <span>// 等值与不等值 相当于sql中的`in`与`not in`</span>
  <span>'='</span><span>,</span> <span>'≠'</span>
  <span>// 开区间</span>
  <span>'≥'</span><span>,</span> <span>'≤'</span><span>,</span>
  <span>// 闭区间</span>
  <span>'[a,b]'</span><span>,</span> <span>// 相当于sql中的between</span>
  <span>'like'</span><span>,</span> 'not like'
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><ul>
<li>维度枚举 产品包含 桌子、电话: <code>{filterType: =, values: [桌子, 电话]}</code></li>
<li>维度枚举 产品排除 桌子、电话: <code>{filterType: ≠, values: [桌子, 电话]}</code></li>
<li>日期过滤
<ul>
<li>日期过滤 dateFormat 格式与 values 中的字符串日期严格一致,
<ul>
<li>错误配置 <code>{dateFormat: 'yyyy-MM', values: ['2025']}</code></li>
<li>正确配置 <code>{dateFormat: 'yyyy-MM', values: ['2025-01']}</code></li>
</ul>
</li>
<li>日期大于: <code>{dateFormat: 'yyyy-MM-dd', filterType: &gt;, values: ['2025-01-02']}</code></li>
<li>日期小于: <code>{dateFormat: 'yyyy-MM-dd', filterType: &lt;, values: ['2025-01-02']}</code></li>
<li>2023年: <code>{dateFormat: 'yyyy', filterType: =, values: ['2023']}</code></li>
<li>2023年Q1: <code>{dateFormat: 'yyyy-Q', filterType: =, values: ['2023-1']}</code></li>
<li>日期范围: <code>{dateFormat: 'yyyy-MM-dd', filterType: '[a,b]', values: ['2024-10-01', '2024-12-31']}</code></li>
</ul>
</li>
<li>指标过滤
<ul>
<li>销售额大于1千: <code>{filterType: &gt;, values: [1000]}</code></li>
<li>销售额大于1千小于2千: <code>{filterType: '[a,b]', values: [1000, 2000]}</code></li>
</ul>
</li>
</ul>
<h2 id="calculatecolumn"> CalculateColumn</h2>
<p>计算字段配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240808172609.png" alt="" /></p>
<div><pre><code><span>class</span> <span>Calculate</span> <span>{</span>
    <span>@Required</span>
    <span>String</span> calId<span>;</span> <span>//计算字段ID</span>
    <span>@Required</span>
    <span>String</span> columnName<span>;</span> <span>// 计算字段名称</span>
    <span>@Required</span>
    <span>String</span> uiExp<span>;</span> <span>// 计算字段表达式</span>
    
    <span>boolean</span> isAggColumn <span>=</span> <span>false</span><span>;</span> <span>// 是否为汇总类型计算字段, 与partitionBy, orderBy配合组成sql中窗口函数查询</span>
    <span>List</span><span><span>&lt;</span><span>Partition</span><span>></span></span> partitionBy<span>;</span> <span>// 分组字段</span>
    <span>List</span><span><span>&lt;</span><span>OrderColumn</span><span>></span></span> orderBy<span>;</span> <span>// 排序字段</span>
    <span>boolean</span> isAdvance<span>;</span> <span>// 高级模式</span>
    <span>String</span> adExp<span>;</span> <span>// 高级模式使用adExp脚本</span>
<span>}</span>

<span>//分组字段</span>
<span>class</span> <span>Partion</span> <span>{</span>
    <span>String</span> calId<span>;</span>
    <span>String</span> columnName<span>;</span>
<span>}</span>

<span>// 排序字段</span>
<span>class</span> <span>OrderColumn</span> <span>{</span>
    <span>String</span> calId<span>;</span>
    <span>String</span> columnName<span>;</span>
    <span>String</span> order<span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br></div></div><h3 id="图表级计算字段"> 图表级计算字段</h3>
<p>计算字段的作用是在原始字段基础上衍生出新的字段，图表级计算字段配置位置为ChartConfig的 calColumns 属性中</p>
<div><p>提示</p>
<p>计算字段必须先定义再使用，计算字段的定义可以在数据集或者图表级</p>
</div>
<div><pre><code>class ChartConfig {
  ... 其他属性
  calColumns: [{
    calId: &#39;cal_year&#39;,
    columnName: &#39;年份&#39;, // 不要与其他字段名冲突
    uiExp: &quot;year(`ts_date`)&quot;
  }];// 图表级计算字段
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h3 id="chartconfig使用计算字段"> ChartConfig使用计算字段</h3>
<div><pre><code>{
  keys: [{
      id: &#39;8clz4jnwc&#39;,
      column: &#39;the_year&#39;,
  }, {
      // 维度中使用计算字段
      calId: &#39;cal_quarter&#39;, // 增加calId属性, 非必须建议增加属性
      column: &#39;季度&#39;, // 字段名称与计算字段名称一致
  }], 
  groups: [],
  values: [{
    cols: [{
        alias: &#39;表达式字段&#39;,
        type: &#39;exp&#39;,
        // 表达式中使用字段名称引用计算字段
        exp: &#39;sum(store_cost) / count(`discount_price`)&#39; 
    }, {
        aggregate_type: &#39;sum&#39;,
        calId: &#39;cal_discount_price&#39;,  // 增加calId属性, 非必须建议增加属性
        col: &#39;discount_price&#39;,
    }]
  }],
  // 图表级计算字段定义
  calColumns: [{
      calId: &#39;cal_quarter&#39;,
      columnName: &#39;季度&#39;, // 不要与其他字段名冲突
      uiExp: &#39;quarter(`ts_date`)&#39;
  }, {
      calId: &#39;cal_discount_price&#39;,
      columnName: &#39;discount_price&#39;,
      uiExp: &#39;`store_sales` * 0.8&#39;,
  }, {
      calId: &#39;cal_totalSales&#39;,
      columnName: &#39;totalSales&#39;,
      uiExp: &#39;{FIXED : SUM(`store_sales`)}&#39;
  }], 
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br></div></div><h3 id="lod-fixed-表达式"> LOD FIXED 表达式</h3>
<div><pre><code>{
  calColumns: [{
      calId: &#39;cal_totalSales&#39;,
      columnName: &#39;totalSales&#39;,
      uiExp: &#39;{FIXED : SUM(`store_sales`)}&#39;
  }], 
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h2 id="expression"> Expression</h2>
<div><p>提示</p>
<p>汇总表达式可以先定义再使用(引用)，也可以直接在指标中定义</p>
</div>
<h3 id="图表级汇总表达式"> 图表级汇总表达式</h3>
<div><pre><code><span>class</span> <span>WidgetConfig</span> <span>{</span>
  <span>expressions</span><span>:</span> <span>[</span><span>{</span>
    <span>id</span><span>:</span> <span>"pc2x9gv4tl"</span><span>,</span>
    <span>type</span><span>:</span><span>"exp"</span><span>,</span>
    <span>alias</span><span>:</span> <span>"订单"</span><span>,</span>
    <span>exp</span><span>:</span> <span>"2 * (sum(store_cost) / count(store_sales))"</span><span>,</span>
  <span>}</span><span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h3 id="metric使用汇总表达值"> Metric使用汇总表达值</h3>
<h4 id="引用数据集中定义的表达式"> 引用数据集中定义的表达式</h4>
<div><pre><code>{
  ...Metric其他配置
  id: &quot;pc2x9gv4tl&quot;, // id为必选项，如果配置有id，在引用的表达式有更新时会联动更新
  type: &#39;exp&#39;, // 字段类型标记为表达式
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><h4 id="非引用表达式"> 非引用表达式</h4>
<div><pre><code>{
  ...Metric其他配置
  alias: &#39;字段名&#39;, // 必填项
  type: &#39;exp&#39;, // 字段类型标记为表达式
  exp: &#39;sum(store_cost) / count(store_sales)&#39; // 非引用表达式定义
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h3 id="lod-include-exclude"> LOD INCLUDE/EXCLUDE</h3>
<div><pre><code>{
  ...Metric其他配置
  alias: &#39;字段名&#39;, // 必填项
  type: &#39;exp&#39;, // 字段类型标记为表达式
  exp: &#39;avg({INCLUDE `dim` : sum(`col`)})&#39; // 非引用表达式定义
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><pre><code>{
  ...Metric其他配置
  alias: &#39;字段名&#39;, // 必填项
  type: &#39;exp&#39;, // 字段类型标记为表达式
  exp: &#39;{ EXCLUDE `dim` : sum(`col`) }&#39; // 非引用表达式定义
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="filtergroup"> FilterGroup</h2>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">安装配置(Tomcat)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/1-install/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/1-install/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="安装配置-tomcat"> 安装配置(Tomcat)</h1>
<h2 id="企业版部署"> 企业版部署</h2>
<p>在您购买我们的企业版产品以及服务之后，将会有专门的技术人员为您快速私有化部署</p>
<h2 id="项目要求"> 项目要求</h2>
<ul>
<li>JDK1.8 (Java 环境)</li>
<li>MySQL5.7+/SQLServer/Postgresql/Oracle (系统元数据存储)</li>
<li>Apache Tomcat 8.5</li>
<li>建议浏览器 Chrome</li>
<li>操作系统 Linux(首选CentOS7), Windows</li>
<li>IBI war包<strong>app-web.war</strong>、元数据创建脚本<strong>cboard.sql</strong></li>
<li>pkg-puppeteer 用于导出看板、邮件发送</li>
<li>用户需有基础的数据库、数据仓库、OLAP 数据分析知识或者 Excel 透视表使用经验</li>
</ul>
<h2 id="元数据准备"> 元数据准备</h2>
<h3 id="mysql"> mysql</h3>
<div><pre><code><span>CREATE</span> <span>DATABASE</span> cboard <span>CHARACTER</span> <span>SET</span> utf8<span>;</span>
</code></pre>
<div><span>1</span><br></div></div><p>运行脚本mysql相关脚本，您可以选择通过命令行执行或者拷贝脚本在您熟悉的数据库客户端工具执行</p>
<div><pre><code>source db/mysql.sql
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>确认数据库创建成功</p>
</blockquote>
<div><pre><code>mysql&gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cboard             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql&gt; use cboard;
Database changed

mysql&gt; show tables;
+------------------------+
| Tables_in_cboard       |
+------------------------+
| Meta_Version           |
| dashboard_board        |
| dashboard_board_param  |
| dashboard_category     |
| dashboard_dataset      |
| dashboard_datasource   |
| dashboard_folder       |
| dashboard_job          |
| dashboard_role         |
| dashboard_role_dataset |
| dashboard_role_res     |
| dashboard_shared_board |
| dashboard_user         |
| dashboard_user_role    |
| dashboard_widget       |
| log_data_access        |
+------------------------+
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br></div></div><h3 id="oracle"> oracle</h3>
<p>运行脚本 db/oracle/cboard.sql</p>
<h2 id="环境配置"> 环境配置</h2>
<p>当服务器有多个不同的JDK版本，需要指定Tomcat的运行的JDK版本时
windows找到bin下的catalina.bat；在文件的开始出添加如下代码：</p>
<div><pre><code>set JAVA_HOME=D:\Program Files\Java\jdk8
</code></pre>
<div><span>1</span><br></div></div><p>linux设置catalina.sh</p>
<div><pre><code>export JAVA_HOME=/home/jdk/Java/jdk8
</code></pre>
<div><span>1</span><br></div></div><h2 id="部署应用"> 部署应用</h2>
<p>拷贝ibi war包app-web.war到tomcat的webapps目录，建议修改app-web.war包名称为ROOT.war，如有名称冲突可以先备份重名应用、或者删除同名ROOT应用，</p>
<div><p>提示</p>
<p>您也可以选择应用不以ROOT名称部署，但是部署启动完成之后，配置里面<code>frontend.baseurl</code>需要修改为对应名称, 比如部署名称为cboard</p>
<div><pre><code><span># Headless 浏览器导出访问 url 配置</span>
<span>frontend.baseurl</span><span>=</span><span>http://localhost:8080/cboard</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div></div>
<h2 id="启动tomcat"> 启动Tomcat</h2>
<p>启动tomcat，${TOMCAT_HOME}/bin/startup.sh，自动解压war包</p>
<div><p>提示</p>
<p>注意第一次自动时由于war包中默认的配置文件（包含元数据链接、日志数据库、pkg-puppeteer所在目录等）与您的部署环境不一致，所以会有启动报错，启动解压完成之后，忽略错误，停止tomcat服务即可</p>
</div>
<h2 id="修改配置文件"> 修改配置文件</h2>
<blockquote>
<p>src/main/resources/config.properties</p>
</blockquote>
<div><pre><code><span>validationQuery</span><span>=</span><span>SELECT 1</span>
<span># MySql 数据库需要加 characterEncoding 编码参数方式元数据中文乱码</span>
<span>jdbc_url</span><span>=</span><span>jdbc:mysql://localhost:3306/cboard?characterEncoding=utf-8</span>
<span># 修改为您自己的数据库用户名与密码</span>
<span>jdbc_username</span><span>=</span><span>cboard</span>
<span>jdbc_password</span><span>=</span><span>cboard</span>
<span>jdbc.threadpool.maxActive</span><span>=</span><span>5</span>

<span># SqlServer连接串</span>
<span>#jdbc_url=jdbc:sqlserver://192.168.xxx:1433;databaseName=CBoard</span>


<span># 日志数据库与上面的元数据一致即可，注释状态与元数据保持一致</span>
<span># 也可以单独配置日志数据库，需要保证连接库中存在log_data_access表</span>
<span># log_jdbc_url=jdbc:mysql://localhost:3306/cboard?characterEncoding=utf-8</span>
<span># log_jdbc_username=cboard</span>
<span># log_jdbc_password=cboard</span>

<span># Service configuration</span>
<span>dataprovider.resultLimit</span><span>=</span><span>1000000</span>
<span># 超级管理员ID, 默认元数据库超级管理员 admin user_id 为1, CAS/OAuth2.0 场景下根据自己的情况配置</span>
<span>admin_user_id</span><span>=</span><span>1</span>
<span># 看板导出相关配置，不同平台有对应的导出插件</span>
<span>pkg_puppetter</span><span>=</span><span>/Users/peter/Documents/cboard/pkg-puppeteer/build/pkg-puppeter-macos</span>

<span># 交叉表是否合并表头阈值=行维数量 * 数据行数</span>
<span>#pivot.table.mergeLimit=500</span>

<span>mail.smtp.host</span><span>=</span><span>smtp.sina.com</span>
<span>mail.smtp.port</span><span>=</span><span>25</span>
<span>mail.smtp.from</span><span>=</span>
<span>mail.smtp.username</span><span>=</span>
<span>mail.smtp.password</span><span>=</span>
<span>#mail.smtp.ssl.checkserveridentity=false</span>

<span>org.quartz.threadPool.threadCount</span><span>=</span><span>2</span>

<span># 内部聚合器类型: h2[default], clickhouse</span>
<span>aggregator.type</span><span>=</span><span>h2</span>
<span># Set batch size load size, times by 1 thousand</span>
<span>aggregator.batchReadSize</span><span>=</span><span>50</span>
<span>aggregator.batchLoadSize</span><span>=</span><span>10</span>
<span># aggregator.cleanJob.quartz=0 0 0 * * ?</span>

<span># Storage File Syatem 离线数据缓存配置</span>
<span># 1 Stores data in file system 默认配置为文件形式存储</span>
<span>aggregator.h2.url</span><span>=</span><span>jdbc:h2:~/H2Data/cboard;AUTO_SERVER=TRUE;LOG=0;UNDO_LOG=0</span>
<span># 2 Stores data outside of the VM's heap - useful for large memory DBs without incurring GC costs.</span>
<span>#aggregator.h2.url=jdbc:h2:nioMemFS:cboard;LOG=0;UNDO_LOG=0</span>
<span>aggregator.h2.database.name</span><span>=</span><span>cboard</span>
<span>aggregator.h2.threadpool.maxActive</span><span>=</span><span>10</span>

<span># Clickhouse离线聚合器相关配置</span>
<span>aggregator.ck.url</span><span>=</span><span>jdbc:clickhouse://ip:8123/ibi</span>
<span>aggregator.ck.database.name</span><span>=</span><span>ibi</span>
<span>aggregator.ck.username</span><span>=</span><span>peter</span>
<span>aggregator.ck.password</span><span>=</span><span>peter</span>
<span>aggregator.ck.pool.minIdle</span><span>=</span><span>5</span>
<span>aggregator.ck.pool.maxIdle</span><span>=</span><span>10</span>
<span>aggregator.ck.pool.maxActive</span><span>=</span><span>5</span>

<span># 日志过滤规则，正则表达式</span>
<span>log.negativeFilter</span><span>=</span><span>List\\.do</span>
<span>log.positiveFilter</span><span>=</span>

<span># Headless 浏览器导出访问 url 配置</span>
<span>frontend.baseurl</span><span>=</span><span>http://localhost:8088</span>

<span>frame.options.whitelist</span><span>=</span><span>http://localhost:8080,http://localhost:8011</span>

<span># 会话过期失效，单位分钟</span>
<span>session.timeoutMinutes</span><span>=</span><span>300</span>

<span># 认证类型，可配置 jdbc，cas，oauth2, ldap</span>
<span>spring.security.auth.type</span><span>=</span><span>jdbc</span>

<span>#cas</span>
<span>#caso.client.url=http://localhost:8026</span>
<span>#caso.client.check=${caso.client.url}/login/cas</span>

<span>caso.server.url</span><span>=</span><span>https://ip:8443/cas</span>
<span>caso.server.login</span><span>=</span><span>${caso.server.url}/login</span>
<span>caso.server.logout</span><span>=</span><span>${caso.server.url}/logout</span>

<span>#cas RestAPI</span>
<span>caso.server.tgt</span><span>=</span><span>${caso.server.url}/v1/tickets</span>
<span>caso.server.validate</span><span>=</span><span>${caso.server.url}/serviceValidate</span>

<span>#OAuth2</span>
<span>## implicit</span>
<span>oauth2.implicit.url</span><span>=</span><span>http://ip:8080/oauth2/oauth/authorize?response_type=token&amp;scope=read</span>
<span>oauth2.userInfo</span><span>=</span><span>http://ip:8080/oauth2/m/user_info?access_token=</span>
<span>oauth2.client_id</span><span>=</span><span>ibi-app</span>
<span>oauth2.client_secret</span><span>=</span><span>client_secret</span>
<span>oauth2.redirect_uri</span><span>=</span><span>http://localhost:8088/login.html</span>

<span>#LDAP</span>
<span>#ldap.url=ldap://www.zflexldap.com:389</span>
<span>#ldap.base=dc=zflexsoftware,dc=com</span>
<span>#ldap.userDn=cn=ro_admin,ou=sysadmins</span>
<span>#ldap.password=zflexpass</span>
<span>#ldap.principalPattern=uid=%s,ou=users,ou=guests</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br><span>72</span><br><span>73</span><br><span>74</span><br><span>75</span><br><span>76</span><br><span>77</span><br><span>78</span><br><span>79</span><br><span>80</span><br><span>81</span><br><span>82</span><br><span>83</span><br><span>84</span><br><span>85</span><br><span>86</span><br><span>87</span><br><span>88</span><br><span>89</span><br><span>90</span><br><span>91</span><br><span>92</span><br><span>93</span><br><span>94</span><br><span>95</span><br><span>96</span><br><span>97</span><br><span>98</span><br><span>99</span><br><span>100</span><br><span>101</span><br><span>102</span><br></div></div><h2 id="重启启动tomcat"> 重启启动Tomcat</h2>
<p>在元数据库连接没有问题的情况下，正常启动Tomcat，并访问</p>
<blockquote>
<p>http://hostname:port<br>
默认用户名与密码为:admin/root123</p>
</blockquote>
<h2 id="更新license授权文件"> 更新License授权文件</h2>
<ol>
<li>申请IBI商业授权，需要向服务商提供布局环境硬件信息，
登录系统，右下角点击License信息获取相关信息。</li>
<li>获取了正式的商业授权（license.cert文件）之后，覆盖原有授权文件, License更新不需要重启Tomcat</li>
</ol>
<blockquote>
<p>${tomcat_home}/webapps/ROOT/WEB-INF/classes/license.cert</p>
</blockquote>
<h2 id="ibi-logo-与脚注修改"> IBI Logo 与脚注修改</h2>
<h3 id="说明"> 说明</h3>
<p>为了方便软件服务企业对外提供服务，我们允许客户修改 logo 与脚注相关内容</p>
<blockquote>
<p>但是版权声明可以替换为空白，或者单纯的公司信息，但是不允许申明为自己公司版权</p>
</blockquote>
<p>如：</p>
<div><p>允许</p>
<p>xxx 公司 【允许】</p>
</div>
<div><p>禁止</p>
<p>Copyright © xxx 公司 . All rights reserved. 【不允许】<br>
版权 © xxx 公司 . 保留所有版权. 【不允许】</p>
</div>
<h3 id="通过配置文件替换"> 通过配置文件替换</h3>
<blockquote>
<p>js/Settings.js</p>
</blockquote>
<div><pre><code><span>var</span> settings <span>=</span> <span>{</span>
    <span>preferredLanguage</span><span>:</span> <span>'cn'</span><span>,</span> <span>// en/cn: Switch language to Chinese</span>
    <span>baseServerUrl</span><span>:</span> <span>''</span><span>,</span>
    <span>loginLogoHtml</span><span>:</span> <span>null</span><span>,</span>
    <span>headerLogoHtml</span><span>:</span> <span>null</span><span>,</span>
    <span>copyrightHtml</span><span>:</span> <span>null</span><span>,</span>
    <span>showBoardUpdateAlert</span><span>:</span> <span>true</span>
<span>}</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><ul>
<li>loginLogoHtml：登录页 logo 位置 html</li>
<li>headerLogoHtml：主界面页眉左上角 IBI logo html</li>
<li>copyrightHtml：页脚左下角版权申明 html</li>
</ul>
<div><p>修改之后不生效</p>
<p>静态资源修改之后需要清理浏览器缓存，可通过浏览开发控制确认</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210628162850.png" alt="" /></p>
<h3 id="通过回调函数"> 通过回调函数</h3>
<blockquote>
<p>ext/ext.js</p>
</blockquote>
<div><pre><code><span>/**
 登录页面加载完成回调函数，加载完成之后，可以通过 dom 操作改变任意 dom 内容与样式
 **/</span>
<span>function</span> <span>onLoginPageMounted</span><span>(</span><span>)</span> <span>{</span>
    console<span>.</span><span>log</span><span>(</span><span>'Login page mounted'</span><span>)</span><span>;</span>
    <span>//$('#login-logo').html('');</span>
<span>}</span>

<span>/**
 主界面加载完成回调函数，加载完成之后，可以通过 dom 操作改变任意 dom 内容与样式
 **/</span>
<span>function</span> <span>onMainPageMounted</span><span>(</span><span>)</span> <span>{</span>
    console<span>.</span><span>log</span><span>(</span><span>'Main page mounted!'</span><span>)</span><span>;</span>
    <span>// $('#footer-copyright').html('&lt;b>版权&lt;/b>');</span>
    <span>// $('#header-logo').html('');</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h2 id="使用基本步骤"> 使用基本步骤</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210628163013.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">安装配置</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/1_2-install/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/1_2-install/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="企业版部署"> 企业版部署</h2>
<p>从1.6开始从基于Tomcat部署，改为SpringBoot版本部署</p>
<ul>
<li>如果您要查看<a href="./1-install.html">1.6之前的部署文档请点击</a></li>
<li>如果您要<a href="./tomcat2springboot.html">从Tomcat版本升级到现在的SpringBoot版本请点击</a></li>
</ul>
<h2 id="项目要求"> 项目要求</h2>
<ul>
<li>JDK1.8 (Java 环境)</li>
<li>MySQL5.7+/SQLServer/Postgresql/Oracle (系统元数据存储)</li>
<li>建议浏览器 Chrome</li>
<li>操作系统 Linux(首选CentOS7), Windows</li>
<li>IBI安装包<strong>ibi-2022-xx-xx.zip</strong>、元数据创建脚本<strong>cboard.sql</strong></li>
<li>pkg-puppeteer 用于邮件发送</li>
<li>用户需有基础的数据库、数据仓库、OLAP 数据分析知识或者 Excel 透视表使用经验</li>
</ul>
<h2 id="元数据准备"> 元数据准备</h2>
<h3 id="mysql"> mysql</h3>
<div><pre><code><span>CREATE</span> <span>DATABASE</span> cboard <span>CHARACTER</span> <span>SET</span> utf8<span>;</span>
</code></pre>
<div><span>1</span><br></div></div><p>运行脚本mysql相关脚本，您可以选择通过命令行执行或者拷贝脚本在您熟悉的数据库客户端工具执行</p>
<div><pre><code>source db/mysql.sql
</code></pre>
<div><span>1</span><br></div></div><blockquote>
<p>确认数据库创建成功</p>
</blockquote>
<div><pre><code>mysql&gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cboard             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql&gt; use cboard;
Database changed

mysql&gt; show tables;
+------------------------+
| Tables_in_cboard_dev   |
+------------------------+
| Meta_Version           |
| config                 |
| dashboard_board        |
| dashboard_board_param  |
| dashboard_category     |
| dashboard_dataset      |
| dashboard_datasource   |
| dashboard_folder       |
| dashboard_job          |
| dashboard_report       |
| dashboard_role         |
| dashboard_role_dataset |
| dashboard_role_res     |
| dashboard_shared_board |
| dashboard_template     |
| dashboard_user         |
| dashboard_user_res     |
| dashboard_user_role    |
| dashboard_widget       |
| dataset_role_template  |
| form_config            |
| form_release           |
| log_action             |
| log_data_access        |
| my_favorite            |
+------------------------+
25 rows in set (0.00 sec)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br></div></div><h3 id="oracle"> oracle</h3>
<p>运行脚本 db/oracle/cboard.sql</p>
<h2 id="安装部署"> 安装部署</h2>
<div><pre><code><span>mkdir</span> ibi
<span>cd</span> ibi
<span>## 把ibi-xxx.zip拷贝到该目录, 运行解压命令，解压到app文件夹，app目录自动创建</span>
<span>unzip</span> <span>-d</span> app ibi-1.6.0.zip
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>Note</p>
<p>下面的介绍中我们把刚才解压的目录成为<strong>IBI_HOME</strong>, 考虑后续的运维与升级，我们把文件拆分为<code>可以保留</code>与每次更新<code>需更新</code>两部分</p>
</div>
<div><pre><code><span>ls</span> app
<span>## 以下目录和文件可以保留</span>
├── config        <span># 配置文件授权证书存储目录</span>
│     ├── application.properties
│     ├── license.cert
│     ├── logback.xml
│     ├── quartz.properties
├── user-files     <span># 包含upload之类用户生成的文件夹</span>
├── ext-lib     <span># 存放用户添加的第三方jar包，如数据库驱动等</span>
├── start-server.sh  <span># 启动脚本</span>
├── stop-server.sh <span># 停止脚本</span>

<span>## 以下目录和文件需更新</span>
├── template <span># 邮件、微信消息 等模板文件</span>
├── static <span># 存放服务端提供的静态资源</span>
├── webui <span># 前端资源文件夹</span>
├── ibi.jar  <span># springboot fat jar</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><p>当服务器有多个不同的JDK版本，需要指定Tomcat的运行的JDK版本时</p>
<p>linux设置start-server.sh</p>
<div><pre><code>export JAVA_HOME=/home/jdk/Java/jdk8
</code></pre>
<div><span>1</span><br></div></div><h2 id="修改配置文件"> 修改配置文件</h2>
<p>修改<em>config/application.properties</em>配置文件夹下面的配置项，其他的配置保持默认</p>
<div><pre><code><span>#</span>
<span># meta datasource</span>
<span>#</span>
<span>datasource.meta.name</span><span>=</span><span>meta</span>
<span>datasource.meta.driver-class-name</span><span>=</span><span>com.mysql.jdbc.Driver</span>
<span>datasource.meta.url</span><span>=</span><span>jdbc:mysql://localhost:3306/cboard_dev?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>datasource.meta.username</span><span>=</span><span>root</span>
<span>datasource.meta.password</span><span>=</span><span>xxx</span>
<span>datasource.meta.max-active</span><span>=</span><span>10</span>
<span>datasource.meta.min-idle</span><span>=</span><span>0</span>
<span>datasource.meta.initialSize</span><span>=</span><span>1</span>
<span>datasource.meta.breakAfterAcquireFailure</span><span>=</span><span>true</span>

<span>server.port</span><span>=</span><span>8026</span>
<span>server.servlet.context-path</span><span>=</span><span>/cboard</span>

<span>#</span>
<span># https相关配置</span>
<span>#</span>
<span>#server.ssl.key-store=classpath:.xxxx.jks</span>
<span>#server.ssl.key-store-password=xxx</span>
<span>#server.ssl.keyStoreType=JKS</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br></div></div><h2 id="启动服务"> 启动服务</h2>
<div><pre><code><span>chmod</span> <span>755</span> start-server.sh stop-server.sh
./start-server.sh

./start-server.sh
<span>[</span>IBI<span>]</span> Working path <span>=</span> /root/install/cboard/uat/springboot
<span>[</span>IBI<span>]</span> Set basePath to parent <span>path</span><span>=</span>.
<span>[</span>IBI<span>]</span> <span>basePath</span><span>=</span>.
<span>[</span>IBI<span>]</span> Set classpath to <span>'.:.:./ibi.jar:./config:./ext-lib'</span>
<span>[</span>IBI<span>]</span> Server is starting, <span>pid</span><span>=</span><span>6644</span>
<span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span>
check log <span>command</span> <span>==</span><span>==</span><span>></span>      <span>tail</span> <span>-f</span> /root/install/cboard/uat/springboot/logs/cboard.log
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><pre><code><span># 启动成功之后脚本自动运行tail命令显示实时日期, 用户可以按 ctrl+c 中断日期显示, 不影响服务后台运行</span>
<span>tail</span> <span>-f</span> /root/install/cboard/uat/springboot/logs/cboard.log
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><blockquote>
<p>http://hostname:port/context<br>
默认用户名与密码为:admin/root123</p>
</blockquote>
<h2 id="更新license授权文件"> 更新License授权文件</h2>
<ol>
<li>申请IBI商业授权，需要向服务商提供布局环境硬件信息，
登录系统，右下角点击License信息获取相关信息。</li>
<li>获取了正式的商业授权（license.cert文件）之后，覆盖原有授权文件, License更新不需要重启服务</li>
</ol>
<blockquote>
<p>${IBI_HOME}/config/license.cert</p>
</blockquote>
<h2 id="使用基本步骤"> 使用基本步骤</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210628163013.png" alt="" /></p>
<h2 id="利用nginx同时兼容http和https"> 利用Nginx同时兼容http和https</h2>
<div><pre><code>{
    # https 转发到服务端
    server {
        listen 443 ssl;
        server_name  www.ibidemo.com;

        ssl_certificate conf.d/www.ibidemo.cn_bundle.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
        ssl_certificate_key conf.d/www.ibidemo.cn.key;     #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

        # 表示使用的加密套件的类型。
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
        ssl_prefer_server_ciphers on;

        location / {
             proxy_pass  https://www.ibidemo.com:8026; # 转发默认服务端口
        }
    }

    # 转发http到https
    server {
        listen 80;
        server_name www.ibidemo.com;
        return 301 https://$host$request_uri;
    }

}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br></div></div><h2 id="nginx负载均衡配置"> Nginx负载均衡配置</h2>
<ol>
<li>包含context写法</li>
</ol>
<div><pre><code>    upstream lbs {
        server 192.168.0.100:8080;
        server 192.168.0.101:8080;
    }

    server {
       listen  88;
       location /ibi/ { # 结尾的/不能少
           proxy_pass http://lbs/;
        }
    }
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><p>注意</p>
<p>结尾的斜杠不能少
location /ibi<span style="color:red">/</span></p>
</div>
<ol start="2">
<li>不包含context写法</li>
</ol>
<div><pre><code>    upstream lbs {
        server 192.168.0.100:8080;
        server 192.168.0.101:8080;
    }

    server {
       listen  88;
       location / {
           proxy_pass http://lbs/;
        }
    }
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><p>参考</p>
<p><a href="https://blog.csdn.net/xyang81/article/details/51702900" target="_blank" rel="noopener noreferrer">Nginx负载均衡配置</a><br>
<a href="https://www.jianshu.com/p/b010c9302cd0" target="_blank" rel="noopener noreferrer">nginx 之 proxy_pass详解</a></p>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">邮件发送与服务端导出插件</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/2-puppetter/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/2-puppetter/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="pkg-puppeteer插件"> pkg-puppeteer插件</h2>
<p><code>pkg-puppeteer</code>插件用于服务端模拟请求看板页面，生成看板截图，比如: 定时任务邮件发送、大屏导出。</p>
<p>该插件基于Google Chrome团队的puppeteer开发，使用pkg打包成不同平台的可执行文件，避免了用户在安装时对依赖的nodejs。
puppeteer是phantomjs停止更新维护之后服务端模拟请求页面截图更好的选择，比phantomjs兼容性更好，功能更加强大。</p>
<div><p>提示</p>
<p>pkg-puppeteer插件由我们提供, 此外用户不需要安装nodejs相关环境</p>
</div>
<p>我们为用户准备的导出插件自带chromium，目录结构如下</p>
<ul>
<li><strong>linux平台</strong></li>
</ul>
<div><pre><code>|-- chromium
|   `-- chrome-linux
|-- pkg-puppeter-linux

pkg-puppeter-linux 会通过相对路径调用chromium/chrome-linux
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><ul>
<li><strong>windows平台</strong></li>
</ul>
<div><pre><code>|-- chromium
|   `-- chrome-win
|-- pkg-puppeter-win.exe
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>关于chromium</p>
<p>不同操作系统的chromium运行依赖各有不同，具体参照官方文档<a href="https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch" target="_blank" rel="noopener noreferrer">chrome-headless-doesnt-launch</a></p>
</div>
<h2 id="测试chromium是否能够正常运行"> 测试Chromium是否能够正常运行</h2>
<p>进入chromium/chrome-linux</p>
<div><p>出现下面的提示为能正常运行</p>
<p>root @ tcc4 in /opt/pkg-puppeteer/chromium/chrome-linux [10:07:21]
$ ./chrome
[15657:15657:0326/100725.664920:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.</p>
</div>
<div><p>出现下面的提示为不能正常运行</p>
<p>[root@VM_0_4_centos chrome-linux]# ./chrome
./chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory</p>
</div>
<h2 id="chromium依赖安装"> Chromium依赖安装</h2>
<h3 id="centos7"> CentOS7</h3>
<div><pre><code>yum install -y pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc
</code></pre>
<div><span>1</span><br></div></div><h3 id="centos8"> CentOS8</h3>
<div><pre><code>sudo yum install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
</code></pre>
<div><span>1</span><br></div></div><div><pre><code>sudo yum install -y chromium
sudo yum install -y chromium libmng libXScrnSaver libXv
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="ubuntu20"> Ubuntu20</h3>
<ul>
<li><a href="https://postsrc.com/code-snippets/how-to-install-latest-stable-chrome-version-in-ubuntu-puppeteer" target="_blank" rel="noopener noreferrer">参考Ubuntu20运行puppeteer</a></li>
</ul>
<div><pre><code>sudo apt-get install -y nodejs gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev libxshmfence-dev
</code></pre>
<div><span>1</span><br></div></div><ul>
<li>MacOSX, Windows(只支持64位操作系统)
暂时发现可以直接运行</li>
</ul>
<h2 id="系统配置指定插件安装目录"> 系统配置指定插件安装目录</h2>
<h3 id="通过配置文件修改"> 通过配置文件修改</h3>
<div><pre><code><span># [必须修改] 看板导出、邮件发送依赖插件安装目录</span>
<span>## Linux配置</span>
<span>pkg_puppetter</span><span>=</span><span>/xxx/pkg-puppeteer/pkg-puppeter-linux</span>
<span>## Windows配置</span>
<span>pkg_puppetter</span><span>=</span><span>/xxx/pkg-puppeteer/pkg-puppeter-win-x64.exe</span>
<span># [必须修改] 导出插件模拟请求地址</span>
<span>frontend.baseurl</span><span>=</span><span>http://localhost:8026/cboard</span>
<span># [可选配置] 导出插件请求参数, 可以设置模拟请求浏览器高宽与缩放</span>
<span>pkg.puppetter.args</span><span>=</span><span>-DvpWidth=1920 -DvpHeight=1080</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><div><p>提示</p>
<p>配置文件修改之后需要重启服务</p>
</div>
<h3 id="通过系统配置页面修改"> 通过系统配置页面修改</h3>
<p>配置内容同上, 配置文件修改之后<strong>不需要</strong>重启服务</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220804142741.png" alt="" /></p>
<h2 id="依赖字体安装-导出中文乱码时安装"> 依赖字体安装(导出中文乱码时安装)</h2>
<p><a href="https://hcc2.ibidemo.cn/releases/pkg-puppeter/fonts/" target="_blank" rel="noopener noreferrer">下载字体</a> 到<code>font</code>目录</p>
<h3 id="linux"> linux</h3>
<p>进入font目录</p>
<div><pre><code><span>mkdir</span> /usr/share/fonts/custom
<span>cp</span> *.ttf  /usr/share/fonts/custom
fc-cache <span>-fv</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h3 id="windows"> Windows</h3>
<p>直接拷贝字体文件到Windows字体目录</p>
<blockquote>
<p>C:\WINDOWS\Fonts</p>
</blockquote>
<p>安装字体完成之后需要重启BI服务</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">系统升级</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/3-update/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/3-update/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<div><p>提示</p>
<p>在升级操作之前请备份原应用和数据库</p>
</div>
<h2 id="ibi目录结构"> IBI目录结构</h2>
<div><pre><code><span>ls</span> app
<span>## 以下目录和文件可以保留</span>
├── config        <span># 配置文件授权证书存储目录</span>
│     ├── application.properties
│     ├── license.cert
│     ├── logback.xml
│     ├── quartz.properties
├── user-files     <span># 包含upload之类用户生成的文件夹</span>
├── ext-lib     <span># 存放用户添加的第三方jar包，如数据库驱动等</span>
├── start-server.sh  <span># 启动脚本</span>
├── stop-server.sh <span># 停止脚本</span>

<span>## 以下目录和文件需更新</span>
├── template <span># 邮件、微信消息 等模板文件</span>
├── static <span># 存放服务端提供的静态资源</span>
├── webui <span># 前端资源文件夹</span>
├── ibi.jar  <span># springboot fat jar</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div><h2 id="更新数据库"> 更新数据库</h2>
<ol>
<li>当新版本数据库有新增表和字段变更时需要更新数据库，</li>
<li>数据库增量更新脚本一般在对应类型数据库脚本目录的<code>patch</code>文件夹下面，</li>
<li>更新跨越多个版本需要回溯执行之前的更新脚本</li>
</ol>
<div><p>提示</p>
<p>升级操作可以选择在新目录升级，或者原目录升级，根据公司偏好任选一种即可</p>
</div>
<h2 id="新目录升级"> 新目录升级</h2>
<ol>
<li>进去旧版本安装目录并停止服务，访问应用确保服务停止成功并不可访问</li>
</ol>
<div><pre><code>./stop-server.sh
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>解压新版本zip文件到新目录</li>
<li>从旧版本的安装目录下面拷贝下面的文件/文件夹到新目录并覆盖</li>
</ol>
<div><pre><code><span>ls</span> app
<span>## 以下目录和文件可以保留</span>
├── config        <span># 配置文件授权证书存储目录</span>
│     ├── application.properties
│     ├── license.cert
│     ├── logback.xml
│     ├── quartz.properties
├── user-files     <span># 包含upload之类用户生成的文件夹</span>
├── ext-lib     <span># 存放用户添加的第三方jar包，如数据库驱动等</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><ol start="4">
<li>启动服务</li>
</ol>
<div><pre><code>./start-server.sh start
</code></pre>
<div><span>1</span><br></div></div><ol start="5">
<li>访问应用，检查版本号</li>
</ol>
<ul>
<li>前端版本号: 登陆服务页脚查看</li>
<li>服务端版本号: 点击页脚License，弹窗查看Server Version
<img src="http://qiniu.ibidemo.cn/picgo/20231009103544.png" alt="" /></li>
</ul>
<h2 id="原目录升级"> 原目录升级</h2>
<ol>
<li>进去安装目录并停止服务，访问应用确保服务停止成功并不可访问</li>
</ol>
<div><pre><code>./stop-server.sh
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>解压新版本zip文件到新目录</li>
<li>简单备份旧版本文件</li>
</ol>
<div><pre><code><span>mkdir</span> bak-2023xxxx
<span>cp</span> <span>-r</span> template webui ibi.jar bak-2023xxxx
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><ol start="4">
<li>在新版本解压目录下拷贝以下文件/文件夹，并拷贝覆盖到原目录</li>
</ol>
<div><pre><code><span>## 以下目录和文件需更新</span>
├── template <span># 邮件、微信消息 等模板文件</span>
├── static <span># 存放服务端提供的静态资源</span>
├── webui <span># 前端资源文件夹</span>
├── ibi.jar  <span># springboot fat jar</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><ol start="5">
<li>启动服务</li>
</ol>
<div><pre><code>./start-server.sh start
</code></pre>
<div><span>1</span><br></div></div><ol start="6">
<li>访问应用，检查版本号</li>
</ol>
<ul>
<li>前端版本号: 登陆服务页脚查看</li>
<li>服务端版本号: 点击页脚License，弹窗查看Server Version
<img src="http://qiniu.ibidemo.cn/picgo/20231009103544.png" alt="" /></li>
</ul>
<h2 id="补丁更新"> 补丁更新</h2>
<p>补丁更新应用场景为bug修复，这类更新通过不会有大范围改动，仅对已知问题进行简单修复</p>
<h3 id="服务端补丁"> 服务端补丁</h3>
<p>覆盖更新<code>ibi.jar</code>单个文件即可，覆盖操作之前建议先备份</p>
<h3 id="前端补丁"> 前端补丁</h3>
<p>覆盖更新<code>webui</code>文件夹即可，覆盖操作之前建议先备份</p>
<h2 id="puppeteer插件更新"> puppeteer插件更新</h2>
<p>Puppeteer插件用于服务端模拟请求，使用场景为定时任务发送看板、看板数据监控、大屏导出等场景<br>
Puppeteer更新频率比较低<br>
具体安装配置查看<a href="../2-puppetter">邮件发送与服务端导出章节</a></p>
<h2 id="_1-15-升级说明"> 1.15 升级说明</h2>
<p>安装包目录如下:</p>
<div><pre><code><span>.</span>
├── config
├── datax
├── ext-lib
├── ibi.jar
├── koa-api  <span># 本次新增nodejs服务</span>
├── logs
├── start-server.bat
├── start-server.sh
├── static
├── stop-server.sh
├── template
├── user-files
├── webui
└── webui-mobile
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br></div></div><h3 id="nodejs服务配置"> nodejs服务配置</h3>
<ul>
<li>本次新增用于服务端多维数据构造的nodejs服务，改服务位于koa-api目录</li>
<li>nodejs服务为可选配置，本次更新功能中，下列工需用到nodejs服务
<ul>
<li>交叉表导出数据到数据库、</li>
<li>复杂报表使用多维查询高级配置、数据集表达值、指标值类型快速配置</li>
</ul>
</li>
<li>当<code>config/application.properties</code>配置文件中包含nodejs服务地址配置时，start-server.sh、stop-server.sh脚本启动服务时会开启nodejs服务</li>
</ul>
<div><pre><code><span>nodejs.koa2.base-url</span><span>=</span><span>http://localhost:8027</span>
</code></pre>
<div><span>1</span><br></div></div><ul>
<li><code>start-server.sh</code> 增加默认参数，不需要输入start命令参数</li>
<li><code>stop-server.sh</code> 增加停止nodejs服务</li>
<li>nodejs服务自身配置</li>
</ul>
<div><pre><code>$ tree koa-api
koa-api
├── bundle.js
├── bundle.js.LICENSE.txt
├── config.js <span># 配置文件 </span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><div><pre><code>module<span>.</span>exports <span>=</span> <span>{</span>
    <span>baseServerUrl</span><span>:</span> <span>'http://localhost:8026/'</span><span>,</span> <span>// 指向java web服务地址</span>
    <span>port</span><span>:</span> <span>8027</span><span>,</span> <span>// nodejs服务启动端口，与application.properties中nodejs.koa2.base-url对应</span>
<span>}</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">Nginx负载均衡部署</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/4-multinode/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/4-multinode/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="nginx负载均衡部署"> Nginx负载均衡部署</h1>
<p>多个BI服务部署在不同服务器，在其中任意服务器或单独一台服务器做部署Nginx服务做复杂均衡，请求转发</p>
<h2 id="部署bi服务"> 部署BI服务</h2>
<p>部署两份服务，服务地址分别为</p>
<ul>
<li>http://192.168.0.100:8080/cboard</li>
<li>http://192.168.0.101:8080/cboard</li>
</ul>
<h2 id="部署nginx服务"> 部署nginx服务</h2>
<p>在 Nginx 中配置负载均衡可以通过 upstream 配置块实现。</p>
<div><pre><code># 定义负载均衡的后端服务器组
upstream cboard_backend {
    # 添加两台服务的地址
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;

    # 可选：设置负载均衡策略（默认是轮询）
    # Least connections (最少连接)
    # least_conn;
    # IP 哈希（客户端IP固定分配到某一台后端服务器）
    # ip_hash;
}

server {
    # 监听的端口，可以是 80（HTTP）或 443（HTTPS）
    listen 80;

    # 配置访问域名或 IP（如果不需要域名可以直接用默认配置）
    server_name cboard.example.com;

    # 定义上下文路径
    location /cboard {
        # 将请求转发到后端的 upstream 组
        proxy_pass http://cboard_backend;

        # 设置头信息，确保后端服务获取客户端真实 IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 可选：设置超时时间
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }

    # 可选：处理错误页面
    error_page 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br></div></div><h3 id="步骤说明"> 步骤说明</h3>
<ol>
<li><strong>定义后端服务器组（upstream）</strong>
• server 192.168.0.100:8080; 和 server 192.168.0.101:8080; 分别指向两个 SpringMVC 服务实例。
• 默认负载均衡策略是 轮询，你也可以选择其他策略，例如 least_conn（最少连接）或 ip_hash（基于客户端 IP）。</li>
<li><strong>设置转发路径（location /cboard）</strong>
• proxy_pass http://cboard_backend; 将请求转发给后端服务器组。
• 如果上下文路径 /cboard 在 Nginx 和后端服务中一致，无需额外配置。如果 Nginx 和后端服务路径不同，需要调整 proxy_pass 的 URL（例如 proxy_pass http://cboard_backend/cboard;）。</li>
<li><strong>添加请求头信息</strong>
• proxy_set_header 确保后端服务能够获取客户端的真实 IP 和 Host 信息。</li>
<li><strong>超时时间</strong>
• 设置合适的连接、读写超时时间（默认 60 秒）。
•如果请求是长连接的 WebSocket 应用，请注意适配。</li>
</ol>
<h1 id="_2-缓存数据库独立部署"> 2 缓存数据库独立部署</h1>
<p>默认的缓存数据库为H2嵌入式内存数据库，有必要可以改为外置的mysql数据库
准备MySQL数据库，在mysql中新建数据库如：cboard_aggregator</p>
<p>配置方式, 修改<code>application.properties</code>中下面内容中的连接信息，并重启</p>
<div><pre><code>aggregator.type=mysql
aggregator.mysql.name=mysql-aggregator
aggregator.mysql.driver-class-name=com.mysql.jdbc.Driver
aggregator.mysql.url=jdbc:mysql://localhost:3306/cboard_aggregator?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai
aggregator.mysql.username=cboard_agg
aggregator.mysql.password=cboard_agg
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h1 id="_3-分布式资源管理minio配置"> 3 分布式资源管理Minio配置</h1>
<p>Minio为分布式文件管理系统，当用户需要使用系统重资源上传功能时，需要把原本上传在本地的文件转移到上传Mino</p>
<h2 id="准备minio组件"> 准备Minio组件</h2>
<p>通过docker-compose.xml启动</p>
<div><pre><code>version: &#39;3&#39;
services:
  minio:
    image: minio/minio:latest
    container_name: minio                                        # 容器名为&#39;minio&#39;
    restart: always                                              # 指定容器退出后的重启策略为始终重启
    volumes:                                                     # 数据卷挂载路径设置,将本机目录映射到容器目录
      - &quot;./data:/data&quot;
      - &quot;./config:/root/.minio&quot;
    environment:                                      # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MINIO_PROMETHEUS_AUTH_TYPE: &quot;public&quot;
      MINIO_ACCESS_KEY: &quot;root&quot;                        # 登录账号
      MINIO_SECRET_KEY: &quot;passw0rd&quot;             # 登录密码
#      MINIO_SERVER_URL: &#39;http://mac-minio.ngrok.auiucloud.com&#39;
#      MINIO_BROWSER_REDIRECT_URL: &#39;http://mac-minio-console.ngrok.auiucloud.com&#39;
#      MINIO_DOMAIN: &#39;mac-minio.ngrok.auiucloud.com&#39;
    command: server --console-address &#39;:9001&#39; /data
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
    ports:                              # 映射端口
      - &quot;9000:9000&quot;
      - &quot;9001:9001&quot;
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br></div></div><h2 id="修改bi配置"> 修改BI配置</h2>
<p>配置方式, 修改<code>application.properties</code>中下面内容中的连接信息，开启resource.type配置</p>
<div><pre><code>resource.type=minio
resource.minio.endpoint=http://127.0.0.1:9000
resource.minio.port=9000
resource.minio.accessKey=root
resource.minio.secretKey=passw0rd
resource.minio.secure=false
resource.minio.bucketName=public
resource.minio.dataBucket=data
resource.minio.imageSize=10485760
resource.minio.fileSize=1073741824
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h1 id="_4-定时任务quartz配置数据库运行"> 4 定时任务Quartz配置数据库运行</h1>
<h2 id="准备quartz数据库"> 准备quartz数据库</h2>
<p>下面对应数据库的Quartz脚本
https://hcc2.ibidemo.cn/releases/quartz/
建议使用mysql</p>
<p>在mysql中新建数据库quartz，并运行quartz脚本</p>
<h2 id="修改bi配置-2"> 修改BI配置</h2>
<p>修改config/quartz.propertes</p>
<div><pre><code>org.quartz.threadPool.threadCount=5
# 取消下面三行注释切换Quartz元数据存储为MySQL
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource=jobQuartzDS

#============================================================================
# Configure Datasources，修改数据库url
#============================================================================


org.quartz.dataSource.jobQuartzDS.driver = com.mysql.cj.jdbc.Driver
org.quartz.dataSource.jobQuartzDS.URL = jdbc:mysql://localhost:3306/quartz?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai
org.quartz.dataSource.jobQuartzDS.user = cboard
org.quartz.dataSource.jobQuartzDS.password = cboard
org.quartz.dataSource.jobQuartzDS.maxConnections = 15

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">SpringBoot升级迁移指引</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/tomcat2springboot/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/ops/tomcat2springboot/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>该文档介绍了原tomcat部署升级迁移至SpringBoot版本的指引</p>
<h2 id="项目要求"> 项目要求</h2>
<div><p>下列环境准备在原部署环境可以沿用</p>
<ul>
<li>JDK1.8 (Java 环境)</li>
<li>MySQL5.7+/SQLServer/Postgresql/Oracle (系统元数据存储)</li>
<li>建议浏览器 Chrome</li>
<li>操作系统 Linux(首选CentOS7), Windows</li>
</ul>
</div>
<div><p>下列项目需要更新</p>
<ul>
<li>IBI安装包<strong>ibi-2022-xx-xx.zip</strong>，[取代原有war包 + tomcat]</li>
<li>元数据变更补丁<strong>151-favorites.sql</strong>，具体以实际情况为准</li>
<li>pkg-puppeteer 用于邮件发送、大屏导出插件[需要更新]</li>
</ul>
</div>
<blockquote>
<p>更新操作之前，找出原系统配置文件，文件路径<br>
<code>TOMCAT_HOME/webapps/ROOT/WEB-INF/classs/config.properties</code></p>
</blockquote>
<h2 id="元数据更新"> 元数据更新</h2>
<p>在原有库上执行元数据变更脚本</p>
<h2 id="导出插件更新"> 导出插件更新</h2>
<p>在原配置文件中找出旧版本插件配置目录</p>
<div><pre><code># 看板导出、邮件发送依赖插件
pkg_puppetter=/opt/pkg-puppeteer/pkg-puppeter-linux
# 导出插件模拟请求地址, 新老版本部署url不变的情况下frontend.baseurl保持不变
frontend.baseurl=http://localhost:8026/cboard
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>导出插件所在目录结构如下, chromium文件夹不用动，仅需替换<code>pkg-puppeter-linux</code>文件</p>
<div><pre><code>$ ll /opt/pkg-puppeteer
drwxr-xr-x 3 root root 4.0K 5月   5 10:03 chromium
-rwxr-xr-x 1 root root  40M 5月   5 10:04 pkg-puppeter-linux
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h2 id="安装部署"> 安装部署</h2>
<div><pre><code><span>mkdir</span> ibi
<span>cd</span> ibi
<span>## 把ibi-xxx.zip拷贝到该目录, 运行解压命令，解压到app文件夹，app目录自动创建</span>
<span>unzip</span> <span>-d</span> app ibi-1.6.0.zip
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><p>Note</p>
<p>下面的介绍中我们把刚才解压的目录成为<strong>IBI_HOME</strong>, 考虑后续的运维与升级，我们把文件拆分为<code>可以保留</code>与每次更新<code>需更新</code>两部分</p>
</div>
<div><pre><code><span>ls</span> app
<span>## 以下目录和文件可以保留</span>
├── config        <span># 配置文件授权证书存储目录</span>
│     ├── application.properties
│     ├── license.cert
│     ├── logback.xml
│     ├── quartz.properties
├── user-files     <span># 包含upload之类用户生成的文件夹</span>
├── ext-lib     <span># 存放用户添加的第三方jar包，如数据库驱动等</span>
├── start-server.sh  <span># 启动脚本</span>
├── stop-server.sh <span># 停止脚本</span>

<span>## 以下目录和文件需更新</span>
├── static <span># 存放服务端提供的静态资源</span>
├── webui <span># 前端资源文件夹</span>
├── ibi.jar  <span># springboot fat jar</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><p>当服务器有多个不同的JDK版本，需要指定Tomcat的运行的JDK版本时</p>
<p>linux设置start-server.sh</p>
<div><pre><code>export JAVA_HOME=/home/jdk/Java/jdk8
</code></pre>
<div><span>1</span><br></div></div><h2 id="修改配置文件"> 修改配置文件</h2>
<blockquote>
<p>复制原config.properties文件，重命名为application.properties, 并放置到app/config目录, 替换自带application.properties</p>
</blockquote>
<p>修改<em>config/application.properties</em>配置文件夹下面的配置项，其他的配置保持默认<br>
原配置文件config.properties删除前面几行数据库配置</p>
<div><pre><code><span>validationQuery</span><span>=</span><span>SELECT 1</span>
<span>jdbc_url</span><span>=</span><span>jdbc:mysql://localhost:3306/cboard_demo?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>jdbc_username</span><span>=</span><span>cboard</span>
<span>jdbc_password</span><span>=</span><span>cboard</span>
<span>jdbc.threadpool.maxActive</span><span>=</span><span>5</span>

<span>#log_jdbc_url=jdbc:mysql://localhost:3306/cboard_log?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>#log_jdbc_username=cboard</span>
<span>#log_jdbc_password=cboard</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><p>替换为新的数据库配置datasource.meta.url, 为原jdbc_url配置，同时修改username, password, 同时对端口和context进行调整，<br>
需要部署https服务的用户可以把tomcat对应的ssl证书放置在config目录下并修改配置</p>
<div><pre><code><span>#</span>
<span># meta datasource 元数据</span>
<span># Druid 连接池</span>
<span>#</span>
<span>datasource.meta.name</span><span>=</span><span>meta</span>
<span>datasource.meta.driver-class-name</span><span>=</span><span>com.mysql.jdbc.Driver</span>
<span>datasource.meta.url</span><span>=</span><span>jdbc:mysql://localhost:3306/cboard_dev?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</span>
<span>datasource.meta.username</span><span>=</span><span>root</span>
<span>datasource.meta.password</span><span>=</span><span>xxx</span>
<span>datasource.meta.max-active</span><span>=</span><span>10</span>
<span>datasource.meta.min-idle</span><span>=</span><span>0</span>
<span>datasource.meta.initialSize</span><span>=</span><span>1</span>
<span>datasource.meta.breakAfterAcquireFailure</span><span>=</span><span>true</span>
<span>#</span>
<span># log datasource 日志数据默认与meta元数据源一致</span>
<span>#</span>
<span>datasource.log.name</span><span>=</span><span>log</span>
<span>datasource.log.driver-class-name</span><span>=</span><span>${datasource.meta.driver-class-name}</span>
<span>datasource.log.url</span><span>=</span><span>${datasource.meta.url}</span>
<span>datasource.log.username</span><span>=</span><span>${datasource.meta.username}</span>
<span>datasource.log.password</span><span>=</span><span>${datasource.meta.password}</span>
<span>datasource.log.max-active</span><span>=</span><span>10</span>
<span>datasource.log.min-idle</span><span>=</span><span>0</span>
<span>datasource.log.initialSize</span><span>=</span><span>1</span>
<span>datasource.log.breakAfterAcquireFailure</span><span>=</span><span>true</span>

<span># 连接端口与context</span>
<span>server.port</span><span>=</span><span>8026</span>
<span>server.servlet.context-path</span><span>=</span><span>/cboard</span>
<span># https相关配置</span>
<span>#server.ssl.key-store=classpath:xxxx.jks</span>
<span>#server.ssl.key-store-password=xxx</span>
<span>#server.ssl.keyStoreType=JKS</span>

<span># 对应安装目录下user-files文件夹</span>
<span>file.userfiles-path</span><span>=</span><span>user-files</span>
<span>spring.web.resources.static-locations</span><span>=</span><span>classpath:/static,classpath:/webui,classpath:/${file.userfiles-path}</span>
<span>spring.web.resources.cache.cachecontrol.cache-public</span><span>=</span><span>true</span>
<span>spring.web.resources.cache.cachecontrol.max-age</span><span>=</span><span>30d</span>

<span>#</span>
<span># 系统运行产生文件存储地址</span>
<span>#</span>
<span>runtime.base.filePath</span><span>=</span><span>${user.home}/.ibi</span>
<span># 在线表格写转文件存储地址, 默认目录</span>
<span>dataprovider.onlineTable.filePath</span><span>=</span><span>${runtime.base.filePath}/online-tables</span>
<span># 大屏导出临时文件存储地址</span>
<span>export.cockpit.screenshotPath</span><span>=</span><span>${runtime.base.filePath}/screenshot/cockpit</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br></div></div><h3 id="离线缓存h2连接配置更新"> 离线缓存h2连接配置更新</h3>
<div><pre><code><span>aggregator.h2.url</span><span>=</span><span>jdbc:h2:~/H2Data/cboard;AUTO_SERVER=TRUE;MODE=MYSQL;CASE_INSENSITIVE_IDENTIFIERS=false</span>
</code></pre>
<div><span>1</span><br></div></div><h2 id="复制原license授权文件"> 复制原License授权文件</h2>
<blockquote>
<p>从原部署目录拷贝<code>TOMCAT_HOME/webapps/ROOT/WEB-INF/classs/license.cert</code>到<code>${IBI_HOME}/config/license.cert</code></p>
</blockquote>
<h2 id="启动服务"> 启动服务</h2>
<p>在<code>${IBI_HOME}</code>执行启动命令</p>
<div><pre><code><span>chmod</span> <span>755</span> start-server.sh stop-server.sh
./start-server.sh

./start-server.sh
<span>[</span>IBI<span>]</span> Working path <span>=</span> /root/install/cboard/uat/springboot
<span>[</span>IBI<span>]</span> Set basePath to parent <span>path</span><span>=</span>.
<span>[</span>IBI<span>]</span> <span>basePath</span><span>=</span>.
<span>[</span>IBI<span>]</span> Set classpath to <span>'.:.:./ibi.jar:./config:./ext-lib'</span>
<span>[</span>IBI<span>]</span> Server is starting, <span>pid</span><span>=</span><span>6644</span>
<span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span><span>==</span>
check log <span>command</span> <span>==</span><span>==</span><span>></span>      <span>tail</span> <span>-f</span> /root/install/cboard/uat/springboot/logs/cboard.log
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><pre><code><span># 启动成功之后脚本自动运行tail命令显示实时日期, 用户可以按 ctrl+c 中断日期显示, 不影响服务后台运行</span>
<span>tail</span> <span>-f</span> /root/install/cboard/uat/springboot/logs/cboard.log
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h2 id="原用户上传资源迁移"> 原用户上传资源迁移</h2>
<p>如果原系统使用过大屏功能，并存在用户上传资源，需要迁移源用户上传资源目录</p>
<blockquote>
<p>覆盖目录<code>TOMCAT_HOME/webapps/ROOT/upload</code>, 到<code>${IBI_HOME}/user-files/upload</code></p>
</blockquote>
<h2 id="restful接口请求变更"> restful接口请求变更</h2>
<div><p>重要提示</p>
<p>从v1.6.0开始所有请求取消<code>.do</code>后缀，1.6之前的版本添加<code>.do</code>后缀, 如：原来的<code>post auth.do</code>修改为<code>post auth</code></p>
</div>
<h2 id="利用nginx同时兼容http和https"> 利用Nginx同时兼容http和https</h2>
<div><pre><code>{
    # https 转发到服务端
    server {
        listen 443 ssl;
        server_name  www.ibidemo.com;

        ssl_certificate conf.d/www.ibidemo.cn_bundle.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
        ssl_certificate_key conf.d/www.ibidemo.cn.key;     #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

        # 表示使用的加密套件的类型。
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
        ssl_prefer_server_ciphers on;

        location / {
             proxy_pass  https://www.ibidemo.com:8026; # 转发默认服务端口
        }
    }

    # 转发http到https
    server {
        listen 80;
        server_name www.ibidemo.com;
        return 301 https://$host$request_uri;
    }

}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">专题分析</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/portal/0-miniapp/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/portal/0-miniapp/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h2 id="专题分析看板组织说明"> 专题分析看板组织说明</h2>
<p>在企业数字化转型过程中，数据看板已成为管理决策的核心工具，但随着业务场景拓展，常面临页面杂乱难定位、核心数据难直达、界面体验不贴合需求等问题。<br>
为解决这些痛点，专题分析看板提供了目录树管理、默认配置、布局与样式自定义等功能，让数据呈现更有序、操作更高效、视觉更贴合使用场景。</p>
<h3 id="专题看板目录树编辑"> 专题看板目录树编辑</h3>
<p>企业数据分析场景中，<strong>页面数量会随业务拓展持续增加，无序的页面排列会导致关键数据查找耗时，影响决策效率</strong>。<br>
针对这一问题，支持按需创建页面分组，可将目标页面拖拽至对应分组，同时允许自定义调整分组层级及页面/分组的排序顺序。通过多级分组管理机制，实现页面的快速定位与查找，让数据呈现结构更清晰、逻辑更规整，避免信息过载带来的决策干扰。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121140656.png" alt="" /></p>
<h3 id="默认看板配置"> 默认看板配置</h3>
<p>支持设置默认打开的看板，当加载专题分析模块时，系统将自动跳转至你最关注的看板页面，减少重复操作，让核心数据直达，提升数据查看与决策响应效率。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/专题分析-默认看板.gif" alt="" /></p>
<h3 id="菜单布局编辑与背景色配置"> 菜单布局编辑与背景色配置</h3>
<p>导航布局的合理性直接影响操作便捷性，统一且贴合需求的视觉样式能降低认知成本。</p>
<ul>
<li>提供侧边栏、顶部两种导航布局样式供选择，兼顾应用美观度与操作便捷性。</li>
<li>同时支持自定义配置导航栏颜色及图标样式，让Web应用导航更具个性化、视觉表达更丰富，适配不同企业的品牌视觉规范与用户使用习惯。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121142333.png" alt="" /></p>
<ul>
<li>配置实时预览：所有样式调整无需手动保存，即时生效，避免对已上线的专题分析造成影响</li>
<li>Logo统一规范：页面Logo与平台Logo保持一致，保障品牌视觉统一性</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:17:10.000Z</published>
  </entry>
  <entry>
    <title type="html">数据门户</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/portal/1-portal/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/portal/1-portal/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<p>为解决不同数据消费者的看数体验，PC端正式重磅推出<strong>数据门户</strong>功能：
企业可快速创建统一灵活的企业级数据门户，<strong>便于数据分析师按项目／流程／业务等不同管理主线和分析主题，对仪表板卡片进行组合，灵活制作各种数据分析专题</strong>。</p>
<h2 id="门户设计"> 门户设计</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130175811.png" alt="" /></p>
<h3 id="多级菜单-专题组-标签组"> 多级菜单：专题组+标签组</h3>
<p>数据门户的内容主要由一个个专题分析应用构成, 通过专题分组、专题内标签组实现不同应用的多级整合，让门户层次感更强，页面管理更加有序，提升企业成员的看数体验；</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/门户组织.gif" alt="" /></p>
<h3 id="横幅背景配置-内置多组精美横幅与支持背景上传"> 横幅背景配置, 内置多组精美横幅与支持背景上传</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/横幅.gif" alt="" /></p>
<ul>
<li>门户支持收藏与最近打开</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121145918.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">概述</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/1-intro/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/1-intro/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p><img src="http://qiniu.ibidemo.cn/picgo/20211008172106.png" alt="" /></p>
<div><p>History</p>
<p>IBI复杂报表设计器基于开源项目<a href="https://github.com/youseries/ureport" target="_blank" rel="noopener noreferrer">UReport2</a>, 通过迭代单元格可以实现任意复杂的中国式报表，复杂报表常用于向于对表格格式有较高的要求的场景，如：财务报表、审计上报。</p>
<p>相较与自助式交叉表，这类报表的特点是：</p>
<ul>
<li>结构复杂，嵌套多级表头，单元格之间依赖计算</li>
<li>制作难度更大</li>
<li>如果对表格结构、格式没有强制要求，能用自助分析中交叉表实现的表格，优先选用交叉表</li>
</ul>
</div>
<h2 id="变更"> 变更</h2>
<p>在UReport2之上我们做了下面的变更：</p>
<h3 id="整体架构"> 整体架构</h3>
<ul>
<li>重写了全部前端模板交互与UI更便捷</li>
<li>报表定义存储数据库，报表存储格式改xml为json</li>
<li>整合IBI数据源与数据集
<ul>
<li>数据集读取表注释为别名
<img src="http://qiniu.ibidemo.cn/picgo/20211008183933.png" alt="" /></li>
<li>整合IBI数据集与多维查询引擎<sup>v1.10</sup></li>
</ul>
</li>
<li>整合报表资源权限控制</li>
<li>支持添加IBI看板、大屏
<ul>
<li>大屏表格样式配置弹窗</li>
<li>支持BI看板参数、支持主动联动事件定义, 被动联动事件响应, 支持点击弹窗</li>
<li>看板导出支持复杂报表导出</li>
</ul>
</li>
<li>弃用UReport2变量，使用IBI变量机制
<ul>
<li>查询支持变量</li>
<li>普通文本支持变量</li>
<li>表达式支持变量</li>
</ul>
</li>
</ul>
<h2 id="功能改进"> 功能改进</h2>
<ul>
<li>交叉表表自动增加多级父格关联，原系统父格查找在同时多级有左父格和上父格的时候，其中上父格仅支持一层关联</li>
<li>聚合方式增加count、distinct</li>
<li>支持自定义排序</li>
<li>支持列宽拉伸</li>
<li>累加单元格坐标计算支持有合并的父格场景，原系统仅支持父格为列表的累加计算</li>
<li>html输出列宽小于0隐藏列</li>
<li>插入删除列处理合并单元格设置</li>
</ul>
<h2 id="表达式改进"> 表达式改进</h2>
<ul>
<li>增加注释匹配, 单行多行</li>
<li>支持集合表达式, 同sql语法中的 in (1, 2, 3)</li>
<li>修复所有单元格表达式过滤计算错误的问题</li>
<li>支持仅列上父格偏移C1[;B1:-1]</li>
<li>支持sql标准case表达式 case when then else end</li>
<li>新坐标表达式@替代:，!相对偏移</li>
<li>增加复合条件表达式
<ul>
<li>图形化多层级过滤表达式</li>
<li>支持SQL标准多层级表达式, 如： <code>A1 &gt; 1 or A1 &lt; 10 and B2 &gt; 100</code>
<img src="http://qiniu.ibidemo.cn/picgo/20211011083323.png" alt="" /></li>
</ul>
</li>
</ul>
<h2 id="操作体验"> 操作体验</h2>
<ul>
<li>菜单部分
<ul>
<li>优化了颜色、边框、对齐、边框、清空内容操作</li>
<li>字体、背景、边框记忆上次选择配置，点击直接执行</li>
<li>预览模式改用弹框热预览</li>
</ul>
</li>
<li>设计器
<ul>
<li>支持单元格复制、剪切</li>
<li>增加表达式编辑器，表达式模板</li>
</ul>
</li>
</ul>
<h2 id="废弃的功能"> 废弃的功能</h2>
<ul>
<li>原报表参数机制</li>
<li>原图表组件</li>
<li>原表格点击事件</li>
</ul>
<h2 id="暂时未引入的功能"> 暂时未引入的功能</h2>
<ul>
<li>斜线表头(v2.0之后重新引入)</li>
<li>报表打印(v2.1之后重新引入)</li>
<li>图片单元格(v1.11之后重新引入)</li>
<li>二维码单元格</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">快速开始</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/quick-start/quick-start/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/quick-start/quick-start/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<p><img src="http://qiniu.ibidemo.cn/picgo/202601081444398.png" alt="" /></p>
<p>本文档将引导您快速上手使用本BI工具，从数据连接到生成分析看板，只需简单几步即可完成。</p>
<h2 id="🚀-快速开始四步流程"> 🚀 快速开始四步流程</h2>
<h3 id="第一步-连接数据源"> 第一步：连接数据源</h3>
<ol>
<li>点击【配置】→【数据源管理】模块</li>
<li>选择数据源类型：
<ul>
<li><strong>数据库</strong>：直接连接业务数据库（MySQL、SQL Server、Oracle等）</li>
</ul>
</li>
<li>完成认证配置，测试连接
<ul>
<li><strong>数据库类型</strong>: 下拉选择需要连接的数据库类型，点击 <strong>填入模板</strong></li>
<li><strong>修改连接配置</strong>: 修改数据库连接参数</li>
<li><strong>测试连接</strong></li>
</ul>
</li>
<li>保存数据源
<ul>
<li>点击保存，弹窗选择要保存的文件夹</li>
</ul>
</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202601071314084.png" alt="" /></p>
<h3 id="第二步-创建数据集"> 第二步：创建数据集</h3>
<ol>
<li>在【配置】→【数据集管理】模块中，基于已连接的<strong>数据源</strong>创建<strong>数据集</strong></li>
<li>配置数据集：
<ul>
<li><strong>配置查询</strong>：通过sql或者图形化选表配置查询对象
<img src="http://qiniu.ibidemo.cn/picgo/202601071342803.png" alt="" /></li>
<li><strong>维度/指标</strong>：加载数据列，把数据列，添加到模型，定义维度（分类字段）和指标（数值字段）
<img src="http://qiniu.ibidemo.cn/picgo/202601071347652.png" alt="" /></li>
</ul>
</li>
</ol>
<h3 id="第三步-数据可视化"> 第三步：数据可视化</h3>
<ol>
<li>进入【自助分析】</li>
<li>选择已创建的数据集</li>
<li>拖拽分组字段到【行/列维度】添加汇总字段到【指标】</li>
<li>点击预览(默认为自动预览)，生成图表</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202601071351743.png" alt="" /></p>
<h3 id="第四步-创建数据看板"> 第四步：创建数据看板</h3>
<ol>
<li>在【看板】-&gt;【网格看板】模块新建看板</li>
<li>将已创建的图表拖拽至看板中</li>
<li>调整布局、样式，添加筛选器</li>
<li>保存看板</li>
</ol>
<h3 id="后续"> 后续</h3>
<p>看板之后，你还可以</p>
<ol>
<li>把多个看板按业务主题组合为【专题分析】</li>
<li>多个分析专题按企业关注度组合为【数据门户】</li>
<li>数据看板整合到外部业务系统</li>
<li>功能模板整合到外部系统</li>
</ol>
<hr>
<h2 id="🎯-核心功能模块说明"> 🎯 核心功能模块说明</h2>
<h3 id="📁-数据源管理"> 📁 数据源管理</h3>
<ul>
<li>支持多类型数据源接入</li>
<li>连接配置一次，多处使用</li>
</ul>
<h3 id="📊-数据集管理"> 📊 数据集管理</h3>
<ul>
<li>可视化字段配置界面</li>
<li>支持创建计算字段, 汇总计算表达式</li>
<li>数据预览功能</li>
</ul>
<h3 id="📈-可视化分析"> 📈 可视化分析</h3>
<ul>
<li><strong>图表库</strong>：柱图、折线图、饼图、散点图等30+图表类型</li>
<li><strong>交互功能</strong>：下钻、联动、筛选</li>
<li><strong>样式自定义</strong>：颜色、标签、坐标轴等</li>
</ul>
<h3 id="🖥️-看板与大屏"> 🖥️ 看板与大屏</h3>
<ul>
<li><strong>拖拽布局</strong>：自由调整组件位置</li>
<li><strong>响应式设计</strong>：适配不同屏幕尺寸</li>
<li><strong>分享权限</strong>：控制查看与编辑权限</li>
</ul>
<hr>
<h2 id="💡-新手最佳实践建议"> 💡 新手最佳实践建议</h2>
<h3 id="首次使用建议路径"> 首次使用建议路径</h3>
<ol>
<li><strong>从文件数据开始</strong>：先用小数据进行功能测试熟悉功能，避免首次使用大表</li>
<li><strong>创建简单数据集</strong>：选择5-10个字段，清晰定义维度和指标</li>
<li><strong>制作单一图表看板</strong>：先专注于一个业务问题的分析</li>
<li><strong>渐进式复杂化</strong>：逐步尝试多图表联动、筛选器等高级功能</li>
</ol>
<h3 id="常用场景模板"> 常用场景模板</h3>
<ul>
<li><strong>销售分析看板</strong>：销售额趋势 + 产品类别分布 + 区域排名</li>
<li><strong>运营监控大屏</strong>：实时指标卡 + 趋势图 + 异常警报</li>
<li><strong>客户分析专题</strong>：客户画像 + 行为路径 + 留存分析</li>
</ul>
<hr>
<h2 id="🔧-遇到问题怎么办"> 🔧 遇到问题怎么办？</h2>
<h3 id="常见问题排查"> 常见问题排查</h3>
<table>
<thead>
<tr>
<th>问题</th>
<th>可能原因</th>
<th>解决方案</th>
</tr>
</thead>
<tbody>
<tr>
<td>数据连接失败</td>
<td>网络问题/凭证错误</td>
<td>检查网络，验证连接配置</td>
</tr>
<tr>
<td>图表无数据</td>
<td>字段配置错误</td>
<td>检查数据集字段映射</td>
</tr>
<tr>
<td>看板加载慢</td>
<td>数据量过大</td>
<td>添加数据过滤，或创建汇总数据集</td>
</tr>
</tbody>
</table>
<h3 id="获取帮助"> 获取帮助</h3>
<ul>
<li><strong>工具内帮助</strong>：页面右上角的 <i></i> 图标</li>
<li><strong>文档中心</strong>：完整的产品文档和教程</li>
<li><strong>技术支持</strong>：通过系统内反馈功能联系技术团队</li>
</ul>
<hr>
<h2 id="⏱️-5分钟快速体验"> ⏱️ 5分钟快速体验</h2>
<p><strong>如果您只有5分钟时间：</strong></p>
<ol>
<li>连接到数据库（2分钟）</li>
<li>选择一张表，创建一个包含1个维度、1个指标的数据集（1分钟）</li>
<li>生成一个柱状图（1分钟）</li>
<li>保存为简单看板（1分钟）</li>
</ol>
<p><strong>完成！</strong> 您已经体验了核心流程，后续可以深入探索更多功能。</p>
<hr>
<h2 id="📚-下一步学习建议"> 📚 下一步学习建议</h2>
<ol>
<li><strong>掌握进阶功能</strong>：计算字段、汇总表达式、LOD表达式、参数筛选、数据预警</li>
<li><strong>掌握数据透视与可视化核心原理</strong>：会使用交叉表可视化组件构造业务相关的透视表格，会值类型快速计算、掌握行列汇总配置
3<strong>学习最佳实践</strong>：如何设计高效的数据看板
4<strong>探索团队协作</strong>：版本管理、权限控制、定时报告
5<strong>集成</strong>：API对接、嵌入式分析</li>
</ol>
<hr>
<blockquote>
<p><strong>提示</strong>：本工具支持“边用边学”，大部分功能都有引导提示。建议从实际业务需求出发，逐步探索相应功能模块。</p>
</blockquote>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:17:10.000Z</published>
  </entry>
  <entry>
    <title type="html">快速上手</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/2-algorithm/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/2-algorithm/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="父子格"> 父子格</h2>
<div><p>计算模型</p>
<p>Report的计算模型用一句话概括是：父格带动子格<strong>展开迭代</strong>，外加单元格之间计算。</p>
</div>
<p>在Report中单元格之间存在依赖关系，对于任意一个单元格都可以设置它的 <strong>左父格</strong> 与 <strong>上父格</strong> 。</p>
<ul>
<li>默认单元格父格
<ul>
<li><strong>左父格</strong> 是其最近左边与自身位于同一行的单元格；</li>
<li><strong>上父格</strong> 其最近上方与自身位于同一列的的单元格。</li>
</ul>
</li>
<li>如果一个单元格位于第一行，那默认它就没有上父格，同样，如果位于第一列，默认它就没有左父格。</li>
<li>打开报表设计器，选中任意单元格，都可以在其属性面板看到它的默认上父格或左父格，如下图所示：
<img src="http://qiniu.ibidemo.cn/picgo/20211009085505.png" alt="" /></li>
<li><strong>更改父格</strong>：选中单元格之后，我们可以手动更改它的左父格或上父格或设定父格为“无”</li>
<li><strong>单元格展开</strong>：任意单元格在绑定数据集中某个字段时，如果这个字段有一条以上的数据，那么单元格就可以展开以显示这些数据。</li>
<li><strong>展开方向</strong>：对于父格而言，父格展开时会带动子格一起展开，如父格向下展开，则带其下所有子格及子格的子格一起子格绑定的数据集字段数据在展开时，同样也会带动其下子格一起展开，而当前子格的父格如与子格处于同一行或列，则会将父格拉大。</li>
</ul>
<p>利用上述迭代单元格的特性，我们就可以制作出各种复杂的报表样式，掌握了这一报表计算模型的特点，是开发报表的前提。</p>
<h2 id="设计区介绍"> 设计区介绍</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211009102501.png" alt="" /></p>
<h2 id="数据源配置"> 数据源配置</h2>
<div><p>须知</p>
<ul>
<li><strong>Report</strong>计算模型需要把数据集查询对应的<strong>明细数据加载到JVM内存</strong>中去，以便后续在任意位置做任意聚合算法的数据计算，
而<strong>BI</strong>对应数据集一般都比较大，想象一下一个百万、千万甚至上亿条数据表加载到JVM内存之后必然发生内存溢出，所以不能直接用做报表的数据集</li>
<li><code>v1.10</code>之后支持通过BI多维查询引擎把<strong>聚合之后的数据</strong>加载为报表数据集, 避免了手写SQL</li>
<li><strong>多源计算</strong>: Report查询可以配置<strong>多个不同源的查询</strong>，数据集之间(不同的数据源MySQL和Oracle)可以在内存中进行关联计算</li>
<li>同时为了防止数据集加载撑爆内存，我们对单个数据集最大记录数做了<strong>最大10W条</strong>记录限制，后续会调整优化或允许用户根据自身服务器性能配置;</li>
</ul>
</div>
<i>Not supported content</i><hr>
<ol>
<li>点击数据栏右上方数据源添加图标 <i></i></li>
<li>弹窗数据源选择</li>
<li>在数据源节点右边点击按钮 <i></i> 输入<strong>非重复数据集英文名称，后续需要在单元格、表达式中重复使用</strong>，编辑查询定义数据集</li>
<li>预览数据、确认关闭</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/dataset-add.gif" alt="" /></p>
<h2 id="bi数据集对接"> BI数据集对接</h2>
<i>Not supported content</i><ol>
<li>点击数据栏右上方数据源添加图标 <i></i></li>
<li>新建一个数据集分组</li>
<li>在数据集分组右边点击按钮 <i></i>
<ul>
<li>输入<strong>非重复数据集英文名称，后续需要在单元格、表达式中重复使用</strong>，</li>
<li>选择汇总维度与指标定义查询</li>
</ul>
</li>
<li>预览数据、确认关闭</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/report-datasets.gif" alt="" /></p>
<h2 id="单元格类型"> 单元格类型</h2>
<div><p>提示</p>
<p>目前所有单元格内容均不支持在<code>表格设计</code>直接输入，从 <strong>v1.15</strong> 开始支持 <strong>拖拽</strong> 数据集字段到单元格</p>
</div>
<p>目前支持的单元格类型有：</p>
<table>
<thead>
<tr>
<th>单元格类型</th>
<th>解释</th>
<th>输入方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>普通文本</td>
<td>常用作标题、表头、描述性文本</td>
<td>表格中选中目标格, 在右方属性栏输入, 支持环境变量解析</td>
</tr>
<tr>
<td>数据集</td>
<td>主要动态数据来源单元格</td>
<td>表格中选中目标格，点击数据集节点自动填入</td>
</tr>
<tr>
<td>表达式</td>
<td>常用于单元格直接计算</td>
<td>表格中选中目标格，属性栏-&gt;单元格类型下拉选择<code>表达式</code>，输入表达式内容</td>
</tr>
<tr>
<td>斜线表头</td>
<td>斜线表头</td>
<td>表格中选中目标格，属性栏-&gt;单元格类型下拉选择<code>斜线表头</code>，输入分区文本</td>
</tr>
</tbody>
</table>
<h3 id="普通文本"> 普通文本</h3>
<p>文本单元格比较简单，你可以像操作Excel单元格一样输入任何描述性静态文本，调整格式、字体、颜色等配置</p>
<ul>
<li>在编辑文本内容之前请确认属性栏单元格名称为正确目标格</li>
<li>在文本单元格中支持使用环境变量，环境变量使用参照<a href="/docs/zh-cn/manual/8-variable">使用变量章节</a></li>
<li>输入内容正常情况下会及时生效，如果没有生效请尝试点击<code>确认</code>按钮手工更新
<img src="http://qiniu.ibidemo.cn/picgo/20211009105703.png" alt="" /></li>
</ul>
<h2 id="展开配置"> 展开配置</h2>
<p>当单元格绑定的数据有多个值，如单元格类型为<code>数据集</code>且<code>聚合方式</code>为分组为列表或<code>表达式</code>时支持配置<code>数据展开方向</code></p>
<p>下一章节介绍数据集类型单元格配置</p>
<h2 id="数据集单元格与表达式单元格"> 数据集单元格与表达式单元格</h2>
<p>数据集单元格与表达式单元格可展开的动态单元格，后面有专项章节介绍</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">数据集单元格</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/3-dataset/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/3-dataset/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="数据集"> 数据集</h2>
<p>数据集是报表展示数据的来源，一般情况，定义好数据集后，在数据集对应的字段上点击即可在目标单元格上添加对应的数据绑定信息，然后在其属性面板设置聚合方式、迭代方向等。<br>
<img src="http://qiniu.ibidemo.cn/picgo/add-dataset-cell.gif" alt="" /></p>
<p>数据集单元格填入之后，支持修改相应配置</p>
<ul>
<li>数据展开方式
<ul>
<li>默认向下纵向展开</li>
<li>向右横向展开</li>
<li>不展开（多值不展开会把所有值用逗号连接填入到一个单元格）</li>
</ul>
</li>
<li>数据集配置
<ul>
<li>聚合方式</li>
<li>排序方式</li>
<li>数据过滤</li>
<li>数据映射</li>
</ul>
</li>
<li>格式化</li>
<li>配置条件属性</li>
</ul>
<h3 id="数据展开"> 数据展开</h3>
<ul>
<li>分组向下展开<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009155037.png" alt="" /><br>
输出结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009155107.png" alt="" /></li>
</ul>
<div><p>规则: 父子格数据限定</p>
<p><strong>子格如果与父格属于相同数据集，子格的数据会被父格限制</strong></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211019095732.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211019095957.png" alt="" /></p>
<div><p>数据集单元格运算过程</p>
<p>DEPARTMENT_ID = 1 对应的子格<code>B1</code>单元格group聚合运算:<br>
首先利用父格<code>DEPARTMENT_ID = 1</code>限定出所有部门ID为1的数据行，如果有配置<code>数据过滤</code>则先对明细数据进行过滤运算，然后对<code>EDUCATION_LEVEL</code>group分组运算</p>
<i>Not supported content</i></div>
<ul>
<li>
<p>分组向右展开<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009155248.png" alt="" /><br>
输出结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009155218.png" alt="" /></p>
</li>
<li>
<p>分组不展开<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009155444.png" alt="" /></p>
</li>
</ul>
<h3 id="过滤条件"> 过滤条件</h3>
<div><p>请牢记</p>
<p>数据集的过滤条件作用于聚合计算之前对应的明细数据，非计算之后的结果数据, 从sql的角度理解，相当于where过滤，而非having过滤, 下面用一个案例解释</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211009114935.png" alt="" /><br>
配置计算不同学历的人数统计，未添加任何过滤条件结果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009115025.png" alt="" /></p>
<p>利用数据绑定明细数据的特性，我们可以对B3单元格做如下的过滤</p>
<blockquote>
<p>统计男性生日在1940之前或者女性生日在1950之后, 对于数据集的明细数据每一条都能获取到所有其他属性值，所以虽然B3单元格选定的属性为<code>FULL_NAME</code>，但是在过滤中任然可以使用其他属性过滤
<img src="http://qiniu.ibidemo.cn/picgo/20211009141631.png" alt="" /></p>
</blockquote>
<h4 id="明细数据过滤"> 明细数据过滤</h4>
<div><p>明细数据过滤</p>
<p>如果对于数据集统计格B3配置过滤条件，当前值大于200, 侧输出为全部0
<img src="http://qiniu.ibidemo.cn/picgo/20211009115159.png" alt="" /><br>
因为此时的<code>当前值&gt;200</code>实际执行的是，当前绑定的属性 <code>employee.FULL_NAME &gt; 200</code><br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009115534.png" alt="" /></p>
</div>
<div><p>子格过滤完没有数据，父格还会显示吗？</p>
<p>从上面的例子中还能看出，就算是子格数据被全部过滤, 父格依旧会输出，因为父格带动子格，就算是子格没有值，父格会输出自己的值</p>
</div>
<h4 id="明细数据属性与属性比较"> 明细数据属性与属性比较</h4>
<p>过滤条件配置中右值(比较值)支持属性表达式<code>#.属性名</code>，用于配置数据集中两个不同属性的比较，如下图所示，统计进入指标之前，需要过滤的<code>点击数 &gt; 进入数</code>的脏数据，然后进行汇总</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230514162239.png" alt="" /></p>
<h4 id="怎么实现汇总值过滤"> 怎么实现汇总值过滤</h4>
<div><p>怎么实现汇总值过滤，或者给特殊的值设定颜色或不显示呢？</p>
<p>可以通过配置单元格<code>条件属性</code>，这里属性条件左值设置为表达式，表达式内容为<code>#</code>，这样就可以获取单元格的值，并且做出判断</p>
</div>
<blockquote>
<p><code>#</code>号表达式为当前单元格的内容</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211009120127.png" alt="" /></p>
<ul>
<li>设置满足条件的单元格属性前景色(字体颜色)为蓝色，<code>作用范围</code>为<strong>当前行</strong>，效果如下
<img src="http://qiniu.ibidemo.cn/picgo/20211009120646.png" alt="" /></li>
<li>设置满足条件的单元格属性整行行高为0，则整行不输出
<img src="http://qiniu.ibidemo.cn/picgo/20211009120845.png" alt="" /></li>
</ul>
<h3 id="数据映射"> 数据映射</h3>
<p>配置数据字典，如employee数据集中只有部门ID，需要把ID映射为部门名称可以通过配置数据映射
<img src="http://qiniu.ibidemo.cn/picgo/20211009170238.png" alt="" /></p>
<ul>
<li>
<p>简单映射<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009170659.png" alt="" /><br>
输出结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009181835.png" alt="" /></p>
</li>
<li>
<p>数据集映射<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009170409.png" alt="" /></p>
</li>
</ul>
<p>输出结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211009170435.png" alt="" /></p>
<h3 id="数据关联-可跨源"> 数据关联(可跨源)</h3>
<p>当我们有多个数据集单元格，单元格之间有父子格关系，如下图设计器所示</p>
<blockquote>
<p><strong>A1</strong>: <em>dept.group(DEPARTMENT_DESCRIPTION)</em><br>
<strong>B1</strong>: <em>employee.group(EDUCATION_LEVEL)</em></p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211018190001.png" alt="" /></p>
<p>按照父子格数据限制原理</p>
<blockquote>
<p>子格如果与父格属于<strong>相同数据集</strong>，子格的数据会被<strong>父格限制</strong>,<br>
但是上面的父子格<strong>数据集不同</strong>, 不对子格做任何过滤的情况下<code>B2</code>展开数据<strong>不受限制</strong>, 因为没有形成关联条件</p>
</blockquote>
<p>可以看到每次展开的内容是完全一模一样的, 如下：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211018190632.png" alt="" /></p>
<p>不过，我们还是可以利用<strong>父子格迭代带动子格原理</strong>，对<code>B1</code>单元格设定过滤条件，让两个不同的数据集形成关联<br>
来试试吧，我们对B1单元格设定<code>过滤条件</code>, <code>B1</code>单元格对应的部门属性<code>DEPARTMENT_ID</code>(也就是在employee表中的部门ID), 在表达式<code>dept.select(DEPARTMENT_ID)</code>集合中, 实现两个数据集的关联</p>
<blockquote>
<p>多值使用集合中，唯一值使用等于</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211018190910.png" alt="" /></p>
<p>输出结果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211018191111.png" alt="" /></p>
<div><p>性能警告</p>
<p>数据集关联运算常用于异构数据源之间的关联，如果两个数据集都是同一个数据库建议在数据库上进行表关联，性能会更加可控，数据库进行表关联有很多种优化手段性能大多数场景要优于在Report引擎</p>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">表达式</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/4-expression/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/4-expression/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>在报表使用过程当中，不可避免的要使用函数及表达式实现一些数据的计算，在Report当中，很多地方都支持编写表达式，比如最典型的我们可以将单元格类型改为“表达式”，这样就可以在下面的表达式编辑器里输入相应的表达式与函数</p>
<div><p>Tips</p>
<ol>
<li>复杂报表的计算引擎与多维分析的引擎为两套完全不同的引擎，表达式与多维分析数据集中的汇总表达式完全不一样</li>
<li>复杂报表的表达式为是一套自定义语法，可能部分语法与其他语音类似，比如Javascript，但绝对不能通用</li>
</ol>
</div>
<h2 id="基本语法"> 基本语法</h2>
<p>与一般的编程语言类似，表达式也有一些基本的数据类型，比如数字、字符串等，如下表所示：</p>
<div><p>Note</p>
<p>关键词区分大小写，如单元格坐标A1，and, or, if, else, case等</p>
</div>
<table>
<thead>
<tr>
<th>表达式类型</th>
<th>描述</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td>数字</td>
<td>可以是一个整数，也可以是一个小数</td>
<td>1、123、0.121331，这些都是合法的数字</td>
</tr>
<tr>
<td>字符串</td>
<td>字符串需要用单引号或双引号包裹</td>
<td>'ureport2'、&quot;UReport2&quot;、‘UReport2教程’，这些都是合法的字符串</td>
</tr>
<tr>
<td>布尔值</td>
<td>布尔值表示是或否</td>
<td>布尔就两个：true 和 false</td>
</tr>
</tbody>
</table>
<p>上述的有三种基本的数据类型，可以单独使用，也可以用“+”、&quot;-&quot;、&quot;*&quot;、&quot;/&quot;、&quot;%&quot;连接，进行组合运算，如下表所示：</p>
<table>
<thead>
<tr>
<th style="text-align:center">操作符</th>
<th>描述</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">+</td>
<td>求两个数的和，或者是连接两个值</td>
<td>21+31，这就表示求这两个数的和，结果就是 52，“值：”+331则表示连接两个值，其结果就是“值：331”</td>
</tr>
<tr>
<td style="text-align:center">-</td>
<td>求两个数差</td>
<td>21 - 31，这就表示求这两个数的差，结果就是-10</td>
</tr>
<tr>
<td style="text-align:center">*</td>
<td>求两个数的乘积</td>
<td>3*6，结果就是18</td>
</tr>
<tr>
<td style="text-align:center">/</td>
<td>求两个数除的结果</td>
<td>6/3，结果就是2，如果除不尽，则会保留8位小数</td>
</tr>
<tr>
<td style="text-align:center">%</td>
<td>求两个数除的余值</td>
<td>5%3，结果是2；6%2结果是0</td>
</tr>
<tr>
<td style="text-align:center">and/or</td>
<td>条件关联符号</td>
<td>A1 &gt; 10 or B1 == 1 and A1 &lt; 20</td>
</tr>
</tbody>
</table>
<h3 id="变量定义"> 变量定义</h3>
<p>通过var定义变量，变量值可以为常数后者其他表达式</p>
<div><pre><code><span>var</span> a <span>=</span> <span>1</span><span>;</span>
<span>var</span> b <span>=</span> fd1<span>.</span><span>sum</span><span>(</span>store_cost<span>)</span>

<span>if</span> <span>(</span>b <span>></span><span>0</span><span>)</span> <span>{</span>
    b
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h2 id="三元表达式"> 三元表达式</h2>
<p>基本所有的语言都支持三元表达式判断，它的特点是简洁明晰，可以用最少的代码进行条件判断，Report中的三元表达式语法结构如下：</p>
<blockquote>
<p>ifCondition ? expr : expr</p>
</blockquote>
<p>和普通的三元表达式一样，它的第一部分是条件部分，条件部分可以有多个条件（用and或or连接），“?”后面是条件满足后执行并返回的表达式部分，“:”后面则是条件不满足时执行返回的表达式部分。</p>
<table>
<thead>
<tr>
<th>三元表达式示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>A1&gt;1000 ? &quot;正常值&quot; : &quot;低值&quot;</td>
<td>表达式计算时，先取到A1单元格的值，判断值是否大于1000，如果是返回“正常值”字符串，否则返回“低值”字符串</td>
</tr>
<tr>
<td>A1&gt;1000 and A1&lt;20000 ? &quot;正常值&quot; : &quot;修正值：&quot;+(A1+100)</td>
<td>条件部分，判断A1值是否大于1000 且小于20000，如果是返回&quot;正常值&quot;，否则返回字符串”修正值“与A1值加100后结果连接的值，如果A1是2000，那么就返回”修正值：2100“</td>
</tr>
</tbody>
</table>
<h2 id="if判断"> if判断</h2>
<p>if判断表达式则一个if条件判断部分加若干个可选的elseif 条件判断部分，最后再加一个可选的else部分构成，语法结构类似java或javascript</p>
<blockquote>
<p>提供代码提示snippet自动填写模板, 模板填入之后可以使用tab键在需要变更的地方跳动光标方便输入</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/exp-if.gif" alt="" /></p>
<div><pre><code><span>// 判断A1单元格的值是不是大于1000，如果是返回”正常值“字符串，否则什么都不做</span>
<span>if</span><span>(</span><span>A1</span><span>></span><span>1000</span><span>)</span><span>{</span>
  <span>return</span> <span>"正常值"</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><div><pre><code><span>// 判断 A1 单元格的值是不是大于1000，如果是返回”正常值“字符串，否则返回”低值“字符串。</span>
<span>if</span><span>(</span><span>A1</span><span>></span><span>1000</span><span>)</span><span>{</span>
  <span>return</span> <span>"正常值"</span>
<span>}</span><span>else</span><span>{</span>
  <span>"低值"</span><span>;</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><p>Tips</p>
<p>这里需要注意的是，在if表达式中，return 关键字是可选的，同是行尾添加';'也是可选的，这主要是为了照顾一些 java 及 javascript 程序的习惯</p>
</div>
<div><pre><code>// 在这个例子当中，条件部分添加了多个组合条件，同时 else if 多重判断
if (A1&gt;1000 and A1&lt;20000) {
    return &quot;正常值:&quot;+A1
} else if (A1&gt;20000 and A1&lt;40000) {
    return &quot;超高值&quot;
} else {
    &quot;低值&quot;
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="case判断"> case判断</h2>
<p>case 判断与sql语法一致</p>
<div><pre><code><span>case</span> 
     <span>when</span> condition <span>then</span> exp
     <span>(</span><span>when</span> condition <span>then</span> exp<span>)</span><span>*</span>
     <span>(</span><span>else</span> exp<span>)</span>?
<span>end</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><blockquote>
<p>提供代码提示snippet自动填写模板, 模板填入之后可以使用tab键在需要变更的地方跳动光标方便输入</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/exp-case.gif" alt="" /></p>
<h2 id="单元格引用"> 单元格引用</h2>
<p>在报表当中，大多数的计算都是针对单元格或与单元格有关，因为报表中单元格多数都与数据绑定，而数据往往又是多条，
所以计算后的报表一个单元格会产生多个，这样对于单元格的引用就变的比较复杂。</p>
<h3 id="同行-同列引用唯一值"> 同行/同列引用唯一值</h3>
<div><p>Tips</p>
<p>在 UReport2 报表引擎中，<strong>引用的目标单元格是相对当前单元格来进行计算的</strong>，引用方法就是直接在表达式里书写单元格名称，比如引用 A1 单元格，就直接写 A1 即可，如下面的例子：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010084427.png" alt="" /><br>
在上图当中，我们在 D1 单元格中输入表达式 A1<br>
<span><strong>当前单元格为: D1, 目标单元格为A1</strong></span><br>
这就表示，在 D1 单元格里填入相对当前 D1 单元格的 A1 单元格的值，运行后的效果如下：</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010084532.png" alt="" /></p>
<p>可以看到，因为 D1 是 A1 的子格，A1 单元格绑定的数据就是分组结构，根据当前 D1 单元格的位置，就产生的上图所示的结果。如果在 D1 单元格中输入 B1，那么运行后的效果又是下图的样子：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010084607.png" alt="" /></p>
<p>同样，如果在 D1 中输入表达式 C1，那么运行后将会在每个 D1 单元格中填入与 D1 单元格位于同一行的 C1 单元格的值，运行结果这里就不再贴出来了。</p>
<div><p>同行同列父格单个值</p>
<p>通过上面的例子我们可以看到，某个单元格的表达式引用目标单元格，首先判断的是目标单元格与其所在单元格是否位于同一行或列，如果是则直接取对应行或列上目标单元格的值。</p>
</div>
<h3 id="同行-同列引用多个值"> 同行/同列引用多个值</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010144913.png" alt="" /><br>
因为 C1 是 C2 的上父格，所以将直接取与其位于同一列的上父格单元格的值，但是C1有多个值, 这个时候输出如下</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010145131.png" alt="" /></p>
<div><p>同行/同列引用多个值, 目标格获取原则</p>
<p>由上面的例子可以看出，当前格与目标格同行/同列 <span>如果目标格有多个则取第一个</span>;</p>
</div>
<h3 id="非同行同列"> 非同行同列</h3>
<p>如果当前单元格与目标单元格不在同一行或列，那情况是怎么样的，我们来看下一个例子。<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010084952.png" alt="" /></p>
<p>在上面的例子中，我们在 C2 单元格的表达式中输入 B1，表示取 B1 单元格的值，但 B1 单元格又和 C2 不在同一行或列上，同时 B1 单元格展开后会有多个值，
但 B1 单元格和 C2 单元格都<span>拥有一个共同的父格或间接父格</span> A1（C2 单元格的左父格是 B2，而 B2 单元格的左父格又是 A1，所以 A1 是 C2 单元格的间接左父格）,
所以它会取他们共同父格 A1 下所有 B1 的值，运行结果如下图所示：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010085028.png" alt="" /></p>
<div><p>多个值的输出</p>
<p>如果取到值超过一个，输出时多个值间以“,”分隔，如上图所示</p>
</div>
<div><p>目标格获取原则</p>
<p>由上面的例子可以看出，单元格表达式在取目标格值时，如果不在同行/同列, 则取<span><strong>与当前单元格有共同父格的所有目标单元格</strong></span>，<br>
如果他们有共同的上父格或共同的左父格，那么就取共同上父格与共同左格交集部分的目标单元格；如果他们没有共同的父格，那么就取迭代后所有的目标单元格。</p>
</div>
<p>再看下面的报表示例：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010085303.png" alt="" /></p>
<p>在上面的例子中，B2 单元格表达里输入 C1，因为 B2 和 C1 既不在同一行或列，也没有共同的父格，所以 B2 中将取到所有的 C1 单元格的值，如下图所示：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010085314.png" alt="" /></p>
<h3 id="更改父格实现单元格取值"> 更改父格实现单元格取值</h3>
<p>上面没有修改父格的前提下取值时所谓的同行同列其实就是默认的父子格关系，<span><strong>目标格取值受当前格与目标格父格的影响</strong></span>。<br>
所以，我们可以利用更改当前单元格的上父格或左父格使得当前单元格与目标格处于某个特定的父格下，从而改变取值范围。</p>
<p>通过修改当前格的父格对目标格求和<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010150640.png" alt="" /></p>
<div><p>简单原则</p>
<p><span><strong>修改当前格的父格与目标格的父格一致即可对目标格求和</strong></span>，上例我们要求每年C1的和，C2与C1有共同的<span><strong>年份</strong>左父格</span>，则左父格不需要修改，C1的上父格为无，我们把C2原本的上父格修改为无即可</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010150832.png" alt="" /><br>
结果如下<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010150804.png" alt="" /></p>
<h2 id="特殊表达式"> 特殊表达式</h2>
<h3 id="号表达式"> #号表达式</h3>
<p><code>#</code>号表达式为当前单元格的内容</p>
<h4 id="单元格明细数据行的属性过滤"> 单元格明细数据行的属性过滤</h4>
<p>过滤条件配置中<code>右值(比较值)</code>支持属性表达式 <code>#.属性名</code>，用于配置数据集中两个不同属性的比较，如下图所示，统计进入指标之前，需要过滤的<code>点击数 &gt; 进入数</code>的脏数据，然后进行汇总</p>
<div><p>提示</p>
<p><code>#号</code>也可以换成数据集的名称如：<code>clk.进入</code></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230514162239.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230514162500.png" alt="" /></p>
<p>表达式实现</p>
<div><pre><code>clk.sum(进入, 点击 &gt;= 进入)
或者
clk.sum(进入, clk.点击 &gt;= clk.进入)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><h3 id="目标单元格名称"> &amp;目标单元格名称</h3>
<p>单元格序号, 使用“&amp;目标单元格名称”来标记目标单元格展开后的序号时，当前单元格必须是目标单元格的子格或间接子格；</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202502211534035.png" alt="" /></p>
<h2 id="单元格坐标"> 单元格坐标</h2>
<p>为了实现更为复杂的单元格引用，UReport2 引入了单元格坐标的概念。单元格坐标，也是相对于当前单元格来进行计算的，同样遵循上面的介绍的优先取同行、同列或共同父格的原则，</p>
<div><p>IBI在UReport2的语法基础上做了一些调整</p>
<blockquote>
<p>单元格名称[左父格坐标(, 左父格坐标)* ; 上父格坐标(, 上父格坐标)*]{条件...}</p>
</blockquote>
<p><strong>父格坐标语法</strong><br>
<code>父格单元格名称@i</code>, i为整数，表示父格展开之后第i个(从1开始计数)元素, 其中两个特殊的语法:</p>
<ul>
<li><code>@i</code>不写或者i=0，取所有父格对应的单元格可用于计算占比，</li>
<li><code>@!-i</code>相对坐标可用于计算环比</li>
</ul>
<p><strong>左父格坐标可以没有</strong>, 这样可以在没有左父格的前提下做偏移计算</p>
<blockquote>
<p>单元格名称[;上父格坐标(, 上父格坐标)*]{条件...}</p>
</blockquote>
<p>表示对通过坐标取到的单元格进行条件过滤，条件部分是可选的</p>
</div>
<h3 id="实例"> 实例</h3>
<div><p>C2[A2]</p>
<p>当前单元格相对A2展开值对应的所有C2子格，常用来做分类统计</p>
</div>
<p>报表模板如下：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103625.png" alt="" /></p>
<p>结果, 统计当前年份A2下每月的占比<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103538.png" alt="" /></p>
<div><p>C1[A1@!-1]</p>
<p>相对偏移坐标：当前单元格相对A1展开值上移一格对应的所有C1子格，常用来做环比统计</p>
</div>
<div><p>C1[A1@2, B1@1]</p>
<p>在找 C1 时先找单元格 A1 展开后的第2格；再找第二个 A1 下的 B1 单元格展开后的第一个单元格，然后再找这个 B1 单元格对应的 C1 单元格</p>
</div>
<div><p>C2[A1@2, B1@2; C1@3]</p>
<p>在找 C2 时，先找 A1 单元格展开后的第二格，再找第二个 A1 单元格下 B2 单元格展开后的第二格，再根据第二个展开的 B2 单元格找其下名为 C2 单元格的左子格；
然后再找到 C1 单元格展开后的第三格，再看其下的 C2 单元格，取 C2 单元格的交集</p>
</div>
<div><p>C2[A1@2, B2@2]{C2>10 and C2<100}</p>
<p>表示取 A2 单元格展开后的第二格，再取其下 B2 单元格展开后第二格，再取 B2 下所有的 C2 单元格，最后再对取到的 C2 单元格进行条件过滤，只取出 C2 单元格值大于10且小于100的所有 C2 单元格的值。</p>
</div>
<p>我们来看一个报表模版如下：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010090311.png" alt="" /></p>
<p>在上面的报表模版中，在 B2 单元格表达式里输入 C1[A1@2, B1@1], 这就表示取 A1 单元格展开后第二格下 B1 单元格展开后第一格下对应的 C1 单元格的值，所以运行后我们可以看到如下图所示效果：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010090346.png" alt="" /></p>
<h3 id="环比"> 环比</h3>
<p>报表模板如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010092450.png" alt="" /></p>
<div><p>C2 - C2[B2@!-1]</p>
<p>C2[B2@!-1]取相对于当前单元格的 B2 单元格上一格(感叹号负值表示向上位移)的B2单元格所对应的 C2 单元格</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010093052.png" alt="" /></p>
<h3 id="同比"> 同比</h3>
<p>报表模版如下图所示：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010094053.png" alt="" /></p>
<p>在上面的模版当中，D2 单元格中首先取到与其同行的 C2 单元格的值，然后利用单元格坐标，先取到当前 D2 单元格所在行的 A2 单元格的上一条 A2 单元格记录（@-1表示坐标上移），
然后再取这个 A2 下对应的 C2 单元格，但由于其下 C2 单元格还是有多个，所以这里加了个条件<code>B2==$B2</code>，
这里的第一个 B2 表示当前单元格所在行对应的 B2 的值，$B2 表示坐标定位后 C2 单元格对应的 B2 单元格的值，条件就是他们俩要相等，实际上就是月份相等，这样就达到了我们要实现的同比的目的</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010094225.png" alt="" /></p>
<div><p>关于$B2</p>
<p>在单元格名称前加<code>$</code>符号，表示取相对于目标单元格的单元格的值，多用在条件比较当中，比如上面的<code>C2[A2@!-1]{B2==$B2}</code>，这里的$B2就是指取到的C2单元格对应的B2单元格的值。</p>
</div>
<div><p>首年填写空白</p>
<p>可以通过改写表达式<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010095153.png" alt="" /></p>
</div>
<div><p>关于&标记的使用</p>
<p>在使用“&amp;单元格名称”来标记目标单元格展开后的序号时，除上需要注意上面描述的内容外，还需要注意，取序号将以他们共同的父格为基准，如果他们有共同的父格，那么将以这个父格里目标单元格的数量来进行序号编排，这在之前视频教程介绍报表计算模型中，实现明细型主从报表，对从表数据进行编号时就有体现。</p>
</div>
<div><p>隐藏首年</p>
<p>可以通过配置<code>D2</code>的<code>条件属性</code>配置, <code>&amp;A2==1</code>, A2展开第一个元素对应的行高0<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010093437.png" alt="" /></p>
<p>效果如下<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010094735.png" alt="" /></p>
</div>
<h3 id="累加"> 累加</h3>
<p>报表模板如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010101337.png" alt="" /></p>
<p>D2 单元格对应的表达式如下：</p>
<div><pre><code>C2 + D2[B2@!-1]
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20211010101501.png" alt="" /></p>
<p>按年分组累加</p>
<div><pre><code>-- 新的月份展开坐标为1的时候重新累加
if (&amp;B2 == 1) {
    return C2
} else {
    return C2 + D2[B2@!-1]
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>结果如下<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010102335.png" alt="" /></p>
<h3 id="占比"> 占比</h3>
<p>用于统计C2数据列所有数据的总和</p>
<table>
<thead>
<tr>
<th>实例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>C2/sum(C2[])</td>
<td>总占比</td>
</tr>
<tr>
<td>C2/sum(C2[A2, B2])</td>
<td>按A2 + B2分类占比</td>
</tr>
<tr>
<td>C2/sum(C2[]{A2 == $A2 and B2 == $B2})</td>
<td>按A2 + B2分类占比</td>
</tr>
</tbody>
</table>
<p>报表模板如下：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103625.png" alt="" /></p>
<p>结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103538.png" alt="" /></p>
<div><p>Tips</p>
<p>上面累加分母在取出分组对应单元格数组之后使用了<code>sum()</code>函数，具体函数相关介绍请参考<a href="/docs/zh-cn/manual/report/5-functions">函数章节</a></p>
</div>
<h2 id="数据集表达式"> 数据集表达式</h2>
<p>数据集单元格其实也是表达式的一种，还允许我们在单元格表达式里通过书写表达式来实现单元格与数据集字段的绑定，其语法结构如下：</p>
<blockquote>
<p>数据集名称.aggType(字段名[,条件,排序方式])</p>
</blockquote>
<p>聚合方式与我们双击添加字段绑定后在属性面板上看到的聚合方式基本一致，具体有以下几种类型。</p>
<div><p>聚合方式/aggType:</p>
<p>select, group, sum, avg, count, min, max, distinct</p>
</div>
<table>
<thead>
<tr>
<th>实例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>ds1.aggType(username)</td>
<td>取数据集 ds1 中所有的 username 字段信息</td>
</tr>
<tr>
<td>ds1.aggType(username, age &gt; 18)</td>
<td>增加过滤</td>
</tr>
<tr>
<td>ds1.aggType(username, indexof(dst.name, 'a') &gt; -1)</td>
<td>如果过滤条件中属性需要函数处理，需要给属性加上数据集名称</td>
</tr>
<tr>
<td>ds1.aggType(username, age &gt; 18, desc)</td>
<td>增加排序，sum, avg, count, min, max, distinct 输出为单值的不需要排序</td>
</tr>
<tr>
<td>ds1.aggType(username, age&gt;18 and age&lt;60, asc)</td>
<td>多条件过滤</td>
</tr>
</tbody>
</table>
<h3 id="属性函数判断"> 属性函数判断</h3>
<p>如果过滤条件中属性需要函数处理，需要给属性加上数据集名称</p>
<div><pre><code>ds1<span>.</span><span>aggType</span><span>(</span>username<span>,</span> <span>indexof</span><span>(</span>dst<span>.</span>name<span>,</span> <span>'a'</span><span>)</span> <span>></span> <span>-</span><span>1</span><span>)</span> 
</code></pre>
<div><span>1</span><br></div></div>]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">行类型</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/6-rowtype/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/6-rowtype/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>在报表设计器中，选择任意一行或单元格，点击右键，就可以在弹出菜单中看类类型的定义，如下图所示：</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010114539.png" alt="" /></p>
<p>从右键菜单中可以看到，支持将特定行定义成四种特殊类型，分别是：标题行、重复表头行、重复表尾行以及总结行，这些行类型主要是在分页时起作用。</p>
<h2 id="标题行"> 标题行</h2>
<p>所谓标题行，就是在报表计算后分页时只会出现在第一页第一行的行，如果定义了多个行为标题行类型，那么这些行将在报表运行后分页输出时第一页最前面插入标题行。<br>
需要注意的是，我们在报表中可以将位于任意位置的行定义成标题行，但报表计算分页输出时，总会将这些定义为标题行的行放在报表的第一页最前端显示。</p>
<h2 id="重复表头行"> 重复表头行</h2>
<p>与标题行不同的是，定义为重复表头行的行，在报表计算分页输出时会将定义成重复表头行的行放在每一页的前端进行显示。<br>
如果当前报表中定义的有标题行，那么对于第一页，标题前将位于最上面，其下才是重复表头行定义的行。</p>
<h2 id="重复表尾行"> 重复表尾行</h2>
<p>与重复表头行类型，它也会在报表计算分页输出时放在每一页中显示，只是它会在每一页的最下端显示。</p>
<h2 id="总结行"> 总结行</h2>
<p>与标题行对应，总结行会出现在报表计算后分页输出时最后一页的最下端显示。<br>
如果当前报表中定义了重复表尾行，那么在报表计算后分页输出的最后一页中总结后将位于重复表尾行下方显示。</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">添加报表到看板</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/7-board-report/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/7-board-report/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="添加报表看板"> 添加报表看板</h2>
<p>在网格布局和驾驶舱看板中通过菜单 <code>添加图表-&gt;添加复杂报表</code>可以添加设计好的报表到看板</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010180441.png" alt="" /></p>
<h2 id="关联参数"> 关联参数</h2>
<p>参数联动对象中增加了<code>复杂报表类型</code><br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010180920.png" alt="" /></p>
<div><p>注意</p>
<p>请不要将字段关联到汇总的指标字段之上</p>
</div>
<p>你也可以通过环境变量控制报表数据集的数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010181200.png" alt="" /></p>
<h2 id="设置联动"> 设置联动</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010181939.png" alt="" /></p>
<ol>
<li>设定点击事件<code>单元格匹配</code>与<code>单元格排除</code>选定触发联动事件单元格</li>
</ol>
<table>
<thead>
<tr>
<th>匹配规则</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>A1, B1</td>
<td>行列定位详细单元格，逗号分隔选定多个，也可以选定一个</td>
</tr>
<tr>
<td>A, C</td>
<td>选定A, C整列</td>
</tr>
<tr>
<td>1, 2</td>
<td>选定1, 2行</td>
</tr>
</tbody>
</table>
<blockquote>
<p>逗号分隔选定多个，也可以选定一个, 不同匹配模式可以混用</p>
</blockquote>
<ol start="2">
<li>下拉选择源字段类型为<code>单元格</code>，并输入取值表达式，表达式语法与报表设计语法一致</li>
<li>点击目标模型树，自动填入目标字段</li>
<li>添加条件</li>
</ol>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">函数</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/5-functions/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/5-functions/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>在前一小节中，我们介绍了表达式，表达式中会用到函数。原UReport2中提供了大量的内置函数，通过这些内置函数，可以实现各种各样的报表计算功能。函数语法格式如下：</p>
<blockquote>
<p>函数名([表达式,表达式...])</p>
</blockquote>
<p>下面我们就来逐个介绍UReport2内置的函数。</p>
<h2 id="常用函数"> 常用函数</h2>
<h3 id="count函数-统计数量"> count函数(统计数量)</h3>
<p>count函数是对给定的表达式在计算后对象数量进行统计。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>count(C1,C2)</td>
<td>统计相对当前所在单元格，目标C1单元格以及C2单元格加在一起的数量</td>
</tr>
<tr>
<td>count(C1)</td>
<td>统计相对当前所在单元格，目标C1单元格数量</td>
</tr>
<tr>
<td>count(C1{age&gt;20},C2{salary&gt;2000 and degree=='本科'})</td>
<td>统计相对当前所在单元格，目标C1单元格绑定对象的age属性大于20的C1单元格以及C2单元格绑定对象的salary属性大于2000同时degree属性等于本科的单元格数量</td>
</tr>
<tr>
<td>count(C1{age&gt;20})</td>
<td>统计相对当前所在单元格，目标C1单元格绑定对象的age属性大于20的C1单元格数量</td>
</tr>
</tbody>
</table>
<h3 id="sum函数-累加"> sum函数(累加)</h3>
<p>sum函数是对给定的表达式在计算后值进行累加，sum函数要求各个表达式计算后的值必须是数字，否则将产生错误。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>sum(C1)</td>
<td>相对当前单元格，取到所有C1单元格值进行累加</td>
</tr>
<tr>
<td>sum(C1{age&gt;20})</td>
<td>相对当前单元格，取到所有绑定对象属性age大于20的C1单元格值进行累加</td>
</tr>
<tr>
<td>sum(C1,C2)</td>
<td>相对当前单元格，取到所有C1和C2单元格的值进行累加</td>
</tr>
<tr>
<td>sum(C1{age&gt;20},C2{salary&gt;2000 and degree=='本科'})</td>
<td>相对当前单元格，取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行累加</td>
</tr>
</tbody>
</table>
<h3 id="avg函数-求平均值"> avg函数(求平均值)</h3>
<p>avg函数是对给定的表达式在计算后值求平均值，avg函数要求各个表达式计算后的值必须是数字，否则将产生错误。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>avg(C1)</td>
<td>相对当前单元格，求C1单元格的平均值</td>
</tr>
<tr>
<td>avg(C1{age&gt;20})</td>
<td>相对当前单元格，取到绑定对象属性age大于20的C1单元格值的平均值</td>
</tr>
<tr>
<td>avg(C1,C2)</td>
<td>相对当前单元格，求C1和C2单元格的平均值</td>
</tr>
<tr>
<td>avg(C1{age&gt;20},C2{salary&gt;2000 and degree=='本科'})</td>
<td>相对当前单元格，取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求平均值</td>
</tr>
</tbody>
</table>
<h3 id="max函数-求最大值"> max函数(求最大值)</h3>
<p>max函数是对给定的表达式在计算后值求其中的最大值，max函数要求各个表达式计算后的值必须是数字，否则将产生错误。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>max(C1)</td>
<td>相对当前单元格，求C1单元格的最大值</td>
</tr>
<tr>
<td>max(C1{age&gt;20})</td>
<td>相对当前单元格，取到绑定对象属性age大于20的C1单元格值的最大值</td>
</tr>
<tr>
<td>max(C1,C2)</td>
<td>相对当前单元格，求C1和C2单元格的最大值</td>
</tr>
<tr>
<td>max(C1{age&gt;20},C2{salary&gt;2000 and degree=='本科'})</td>
<td>相对当前单元格，取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求最大值</td>
</tr>
</tbody>
</table>
<h3 id="min函数-求最小值"> min函数(求最小值)</h3>
<p>min函数是对给定的表达式在计算后值求其中的最小值，min函数要求各个表达式计算后的值必须是数字，否则将产生错误。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>min(C1)</td>
<td>相对当前单元格，求C1单元格的最小值</td>
</tr>
<tr>
<td>min(C1{age&gt;20})</td>
<td>相对当前单元格，取到绑定对象属性age大于20的C1单元格值的最小值</td>
</tr>
<tr>
<td>min(C1,C2)</td>
<td>相对当前单元格，求C1和C2单元格的最小值</td>
</tr>
<tr>
<td>min(C1{age&gt;20},C2{salary&gt;2000 and degree=='本科'})</td>
<td>相对当前单元格，取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求最小值</td>
</tr>
</tbody>
</table>
<h3 id="row函数-取行号"> row函数（取行号）</h3>
<p>取当前单元格所在行的行号，这个函数比较简单，它没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>row()</td>
<td>取当前单元格所在行的行号</td>
</tr>
</tbody>
</table>
<h3 id="column函数-取列号"> column函数（取列号）</h3>
<p>取当前单元格所在列的列号，这个函数比较简单，它没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>column()</td>
<td>取当前单元格所在列的列号</td>
</tr>
</tbody>
</table>
<h3 id="order函数-排序"> order函数（排序）</h3>
<p>order函数需要两个参数，第一个为要进行排序的对象表达式，第二个是一个布尔值，用来设置排序方式，true正序，false为倒序。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>order(C1,false)</td>
<td>相对当前单元格，取到所有C1单元格值，对这些值进行倒排序，返回排序好的结果集合</td>
</tr>
<tr>
<td>order(C1{age&gt;18},true)</td>
<td>相对当前单元格，取到与C1单元格绑定的对象属性age值大于18的所有C1单元格值，对这些值进行正排序，返回排序好的结果集合</td>
</tr>
</tbody>
</table>
<h3 id="list函数-罗列数据"> list函数（罗列数据）</h3>
<p>取到表达式中定义所有数据，并以集合形式返回。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>list(C1)</td>
<td>相对当前单元格，取到所有C1单元格值以集合形式返回</td>
</tr>
<tr>
<td>list(C1,C2{age&gt;20})</td>
<td>相对当前单元格，取到所有C1单元格值及C2单元格中age属性大于20的所有C2单元格值以集合形式返回</td>
</tr>
</tbody>
</table>
<h3 id="formatnumber函数-格式化数字"> formatnumber函数（格式化数字）</h3>
<p>对给定的参数进行格式化，它至少需要一个参数，第一个参数是要格式化的数字对象，要保证这个参数值取到后可以转换成日期，否则将发生错误；
第二个参数是可选的，用于定义数字格式化采用的模式，如不定义，则采用默认的#来进行格式化。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>formatnumber(C1)</td>
<td>取到C1单元格值，这个值必须可以转换成数字，然后按#来进行格式化成字符串输出</td>
</tr>
<tr>
<td>formatnumber(C1,&quot;#,###.00&quot;)</td>
<td>取到C1单元格值，这个值必须可以转换成数字，然后按#,###.00来进行格式化成字符串输出</td>
</tr>
</tbody>
</table>
<h3 id="get函数-获取指定位置数据"> get函数（获取指定位置数据）</h3>
<p>get函数是2.1.2版本中新增的，它的作用是获取数据集中指定位置的对象或对象的某个属性值。get函数可以有三个参数，第一个为目标集合对象、第二个为数据位置、第三个是对象属性，其中第一个参数是必须的，后面两个参数为可选。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>get(ds1.select(employee_name))</td>
<td>从ds1数据集中获取第1个对象值，并将其返回。第二个位置参数没有指定默认取集合第一个对象</td>
</tr>
<tr>
<td>get(ds1.select(employee_name),2)</td>
<td>从ds1数据集中获取第2个对象值，并将其返回。</td>
</tr>
<tr>
<td>get(ds1.select(employee_name),2,&quot;deptId&quot;)</td>
<td>从ds1数据集中获取第2个对象值，并从这个对象里取deptId属性值并返回。</td>
</tr>
<tr>
<td>get(A3,4)</td>
<td>获取所有A3单元格值，从中取第四个值并返回。</td>
</tr>
</tbody>
</table>
<h2 id="分页相关函数"> 分页相关函数</h2>
<p>所谓分页相关函数，是指这些函数是在分页的时候进行计算，比如计算当前页有多少条记录、当前页某个单元格值累加后是多少、平均值是多少、最大值是多少等等。</p>
<div><p>分页相关函数使用</p>
<p>一般来说，分页相关函数多用在行类型为“重复表头”或“重复表尾”的行中的单元格里。
同时，需要注意的是，分页相关函数只会在分页预览时显示，这点需要注意。</p>
</div>
<h3 id="pcount函数"> pcount函数</h3>
<p>统计当前页下表达对应值的数目，与count函数的使用方法基本一致，不同之处在于pcount只会统计当前页中对应的表达式内容的数目。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>pcount(C1)</td>
<td>统计当前页中，C1单元格数目</td>
</tr>
<tr>
<td>pcount(C1,D2{D2&gt;10000})</td>
<td>统计当前页中，C1单元格和当前页中所有D2单元格值大于10000的D2单元格数目</td>
</tr>
</tbody>
</table>
<h3 id="psum函数"> psum函数</h3>
<p>将当前页下表达式对应的所有值进行累加，与sum函数对应，不同的是psum只针对当前页。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>psum(C1)</td>
<td>将当前页中，所有C1单元格值进行累加</td>
</tr>
<tr>
<td>psum(C1,D2{D2&lt;10000})</td>
<td>将当前页中，所有C1单元格值以及值小于10000的D2单元格值累加起来</td>
</tr>
</tbody>
</table>
<h3 id="pmax函数"> pmax函数</h3>
<p>比较当前页中，表达式对应的值，找出其中最大的那个值，与max函数对应，只是pmax只针对当前页。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>pmax(C1)</td>
<td>比较当前页中所有C1单元格值，找出最大值。</td>
</tr>
<tr>
<td>pmax(C1,D2,E2{E2&gt;1000})</td>
<td>比较当前页中，所有C1、D2以及值大于1000的E2单元格值，找出其中最大的。</td>
</tr>
</tbody>
</table>
<h3 id="pmin函数"> pmin函数</h3>
<p>比较当前页中，表达式对应的值，找出其中最小的那个值，与min函数对应，只是pmin只针对当前页。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>pmin(C1)</td>
<td>比较当前页中所有C1单元格值，找出最小值。</td>
</tr>
<tr>
<td>pmin(C1,D2,E2{E2&gt;1000})</td>
<td>比较当前页中，所有C1、D2以及值大于1000的E2单元格值，找出其中最小的。</td>
</tr>
</tbody>
</table>
<h3 id="page函数"> page函数</h3>
<p>输出当前所在页的页码，该函数没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>page()</td>
<td>输出当前所在页的页码</td>
</tr>
</tbody>
</table>
<h2 id="数学函数"> 数学函数</h2>
<h3 id="abs函数-绝对值"> abs函数（绝对值）</h3>
<p>求参数的绝对值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>abs(-233)</td>
<td>求-233绝对值，计算后的值是233</td>
</tr>
<tr>
<td>abs(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值返回其绝对值</td>
</tr>
</tbody>
</table>
<h3 id="ceil函数-最小值"> ceil函数（最小值）</h3>
<p>对参数值取最小值，如果参数值为小数将舍弃小数点后面的小数部分，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>ceil(32.32)</td>
<td>计算后值为32</td>
</tr>
<tr>
<td>ceil(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值返回其最小值</td>
</tr>
</tbody>
</table>
<h3 id="floor函数-最大值"> floor函数（最大值）</h3>
<div><pre><code>      对参数值取最大值，如果参数值为小数将四舍五入小数点后面的小数部分，参数值计算后数据类型必须是数字，否则会报错。
</code></pre>
</div><table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>floor(32.52)</td>
<td>计算后值为33</td>
</tr>
<tr>
<td>floor(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值返回其最大</td>
</tr>
</tbody>
</table>
<h3 id="chn函数-数字转中文"> chn函数（数字转中文）</h3>
<p>将一个数字转化成中文，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>chn(213)</td>
<td>计算后的值为：贰佰壹拾叁</td>
</tr>
<tr>
<td>chn(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再转化成中文</td>
</tr>
</tbody>
</table>
<div><p>Note</p>
<p>chn函数转换数字即可是整数，也可是小数，如果是小数支持后面最多两位小数，如果实际小数过多，chn函数会先进行四舍五入，然后再进行转换。</p>
</div>
<h3 id="rmb函数-数字转换为大写的人民币金额"> rmb函数（数字转换为大写的人民币金额）</h3>
<p>将一个数字转换成中文大写的人民币金额，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>rmb(213)</td>
<td>计算后的值为：贰佰壹拾叁元整</td>
</tr>
<tr>
<td>rmb(200.12)</td>
<td>计算后的值为：贰佰元壹角贰分</td>
</tr>
<tr>
<td>rmb(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再转化成中文大写的人民币金额</td>
</tr>
</tbody>
</table>
<h3 id="cos函数-求余弦"> cos函数（求余弦）</h3>
<p>求参数的余弦值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>cos (213)</td>
<td>计算后的值为：0.8090276252864301</td>
</tr>
<tr>
<td>cos(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其余弦值</td>
</tr>
</tbody>
</table>
<h3 id="sin函数-正弦"> sin函数（正弦）</h3>
<p>求参数的正弦值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>sin(213)</td>
<td>计算后的值为：-0.58777</td>
</tr>
<tr>
<td>sin(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其正弦值</td>
</tr>
</tbody>
</table>
<h3 id="tan函数-正切"> tan函数（正切）</h3>
<p>求参数的正切值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>tan(213)</td>
<td>计算后的值为：-0.72651</td>
</tr>
<tr>
<td>tan(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其正切值</td>
</tr>
</tbody>
</table>
<h3 id="exp函数-方法用于返回自然数底数e的参数次方"> exp函数（方法用于返回自然数底数e的参数次方）</h3>
<p>求参数的自然数底数e的参数次方，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>expr(213)</td>
<td>计算后的值为：3.196867565323994E921</td>
</tr>
<tr>
<td>expr(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其自然数底数e的参数</td>
</tr>
</tbody>
</table>
<h3 id="log10函数-返回以10为底的对数值"> log10函数（返回以10为底的对数值）</h3>
<p>求参数以10为底的对数值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>log10(213)</td>
<td>计算后的值为：2.3283796034387376</td>
</tr>
<tr>
<td>log10(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其以10为底的对数值</td>
</tr>
</tbody>
</table>
<h3 id="log函数-自然对数"> log函数（自然对数）</h3>
<p>求参数自然对数值，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>log(213)</td>
<td>计算后的值为：5.3612921657094255</td>
</tr>
<tr>
<td>log(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果有多个则取第一个值，再求其自然对数值</td>
</tr>
</tbody>
</table>
<h3 id="median函数-中位数"> median函数（中位数）</h3>
<p>求一组数据的中位数，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>median(12,42,31)</td>
<td>运行结果为31</td>
</tr>
<tr>
<td>median(C1)</td>
<td>相对当前单元格，取到C1单元格的所有值，再取这些值中位数</td>
</tr>
<tr>
<td>median(C1,C2)</td>
<td>相对当前单元格，取到C1单元格和C2单元格的所有值，再取这些值中位数</td>
</tr>
</tbody>
</table>
<h3 id="mode函数-众数"> mode函数（众数）</h3>
<p>求一组数据的众数，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>mode(12,42,3,12)</td>
<td>运行结果为12</td>
</tr>
<tr>
<td>mode(C1)</td>
<td>相对当前单元格，取到C1单元格的所有值，再取这些值众数</td>
</tr>
<tr>
<td>mode(C1,C2)</td>
<td>相对当前单元格，取到C1单元格和C2单元格的所有值，再取这些值众数</td>
</tr>
</tbody>
</table>
<h3 id="vara函数-方差"> vara函数（方差）</h3>
<p>求一组数据的方差，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>vara(12,42,3,12)</td>
<td>运行结果为209.25</td>
</tr>
<tr>
<td>vara(C1)</td>
<td>相对当前单元格，取到C1单元格的所有值，再取这些值方差</td>
</tr>
<tr>
<td>vara(C1,C2)</td>
<td>相对当前单元格，取到C1单元格和C2单元格的所有值，再取这些值方差</td>
</tr>
</tbody>
</table>
<h3 id="stdevp函数-标准差"> stdevp函数（标准差）</h3>
<p>求一组数据的标准差，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>stdevp(12,42,3,12)</td>
<td>运行结果为14.75424</td>
</tr>
<tr>
<td>stdevp(C1)</td>
<td>相对当前单元格，取到C1单元格的所有值，再取这些值标准差</td>
</tr>
<tr>
<td>stdevp(C1,C2)</td>
<td>相对当前单元格，取到C1单元格和C2单元格的所有值，再取这些值标准差</td>
</tr>
</tbody>
</table>
<h3 id="pow函数-返回第一个参数的第二个参数次方"> pow函数（返回第一个参数的第二个参数次方）</h3>
<p>pow函数需要两个参数，第一个为需要计算的数字或表达式，第二个为具体的次方。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>pow(3,2)</td>
<td>表示计算3的2次方值，运算后的结果为9</td>
</tr>
<tr>
<td>pow(C1,3)</td>
<td>相对当前单元格，取到C1单元格的值，如果取到的C1单元格有多个，则取第一个，再对其值求3次方</td>
</tr>
</tbody>
</table>
<h3 id="random函数-随机数"> random函数（随机数）</h3>
<p>生成一个随机数，可以有一个数字类型的参数或表达式，如果有参数，那么以这个参数作为生成随机数字的种子，如果没有则生成一个0~1之间的随机数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>random()</td>
<td>生成一个0~1之间的随机数</td>
</tr>
<tr>
<td>random(10)</td>
<td>生成一个1~10之间的随机数</td>
</tr>
<tr>
<td>random(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果取到的C1单元格有多个，则取第一个，再将这个值作为种子生成一个随机数</td>
</tr>
</tbody>
</table>
<h3 id="round函数-四舍五入"> round函数（四舍五入）</h3>
<p>对一个小数进行四舍五入，它需要两个参数，第一个参数要进行四舍五入的小数或表达式，第二个为
一个可选的
要保留的小数位数，如果没有，则不保留小数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>round(32.12)</td>
<td>计算后的值为32</td>
</tr>
<tr>
<td>round(32.123,2)</td>
<td>计算后的值为32.12</td>
</tr>
<tr>
<td>round(C1,2)</td>
<td>相对当前单元格，取到C1单元格的值，如果取到的C1单元格有多个，则取第一个，然后对这个值做保留两位小数的四舍五入操作</td>
</tr>
</tbody>
</table>
<h3 id="sqrt函数-平方根"> sqrt函数（平方根）</h3>
<p>求一个数字或表达式计算后值的平方根，参数值计算后数据类型必须是数字，否则会报错。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>sqrt(2)</td>
<td>计算后的值为：1.414214</td>
</tr>
<tr>
<td>sqrt(C1)</td>
<td>相对当前单元格，取到C1单元格的值，如果取到的C1单元格有多个，则取第一个，然后对这个值进行取平方根计算</td>
</tr>
</tbody>
</table>
<h2 id="日期函数"> 日期函数</h2>
<h3 id="date函数-日期"> date函数（日期）</h3>
<p>输出日期，date函数可以有一个参数，就是日期格式，如果没有则采用yyyy-MM-dd HH:mm:ss格式输出日期。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>date()</td>
<td>以yyyy-MM-dd HH:mm:ss格式输出当前日期，如：2010-08-15 08:45:10</td>
</tr>
<tr>
<td>date('yyyy年MM月dd日')</td>
<td>以yyyy年MM月dd日格式输出当前日期，如：2010年08月15日</td>
</tr>
</tbody>
</table>
<h3 id="day函数-天"> day函数（天）</h3>
<p>输出当前在月份中的天，该函数没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>day()</td>
<td>可能输出15，表示当前为15日</td>
</tr>
</tbody>
</table>
<h3 id="month函数-月"> month函数（月）</h3>
<p>输出当前月份，该函数没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>month</td>
<td>可能输出8，表示当前为8月份</td>
</tr>
</tbody>
</table>
<h3 id="week函数-星期"> week函数（星期）</h3>
<p>输出当前是星期几，该函数没有参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>week()</td>
<td>输出值可能是“星期三”，表示当前为星期三</td>
</tr>
</tbody>
</table>
<h3 id="year函数-年"> year函数（年）</h3>
<p>输出当前年份，该函数没有参数</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>year</td>
<td>输出结果为2010，表示当前为2010年</td>
</tr>
</tbody>
</table>
<h2 id="字符串函数"> 字符串函数</h2>
<h3 id="indexof函数-位置"> indexOf函数(位置)</h3>
<p>用于返回一个字符串，在目标字符串中的位置，该函数至少需要两个参数，第一个为目标字符串，第二个为要查找的字符串，如果有三个参数，那么第三个就是开始查找的位置信息，第三个参数必须是一定大于等于0的数字。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexof('中华人民共和国','共和')</td>
<td>表示要从&quot;中华人民共和国&quot;这个字符串中找到“共和”字符串的位置</td>
</tr>
<tr>
<td>indexof('中华人民共和国','共和',2)</td>
<td>表示要从&quot;中华人民共和国&quot;这个字符串中第二个字符开始始，找到“共和”字符串的位置</td>
</tr>
<tr>
<td>indexof(C1,&quot;人民&quot;,2)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，再从这个值中第2个位置开始找到“人民”字符串的位置</td>
</tr>
</tbody>
</table>
<h3 id="length函数-长度"> length函数（长度）</h3>
<p>求目标字符串长度，该函数必须要有一个参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>length(&quot;中华人民共和国&quot;)</td>
<td>计算结果为7</td>
</tr>
<tr>
<td>length(C1)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后计算这个值长度</td>
</tr>
</tbody>
</table>
<h3 id="lower函数-转小写"> lower函数（转小写）</h3>
<div><pre><code>  将参数中英文全部转为小写，该函数必须要有一个参数。
</code></pre>
</div><table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>lower(&quot;Super man&quot;)</td>
<td>计算后的结果为：super man</td>
</tr>
<tr>
<td>lower(C1)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后将这个值中所有英文转换成小写</td>
</tr>
</tbody>
</table>
<h3 id="upper函数-转大写"> upper函数（转大写）</h3>
<div><pre><code>  将参数中英文全部转为大写，该函数必须要有一个参数。
</code></pre>
</div><table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>upper(&quot;Super man&quot;)</td>
<td>计算后的结果为：SUPER MAN</td>
</tr>
<tr>
<td>upper(C1)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后将这个值中所有英文转换成大写</td>
</tr>
</tbody>
</table>
<h3 id="replace函数-替换字符串"> replace函数（替换字符串）</h3>
<p>这个函数需要有三个参数，第一个是目标字符串，第二个是要被替换的字符串，第三个是要替换的字符串。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>replace(&quot;他是一个好人&quot;,&quot;他&quot;,&quot;她&quot;)</td>
<td>计算结果为：她是一个好人</td>
</tr>
<tr>
<td>replace(C1,&quot;他&quot;,&quot;她&quot;)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后再将这个值中所有“他”换成“她”</td>
</tr>
</tbody>
</table>
<h3 id="substring函数-子字符串"> substring函数（子字符串）</h3>
<p>该函数允许有三个参数，第一个是目标字符串，第二个为开始截取的位置，第三个为截取结束的位置。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>substring(&quot;他是一个好人&quot;,2)</td>
<td>运行结果为：一个好人</td>
</tr>
<tr>
<td>substring(&quot;他是一个好人&quot;,2,4)</td>
<td>运行结果为：一个</td>
</tr>
<tr>
<td>substring(C1,2,10)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后再取这个值中第2到第10个字符之间内容</td>
</tr>
</tbody>
</table>
<h3 id="trim函数-去空格"> trim函数（去空格）</h3>
<p>去除目标字符串两边空格，该函数要求必须要有一个参数。</p>
<table>
<thead>
<tr>
<th>示例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>trim(&quot; 一个好人 &quot;)</td>
<td>运行结果为： 一个好人</td>
</tr>
<tr>
<td>trim(C1)</td>
<td>相对于当前单元格，找到C1单元格，如果C1单元格有多个，则取第一个单元格值，然后再将这个值两边可能存在的空格全部去除</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">案例</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/8-examples/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/report/8-examples/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="明细表"> 明细表</h2>
<p>绑定数据集单元格，设定聚合方式为列表(list)<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019112129.png" alt="" /></p>
<h2 id="错行分组"> 错行分组</h2>
<p>如下图设计器设置数据集单元格，自定义<code>B2</code>的左父格为<code>A1</code><br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019112649.png" alt="" /></p>
<blockquote>
<p>输出结果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019112812.png" alt="" /></p>
</blockquote>
<blockquote>
<p>如果合并<code>A1</code>和<code>A2</code>单元格，则不需要设定B2单元格的父格</p>
</blockquote>
<h2 id="交叉表"> 交叉表</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211019113501.png" alt="" /></p>
<p><strong>表头</strong><br>
A3, B3: 向下展开<br>
C1, C2: 向右展开</p>
<p><strong>指标</strong><br>
C3: 不展开，聚合方式为汇总<br>
D3: 不展开，聚合方式为汇总, <span><strong>由于默认D3的左父格为C3，所以需要修改其左父格为表头B3</strong></span></p>
<blockquote>
<p>调整列宽之后输出如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019114717.png" alt="" /></p>
</blockquote>
<h2 id="主从表"> 主从表</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211019134447.png" alt="" /></p>
<blockquote>
<p>输出结果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019134536.png" alt="" /></p>
</blockquote>
<h2 id="不同方向展开"> 不同方向展开</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211019140123.png" alt="" /></p>
<p>A2: 向下展开<br>
B2: 向右展开<br>
C2: 父格设定为A2，聚合方式会count计数<br>
B1: 不希望B1被B2拉伸，可以设定B2的上父格为无</p>
<blockquote>
<p>输出结果：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211019140455.png" alt="" /></p>
</blockquote>
<h2 id="统计计算"> 统计计算</h2>
<p>请参照表达式章节中<a href="/zh-cn/manual/report/4-expression/#单元格坐标">单元格坐标</a></p>
<h3 id="小计合计"> 小计合计</h3>
<p>报表模板如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211020101038.png" alt="" /></p>
<ul>
<li>表头: 简单表头不做特殊处理</li>
<li>数据集单元格:
<ul>
<li>A2: 合并A2和A3，A2内容为部门分组</li>
<li>B2: 学历分组</li>
<li>C2: 薪资求和</li>
</ul>
</li>
<li>统计表达式:
<ul>
<li>C3: 部门小计，表达式<em>sum(C2)</em>
<ul>
<li><strong>左父格配置</strong>: 左父格默认为B3 -&gt; A2，因为每个部门统计一次，跟着部门展开不需要修改；</li>
<li><strong>上父格配置</strong>: 要对C2求和，上父格设置为与C2一致，C2的上父格为C1(简单文本单元格且没有扩展), 所以上父格可以设置为C1或者无</li>
</ul>
</li>
<li>C4: 总计, 表达式<em>sum(C2)</em>
<ul>
<li>上父格设定为无即可</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>输出结果：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211020102411.png" alt="" /></p>
</blockquote>
<h3 id="环比"> 环比</h3>
<p>报表模板如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010092450.png" alt="" /></p>
<div><p>C2 - C2[B2@!-1]</p>
<p>C2[B2@!-1]取相对于当前单元格的 B2 单元格上一格(感叹号负值表示向上位移)的B2单元格所对应的 C2 单元格</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010093052.png" alt="" /></p>
<h3 id="同比"> 同比</h3>
<p>报表模版如下图所示：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010094053.png" alt="" /></p>
<p>在上面的模版当中，D2 单元格中首先取到与其同行的 C2 单元格的值，然后利用单元格坐标，先取到当前 D2 单元格所在行的 A2 单元格的上一条 A2 单元格记录（@-1表示坐标上移），
然后再取这个 A2 下对应的 C2 单元格，但由于其下 C2 单元格还是有多个，所以这里加了个条件<code>B2==$B2</code>，
这里的第一个 B2 表示当前单元格所在行对应的 B2 的值，$B2 表示坐标定位后 C2 单元格对应的 B2 单元格的值，条件就是他们俩要相等，实际上就是月份相等，这样就达到了我们要实现的同比的目的</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211010094225.png" alt="" /></p>
<div><p>关于$B2</p>
<p>在单元格名称前加<code>$</code>符号，表示取相对于目标单元格的单元格的值，多用在条件比较当中，比如上面的<code>C2[A2@!-1]{B2==$B2}</code>，这里的$B2就是指取到的C2单元格对应的B2单元格的值。</p>
</div>
<div><p>首年填写空白</p>
<p>可以通过改写表达式<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010095153.png" alt="" /></p>
</div>
<div><p>关于&标记的使用</p>
<p>在使用“&amp;单元格名称”来标记目标单元格展开后的序号时，除上需要注意上面描述的内容外，还需要注意，取序号将以他们共同的父格为基准，如果他们有共同的父格，那么将以这个父格里目标单元格的数量来进行序号编排，这在之前视频教程介绍报表计算模型中，实现明细型主从报表，对从表数据进行编号时就有体现。</p>
</div>
<div><p>隐藏首年</p>
<p>可以通过配置<code>D2</code>的<code>条件属性</code>配置, <code>&amp;A2==1</code>, A2展开第一个元素对应的行高0<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010093437.png" alt="" /></p>
<p>效果如下<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010094735.png" alt="" /></p>
</div>
<h3 id="累加"> 累加</h3>
<p>报表模板如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010101337.png" alt="" /></p>
<p>D2 单元格对应的表达式如下：</p>
<div><pre><code>C2 + D2[A2@!-1]
</code></pre>
<div><span>1</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20211010101501.png" alt="" /></p>
<p>按年分组累加</p>
<div><pre><code>-- 新的月份展开坐标为1的时候重新累加
if (&amp;B2 == 1) {
    return C2
} else {
    return C2 + D2[B2@!-1]
}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>结果如下<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010102335.png" alt="" /></p>
<h3 id="上父格偏移"> 上父格偏移</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211023113231.png" alt="" /></p>
<ul>
<li>B2, B3 年、月数据集单元格，聚合方式为分组</li>
<li>B4: 指标汇总，<strong>设置改行任意列行高-1，可以隐藏该行</strong></li>
<li>B5: 环比差值
<ul>
<li>表达值单元格，内容为<code>B4 - B4[ ;B3@!-1]</code></li>
<li>B4[ ;B3@!-1]: 仅设置上父格坐标，<code>B3@!-1</code>为以B3对相对单元格取展开之后当前对应的B3往左偏移1格内容</li>
</ul>
</li>
<li>B6: B4开销的累加值
<ul>
<li>表达式单元格，内容<code>B6[;B3@!-1] + B4</code></li>
<li><code>B6[;B3@!-1]</code>: 相对B3取自身的上一个值然后与当前列的B4开销相加</li>
</ul>
</li>
</ul>
<blockquote>
<p>最终输出结果(为展示效果限定了月份值)
<img src="http://qiniu.ibidemo.cn/picgo/20211023114625.png" alt="" /></p>
</blockquote>
<h3 id="占比"> 占比</h3>
<p>用于统计C2数据列所有数据的总和</p>
<table>
<thead>
<tr>
<th>实例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>C2/sum(C2[])</td>
<td>总占比</td>
</tr>
<tr>
<td>C2/sum(C2[A2, B2])</td>
<td>按A1 + B1分类占比</td>
</tr>
<tr>
<td>C2/sum(C2[]{A2 == $A2 and B2 == $B2})</td>
<td>按A2 + B2分类占比</td>
</tr>
</tbody>
</table>
<p>报表模板如下：<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103625.png" alt="" /></p>
<p>结果<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211010103538.png" alt="" /></p>
<div><p>Tips</p>
<p>上面累加分母在取出分组对应单元格数组之后使用了<code>sum()</code>函数，具体函数相关介绍请参考<a href="/docs/zh-cn/manual/report/5-functions">函数章节</a></p>
</div>
<h2 id="自定义分组"> 自定义分组</h2>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">变量使用概述</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/variable/8-variable/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/variable/8-variable/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h1 id="变量使用概述"> 变量使用概述</h1>
<h2 id="支持使用变量场景列表"> 支持使用变量场景列表</h2>
<ul>
<li>数据集查询定义</li>
<li>数据集维度可选值查询</li>
<li>看板参数
<ul>
<li>通用过滤器输入值</li>
<li>下拉框默认值</li>
</ul>
</li>
<li>权限模板查询语句</li>
<li>大屏静态组件Query方式获取数据查询</li>
<li>大屏静态组件API方式获取数据URL地址</li>
<li>大屏静态文本超链地址</li>
<li>大屏图标超链地址</li>
</ul>
<h2 id="变量的产生"> 变量的产生</h2>
<h3 id="内置变量"> 内置变量</h3>
<table>
<thead>
<tr>
<th>变量名</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>${loginName}</td>
<td>用户账号： &quot;admin&quot;</td>
</tr>
<tr>
<td>${userName}</td>
<td>用户名：&quot;超级管理员&quot;</td>
</tr>
</tbody>
</table>
<h3 id="内置日期变量"> 内置日期变量</h3>
<p>内置日期工具cdt，具体使用方法如下：</p>
<h4 id="日期操作"> 日期操作</h4>
<p>第一个参数用cdt动态生成需要的日期，第二个参数指定日期格式化</p>
<div><pre><code>-- 当前日期 ${cdt.now(), &quot;yyyy-MM-dd&quot;}  
-- 增加一小时 ${cdt.addHour(1), &quot;yyyy-MM-dd&quot;}  
-- 增加一天 ${cdt.addDay(1), &quot;yyyy-MM-dd&quot;}  
-- 增加一月 ${cdt.addMonth(1), &quot;yyyy-MM-dd&quot;} 
-- 增加一周 ${cdt.addWeek(1), &quot;yyyy-MM-dd&quot;} 
-- 增加一年 ${cdt.addYear(1), &quot;yyyy-MM-dd&quot;}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><div><pre><code>${}内部使用使用单参数，利用cdt提供的格式换参数format
-- 增加一小时 ${cdt.addHour(1, &quot;yyyy-MM-dd&quot;)}  
-- 增加一天 ${cdt.addDay(1, &quot;yyyy-MM-dd&quot;)}  
-- 增加一月 ${cdt.addMonth(1, &quot;yyyy-MM-dd&quot;)} 
-- 增加一周 ${cdt.addWeek(1, &quot;yyyy-MM-dd&quot;)} 
-- 增加一年 ${cdt.addYear(1, &quot;yyyy-MM-dd&quot;)}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><h4 id="指定日期操作"> 指定日期操作</h4>
<p>你也可以对指定日期进行操作,</p>
<div><pre><code>-- 增加一天 ${cdt.addDay(&quot;2021-10-30&quot;,1, &quot;yyyy-MM-dd&quot;)}  
-- 增加一月 ${cdt.addMonth(&quot;2021-10-30&quot;,1, &quot;yyyy-MM-dd&quot;)} 
-- 增加一周 ${cdt.addWeek(&quot;2021-10-30&quot;,1, &quot;yyyy-MM-dd&quot;)} 
-- 增加一年 ${cdt.addYear(&quot;2021-10-30&quot;,1, &quot;yyyy-MM-dd&quot;)}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>指定日期第一个日期参数支持的日期格式</p>
<div><pre><code>yyyy/MM/dd HH:mm:ss
yyyy.MM.dd HH:mm:ss
yyyy年MM月dd日 HH时mm分ss秒
yyyy-MM-dd
yyyy/MM/dd
yyyy.MM.dd
HH:mm:ss
HH时mm分ss秒
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS
yyyyMMddHHmmss
yyyyMMddHHmmssSSS
yyyyMMdd
EEE, dd MMM yyyy HH:mm:ss z
EEE MMM dd HH:mm:ss zzz yyyy
yyyy-MM-dd&#39;T&#39;HH:mm:ss&#39;Z&#39;
yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39;Z&#39;
yyyy-MM-dd&#39;T&#39;HH:mm:ssZ
yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br></div></div><h4 id="日期变量支持的起始周期计算"> 日期变量支持的起始周期计算</h4>
<div><pre><code><span># 指定日期(日期参数类型为日期)对应的年份第一天，格式化为yyyy-MM-dd </span>
<span>${cdt.startOfYear(cdt.addDay(-1)<span>,</span> "yyyy-MM-dd")}</span>  
<span># 指定日期(日期参数类型为字符串)对应的年份第一天，格式化为yyyy-MM-dd </span>
<span>${cdt.startOfYear("2023-08-11"<span>,</span> "yyyy-MM-dd")}</span>  

-- 年份第一天 <span>${cdt.endOfYear(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 年份最后一天 <span>${cdt.endOfYear(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 季度第一天 <span>${cdt.startOfQuarter(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 季度最后一天 <span>${cdt.endOfQuarter(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 月度第一天 <span>${cdt.startOfMonth(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 月度最后一天 <span>${cdt.endOfMonth(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 周第一天 <span>${cdt.startOfWeek(date<span>,</span> "yyyy-MM-dd")}</span>  
-- 周最后一天 <span>${cdt.endOfWeek(date<span>,</span> "yyyy-MM-dd")}</span>  
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h4 id="计算日期差"> 计算日期差</h4>
<div><pre><code>cdt.between(&quot;2021-10-30&quot;, &quot;2021-11-30&quot;, &quot;day&quot;)
cdt.between(&quot;2021-10-30&quot;, &quot;2021-11-30&quot;, &quot;hour&quot;)
cdt.between(&quot;2021-10-30&quot;, &quot;2021-11-30&quot;, &quot;minute&quot;)
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><div><p>提示</p>
<p>因为年、月属于不固定时间长度单位所以无法计算时间差</p>
</div>
<h3 id="看板参数关联到环境变量"> 看板参数关联到环境变量</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160344.png" alt="" /></p>
<h3 id="图表联动关联到环境变量"> 图表联动关联到环境变量</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160402.png" alt="" /></p>
<h3 id="url参数传递变量"> URL参数传递变量</h3>
<p>可以通过url参数设定变量所有的url参数都会解析为环境变量, 做看板集成的时候尤为有用</p>
<div><pre><code>http://localhost:8088/?up=aa&amp;a=%E6%B5%8B%E8%AF%95#/config/cockpit/200326104201751
</code></pre>
<div><span>1</span><br></div></div><h3 id="多看板集成-全局变量"> 多看板集成-全局变量</h3>
<div><pre><code>url里面的参数为全局参数，在多看板集成场景下会被所有看板继承
http://localhost:8088/render-html.html?a=aa&amp;country=USA
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><h3 id="多看板集成-局部变量"> 多看板集成-局部变量</h3>
<ul>
<li>局部变量可以覆盖全局变量</li>
<li>局部变量为对象</li>
</ul>
<div><pre><code>boards<span>=</span><span>encodeURIComponent</span><span>(</span><span>JSON</span><span>.</span><span>stringify</span><span>(</span>
<span>[</span>
    <span>{</span>
        <span>showParams</span><span>:</span> <span>true</span><span>,</span>
        <span>title</span><span>:</span> <span>'第一个看板'</span><span>,</span>
        <span>boardId</span><span>:</span> <span>63</span><span>,</span>
        <span>hiddenParamNames</span><span>:</span> <span>[</span><span>]</span><span>,</span>
        <span>filters</span><span>:</span> <span>{</span><span>"boardParams"</span><span>:</span><span>[</span><span>{</span><span>"id"</span><span>:</span><span>"5chiv3mmalw"</span><span>,</span><span>"name"</span><span>:</span><span>"国家"</span><span>,</span><span>"type"</span><span>:</span><span>"="</span><span>,</span><span>"values"</span><span>:</span><span>[</span><span>]</span><span>}</span><span>]</span><span>}</span><span>,</span>
        <span>variables</span><span>:</span> <span>{</span> <span>//这个变量只针对boardId 63</span>
          <span>country</span><span>:</span> <span>'Mexico'</span>
        <span>}</span>
    <span>}</span><span>,</span>
    <span>{</span>
        <span>showParams</span><span>:</span> <span>true</span><span>,</span>
        <span>title</span><span>:</span> <span>'第二个看板'</span><span>,</span>
        <span>boardId</span><span>:</span> <span>64</span><span>,</span>
        <span>hiddenParamNames</span><span>:</span> <span>[</span><span>'国家4'</span><span>,</span> <span>'国家3'</span><span>]</span><span>,</span>
    <span>}</span>
<span>]</span>
<span>)</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br></div></div><h2 id="变量的使用"> 变量的使用</h2>
<h3 id="数据集中-或者即席查询中"> 数据集中/或者即席查询中</h3>
<div><pre><code><span>.</span><span>.</span><span>.</span><span>.</span> 省略其他查询脚本 <span>.</span><span>.</span><span>.</span>
  <span>JOIN</span> foodmart<span>.</span>region r <span>ON</span> c<span>.</span>REGION_ID <span>=</span> r<span>.</span>REGION_ID
  <span>JOIN</span> foodmart<span>.</span>customer d <span>ON</span> a<span>.</span>CUSTOMER_ID <span>=</span> d<span>.</span>CUSTOMER_ID
<span>WHERE</span> r<span>.</span>sales_country <span>=</span> <span>'${country}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="变量默认值"> 变量默认值</h3>
<p>上面的查询语句中直接使用了自定义变量，但是BI系统如果没有自己在url中传参实际上会出现空值，所以需要给变量一个默认值，让查询在没有传参的场景也能正常运行</p>
<div><pre><code><span>.</span><span>.</span><span>.</span><span>.</span> 省略其他查询脚本 <span>.</span><span>.</span><span>.</span>
  <span>JOIN</span> foodmart<span>.</span>region r <span>ON</span> c<span>.</span>REGION_ID <span>=</span> r<span>.</span>REGION_ID
  <span>JOIN</span> foodmart<span>.</span>customer d <span>ON</span> a<span>.</span>CUSTOMER_ID <span>=</span> d<span>.</span>CUSTOMER_ID
<span>WHERE</span> r<span>.</span>sales_country <span>=</span> <span>'${country!"USA"}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><h3 id="数组变量"> 数组变量</h3>
<h4 id="获取数组变量中的第n个值"> 获取数组变量中的第N个值</h4>
<p>当关联到环境变量的参数为数组或者被赋予多个值时，可以通过内置数组udf获取数组中某个元素值,</p>
<blockquote>
<p>${arr.get(variable, nth, “defaultValue”)}<br>
或者 ${arr.get(variable, nth) ! “defaultValue”}</p>
</blockquote>
<div><p>小技巧</p>
<p>arr.get函数的第一个变量可以为非数组，arr.get(&quot;a&quot;, 0) 返回值依旧为&quot;a&quot;， arr.get(&quot;a&quot;, 1)为空白</p>
</div>
<p>比如现在把日期范围关联到环境变量<strong>dt</strong>，在查询中可以这样取值</p>
<div><pre><code><span>select</span>
       <span>.</span><span>.</span><span>.</span><span>.</span>
  <span>from</span> 
 <span>where</span> date_columen <span>between</span> 
             <span>'${arr.get(dt, 0) ! cdt.addDay(-10,"yyyy-MM-dd")}'</span> 
         <span>and</span> <span>'${arr.get(dt, 1) ! cdt.addDay(-1,"yyyy-MM-dd")}'</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>也可以用下面的方式在变量没有初始化的情况下设置默认值</p>
<div><pre><code>${arr.get(dt, 0, cdt.addDay(-1,&quot;yyyy-MM-dd&quot;)) }
</code></pre>
<div><span>1</span><br></div></div><h4 id="连接数组变量"> 连接数组变量</h4>
<blockquote>
<p>${arr.joinString(variable, ”defaultValues&quot;)}<br>
${arr.joinNumber(variable, “defaultValues&quot;)}</p>
</blockquote>
<div><pre><code><span>WHERE</span> SALES_COUNTRY <span>IS</span> <span>NOT</span> <span>NULL</span>
   <span>AND</span> r<span>.</span>sales_country <span>in</span>  <span>(</span>${arr<span>.</span>joinString<span>(</span>country<span>,</span> “USA<span>,</span> Mexico<span>")})
   AND b.month_of_year in (${arr.joinNumber(month, "</span><span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>,</span>"<span>)</span>}<span>)</span>

<span>--->输出</span>
<span>WHERE</span> SALES_COUNTRY <span>IS</span> <span>NOT</span> <span>NULL</span>
   <span>AND</span> r<span>.</span>sales_country <span>in</span>  <span>(</span><span>'USA'</span><span>,</span> <span>'Mexico'</span><span>)</span>
   <span>AND</span> b<span>.</span>month_of_year <span>in</span> <span>(</span><span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>)</span> 
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="案例"> 案例</h2>
<h3 id="逻辑脚本-判断是否存储变量"> 逻辑脚本，判断是否存储变量</h3>
<div><pre><code><span>&lt;</span><span>%</span>
  var  <span>where</span> <span>=</span> <span>"where 1 = 1"</span><span>;</span>
  <span>if</span> <span>(</span>has<span>(</span>township<span>)</span><span>)</span> {
      <span>where</span> <span>=</span> <span>where</span> <span>+</span> <span>(</span><span>" AND township = '"</span> <span>+</span> township <span>+</span> <span>"'"</span><span>)</span><span>;</span>
  }
  <span>if</span> <span>(</span>has<span>(</span>village<span>)</span><span>)</span> {
      <span>where</span> <span>=</span> <span>where</span> <span>+</span> <span>(</span><span>" AND village = '"</span> <span>+</span> village <span>+</span> <span>"'"</span><span>)</span><span>;</span>
  }
  <span>if</span> <span>(</span>has<span>(</span>group_name<span>)</span><span>)</span> {
      <span>where</span> <span>=</span> <span>where</span> <span>+</span> <span>(</span><span>" AND group_name = '"</span> <span>+</span> group_name <span>+</span> <span>"'"</span><span>)</span><span>;</span>
  }
<span>%</span><span>></span>
<span>select</span> <span>*</span><span>,</span><span>1</span> <span>as</span> cnt <span>from</span> pas_wm_dz_wt ${<span>where</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br></div></div><h3 id="查询模板整体替换"> 查询模板整体替换</h3>
<p>判断某个变量是否存在(有值)，然后整体替换查询sql，注意的是两个不同的sql需要保证输出的字段一致</p>
<div><pre><code><span>&lt;</span><span>%</span>
  var <span>sql</span><span>;</span>
  <span>if</span> <span>(</span>has<span>(</span>country<span>)</span><span>)</span> {
      <span>sql</span> <span>=</span> <span>'select 1 as c'</span><span>;</span>
  } <span>else</span> {
      <span>sql</span> <span>=</span> <span>'select 2 as c'</span><span>;</span>
  }
<span>%</span><span>></span>

${<span>sql</span>}
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><h3 id="日期处理"> 日期处理</h3>
<div><p>技巧</p>
<p>在&lt;% %&gt;界定符中，通过println函数打印的值会最终输出结果中，可以通过println内容带注释符号，调试模板语法是否正确
println(&quot;-- [Log] &quot; + result);</p>
</div>
<div><pre><code><span>&lt;</span><span>%</span>
  var months <span>=</span> strutil<span>.</span>split<span>(</span><span>month</span><span>!</span><span>"2021-02-01"</span><span>,</span> <span>","</span><span>)</span><span>;</span>
  var m2 <span>=</span> cdt<span>.</span><span>add</span><span>(</span><span>"2021-02-01"</span><span>,</span> <span>2</span><span>,</span> <span>-</span><span>1</span><span>,</span> <span>"yyyy-MM-dd"</span><span>)</span><span>;</span>
  var result <span>=</span> <span>''</span><span>;</span>
  <span>for</span><span>(</span>m <span>in</span> months<span>)</span>{
      var monthStr <span>=</span> cdt<span>.</span>addMonth<span>(</span>m<span>,</span> <span>-</span><span>1</span><span>,</span> <span>"yyyy-MM-dd"</span><span>)</span><span>;</span>
      <span>if</span> <span>(</span>isEmpty<span>(</span>result<span>)</span><span>)</span> {
          result <span>=</span> monthStr<span>;</span>
      }
      println<span>(</span><span>"-- [Log] "</span> <span>+</span> result<span>)</span><span>;</span>
      result <span>=</span> result <span>+</span> <span>", "</span> <span>+</span> monthStr<span>;</span>
  }
<span>%</span><span>></span>

<span>select</span> <span>1</span> <span>as</span> c

<span>-- ${month}</span>
<span>-- ${result}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20230425170916.png" alt="" /></p>
<h2 id="side-effect-副作用"> Side Effect 副作用</h2>
<ul>
<li>对于需要缓存的离线数据集，由于缓存的key为变量赋值之后真实执行查询的语句，当有变量存在的时候会把原来一个数据集保存的数据替换为所有不同变量对应的查询分别缓存；</li>
<li>原本执行一次查询，缓存一次，多次读写的数据集需要多次查询、写缓存，可能造成一定的用户体验上高延迟负面影响；</li>
<li>变量数据集更加适用于不需要缓存的数据源聚合；</li>
</ul>
<blockquote>
<p>IBI的模板引擎采用<a href="http://ibeetl.com/" target="_blank" rel="noopener noreferrer">Beetl</a>, 更多高级用法可以查阅该引擎<a href="http://ibeetl.com/guide/#/beetl/" target="_blank" rel="noopener noreferrer">相关文档</a></p>
</blockquote>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:17:10.000Z</published>
  </entry>
  <entry>
    <title type="html">变量案例</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/variable/var-examples/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/variable/var-examples/"/>
    <updated>2026-03-24T07:17:10.000Z</updated>
    <content type="html"><![CDATA[<h2 id="_1-数据集日期过滤"> 1 数据集日期过滤</h2>
<p>为了提高数据集的查询效率，经常会需要在数据集中使用日期条件过滤条件，如下:</p>
<div><pre><code><span>SELECT</span> 
       <span>.</span><span>.</span><span>.</span> 省略的<span>sql</span>
  <span>FROM</span> foodmart<span>.</span>sales_fact_sample a
  <span>JOIN</span> foodmart<span>.</span>time_by_day b <span>ON</span> a<span>.</span>time_id <span>=</span> b<span>.</span>time_id
 <span>WHERE</span> b<span>.</span>the_date <span>>=</span> <span>'${arr.get(dt, 0, cdt.addMonth(-1, "yyyy-MM-dd") )}'</span> 
   <span>AND</span> b<span>.</span>the_date <span>&lt;=</span> <span>'${arr.get(dt, 1, cdt.now("yyyy-MM-dd") )}'</span> 
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p>内置变量函数 <code>arr.get(数组变量, 索引, 默认值)</code>: 获取数组变量中对应索引位的值，数组变量通常由日期范围查询组件生成，但是为了容错如果第一个传入值为单值也能正常工作</p>
<div><p>日期索引与值类型</p>
<p>如果您的数据库为<strong>Oracle</strong>或和Oracle一样存在 &quot;<strong>日期字段（DATE 类型）与字符串比较时有隐式转换，索引失效</strong>&quot; 的问题，请在使用字符串转日期函数把日期变量转换为日期, 如:</p>
<div><pre><code>b<span>.</span>the_date <span>&lt;=</span> 
   to_date<span>(</span><span>'${arr.get(dt, 1, cdt.now("yyyy-MM-dd") )}'</span><span>,</span> <span>'yyyy-MM-dd'</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><p><span>具体to_date函数请参考您当前使用的数据库，数据集定义中的查询脚本暂不支持统一函数</span></p>
</div>
<h3 id="_1-1-自助分析中日期变量赋值"> 1.1 自助分析中日期变量赋值</h3>
<h4 id="场景1-数据集未声明变量赋值"> 场景1: 数据集未声明变量赋值</h4>
<p>我们知道<strong>变量在没有提前声明的情况下也可以使用</strong>，不好的地方是：如果没有提前申明，在自助分析(图表设计)阶段就不知道在数据集中定义了哪些变量，变量的名称、数据类型是什么？是数组还是单值?</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202512251637452.png" alt="" /></p>
<p>这种情况下我们就需要手工输入变量名(通常变量名需要统一约定或问询数据集维护人员), 选择变量类型，设定变量值，如下图操作，给日期范围变量赋值</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/widget-var-nodef-input.gif" alt="" /></p>
<h4 id="场景2-数据集已申明变量赋值"> 场景2: 数据集已申明变量赋值</h4>
<p>如果在数据集维护阶段，提前申明了变量，以及变量的默认值，那么在图表设计阶段打开变量设置则会自动弹出已声明的变量列表</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/widget-var-def-input.gif" alt="" /></p>
<h3 id="_1-2-看板中日期变量赋值"> 1.2 看板中日期变量赋值</h3>
<p>自助分析/图表设计阶段的变量赋值为临时变量，主要是为自助分析服务，因为一次临时的自助分析的图表也可能不用添加到看板。<br>
同时，<strong>看板中的变量优先级也大于自助分析中的变量优先级</strong>。<br>
那么在看板设计阶段我们要怎么给变量赋值呢？</p>
<p><strong>步骤如下：</strong></p>
<ol>
<li>添加日期范围组件</li>
<li>编辑日期范围组件，并添加关联对象<strong>环境变量</strong>(当然该日期控件还可以添加其他多个关联)</li>
<li>设定环境变量的key为数据集的中使用的变量dt</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-daterange-var.gif" alt="" /></p>
<h2 id="_2-绑定变量到日期维度"> 2 绑定变量到日期维度</h2>
<p>通过上面的方法我们完整实现了<strong>数据集动态日期查询</strong>。但是，有一点不方便的是从自助分析步骤开始，使用者都必须知道日期范围的改变需要通过变量赋值才能生效, 这对于非技术会有一定障碍</p>
<p><strong>如果不知道有日期变量存在的情况，仅拖拽日期维度到过滤栏，则查询则会是数据集动态查询日期 + 自助分析维度过滤日期两个独立的条件，最终形成交集</strong>,</p>
<div><p>问题</p>
<p>因为变量没有改变数据集过滤条件永远是固定的，无论维度过滤条件如何设置都只能查看数据集日期范围之内的数据</p>
</div>
<div><pre><code><span>WITH</span> S0 <span>AS</span> <span>(</span>
    <span>SELECT</span>
     <span>-- ... 省略的sql</span>
    <span>FROM</span> foodmart<span>.</span>sales_fact_sample a
      <span>JOIN</span> foodmart<span>.</span>time_by_day b <span>ON</span> a<span>.</span>time_id <span>=</span> b<span>.</span>time_id
      <span>-- 1 数据集过滤条件，最近10天</span>
     <span>WHERE</span> b<span>.</span>the_date <span>>=</span> <span>'2025-12-15'</span> 
     <span>AND</span> b<span>.</span>the_date <span>&lt;=</span> <span>'2025-12-25'</span>
    <span>)</span>

<span>SELECT</span> DATE_FORMAT<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>'%Y-%m-%d'</span><span>)</span> <span>AS</span> c_0<span>,</span>
       <span>SUM</span><span>(</span><span><span>`</span>store_sales<span>`</span></span><span>)</span> <span>AS</span> v_0
  <span>FROM</span> S0
  <span>-- 2 维度过滤设定的标记，最近一年</span>
 <span>WHERE</span> <span><span>`</span>r_date<span>`</span></span><span>>=</span>STR_TO_DATE<span>(</span><span>'2024-12-25'</span><span>,</span> <span>'%Y-%m-%d'</span><span>)</span>
 <span>GROUP</span> <span>BY</span> DATE_FORMAT<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>'%Y-%m-%d'</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202512251754815.png" alt="" /></p>
<blockquote>
<p><strong>有没有办法，即能使用变量查询数据集，又让使用自助分析的用户对日期变量无感呢？</strong></p>
</blockquote>
<div><p>答案是:绑定维度到变量</p>
<ol>
<li>在数据集设计阶段，编辑日期维度</li>
<li>维度高级配置栏，绑定日期维度字段到变量dt，并限定日期过滤方式为范围过滤</li>
<li>在自助分析阶段，不对日期维度设置过滤条件使用默认过滤范围</li>
<li>通过常规维度过滤增加日期条件(行列维度、过滤栏不限)，设定的日期值<strong>自动绑定到预设的变量dt</strong></li>
</ol>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/bind-var2dimfilter.gif" alt="" /></p>
<h3 id="看板筛选器配置"> 看板筛选器配置</h3>
<p>同样，看板筛选器配置关联对象，也可以不用关心变量，直接把日期筛选器关联到日期字段即可, 从而实现让数据集使用者从自助分析到看板设计阶段都不用关心变量</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/board-daterange-dim.gif" alt="" /></p>
<div><p>提示</p>
<p>通过维度过滤器绑定的变量，仅对图表自身生效，不会应用到其他的图表组件</p>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:17:10.000Z</published>
  </entry>
  <entry>
    <title type="html">区域地图数据自定义</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/areaMapUserData/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/areaMapUserData/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="区域地图数据自定义"> 区域地图数据自定义</h1>
<p>Echarts3提供的地图有时无法满足我们的需求，这时可以引入geoJson作为底图。</p>
<h2 id="_1-准备数据"> 1 准备数据</h2>
<p>准备你的geoJson文件，注意中括号的数量
GeoJson 格式的数据，具体格式见 http://geojson.org/。</p>
<div><pre><code><span>{</span>
  <span>"type"</span><span>:</span> <span>"Feature"</span><span>,</span>
  <span>"geometry"</span><span>:</span> <span>{</span>
    <span>"type"</span><span>:</span> <span>"Point"</span><span>,</span>
    <span>"coordinates"</span><span>:</span> <span>[</span><span>125.6</span><span>,</span> <span>10.1</span><span>]</span>
  <span>}</span><span>,</span>
  <span>"properties"</span><span>:</span> <span>{</span>
    <span>"name"</span><span>:</span> <span>"Dinagat Islands"</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><p>将准备好的地图数据放置在<code>ext/mapdata</code>目录之下，建议参考系统默认提供的中国地图三级行政区域地图数据<code>china</code>目录结构，新建一个文件夹</p>
<div><pre><code>ext
├── ext.css
├── ext.js
└── mapdata
    ├── area-code
    │   ├── _default.json
    │   ├── index.json
    │   ├── world-area.json
    │   └── world-area-cn.json
    ├── china
    │   ├── china.json
    │   ├── citycode.json
    │   ├── counties
    │   └── province
    ├── world-cn.json
    └── world-en.json
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h2 id="_2-目录解释"> 2 目录解释</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160229.png" alt="" /></p>
<h3 id="_2-1-区域数据目录"> 2.1 区域数据目录</h3>
<p>区域数据索引，地图数据元数据，用于注册自定义地图数据，告知系统该如何读取与组织自定义数据</p>
<h3 id="_2-2-区域数据读取索引-index-json"> 2.2 区域数据读取索引(index.json)</h3>
<p>下面的数据为默认注册的三个区域索引，areaPath相对于应用根目录，也可以注册外部地址</p>
<div><pre><code><span>[</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"中国三级行政区域"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/_default.json"</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"世界地图-en"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/world-area.json"</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"世界地图-cn"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/world-area-cn.json"</span>
  <span>}</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20210629105239.png" alt="" /></p>
<p>如：新注册一个区域</p>
<h3 id="_2-3-地图数据字典-default-json"> 2.3 地图数据字典(_default.json)</h3>
<p>以中国三级行政区域(_default.json)为例，解释地图数据字典的格式</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>level</td>
<td>层级</td>
</tr>
<tr>
<td>name</td>
<td>名称</td>
</tr>
<tr>
<td>code</td>
<td>唯一标识，支持中文</td>
</tr>
<tr>
<td>dataPath</td>
<td>geojson数据地址</td>
</tr>
<tr>
<td>items</td>
<td>子节点，结构与Area一致，可以没有子节点</td>
</tr>
</tbody>
</table>
<p>有子节点的数据可用于区域地图下钻操作</p>
<div><pre><code><span>{</span>
  <span>"level"</span><span>:</span> <span>0</span><span>,</span>
  <span>"name"</span><span>:</span> <span>"中国"</span><span>,</span>
  <span>"code"</span><span>:</span> <span>"china"</span><span>,</span>
  <span>"dataPath"</span><span>:</span> <span>"ext/mapdata/china/china.json"</span><span>,</span>
  <span>"items"</span><span>:</span> <span>[</span>
      ...
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><p>样例</p>
<div><pre><code><span>{</span>
  <span>"level"</span><span>:</span> <span>0</span><span>,</span>
  <span>"name"</span><span>:</span> <span>"中国"</span><span>,</span>
  <span>"code"</span><span>:</span> <span>"china"</span><span>,</span>
  <span>"dataPath"</span><span>:</span> <span>"ext/mapdata/china/china.json"</span><span>,</span>
  <span>"items"</span><span>:</span> <span>[</span>
    <span>{</span>
      <span>"level"</span><span>:</span> <span>1</span><span>,</span>
      <span>"name"</span><span>:</span> <span>"广东省"</span><span>,</span>
      <span>"code"</span><span>:</span> <span>"44"</span><span>,</span>
      <span>"dataPath"</span><span>:</span> <span>"ext/mapdata/china/province/44.json"</span><span>,</span>
      <span>"items"</span><span>:</span> <span>[</span>
        <span>{</span>
          <span>"name"</span><span>:</span> <span>"广州市"</span><span>,</span>
          <span>"code"</span><span>:</span> <span>"440100"</span><span>,</span>
          <span>"level"</span><span>:</span> <span>3</span><span>,</span>
          <span>"dataPath"</span><span>:</span> <span>"ext/mapdata/china/counties/440100.json"</span>
        <span>}</span><span>,</span>
      <span>]</span>
    <span>}</span>
    ....
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br></div></div><h2 id="_3-实例"> 3 实例</h2>
<h3 id="_3-1-注册地图"> 3.1 注册地图</h3>
<p>在area-code/index.json添加望谟县信息</p>
<div><pre><code><span>[</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"中国三级行政区域"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/_default.json"</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"世界地图-en"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/world-area.json"</span>
  <span>}</span><span>,</span>
  <span>{</span>
    <span>"label"</span><span>:</span> <span>"望谟县"</span><span>,</span>
    <span>"areaPath"</span><span>:</span> <span>"ext/mapdata/area-code/mowang-area.json"</span>
  <span>}</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br></div></div><h3 id="_3-2-元数据定义"> 3.2 元数据定义</h3>
<p>在area-code目录下按添加一份区域数据元数据定义</p>
<blockquote>
<p>ext/mapdata/area-code/mowang-area.json</p>
</blockquote>
<div><pre><code>area-code
├── _default.json
├── index.json
├── mowang-area.json
└── world-area.json
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br></div></div><div><pre><code><span>{</span>
  <span>"level"</span><span>:</span> <span>0</span><span>,</span>
  <span>"name"</span><span>:</span> <span>"望谟县"</span><span>,</span>
  <span>"code"</span><span>:</span> <span>"mowang"</span><span>,</span>
  <span>"dataPath"</span><span>:</span> <span>"ext/mapdata/mowang/mowang.json"</span>
  <span>"items"</span><span>:</span> <span>[</span>
     ...乡镇数据信息
  <span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br></div></div><h3 id="_3-2-添加地图数据"> 3.2 添加地图数据</h3>
<p>新建一个目录<code>ext/mapdata/mowang</code>用于存放刚才注册区域的geojson数据</p>
<div><pre><code>mapdata
...
├── mowang
│   ├── 1-zhen // 文件夹：镇相关地图数据
│   ├── 2-cun // 文件夹：村相关地图数据
│   ├── 3-zu // 文件夹：组相关地图数据文件夹
│   └── mowang.json  // 文件：县地图数据

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="_4-注册完成"> 4 注册完成</h2>
<p>成功注册之后，区域地图选择地图数据下拉及可看到，您在index.json中新增注册的地图；</p>
<div><p>提示</p>
<p>该文件可能会被缓存, 1.4.3开始索引文件支持在系统配置页面修改</p>
</div>
<p>按照上面演示注册成功之后，下面的边饶镇应该显示是望谟县</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160300.png" alt="" /></p>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">图表类型</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="汇总数据图"> 汇总数据图</h2>
<h3 id="交叉表"> 交叉表</h3>
<p><img src="http://qiniu.ibidemo.cn/交叉表基础原理.png" alt="" /></p>
<p>在原值基础上交叉表支持下面值类型计算, <a href="./charts/cross-table.html">详细请参考高级交叉表/数据透视章节</a></p>
<ul>
<li>隐藏维度、隐藏指标</li>
<li>行/列占比(子分组)</li>
<li>总占比</li>
<li>RANK/DENSE RANK</li>
<li>ROW_NUMBER</li>
<li>累加/累加占比</li>
<li>高级统计
<ul>
<li>环比/滞后比较</li>
<li>同比</li>
</ul>
</li>
<li>行/列汇总</li>
<li>行/列小计</li>
<li>表达式</li>
</ul>
<h4 id="支持自动滚动-轮播"> 支持自动滚动/轮播</h4>
<p>交叉表支持开启自动滚动, 仅需设置<strong>滚动条</strong> -&gt; <strong>取消页码显示</strong> -&gt; <strong>打开自动滚动</strong></p>
<ul>
<li>支持首尾停顿时间设置</li>
<li>支持鼠标悬停暂停滚动</li>
<li>支持配置滚动速度</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/交叉表滚动.gif" alt="" /></p>
<h4 id="支持指标字体列字体加粗"> 支持指标字体列字体加粗</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121102831.png" alt="" /></p>
<h4 id="交叉表布局"> 交叉表布局</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518144322.png" alt="" /></p>
<ul>
<li>交叉表列宽配置
表头换行、在行维与指标上设定列宽<br>
<img src="http://qiniu.ibidemo.cn/picgo/table-colwidth-wrapper.gif" alt="" /></li>
<li>列汇总前置</li>
<li>行汇总前置<br>
<img src="http://qiniu.ibidemo.cn/picgo/table-ahead-summary.gif" alt="" /></li>
<li>转置
<img src="http://qiniu.ibidemo.cn/picgo/20230518144859.png" alt="" /></li>
<li>对齐指标
<img src="http://qiniu.ibidemo.cn/picgo/20230518144830.png" alt="" /></li>
<li>单个指标不展示值表头
<img src="http://qiniu.ibidemo.cn/picgo/20230518144718.png" alt="" /></li>
</ul>
<h3 id="柱线图"> 柱线图</h3>
<p>每列显示为一条线，或者一个柱形图序列。</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">X 轴</td>
<td style="text-align:left">放置一个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个或者多个指标节点</td>
</tr>
<tr>
<td style="text-align:left">添加轴</td>
<td style="text-align:left">显示双轴</td>
<td style="text-align:left">建议为不同的轴配置成不同的图形类别，如：柱线</td>
</tr>
</tbody>
</table>
<div style="text-align:left">
  <img src="http://qiniu.ibidemo.cn/%E6%9F%B1%E7%BA%BF%E5%9B%BE.png"  />
</div>
<h4 id="堆叠柱-线"> 堆叠柱(线)</h4>
<p>轴类型下拉选择堆叠柱，可以对拆分的指标(有列维)进行堆叠</p>
<div><p>提示</p>
<p>v1.10之前指标堆叠堆叠只能对相同的指标进行堆叠，多个不同的指标没有列维的场景不能进行堆叠</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213153644.png" alt="" /></p>
<h5 id="v1-10-0堆叠支持按轴堆叠"> <sup>v1.10.0</sup>堆叠支持按轴堆叠</h5>
<p><img src="http://qiniu.ibidemo.cn/picgo/按轴堆叠.gif" alt="" /></p>
<h5 id="堆积排序支持选择轴-积指标排序"> 堆积排序支持选择轴/积指标排序</h5>
<p>按列维度堆叠不同指标 → 开启堆积排序 → 选择堆积指标</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/按列维堆叠-排序指标.gif" alt="" /></p>
<p>按轴堆叠 → 开启堆积排序 → 选择堆叠轴</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/按轴堆叠-排序指标.gif" alt="" /></p>
<h4 id="双轴图"> 双轴图</h4>
<p>柱线图添加轴即可绘制为双轴图，建议为不同的轴配置成不同的图形类别，如：柱线</p>
<p><img src="http://qiniu.ibidemo.cn/双轴图.png" alt="" /></p>
<h4 id="条形柱形图"> 条形柱形图</h4>
<p>默认值轴位垂直轴，通过设定值轴位水平轴可以绘制条形水平柱<br>
<img src="http://qiniu.ibidemo.cn/picgo/20230213154342.png" alt="" /></p>
<h4 id="山峰图"> 山峰图</h4>
<p>柱图通过设定柱体样式实现山峰图效果，山峰图值轴最小值强制固定位0，否则会出现山峰起点不在类别轴的问题<br>
<img src="http://qiniu.ibidemo.cn/picgo/chart-hill.gif" alt="" /></p>
<h4 id="时间线配置"> 时间线配置</h4>
<p>支持按列维拆分为时间线的不同节点，动态叙事</p>
<ul>
<li>柱线图时间线配置, <strong>用于时间线节点列维数, 默认所有列维，可以配置仅使用前N个列维分组</strong><br>
<img src="http://qiniu.ibidemo.cn/picgo/bar-timeline.gif" alt="" /></li>
</ul>
<h3 id="排行榜"> 排行榜</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517160305.png" alt="" /></p>
<table>
<thead>
<tr>
<th style="text-align:left">配置项</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">起始</td>
<td style="text-align:left">设置展示的项目从第几名开始</td>
</tr>
<tr>
<td style="text-align:left">记录数</td>
<td style="text-align:left">展示记录数</td>
</tr>
<tr>
<td style="text-align:left">开启滚动</td>
<td style="text-align:left">当所有记录数大于展示记录数时可开启滚动显示</td>
</tr>
</tbody>
</table>
<h3 id="瀑布图"> 瀑布图</h3>
<p>瀑布图常用与累计统计, 每一项的开始为前一项的结束，最后一项为汇总值</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个或多个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517161740.png" alt="" /></p>
<h3 id="子弹图-完成度"> 子弹图(完成度)</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">0个或多个</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 2 个或指标，第二个指标为目标值</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517162311.png" alt="" /></p>
<h4 id="子弹图0-1规范进度条"> 子弹图0-1规范进度条</h4>
<p>用子弹图实现多进度条可视化，0-1规范对齐不同目标值的项目</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/bullet-progress.gif" alt="" /></p>
<h3 id="玉珏图-环形柱图"> 玉珏图(环形柱图)</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517155442.png" alt="" /></p>
<h3 id="饼图"> 饼图</h3>
<p>每列显示一个饼图</p>
<div style="text-align:center">
  <img src="../../assets/widget/chart_pie.png"  />
</div>
<p><strong>饼图按行绘制</strong></p>
<p>默认饼图按列绘制，如果希望按行绘制可以在设置中修改</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213154818.png" alt="" /></p>
<h3 id="旭日图"> 旭日图</h3>
<p><img src="http://qiniu.ibidemo.cn/旭日图.png" alt="" /></p>
<h3 id="kpi指标卡"> KPI指标卡</h3>
<p>指标卡 输入没有维度信息时，<strong>一个指标值</strong>，如果需要进行同环比比较计算，需要增加行维，让一个值变成一个系列，然后引擎会按照默认偏移量进行比较计算，</p>
<blockquote>
<p>默认情况下，环比比较偏移量为1，即与上一个数值进行比较， 同比比较偏移量为12，支持微调项目中修改</p>
</blockquote>
<div style="text-align:left">
  <img src="http://qiniu.ibidemo.cn/kpi%E5%90%8C%E7%8E%AF%E6%AF%94.png"  />
</div>
<h4 id="指标卡网络背景图片"> 指标卡网络背景图片</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240220100034.png" alt="" /></p>
<h3 id="漏斗图"> 漏斗图</h3>
<p>一般情况下一个漏斗需要显示如 <em>展示-&gt;点击-&gt;提交-&gt;付款</em>, 一连串不同度量的数值， 在交叉表里面为值轴放置的多个列
行里面的值会按大小自动排序之后形成漏斗
<strong>所以漏斗图一行一个漏斗</strong>， 下面的 Demo 没有实际意义，仅仅作为演示说明</p>
<div style="text-align:center">
  <img src="../../assets/widget/chart_funnel.png"  />
</div>
<h3 id="桑基图"> 桑基图</h3>
<div style="text-align:center">
  <img src="../../assets/widget/chart_sanky.png"  />
</div>
<p>以行值和列值为节点，单元格为<strong>行到列</strong>的连接进行画图，交叉表可以视为一个连接矩阵</p>
<div id="callout-focus-demo">
    <h4>为什么我的桑基图没有层级？</h4>
    <p>有很多人问为什么自己的桑基图没有层级，其实桑基图的层级和你的数据本身有关.</p>
    数据里面有
    A -&gt; B 和 B -&gt; C， B为中间层，就会自动适配出两层
    另外注意一点EChart对数据要求，不能成环 \(A-&gt;B..-&gt;A\)
</div>
<h3 id="雷达图"> 雷达图</h3>
<p>支持按列绘制网或按行绘制网</p>
<div style="text-align:left">
  <img src="../../assets/widget/Chart_Radar.png"  />
</div>
<h3 id="气泡图"> 气泡图</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">X 轴</td>
<td style="text-align:left">放置一个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">值</td>
<td style="text-align:left">Y 轴、气泡大小、颜色深度</td>
<td style="text-align:left">每个指标节点对应一个属性</td>
</tr>
</tbody>
</table>
<div style="text-align:left">
  <img src="../../assets/widget/Chart_Bubble.png"  />
</div>
<ul>
<li>气泡图横轴设定为指标<sup>v1.7.0</sup>
通过指标配置可以设定，横轴(x轴)支持显示指标</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/bubble-xAixs.gif" alt="" /></p>
<h3 id="对比图"> 对比图</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">Y 轴</td>
<td style="text-align:left">只能放置一个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">X 轴左右两边</td>
<td style="text-align:left">只能放置两个指标节点</td>
</tr>
</tbody>
</table>
<div style="text-align:left">
  <img src="../../assets/widget/chart_contrast.png"  />
</div>
<h3 id="标签云"> 标签云</h3>
<p>只有能一个或多个行维节点</p>
<div style="text-align:left">
  <img src="../../assets/widget/chart_wordcloud.png"  />
</div>
<h3 id="矩形树图"> 矩形树图</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">多个行维代表多层，用颜色来区分类目</td>
<td style="text-align:left">放置一个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">拆分系列</td>
<td style="text-align:left">放置零个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">用面积来表示数值</td>
<td style="text-align:left">放置 1 个或多个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/5-矩形树图多指标.gif" alt="" /></p>
<h3 id="热点图"> 热点图</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<div style="text-align:left">
  <img src="../../assets/widget/chart_calender.png"  />
</div>
<h3 id="关系图"> 关系图</h3>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">中心点集</td>
<td style="text-align:left">放置 1 个或者 2 个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">放置 1 个或者 2 个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<div style="text-align:left">
  <img src="http://qiniu.ibidemo.cn/%E5%85%B3%E7%B3%BB%E5%9B%BE.png"  />
</div>
<h3 id="箱线图v1-10"> 箱线图<sup>v1.10</sup></h3>
<p>箱线图需要2个或2个以上的行维，第一个行维作为横轴(分类轴)，后面的行维把第一个行维拆分之后的数据组和用于绘制一个箱体</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517153034.png" alt="" /></p>
<table>
<thead>
<tr>
<th style="text-align:left">配置项</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">分组行维数</td>
<td style="text-align:left">用于分组的行维数，默认使用一个行维</td>
</tr>
<tr>
<td style="text-align:left">是否显示最小</td>
<td style="text-align:left">是否显示最小</td>
</tr>
<tr>
<td style="text-align:left">是否显示最大</td>
<td style="text-align:left">是否显示最大</td>
</tr>
<tr>
<td style="text-align:left">分位数-q1</td>
<td style="text-align:left">默认为25%分位数</td>
</tr>
<tr>
<td style="text-align:left">分位数-q2</td>
<td style="text-align:left">默认为50%分位数</td>
</tr>
<tr>
<td style="text-align:left">分位数-q3</td>
<td style="text-align:left">默认为75%分位数</td>
</tr>
</tbody>
</table>
<h3 id="树形图v1-10"> 树形图<sup>v1.10</sup></h3>
<p>树形图按根据行维的层级结构绘制树，可以有0个或者多个指标，层级节点能汇总下级节点指标值, 目前仅支持sum汇总子节点</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230512152936.png" alt="" /></p>
<h3 id="k线图"> K线图</h3>
<ol>
<li>标准K线图的绘制需要4个关键指标，分别是：开盘价、收盘价、最高价、最低价。如果数据中不足4个指标，系统将自动使用最后一个指标补齐，确保K线图所需数据的完整性。</li>
<li>我们建议优先使用直接计算的结果绘制K线图，以确保图表的准确与性能。</li>
<li>如果计算性能允许，也可以基于原始数据使用<strong>计算字段</strong>功能，通过按行维分组、时间排序的方式计算出开盘价和收盘价，从而生成K线图。这种方法可以更灵活地处理数据，适用于更复杂的分析场景。</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151649583.png" alt="" /></p>
<h3 id="区域地图"> 区域地图</h3>
<p>该地图需要的数据为带行政单位的省市县(区)维度, 如: 湖南省 -&gt; 长沙市 -&gt; 望城区, 打开下钻功能支持三级下钻</p>
<p><img src="http://qiniu.ibidemo.cn/区域地图.png" alt="" /></p>
<ul>
<li><a href="./areaMapUserData.html">区域地图数据自定义</a></li>
<li><a href="./map.html">具体查看地图</a></li>
</ul>
<h3 id="_3d地图"> 3D地图</h3>
<p>3D地区使用配置与区域地图类似，不支持列维配置</p>
<h3 id="_3d地球"> 3D地球</h3>
<p>3D地球，<strong>地理位置数据为中文地名</strong>, 可以是国家，如：中国、美国；也可以是全球有主要城市：伦敦、纽约、北京等；<br>
展示是形式有[区域标牌]、[气泡]、[标线地图]三种，[区域标牌]、[气泡]取行维的第一个字段作为地图位置数据;<br>
[标线地图]取第一个行维为起始位置，第二个行维为结束位置</p>
<h3 id="svg地图"> SVG地图</h3>
<ol>
<li>在配置栏背景图选项上传SVG作为底图，需要标注的区域元素上需要有 name 属性;
<img src="http://qiniu.ibidemo.cn/picgo/202408191638805.png" alt="" /></li>
<li>如果您没有SVG素材不要着急，您可以使用synoptic.design工具，上传图片作为底图，在图片上做区域标记再转换为SVG；可以点击背景图中的链接跳转图片转SVG链接；</li>
<li>synoptic.design标注时，仅需填入第二项AreaName(to display)
<img src="http://qiniu.ibidemo.cn/picgo/202408191643386.png" alt="" /></li>
<li>编辑完成点击<code>EXPORT TO POWER BI</code>,  弹窗中右键保存svg到本地
<img src="http://qiniu.ibidemo.cn/picgo/202408191646767.png" alt="" /></li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151707100.png" alt="" /></p>
<p>除了按数值大小映射区域颜色深度之外，还支持按列维区分色块</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151705484.png" alt="" /></p>
<h2 id="明细表与支持数据的图形-企业版"> 明细表与支持数据的图形<sup style="color:red">(企业版)</sup></h2>
<h3 id="明细表"> 明细表</h3>
<p>与透视表/交叉表不同之处在于, 交叉表有行表头与列表头两个表头, 如果把两个表头看做一个二维坐标系，则通过两个表头可以定位唯一一个值，在明细表中用同样的表头条件查询数据则可以查询出多个值，因此在交叉表中就要聚合操作，明细表则不需要聚合操作；</p>
<h4 id="为什么要引入明细表"> 为什么要引入明细表？</h4>
<ul>
<li>对于 0.6 之前版本比较熟悉的用户可能注意到我们在常见问题里面讲产品定位时解释过为什么之前一直没有明细表功能，<a href="./zh-cn/discuss/faq.html#关于明细数据展示">关于明细数据展示</a></li>
<li>同时讲到这里有用户可能会有疑问了，“交叉表如果把所有的维度都用上展示效果和明细表输出一样”；</li>
<li><strong>结果一样，数据处理逻辑完全不同，性能差别也不同！</strong> 聚合查询是根据用户拖拽的维度对数据集动态的生成聚合查询语句，经过数据源聚合计算返回聚合数据，如果仅仅把交叉表用于显示明细数据则是在原本不需要聚合的数据上，强行对所有维度做一次聚合操作，如果目标结果集很大，我们知道数据库进行聚合/去重需要大量的内存与 CPU 开销, 这种无意义的性能损耗会是相当严重的问题; 所以这就导致了很大部分不理解我们系统工作原理的用户会在此时抱怨性能问题;</li>
</ul>
<p>如下图所示，明细表和交叉表在同时限定维度<code>年</code>与<code>性别</code>的情况下，明细表会返回大量没有经过聚合的重复数据，交叉表返回的则是对两个维度进行聚合之后的结果集。</p>
<table>
  <tr>
    <td>
      <div style="text-align:center">
        <img src="../../assets/widget/cn-detailtable.png"  />
        <p>明细表</p>
      </div>
    </td>
    <td>
      <div style="text-align:center">
        <img src="../../assets/widget/cn-detailtable2pivot.png"  />
        <p>交叉表</p>
      </div>
    </td>
  </tr>
</table>
<h4 id="明细表分页问题"> 明细表分页问题</h4>
<p>明细表后台直接对数据集查询，默认返回前 2000 条数据，前端对 2000 条数据进行分页；结果集大小可在图表配置栏配置；<br>
导出数据不做限制，后台查询好结果集之后返回全量数据；但是，还是请用户使用的过程当中注意控制下数据量大小，建议在百万级别之下；<br>
用户可以通过维度过滤添加数据筛选条件查询自己关系的明细数据</p>
<h4 id="明细表设置多级表头"> 明细表设置多级表头</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161638.png" alt="" /></p>
<h4 id="明细表行合并"> 明细表行合并</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161712.png" alt="" /></p>
<p>版本1.5.0之前明细表合并逻辑不考虑父格是否相同，只要当前格与同列上一格值一样则合并，这样会造成下面的合并错误<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211023162818.png" alt="" /></p>
<p>从版本1.5.0开始明细表合并逻辑需要左父格和当前格与上格一致则自动合并;</p>
<p>此外，考虑下面的业务场景，母订单可以拆分成2个子订单，但是运费只有一笔需要合并，效果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211023163153.png" alt="" /><br>
如果按照上面父格相同要求对比父格，则由于子订单不一致合并失败，为了解决该问题，可以修改配置</p>
<ul>
<li>上级列配置指定，只要用户设定<code>运费列</code>的父格为<code>主订单号</code>则只做用户指定列比较</li>
<li>禁止合并: <code>站点</code>列配置禁止合并则不会做合并处理</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211023164706.png" alt="" /></p>
<h4 id="明细表单元格格式化"> 明细表单元格格式化</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161730.png" alt="" /></p>
<ul>
<li>单元格格式化函数实例</li>
</ul>
<div><pre><code><span>/**
 colDef: 列定义: {
     "index":0, "dimType":"column", "typeIndex":0,
     "prop":"_0", "name":"gender", "alias":"性别", "label":"性别",
     "sort":"desc", "formatter":null,
     "align":"left", "width":"100",
     "headers":["合并"]
     },
 value: 当前单元格值
 row:  该行所有列 {
  "gender": { "alias": "性别", "value": "M" },
  "the_year": { "alias": "年", "value": "2016" },
  ...
 }
 **/</span>


<span>formatter</span> <span>=</span> <span>function</span><span>(</span><span>colDef<span>,</span> value<span>,</span> row</span><span>)</span> <span>{</span>
    <span>debugger</span> <span>// 也可以尝试在这里加入断点观察参数结构</span>
    <span>let</span> <span>{</span>label<span>}</span> <span>=</span> colDef<span>;</span>
    <span>if</span> <span>(</span>label <span>==</span> <span>'开销'</span><span>)</span> <span>{</span>
        <span>let</span> color <span>=</span> value <span>></span> <span>2</span> <span>?</span> <span>'green'</span> <span>:</span> <span>'red'</span><span>;</span>
        <span>return</span> <span><span>`</span><span>&lt;div style="fheight:100%;">
                   &lt;span style="margin-right: 5px;color:</span><span><span>${</span>color<span>}</span></span><span>">
                   &lt;i>&lt;/i>&lt;/span> </span><span><span>${</span>value<span>}</span></span><span>
                &lt;/div></span><span>`</span></span>
    <span>}</span> <span>else</span> <span>{</span>
        <span>return</span> value<span>;</span>
    <span>}</span>
<span>}</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div><h4 id="明细表数据导出数据库"> 明细表数据导出数据库</h4>
<ul>
<li>支持导出的数据库兼容 MySQL/Postgres/Clickhouse/sqlserver/Oracle/Doris</li>
<li>导入数据字段选择、字段类型、字段注释可配置</li>
<li>支持多次导入字段增加、字段减少数据合并</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/download2db.gif" alt="" /></p>
<div><p>注意</p>
<p>如果导出目标数据库为Doris，因为Doris与MySql驱动和链接配置一样，但是建表语法和数据加载机制又有区别，所以需要在数据源中标记数据源为Doris，标记为Doris的数据源，后续数据导入到Doris会有相应优化处理</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230810115759.png" alt="" /></p>
</div>
<h3 id="散点图"> 散点图</h3>
<p>同样，散点图也是一种不需要数据聚合的图表，除了聚合之外，另外一点与气泡图不一样的地方在于，散点图的 x 轴和 y 轴都可以既是指标或者维度，
散点图做图基于明细数据，在选定 x 轴和 y 轴的情况下，默认用明细数据表的第一列和第二列作为 x 轴和 y 轴，轴值类型默认为 Category，
用 Category 作轴值类型，后台需要对轴所有值进行计算出重保存，有一定开销；如果值类型为数值，则只要计算最大与最小值；请根据实际情况配置轴值类型；<br>
列维度若有配置则会联合作为散点分类；</p>
<div><p>维度、指标配置映射</p>
<ul>
<li>列维度默认作为分类属性(颜色)</li>
<li>当仅有一个指标一个行维度, 行维作为x轴，指标为y轴</li>
<li>当有两个指标时，默认第一个指标为x轴，第二个指标维y轴</li>
</ul>
</div>
<blockquote>
<p>考虑到性能问题与误操作，散点图也默认配置了 2000 条返回记录的限制；</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517163507.png" alt="" /></p>
<h3 id="基于经纬度的做图的中国地图"> 基于经纬度的做图的中国地图</h3>
<p>考虑到精确的经纬度数据也很少会有重复，所有在 0.6 版本中基于经纬度的中国地图，也采用明细数据结果进行绘图；</p>
<ul>
<li>散点图： 与普通散点图类似，列维度为分类，行维度需要配置<code>经度</code>和<code>维度</code></li>
<li>标线地图： 行维度依次放置 <code>来源经度</code>、<code>来源维度</code>、<code>目标经度</code>、 <code>目标维度</code>，列维度放置分类</li>
</ul>
<div style="text-align:center">
  <img src="../../assets/widget/cn-chinamap-detaildata.png"  />
  <p>经纬度数据地图</p>
</div>
<h3 id="经纬度地图"> 经纬度地图</h3>
<p>经纬度地图为明细数据地图，明细数据查询需要需要设置明细数据返回量，目前不支持大规模数据渲染</p>
<p><img src="http://qiniu.ibidemo.cn/标线地图.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">树形表</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/01-tree-table/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/01-tree-table/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概要"> 概要</h2>
<p>树形表的使用与交叉表基本相同，有一下几点区别:</p>
<ul>
<li><strong>层级展开/折叠</strong>：树形表的行维以树形的结构展示，支持展开或折叠</li>
<li><strong>汇总</strong>: 树形表在行维上必须要做所有层级的汇总，也就是列汇总必须有，所以当行列维和数据比较多时性能开销会比交叉表</li>
<li><strong>汇总对象</strong>: 树形表的汇总默认会基于上一级计算，交叉表的汇总都基于最小颗粒度计算</li>
<li><strong>实现技术</strong>: 树形表基于Canvas实现，交叉表基于原生html实现</li>
<li><strong>图标集</strong>: 树形表的条件样式图标基于SVG图标，交叉表图标基于fontawesome</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/treetable-intro.gif" alt="" /></p>
<h3 id="树形表的排序"> 树形表的排序</h3>
<p>指标排序的时候，支持所有层级行维汇总排序</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202511180926642.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">轴样式配置</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-aix-style/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-aix-style/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>所有带坐标轴的图形，轴样式配置基本类似</p>
<p>在进行图表样式配置之前请先了解图表组成的几个重要元素</p>
<ul>
<li>图例</li>
<li>类别轴</li>
<li>值轴</li>
<li>刻度</li>
<li>轴标题</li>
<li>分割线</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131702457.png" alt="" /></p>
<p>对应的配置栏目如下图所示:</p>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/picgo/202501131708412.png" width="250" />
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">交叉表/数据透视</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/01-cross-table/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/01-cross-table/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="概要"> 概要</h2>
<p>通过本章学习，您将掌握数据透视的基本原理，交叉表的使用，表面快速计算(包含下面知识点):</p>
<ul>
<li>交叉表样式配置</li>
<li>隐藏维度、隐藏指标</li>
<li>行/列占比(子分组)</li>
<li>总占比</li>
<li>RANK/DENSE RANK</li>
<li>ROW_NUMBER</li>
<li>累加/累加占比</li>
<li>高级统计
<ul>
<li>环比/滞后比较</li>
<li>同比</li>
</ul>
</li>
<li>行/列汇总</li>
<li>行/列小计</li>
<li>表达式</li>
</ul>
<div><p>数据透视模型<sup>v1.8</sup></p>
<p><code>v1.8</code>之后原来仅交叉表支持的值类型变化操作，拓展到所有图形，这样带来的好处是:</p>
<ul>
<li>可以更方便的以交叉表为数据模型设计数据，然后把数据映射到其他图形</li>
<li>避免了原来在交叉表配置了值类型变化之后，切换到其他图之后又没有变化操作，两种图形产生值内容不一致的问题</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518092214.png" alt="" /></p>
<p>一个普通的交叉表包含行表头, 列表头与中间的汇总指标数据</p>
<div><p>提示</p>
<p>所谓<code>行表头</code>的<strong>行</strong>是相对于数据来说的, 一行数据的表头, 而不是表头本身以行形式排列</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141108295.png" alt="" /></p>
<blockquote>
<p><strong>当我们有了原始的交叉表表格之后，可以对表格上的数据(视图数据)进行二次加工，快速值类型转换计算行列占比、总占比等</strong></p>
</blockquote>
<h2 id="隐藏维度、隐藏指标"> 隐藏维度、隐藏指标</h2>
<p>使用场景
参与计算又不需要展示, 如:</p>
<ul>
<li>同比(需要去年的数据，但是不需要展示去年的数据)</li>
<li>值类型表达式(两个指标的运算，但是不需要展示原始指标)</li>
</ul>
<div><p>交叉表数据计算</p>
<ol>
<li>交叉表所有值类型计算与转换都是在表格已有值之上进行，不会对数据原进行额外的查询</li>
</ol>
</div>
<p>默认隐藏的单元格不参与快速计算，如果需要让隐藏的单元格参与计算，需要开启对应配置中<code>包含隐藏配置</code></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131415086.png" alt="" /></p>
<h3 id="维度隐藏"> 维度隐藏</h3>
<p>隐藏的数据不会在数据源层过滤, @1表示展开之后的第1个值, 常用于同环比隐藏</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518111619.png" alt="" /></p>
<h3 id="指标隐藏"> 指标隐藏</h3>
<p>指标不设置隐藏条件开启隐藏，所有指标列均会隐藏</p>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/picgo/202501131353778.png"  width="200" />
</div>
<h3 id="维度条件隐藏指标"> 维度条件隐藏指标</h3>
<p>从v1.13开始支持配置带维度条件的指标列隐藏</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130153742.png" alt="" /></p>
<h3 id="维度排序"> 维度排序</h3>
<h2 id="值类型变化-快速计算"> 值类型变化(快速计算)</h2>
<p>在原始值基础之上, 只需简单对指标进行<code>值类型</code>设置之后原始数值将进行相应换算成占比, 同比, 环比等;</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518093417.png" alt="" /></p>
<h3 id="列占比"> 列占比</h3>
<p>原始指标列可以重复使用, 为了展示效果, 下图对<code>开销</code>指标使用了两次,
第一次列展示原始值, 第二列换算成列占比</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141117141.png" alt="" /></p>
<h3 id="行占比"> 行占比</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518104258.png" alt="" /></p>
<p>行占比子分组</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518104531.png" alt="" /></p>
<h3 id="行列占比统计子分组占比"> 行列占比统计子分组占比</h3>
<p>如: 统计每年统计每月成本占比, 操作步骤如下:<br>
1 值类型选择<code>更多</code></p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/enter-more-value-type.png"  width="300"/>
</div>
<p>2 跳出弹出框, 值类型依旧选择<code>列占比</code>, 然后<code>子分组</code>选择年对应的字段<code>year</code></p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/advantage-value-type-menu.png"  />
</div>
<p>下图 USA 的列占比分成了按销售年份分成了 2 组, 为了让结果更加直观, 提前开启了<code>列汇总</code>功能, 显示 200%</p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/percent-by-column-grouped.png"  />
</div>
<h3 id="总占比"> 总占比</h3>
<div style="text-align:center">
  <img src="../../../assets/cross-table/percent-by-total.png"  />
</div>
<h3 id="rank-dense-rank-row-number"> Rank/Dense Rank/Row Number</h3>
<p>改变值类型为排序</p>
<ul>
<li>Rank 为不排除重复元素排序，有两个并列第一，则无第二</li>
<li>Dense Rank 为排序重复元素排序
<img src="http://qiniu.ibidemo.cn/picgo/20230518113810.png" alt="" /></li>
<li>可在调整排序的行粒度(子分组)
<div style="text-align:center">
<img src="../../../assets/cross-table/value-type-rank.png"  />
</div></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518105503.png" alt="" /></p>
<blockquote>
<p>没有值则不参与计算</p>
</blockquote>
<h3 id="累加、累加占比"> 累加、累加占比</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518131357.png" alt="" /></p>
<h3 id="高级统计"> 高级统计</h3>
<p>环比, 同比统计属于高级统计操作, 交互稍微复杂些</p>
<h4 id="环比-滞后比较"> 环比/滞后比较</h4>
<p>点击值类型里面更多操作, 弹出高级对话框, 值类型选择<code>滞后比较</code></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518131905.png" alt="" /></p>
<ol>
<li>先展示滞后值类型为原始值(<code>值类型</code>一栏不选即可), 从下图可以看出, 原来的<code>成本</code>列相对于原始值在列上有滞后量为 1 行的错位(滞后量可自行调节, 可正可负)</li>
</ol>
<div style="text-align:center">
  <img src="../../../assets/cross-table/lag-1.png"  />
</div>
<ol start="2">
<li>计算环比的差异量
调整<code>值类型</code>改成差值</li>
</ol>
<div style="text-align:center">
  <img src="../../../assets/cross-table/select-lag-valuetype.png"  />
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/lag-valuetype-table.png"  />
</div>
<ol start="3">
<li>计算变化率
调整<code>值类型</code>改成变化率</li>
</ol>
<div style="text-align:center">
  <img src="../../../assets/cross-table/change-rate.png"  />
</div>
<ol start="4">
<li>列滞后/环比支持指定匹配列<br>
指定了比较列之后，比较列必须相等<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220207120130.png" alt="" /></li>
</ol>
<h4 id="同比"> 同比</h4>
<p>同比一般情况下是今年第 n 月与去年第 n 月比。设计时需要有一列包含年信息的列.
在高级值类型操作框, 选择值类型为<code>同比</code>, 日期选择包含年信息的列 year, 日期格式与实际日期格式保持一致, 便于日期解析, 同样先可以选值类型有,<code>值, 差值, 变化率</code>三个选项:</p>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/%E5%90%8C%E6%AF%94%E8%AE%BE%E7%BD%AE.png"  />
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/yoy-show.png"  />
</div>
<p><strong>差值</strong><br>
调整<code>值类型</code>改成差值
<div style="text-align:center">
<img src="../../../assets/cross-table/yoy-show-diff.png"  />
</div></p>
<p><strong>变化率</strong><br>
调整<code>值类型</code>改成变化率
<div style="text-align:center">
<img src="../../../assets/cross-table/yoy-show-changerate.png"  />
</div></p>
<blockquote>
<p>最后演示一个极端的例子, 有时候用户的表格里面可能包含完整日期列<code>the_date</code>如下:</p>
</blockquote>
<div style="text-align:center">
  <img src="../../../assets/cross-table/yoy-show-specialcase.png"  />
</div>
<div><p>而同比的值搜索定义为</p>
<p>查找上一年份所在行, 该行需要求除年份外其他维度列相同, 这个时候显然日期列会干扰同比行搜索, 考虑到这种情景, 我增加了<code>忽略列</code>选项,用户只需在刚才的高级搜索框里面设置 the_date(日期) 为忽略比较列即可:</p>
</div>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/%E5%90%8C%E6%AF%94%E8%AE%BE%E7%BD%AE-%E5%BF%BD%E7%95%A5%E5%88%97.png"  />
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/yoy-show-specialcase-result1.png"  />
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/yoy-show-specialcase-result2.png"  />
</div>
<h3 id="计算方向"> 计算方向</h3>
<p>除了三个占比(<code>行占比</code>、<code>列占比</code>、<code>总占比</code>)之外，其他的几种值类型变化都可以设置计算方向，默认计算方向为列</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518133136.png" alt="" /></p>
<h3 id="其他配置"> 其他配置</h3>
<h4 id="包含隐藏"> 包含隐藏</h4>
<p>考虑到之前维度隐藏设置，默认被隐藏的值不参与计算，如果需要隐藏的单元格参与运算可以打开<code>包含隐藏</code>配置</p>
<h4 id="显示原值"> 显示原值</h4>
<p>值类型变化之后，如果需要显示原值可以开打<code>显示原值</code>配置，此外还可以配置原值格式化</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518133505.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518133429.png" alt="" /></p>
<h3 id="举个栗子"> 举个栗子</h3>
<p>分类别统计销售开销topN前五的产品类别</p>
<ol>
<li>行维：产品类别 + 子类别</li>
<li>指标：
<ul>
<li>开销(排名)
<ul>
<li>值类型选择为Rank + 子分组产品类别 + 排序为降序,</li>
<li>值过滤设置<code>&lt;= 5</code></li>
<li>设置指标隐藏</li>
</ul>
</li>
<li>开销(原值)</li>
</ul>
</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221108161152.png" alt="" /></p>
<h3 id="值类型表达式"> 值类型表达式</h3>
<p>值类型表达式可以实现上述所有类型的值变化，但是常用于依赖计算，逻辑判断，或者输出文本值</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518141606.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518141638.png" alt="" /></p>
<div><p>提示</p>
<p>表达式依赖的指标列必须在表格中原始存在<br>
可以设置隐藏</p>
</div>
<h4 id="逻辑表达式"> 逻辑表达式</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518142507.png" alt="" /></p>
<h4 id="数据集表达式vs值类型表达式"> 数据集表达式vs值类型表达式</h4>
<ul>
<li>计算粒度
<ul>
<li>数据集表达式仅支持自身粒度内汇总计算</li>
<li>值类型表达式可以在值类型变化(任意粒度)之上二次计算</li>
</ul>
</li>
<li>原始值依赖
<ul>
<li>数据集表达式不需要原始汇总提前配置</li>
<li>值类型表达式需要依赖的汇总在表格中存在</li>
</ul>
</li>
</ul>
<h2 id="汇总-总计"> 汇总(总计)</h2>
<p>表格汇总功能, 可以对行/列上进行: 求和<code>sum</code>, 平均<code>avg</code>, 最大<code>max</code>, 最小<code>min</code>统计，企业版 v0.6 新增表达式高级汇总</p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/summary-setting.png"  />
</div>
<p>汇总表头名设置可在图表微调配置中修改</p>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/picgo/20220214153918.png"  />
</div>
<div style="text-align:center">
  <image src="../../../assets/cross-table/summary-setting-header-show.png"/>
</div>
<h3 id="列汇总表达式"> 列汇总表达式</h3>
<blockquote>
<p>单个聚合函数语法： <code>agg('指标', ['列维度'...])</code>， 可通过<code>聚合</code>栏辅助输入</p>
</blockquote>
<ul>
<li><code>agg</code> 代表聚合类型</li>
<li>第一个参数为统计指标名称，可通过<code>指标</code>辅助输入，需要用单引号包裹输入, 交叉表最终输出的指标表头保持一致</li>
<li>第二个参数为列维度表头名称数组，可指定多个维度，用于改变统计粒度，可留空(或者输入<code>null</code>), 如: <code>sum('开销')</code>则统计粒度为默认粒度</li>
<li><strong>列汇总不对应任何行维度，故行维度粒度无法调整</strong></li>
<li>维度数组输入为空数组<code>[]</code>代表统计所有行/列维层级对应数据</li>
<li>如果用户输入的维度数组在表格中找不到对应维度定义，测默认匹配所有维度</li>
<li>多个聚合函数直接可以进行算数运算，如：<code>sum('开销', ...)/sum('销售额', ...)</code></li>
<li>支持单行注释 <code>//</code> 与多行注释 <code>/\* \*/</code></li>
<li>表达式书写完毕之后可以进行<code>语法检查</code></li>
</ul>
<div><p>提示</p>
<p>语法检测只能检查表达式书写是否有明细的语法错误，如：不支持的聚合函数、需要英文括号的地方输入了中文括号, 不能够检测输入的维度数组成员是否正确，也有可能语法检测正确之后发生运行时异常</p>
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/summary-setting-col-exp.png"  />
</div>
<h3 id="行汇总表达式"> 行汇总表达式</h3>
<blockquote>
<p>单个聚合函数语法： <code>agg('指标', ['行维度'...])</code>， 可通过<code>聚合</code>栏辅助输入</p>
</blockquote>
<ul>
<li>行汇总表达式与列汇总表达式基本一致，唯一的区别在于<strong>列汇总不对应任何行维度，故列维度粒度无法调整</strong></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518135457.png" alt="" /></p>
<h3 id="总计"> 总计</h3>
<p>总计既没有行维，也没有列为，总计只有在同时存在行列汇总时才会显示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518141119.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518141240.png" alt="" /></p>
<h2 id="列小计"> 列小计</h2>
<h3 id="简单列小计"> 简单列小计</h3>
<p>点击指标编辑按钮，弹出下拉框选择列小计，进入列小计设计：</p>
<ul>
<li><strong>小计级别</strong>：指定需要做小计的层级，可多选，
<ul>
<li>下列演示：<code>开销</code>指标上选定了在<code>年-性别</code>级别之上进行小计；<code>销售额</code>指标上选定了在<code>年</code>级别之上进行小计</li>
<li><strong>小计级别</strong>选定之后就确定了默认的聚合粒度，如：下例中<code>年-性别</code>小计级别对应的粒度为： <strong>行维度</strong><code>年-性别</code> + 固定<strong>列维度</strong><code>会员等级[Golden]</code></li>
</ul>
</li>
<li><strong>计算类型</strong>：选择简单聚合或复杂聚合，简单聚合只汇总该级别对应小计单元格的值，如下图中性别小计，会统计<code>性别</code>维度下所有该列（<code>Golden+开销</code>）对应的数据</li>
<li><strong>格式化</strong>：列小计可单独设置格式化，如不设定则使用上级值默认的格式化参数</li>
<li><strong>聚合参数</strong>：可选 sum/min/max/avg</li>
</ul>
<div style="text-align:center">
  <img src="../../../assets/cross-table/sub-summary-simple.png"  />
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/sub-summary-simple-show.png"  />
</div>
<h3 id="高级列小计"> 高级列小计</h3>
<p>如上所述简单列小计统计的单元格范围是固定的，用户只能修改聚合类型，但是如果需要改变统计粒度，又或者是统计两个不同指标之间的算数运算值，则需要用到表达式小计<br>
小计计算类型下拉选择<code>复杂聚合</code>，进入小计表达式编辑：</p>
<blockquote>
<p>单个聚合函数语法： <code>agg('指标', ['行维度'...], ['列维度'...])</code>， 可通过<code>聚合</code>栏辅助输入</p>
</blockquote>
<ul>
<li><code>agg</code> 代表聚合类型</li>
<li>第一个参数为统计指标名称，可通过<code>指标</code>辅助输入，需要用单引号包裹输入, 如交叉表最终输出的指标表头保持一致（出现重复指标输入会有后缀）</li>
<li>第二个与第三个参数为行维度表头名称数组与列维度表头名称数组，可指定多个维度，用于改变统计粒度，两个参数可留空(或者输入<code>null</code>), 如: <code>sum('开销')</code>则统计粒度为默认粒度</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518135051.png" alt="" /></p>
<div><p>理解默认颗粒度</p>
<p>// 上面的小计单元格
sum('销售额') = sum('销售额', null, null)  = sum('销售额', ['年'], ['国家’])</p>
</div>
<div><p>粒度提升</p>
<p>小计粒度改变只能在默认改小计级别默认粒度上放大上卷，不能下钻，如：小计级别['年', '性别']，可以上卷为['年'], 不能下钻到['年','性别','国家']，因为该小计上没有任何对应的国家维度值；</p>
</div>
<ul>
<li>维度数组输入为空数组<code>[]</code>代表统计所有行/列维层级对应数据</li>
<li>如果用户输入的维度数组在表格中找不到对应维度定义，测默认匹配所有维度</li>
<li>多个聚合函数直接可以进行算数运算，如：<code>sum('开销', ...)/sum('销售额', ...)</code></li>
<li>支持单行注释 <code>//</code> 与多行注释 <code>/\* \*/</code></li>
<li>表达式书写完毕之后可以进行<code>语法检查</code></li>
</ul>
<div><pre><code><span>// 在小计栏统计月占比</span>
<span>sum</span><span>(</span><span>'开销'</span><span>,</span> <span>[</span><span>'年'</span><span>,</span> <span>'月'</span><span>]</span><span>)</span> <span>/</span> <span>sum</span><span>(</span><span>'开销'</span><span>,</span> <span>[</span><span>'年'</span><span>]</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br></div></div><div><p>Tips</p>
<p>语法检测只能检查表达式书写是否有明细的语法错误，如：不支持的聚合函数、需要英文括号的地方输入了中文括号, 不能够检测输入的维度数组成员是否正确，也有可能语法检测正确之后发生运行时异常</p>
</div>
<div style="text-align:center">
  <img src="../../../assets/cross-table/sub-summary-exp.png"  />
</div>
<h3 id="汇总单元格展示多个汇总指标2-3"> 汇总单元格展示多个汇总指标<sup>2.3</sup></h3>
<p>单元格内容支持html, 利用表达式在单元格展示多个汇总指标，并用<code>&lt;br&gt;</code>换行连接</p>
<div><pre><code><span>const</span> predict <span>=</span> <span>and</span><span>(</span>
    <span>colFilters</span><span>(</span><span>)</span><span>,</span>
    <span>eq</span><span>(</span><span>'类别'</span><span>,</span> <span>'技术'</span><span>)</span>
<span>)</span><span>;</span>

<span>const</span> v1 <span>=</span> <span>query</span><span>(</span><span>'数量'</span><span>,</span> predict<span>)</span><span>;</span>
<span>const</span> v2 <span>=</span> <span>query</span><span>(</span><span>'销售额'</span><span>,</span> predict<span>)</span><span>;</span>

<span>return</span> <span>[</span><span>'数量:'</span> <span>+</span> <span>sum</span><span>(</span>v1<span>)</span><span>,</span> <span>'销售额:'</span> <span>+</span> 
    <span>numFormat</span><span>(</span><span>sum</span><span>(</span>v2<span>)</span><span>,</span> <span>'0.00'</span><span>)</span> <span>]</span><span>.</span><span>join</span><span>(</span><span>'&lt;br>'</span><span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/202508111801695.png" alt="" /></p>
<h2 id="交叉表样式"> 交叉表样式</h2>
<h3 id="交叉表布局"> 交叉表布局</h3>
<h4 id="非即时生效"> 非即时生效</h4>
<p>交叉表布局配置为非即时生效配置，即变更配置之后需要点击图表预览重新渲染图表</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518144322.png" alt="" /></p>
<h4 id="汇总前置"> 汇总前置</h4>
<ul>
<li>列汇总前置</li>
<li>行汇总前置<br>
<img src="http://qiniu.ibidemo.cn/picgo/table-ahead-summary.gif" alt="" /></li>
</ul>
<h4 id="转置"> 转置</h4>
<ul>
<li>转置
<img src="http://qiniu.ibidemo.cn/picgo/20230518144859.png" alt="" /></li>
</ul>
<h4 id="对齐指标"> 对齐指标</h4>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518144830.png" alt="" /></p>
<h4 id="单个指标不展示值表头"> 单个指标不展示值表头</h4>
<p>存在列维，且只有一个指标时，如果觉得指标名称重复出现不太好看，可以配置关闭<code>单指标显示值表头</code>开关，下过如下</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518144718.png" alt="" /></p>
<h3 id="值样式"> 值样式</h3>
<p>值样式包含百分比样式, 分段样式, 当设置值显示百分比的时候自动映射百分比样式;</p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/cellstyle-setting.png"  width="300" />
</div>
<h4 id="百分比样式"> 百分比样式</h4>
<p>当指标格式化为百分数之后，使用百分比样式可以快速设置指标样式，包含正负值背景颜色、字体颜色、图标、图标颜色，其中图标配置从2.0版本开始支持</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131518644.png" alt="" /></p>
<h4 id="分段样式"> 分段样式</h4>
<ul>
<li>分段配置中上下限，可是输入常数，也可以通过下拉选择维度值，动态的取指标对应的维度作为动态上下限(前提条件是维度必须为可比较的数值)</li>
<li>可以仅配置上限或下限，让分段为开区间</li>
<li>其中图标配置从2.0版本开始支持,</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131530592.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131531114.png" alt="" /></p>
<h4 id="热力图"> 热力图</h4>
<p>通过表格值样式热力图, 用户可以迅速定位表格中值分布, 热力图配置中, 字体颜色, 单元格底色都有默认值, 最小值与最大值能自动计算获取; 没有特殊需求均可不做设置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131521540.png" alt="" /></p>
<p>热力图效果如下:</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131528143.png" alt="" /></p>
<ul>
<li>值样式热力图支持配置计算范围:行、列、全体</li>
</ul>
<div style="text-align:center">
    <img src="http://qiniu.ibidemo.cn/picgo/20220207120315.png"  />
</div>
<ul>
<li>值样式展示形式增加渐变柱、纯色柱<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220207120534.png" alt="" /></li>
</ul>
<blockquote>
<p>从2.1开始支持区分热力图中正负值颜色配置</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131524879.png" alt="" /></p>
<h4 id="条件样式"> 条件样式</h4>
<p>通过条件样式配置维度条件、指标条件精确定位指标单元格, 如：</p>
<ul>
<li>相同的指标，不同的列维(国家、部门)设置不同的异常阈值</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131442208.png" alt="" /></p>
<h3 id="边框"> 边框</h3>
<p>交叉表支持单独配置是否显示左右边框与上下边框，注意上下边框关闭时表头和最后一行数据行下边框不会隐藏，如果需要不显示所有边框，可以将边框线条宽度设置为0</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/crosstable-border.gif" alt="" /></p>
<h3 id="表头"> 表头</h3>
<h4 id="固定前n列"> 固定前N列</h4>
<p>配置固定前N列实现表头固定，默认前N列包含指标列，如果不需要固定指标列，可以关闭<code>固定指标开关</code></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/crosstable-fixcolumn.gif" alt="" /></p>
<h4 id="列宽与换行"> 列宽与换行</h4>
<p>表头换行、在行维与指标上设定列宽， 默认情况下单元格内容均不换行，如果配置了列宽之后希望换行可以打开<code>允许换行开关</code></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/table-colwidth-wrapper.gif" alt="" /></p>
<h4 id="交互排序"> 交互排序</h4>
<p>交互排序是指点击值表头，实现排序设定的效果，注意</p>
<ul>
<li>如果行维度有排序的情况下优先根据行维排序</li>
<li>指标列排序只能选定一个列进行排序</li>
<li>关闭<code>排序交互</code>功能之后可以不显示排序头标</li>
</ul>
<h4 id="表头字体"> 表头字体</h4>
<p>列表头与行表头字体可以独立配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131606443.png" alt="" /></p>
<h3 id="页脚"> 页脚</h3>
<h4 id="是否显示页码"> 是否显示页码</h4>
<p>默认情况下表格会根据容器高度自动分页，通过<code>是否显示页脚</code>或<code>是否显示页码</code>关闭页码，可以实现表格不分页</p>
<h4 id="页码样式调整"> 页码样式调整</h4>
<p>支持调整</p>
<ul>
<li>页码按钮数量</li>
<li>页码按钮背景色、激活背景色，字体等</li>
</ul>
<h3 id="滚动条"> 滚动条</h3>
<p>在表格不分页的情况下可以配置滚动条颜色，这在大屏样式配置时非常有用</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131611274.png" alt="" /></p>
<h4 id="自动滚动"> 自动滚动</h4>
<p>交叉表支持开启自动滚动, 仅需设置<strong>滚动条</strong> -&gt; <strong>取消页码显示</strong> -&gt; <strong>打开自动滚动</strong></p>
<ul>
<li>支持首尾停顿时间设置</li>
<li>支持鼠标悬停暂停滚动</li>
<li>支持配置滚动速度</li>
<li>开启自动滚动的情况下，可以配置滚动条颜色为最后一个透明色隐藏滚动条</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/交叉表滚动.gif" alt="" /></p>
<h3 id="序号配置"> 序号配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131617020.png" alt="" /></p>
<h3 id="其他配置-2"> 其他配置</h3>
<ul>
<li>列汇总表头</li>
<li>行汇总表头</li>
<li>小计</li>
</ul>
<h2 id="表格导出-excel-兼容"> 表格导出 Excel 兼容</h2>
<p>除了值样式目前在表格导出的时候不能保持一致之外, 值类型, 汇总在导出的时候都能在 Excel 里面体现出来, 后续值样式也会实现导出兼容.</p>
<div style="text-align:center">
  <img src="../../../assets/cross-table/table-export.png"  />
</div>
<h2 id="汇总下推数据源1-13"> 汇总下推数据源<sup>1.13</sup></h2>
<div><p>汇总计算背景</p>
<p>在此之前行/列汇总、小计、合计汇总计算仅针对表格上已有的数据(视图数据/表面数据)进行二次处理从而实现汇总功能</p>
<ul>
<li>好处是对于求和类计算可以不用多次查询数据源，从而提高了图表性能</li>
<li>但是遇到一些必须要在原始数据之上计算的数值就会变得无能为力了</li>
</ul>
</div>
<p>如下图所示在订单表数据上统计用户数，汇总方式为<strong>count(distinct userid)</strong>，白色单元格的数值为查询出来的精确结果，</p>
<div><pre><code><span>select</span> member_card<span>,</span> channel<span>,</span> <span>year</span><span>,</span> <span>month</span><span>,</span>
       <span>count</span><span>(</span><span>distinct</span> userid<span>)</span>
  <span>from</span> <span>table</span>
 <span>group</span> <span>by</span> member_card<span>,</span> channel<span>,</span> <span>year</span><span>,</span> <span>month</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br></div></div><p>我们知道一个用户可能在OFFLINE、ONLINE不同渠道下过订单，在一年之中会员等级也可能有升级或降级，因此小计和列汇总计数的时候不能简单做求和运算，而是需要提升汇总颗粒度再此查询</p>
<div><pre><code><span>-- 列小计统计</span>
<span>select</span> member_card<span>,</span> <span>year</span><span>,</span> <span>month</span><span>,</span>
       <span>count</span><span>(</span><span>distinct</span> userid<span>)</span>
  <span>from</span> <span>table</span>
 <span>group</span> <span>by</span> member_card<span>,</span>  <span>year</span><span>,</span> <span>month</span>
 
<span>-- 列汇总统计</span>
<span>select</span> <span>year</span><span>,</span> <span>month</span><span>,</span>
       <span>count</span><span>(</span><span>distinct</span> userid<span>)</span>
  <span>from</span> <span>table</span>
 <span>group</span> <span>by</span> <span>year</span><span>,</span> <span>month</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><p>汇总同环比等值类型变化</p>
<p>深入使用过汇总功能的用户知道汇总单元格不能支持占比、同环比之类的值类型变化快速计算，下表中的小计和汇总行的同、环比在之前的单次查询中也无法计算</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130141343.png" alt="" /></p>
<div><p>功能引入</p>
<p>为了解决此类问题，本次更新中新增了汇总下推数据源计算的功能，在遇到count/distinct，数据集表达式等必须下推计算的汇总会自动下推计算，下面是汇总下推数据源实现的功能清单</p>
<ul>
<li>支持行汇总、列汇总</li>
<li>支持小计</li>
<li>支持数据集表达式下推</li>
<li>下推汇总支持值类型配置</li>
<li>汇总表达式支持下推计算</li>
<li>普通汇总设置强推数据源计算</li>
<li>预览查询支持多个查询</li>
</ul>
</div>
<h3 id="支持数据集表达式下推"> 支持数据集表达式下推</h3>
<p>对于数据集表达式类型汇总，值类型增加原类型，在汇总粒度上沿用原来的汇总计算公式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130144547.png" alt="" /></p>
<h3 id="下推汇总支持值类型配置"> 下推汇总支持值类型配置</h3>
<ul>
<li>通过汇总计算值类型配置，轻松配置汇总占比、同环比之类的值类型变化快速计算</li>
<li>对于sum类型的汇总计算引擎不会自动下推数据源，可以通过数据源聚合开关下推计算，开启下推之后的即可汇总支持数据类型配置</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/sub_agg_value_type.gif" alt="" /></p>
<h3 id="预览查询支持多个查询"> 预览查询支持多个查询</h3>
<p>一个交叉表综合行汇总、列汇总，行小计、列小计、列汇总与行小计交叉、列小计与行小计交叉、列小计与行汇总交叉、总计，需要进行9次查询</p>
<div><p>提示</p>
<p>因此，请在不需要的汇总下推的时候尽量使用表格结果集进行配置</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240130150333.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">柱线图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-linebar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-linebar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="柱线图"> 柱线图</h1>
<p>柱线图，为柱图、线图、柱和线(单轴、双轴)的混合类图形，其中我们常说的条形图也是属于柱线图(值轴选定为x轴即可)</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">类别轴</td>
<td style="text-align:left">放置一个或者多个维度节点，通常用作类别轴</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个或者多个指标节点</td>
</tr>
<tr>
<td style="text-align:left">添加轴</td>
<td style="text-align:left">显示双轴</td>
<td style="text-align:left">建议为不同的轴配置成不同的图形类别，如：柱线</td>
</tr>
</tbody>
</table>
<p>每列显示为一条线，或者一个柱形图序列。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501140957879.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/柱线图.png" alt="" /></p>
<h2 id="堆叠柱-线"> 堆叠柱(线)</h2>
<p>轴类型下拉选择堆叠柱，可以对拆分的指标(有列维)进行堆叠</p>
<div><p>提示</p>
<p>v1.10之前指标堆叠堆叠只能对相同的指标进行堆叠，多个不同的指标没有列维的场景不能进行堆叠</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213153644.png" alt="" /></p>
<h3 id="堆叠支持按轴堆叠"> 堆叠支持按轴堆叠</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/按轴堆叠.gif" alt="" /></p>
<h3 id="堆积排序支持选择轴-积指标排序"> 堆积排序支持选择轴/积指标排序</h3>
<p>默认堆叠被列维拆分的相同指标，如果您的数据在业务逻辑上需要堆叠不同的指标，可以进行下列配置实现：</p>
<p>按列维度堆叠不同指标 → 开启堆积排序 → 选择堆积指标</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/按列维堆叠-排序指标.gif" alt="" /></p>
<p>按轴堆叠 → 开启堆积排序 → 选择堆叠轴</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/按轴堆叠-排序指标.gif" alt="" /></p>
<h2 id="双轴图"> 双轴图</h2>
<p>柱线图添加轴即可绘制为双轴图，建议为不同的轴配置成不同的图形类别，如：柱线</p>
<p><img src="http://qiniu.ibidemo.cn/双轴图.png" alt="" /></p>
<h2 id="条形柱形图"> 条形柱形图</h2>
<p>默认值轴为垂直轴，通过设定值轴位水平轴可以绘制条形水平柱</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213154342.png" alt="" /></p>
<h2 id="山峰图"> 山峰图</h2>
<p>柱图通过设定柱体样式实现山峰图效果，山峰图值轴最小值强制固定位0，否则会出现山峰起点不在类别轴的问题<br>
<img src="http://qiniu.ibidemo.cn/picgo/chart-hill.gif" alt="" /></p>
<h2 id="布局、拆分"> 布局、拆分</h2>
<h3 id="拆分行列"> 拆分行列</h3>
<p>开启图表拆分之后，默认情况下根据拆分图表数据量自动生成N*N的网格，用户可以输入固定的行列数量生成拆分子格</p>
<ul>
<li>拆分之后内部网格仅支持配置百分比边距</li>
<li>拆分之后个子图的小标题支持配置水平位置偏移与垂直位置偏移</li>
<li>小标题字体支持单独配置</li>
</ul>
<h3 id="拆分依据"> 拆分依据</h3>
<p>拆分依据支持按指标位置拆分，柱线图支持配置拆分列维数量：</p>
<ul>
<li>按全部列维拆分（默认）。</li>
<li>按部分列维拆分。</li>
<li>按指标位置拆分。</li>
<li>按列维+指标位置拆分。</li>
<li>按部分列维+指标位置拆分。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/split-by.gif" alt="" /></p>
<h3 id="共享轴"> 共享轴</h3>
<p>默认情况下每个子图都有自己的轴，值轴最大值与最小值独立自动适配，从2.1开始支持开启共享值轴与共享类别轴</p>
<p>共享值轴之后所有子图的最小、最大值统一处理，便于对比各图数据差异</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/line-shareaxes.gif" alt="" /></p>
<h2 id="样式配置"> 样式配置</h2>
<h3 id="图表元素-组成"> 图表元素(组成)</h3>
<p>在进行图表样式配置之前请先了解图表组成的几个重要元素</p>
<ul>
<li>图例</li>
<li>类别轴</li>
<li>值轴</li>
<li>刻度</li>
<li>轴标题</li>
<li>分割线</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131702457.png" alt="" /></p>
<h3 id="轴样式配置"> 轴样式配置</h3>
<div style="text-align:center">
  <img src="http://qiniu.ibidemo.cn/picgo/202501131708412.png" width="250" />
</div>
<h4 id="值轴0值对齐配置"> 值轴0值对齐配置</h4>
<p>双值轴场景下如果有负数值，往往两边值轴的0值不对齐，通过配置对齐0值可以快速对齐0值</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/双轴0值对齐.gif" alt="" /></p>
<h3 id="图例"> 图例</h3>
<h4 id="单选模式"> 单选模式</h4>
<p>开启单选模式，在图表显示时每次仅显示一个系列的数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/line-legend-single.gif" alt="" /></p>
<p>您还可以设置初始化时默认选中的图例</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131926830.png" alt="" /></p>
<h4 id="全选与反选"> 全选与反选</h4>
<ul>
<li><strong>反选</strong>: 激活没有选中的图例，取消激活的图例</li>
<li><strong>全选</strong>: 选中所有图例</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/line-legend-selall-reverse.gif" alt="" /></p>
<h4 id="图例布局样式"> 图例布局样式</h4>
<p>图例布局支持配置</p>
<ul>
<li>水平位置</li>
<li>垂直位置</li>
<li>边距控制</li>
<li>字体边框等</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131941515.png" alt="" /></p>
<h2 id="单项样式"> 单项样式</h2>
<p>单项样式是只每个柱子的样式，包含边框，阴影，透明度等</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501131945267.png" alt="" /></p>
<h2 id="时间线配置"> 时间线配置</h2>
<p>支持按列维拆分为时间线的不同节点，动态叙事</p>
<ul>
<li>柱线图时间线配置, <strong>用于时间线节点列维数, 默认所有列维，可以配置仅使用前N个列维分组</strong></li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/bar-timeline.gif" alt="" /></p>
<h2 id="值样式"> 值样式</h2>
<h3 id="指标着色依据"> 指标着色依据</h3>
<blockquote>
<p>销量越好的产品挣得越多吗？</p>
</blockquote>
<p>回答这个问题需要考虑两个指标：销售额和利润。现在，我们可以在按销售额排序的同时，按利润渲染颜色。</p>
<p>隐藏利润指标，销售额的值样式将根据隐藏的利润值进行着色。这样，您可以得到下面的产品类别销售额排名，其中蓝色越深表示利润越多，黄色表示利润为负，即亏损产品。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191335268.png" alt="" /></p>
<ul>
<li>支持正负数颜色不同，自动配色方案在指标中同时有正负数时，会为负数分配不同的颜色，便于区分。</li>
<li>支持自定义指标配色方案。</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191352421.png" alt="" />
<img src="http://qiniu.ibidemo.cn/picgo/202411191353122.png" alt="" /></p>
<h3 id="按维度着色"> 按维度着色</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191340818.png" alt="" /></p>
<h3 id="柱图着色最大、最小、最后一项"> 柱图着色最大、最小、最后一项</h3>
<p>着色最大、最小、最后一项</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230512134106.png" alt="" /></p>
<h2 id="汇总"> 汇总</h2>
<h3 id="列汇总"> <strong>列汇总</strong></h3>
<p>系列中增加一个汇总项</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508111733941.png" alt="" /></p>
<h3 id="行汇总"> <strong>行汇总</strong></h3>
<p>增加汇总系列</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121034598.png" alt="" /></p>
<h2 id="标注2-3"> 标注<sup>2.3</sup></h2>
<h3 id="线标记"> 线标记</h3>
<ul>
<li>增加类别轴标线并支持条件设置
<img src="http://qiniu.ibidemo.cn/picgo/202508121539548.png" alt="" /></li>
<li>统计范围设置: 整体、图、系列
<ul>
<li><strong>整体</strong>: 所有图统一计算标线值</li>
<li><strong>图</strong>: 以拆分的图为单位计算标线值</li>
<li><strong>系列</strong>: 每个系列单独计算
<img src="http://qiniu.ibidemo.cn/picgo/markline-scope.gif" alt="" /></li>
</ul>
</li>
<li>统计方法支持分位数
<img src="http://qiniu.ibidemo.cn/picgo/202508121531766.png" alt="" /></li>
<li>线条样式配置</li>
</ul>
<h3 id="区域标记"> 区域标记</h3>
<p>值类型支持: 均值、中位数、分位数、常量</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121547313.png" alt="" /></p>
<h3 id="点标注"> 点标注</h3>
<ul>
<li>标记选定指标
<img src="http://qiniu.ibidemo.cn/picgo/markpoint-metric.gif" alt="" /></li>
<li>配置Symbol，SymbolSize</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">玉珏图(环形柱图)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-radial-bar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/02-radial-bar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="玉珏图-环形柱图"> 玉珏图(环形柱图)</h1>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">旭日图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-sunbrust/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-sunbrust/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="旭日图"> 旭日图</h1>
<p>旭日图也叫多层级饼图适用于需要直观表现 “从整体到部分” 或 “从上到下逐级分解” 的场景, 配合交互功能，如下图尤其适合探索性的阅读图表。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/sunbrust.gif" alt="" /></p>
<ol>
<li><strong>层级结构的分析</strong></li>
</ol>
<ul>
<li>旭日图最适合展示有明显层级结构的数据。</li>
<li>例如：企业的组织架构、分类数据的子类别分析。</li>
</ul>
<p><strong>案例</strong>：</p>
<ul>
<li>产品类别 → 子类别 → 销售额分布</li>
<li>国家 → 省份 → 城市 → 人口或收入</li>
</ul>
<h2 id="配置要求"> 配置要求</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">层级</td>
<td style="text-align:left">放置多个维度节点, 维度节点的数量决定了旭日图的层级</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">拆分</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个或者多个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/旭日图.png" alt="" /></p>
<h2 id="配置层级样式"> 配置层级样式</h2>
<p><strong>样式</strong>配置栏中开启自定义层级之后可以对每一层的独立配置</p>
<ul>
<li>内径、外径</li>
<li>标签方向、位置</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151708116.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">饼图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-pie/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-pie/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="饼图"> 饼图</h1>
<p>饼图用于展示数据占比，默认与交叉表的对应关系为每列显示一个饼图</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151503478.png" alt="" /></p>
<h2 id="环形图、玫瑰图"> 环形图、玫瑰图</h2>
<p>环形图、兰丁格尔玫瑰图也属于饼图，普通的饼图通过配置内外径大小也能转化为环形图</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151459914.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-innerradius.gif" alt="" /></p>
<h2 id="布局"> 布局</h2>
<p>ECharts中饼图布局没有上下左右边距的概念，只有中心和半径，如果下图图列较宽时可以通过调整布局中水平偏移让出空间</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151620861.png" alt="" /></p>
<blockquote>
<p>两行列图例调整图<strong>例大小</strong>的<strong>高度</strong>属性为固定值，高度不够时自动分列</p>
</blockquote>
<h2 id="数字标签"> 数字标签</h2>
<h3 id="引导线延长"> 引导线延长</h3>
<ul>
<li>对齐到边缘与引导线</li>
<li>引导线延伸</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-labelStyle.gif" alt="" /></p>
<h2 id="多饼图"> 多饼图</h2>
<p>增加列维之后多列会自动拆分为多个饼图，支持配置拆分的行列数量，行*列数网格&gt;饼图数量时按用户配置行列拆分，不足时按NxN矩阵自动拆分</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/multi-pies.gif" alt="" /></p>
<h2 id="扇区排序"> 扇区排序</h2>
<p>饼图扇区默认是有排序的，您可以改变排序规则，或关闭排序，关闭排序之后扇区的顺序与交叉表中列顺序一致</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-sort.gif" alt="" /></p>
<h2 id="合并长尾扇区"> 合并长尾扇区</h2>
<p>常见合并长尾扇区的方案有两种</p>
<ul>
<li>隐藏小于某一占比阈值的扇区</li>
<li>仅展示TopN扇区</li>
</ul>
<h3 id="最小扇区"> 最小扇区</h3>
<p>当饼图扇区出现长尾数据时，您可以配置最小扇区大小，占比小于最小扇区大小的类目将被合并为一个扇区，这样用户可以把注意力集中在占比较大的关键类目</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-minsec.gif" alt="" /></p>
<h3 id="topn"> TopN</h3>
<p>饼图扇区支持TopN扇区显示控制,其他扇区排在最后</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-topN.gif" alt="" /></p>
<h2 id="饼图按行绘制"> 饼图按行绘制</h2>
<p>默认饼图按列绘制，如果希望按行绘制可以在设置中修改</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213154818.png" alt="" /></p>
<h2 id="扇区间距"> 扇区间距</h2>
<p>ECharts饼图扇区没有间距的概念，如果实现类似扇区的间距的效果可以通过<strong>单项样式</strong>中增加边框，边框颜色设置为和背景一样的颜色</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151647640.png" alt="" /></p>
<h2 id="汇总"> 汇总</h2>
<h3 id="行汇总"> <strong>行汇总</strong>:</h3>
<p>有列维时: 增加一个汇总类别饼图</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121036869.png" alt="" /></p>
<h3 id="饼图汇总"> 饼图汇总</h3>
<p>为什么饼图没有列汇总？<br>
这是因为列汇总以数据项的形式添加到系列，如果在饼图中新增数据项汇会出现半个饼图扇区显示汇总值的情况，但是为此我们单独增加了饼图汇总功能</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/pie-sum.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">矩形树图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-tree-rect/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/03-tree-rect/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="矩形树图"> 矩形树图</h1>
<p>矩形树图与旭日图使用场景类似，适用于需要直观表现 “从整体到部分” 或 “从上到下逐级分解” 的场景，相对于旭日图矩形树图能更多的利用画布空间</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">多个行维代表多层，用颜色来区分类目</td>
<td style="text-align:left">放置一个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">拆分系列</td>
<td style="text-align:left">放置零个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">用面积来表示数值</td>
<td style="text-align:left">放置 1 个或多个指标节点</td>
</tr>
</tbody>
</table>
<h2 id="展示层级"> 展示层级</h2>
<p>默认最多展示4个层级，可以调整初始化时展示的层级数量</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/tree-rect-level.gif" alt="" /></p>
<h2 id="数字标注"> 数字标注</h2>
<h3 id="显示占比v2-1"> 显示占比<sup>v2.1</sup></h3>
<p>支持显示项目在当前层级中的占比与总占比，占比精度配置占计算精确到小数点后几位</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/tree-rect-percent.gif" alt="" /></p>
<h2 id="多个系列"> 多个系列</h2>
<p>当有多个系列时，可以通过图例切换</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/5-矩形树图多指标.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">排行榜</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/05-rankbar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/05-rankbar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="排行榜"> 排行榜</h1>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<h2 id="颜色"> 颜色</h2>
<ul>
<li>排行榜排名前3的颜色独立配置，第三名之后的颜色默认统一，</li>
<li>如果用户配置了颜色则配置的颜色序列一次对应排行榜</li>
<li>为了便于统一色配置，最后一个颜色为统一色，配置一次即可</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161538961.png" alt="" /></p>
<h2 id="柱体样式"> 柱体样式</h2>
<ul>
<li>柱体样式默认柱体宽度为15px</li>
<li>带背景色</li>
<li>上边距为柱体与其上方的文字之间的间距</li>
</ul>
<h2 id="排名"> 排名</h2>
<h3 id="排名显示位置"> 排名显示位置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/rankbar-nopos.gif" alt="" /></p>
<ul>
<li><strong>起始</strong>: 从第几名开始显示</li>
<li><strong>记录数</strong>: 显示总记录数</li>
<li><strong>边距</strong>: 通过排名边距设定可以调整排名文本位置</li>
</ul>
<h3 id="排名轮播"> 排名轮播</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517160305.png" alt="" /></p>
<p>打开开启滚动，排行榜自动轮播</p>
<table>
<thead>
<tr>
<th style="text-align:left">配置项</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">页行数</td>
<td style="text-align:left">每页显示记录数</td>
</tr>
<tr>
<td style="text-align:left">步长</td>
<td style="text-align:left">每次滚动行数</td>
</tr>
</tbody>
</table>
<h2 id="值"> 值</h2>
<h3 id="占比配置"> 占比配置</h3>
<ul>
<li>开启占比显示每个项目的占比</li>
<li>占比类型可以选择项目在<strong>总体占比</strong>或在<strong>TopN</strong>中的占比</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121110412.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">指标卡</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/04-kpi/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/04-kpi/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="kpi指标卡"> KPI指标卡</h1>
<p>指标卡在数据看板中扮演着非常重要的角色，本章将学习通过BI设计各种风格的指标卡</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141601021.png" alt="" /></p>
<p>指标卡配置至少需要一个指标，我们从最简单的一个指标开始</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141355374.png" alt="" /></p>
<p>当配置多个指标或者增加列维指标卡组件则可以通过网格形式一次展示多个指标</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141359668.png" alt="" /></p>
<h2 id="指标格式化、前缀、后缀"> 指标格式化、前缀、后缀</h2>
<p>指标支持统一配置前缀、后缀，或者为每个指标单独配置前缀后缀，</p>
<blockquote>
<p>指标卡的前后缀配置与格式化的前后缀不同之处在于前后缀配置可以独立的配置前后缀字体样式</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141417167.png" alt="" /></p>
<h2 id="指标注解"> 指标注解</h2>
<p>可以在图表配置中为指标配置注释也在可以数据集中对指标字段统一配置注释，不希望显示注释可以在<code>指标名/指标值</code>配置栏中关闭注释显示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141443745.png" alt="" /></p>
<h2 id="风格切换"> 风格切换</h2>
<p>指标卡默认以卡片风格展示，您可以通过样式-&gt;风格切换不同的展示风格</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-style-change.gif" alt="" /></p>
<h3 id="指标卡背景图"> 指标卡背景图</h3>
<p>为指标卡配置背景图，背景图可以是网络图片或者上传图</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240220100034.png" alt="" /></p>
<h3 id="卡片风格"> 卡片风格</h3>
<p>指标卡背景色配置，第一个指标卡背景色单独配置，v2.1之后，多个指标卡可以通过调色板批量控制</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141504645.png" alt="" /></p>
<h3 id="朴素风格"> 朴素风格</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141526076.png" alt="" /></p>
<p>朴素风格指标卡常用于大屏指标展示，原始的朴素风格指标卡只有指标名与指标值，
甚至大多数场景下配合不显示指标名(指标名单独用文本组件显示)</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141525362.png" alt="" /></p>
<h3 id="翻牌器风格"> 翻牌器风格</h3>
<p>翻牌器每个数字展示位一个数字卡片</p>
<ul>
<li>风格设置为翻牌器之后，图表配置栏会出现一栏翻牌器特有样式属性</li>
<li>如果您配置的<strong>字体不能在卡片中垂直或水平居中</strong>，可以使用内边距调整字体上下偏移量</li>
<li><strong>水平边距</strong>用于控制卡片间的距离</li>
<li><strong>上边距</strong>用于控制指标名与数字卡片的距离</li>
<li><strong>下边距</strong>用于控制数字卡片与同环比的距离</li>
<li><strong>翻牌器背景图</strong> 为每个数字卡片的背景图</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141531184.png" alt="" /></p>
<h3 id="表格表格风格"> 表格表格风格</h3>
<p>表格风格指标卡用于一表格形式展示多个指标</p>
<ul>
<li><strong>表头配置</strong>中可以配置不显示表头、表头行高、表头字体等</li>
<li><strong>边框配置</strong>不开启边框默认为三线表，如果需要完全不显示边框可以把边框宽度设置为0</li>
<li><strong>其他配置栏</strong>
<ul>
<li>斑马纹</li>
<li>指标数据行高</li>
<li>各列宽度：宽度可以是百分数或者纯数字(px)</li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141545412.png" alt="" /></p>
<h3 id="主从风格"> 主从风格</h3>
<p>主从风格指标卡用于展示一个关键主指标，多个从指标的场景</p>
<ul>
<li>v2.0.3开始支持按列维拆分多个主从指标与条件格式</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141553072.png" alt="" /></p>
<h2 id="多指标网格"> 多指标网格</h2>
<p>多个指标使用grid网格布局，默认一个指标卡片占一个网格，<br>
您可以设置网格划分的行列数，也可以对特定指标的其实行列、行列跨度进行设置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141607023.png" alt="" /></p>
<h3 id="指标分页v2-1"> 指标分页<sup>v2.1</sup></h3>
<ol>
<li>多指标配置设置网格行、列数</li>
<li>当指标卡总数量大于页网格数之后指标自动分页</li>
<li>支持配置自动播放与播放时间间隔</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-splides.gif" alt="" /></p>
<h2 id="多指标组合-v2-1"> 多指标组合 <sup>v2.1</sup></h2>
<ol>
<li><strong>切换风格为朴素</strong></li>
<li>在不做指标组合的配置下，每个指标独占一个指标卡，v2.1增加按列维组合指标，开启按列维组合指标之后可以将列维值相同的指标组合显示在一个指标卡</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grpbycol.gif" alt="" /></p>
<h3 id="按指标栏组合"> 按指标栏组合</h3>
<p>如果没有列维您还可以通过增加指标栏的形式给指标分组</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151346866.png" alt="" /></p>
<h3 id="多指标卡布局"> 多指标卡布局</h3>
<p>在开始多指标组合布局之前，先认识一下组合之后的指标卡片元素</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501141629009.png" alt="" /></p>
<ul>
<li>图标区块</li>
<li>主指标区块</li>
<li>指标组区块</li>
<li>每个区块内的元素又可以设置行列布局</li>
</ul>
<h3 id="布局辅助线"> 布局辅助线</h3>
<p>组合指标元素很多，为了方便布局调整，我们提供了布局辅助线，开启辅助线之后可以清晰的观察每个区块、每个元素的位置与大小</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-helpline.gif" alt="" /></p>
<h3 id="组标题配置"> 组标题配置</h3>
<ul>
<li><strong>组标题伴随</strong>: 组标题可以选择伴随图标或者指标</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-titleby.gif" alt="" /></p>
<ul>
<li><strong>组标题位置</strong>: 标题伴随图标可以配置围绕图标的位置</li>
<li><strong>组标题字体</strong>: 组标题字体配置，位于图标上下时不要忘记字体对齐配置</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-titlepos.gif" alt="" /></p>
<h3 id="图标区块配置"> 图标区块配置</h3>
<ul>
<li>图标区块位置配置</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grpiconpos.gif" alt="" /></p>
<p>还可以配置</p>
<ul>
<li><strong>图标是否显示</strong>: 为了便于组标题布局，如果组标题伴随图标，即使图标不显示，图标区块也会存在</li>
<li><strong>图表区块宽度与高度</strong>：图标区块位于<strong>上方</strong>配合<strong>高度</strong>配置，图标区块位于<strong>两边</strong>配合<strong>宽度</strong>配置</li>
<li><strong>图标与内容间隔</strong>：用于配置图标与组标题间隔</li>
<li>图标选择、图标大小与圆角：在<strong>样式栏</strong>中配置</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-icons-cfg.gif" alt="" /></p>
<h3 id="指标组"> 指标组</h3>
<p>指标组为网格布局，你可以配置</p>
<ul>
<li>网格行列数量</li>
<li>网格行列间距</li>
<li>指标组区块占卡片的整体宽、高</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-metrics-grid.gif" alt="" /></p>
<h3 id="指标项"> 指标项</h3>
<p>指标组中指标项统一配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501142007152.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-metricsitem.gif" alt="" /></p>
<p>您可以配置指标项的</p>
<ul>
<li>排列</li>
<li>指标名位置</li>
<li>指标名值间距</li>
<li>指标项目内边距</li>
<li>背景色</li>
<li>边框、圆角</li>
<li>指标名、指标值字体</li>
<li>按列排列时可以配置指标名、指标值宽度</li>
</ul>
<h3 id="指标组合主从"> 指标组合主从</h3>
<p>开启主从指标，指标组内第一个指标会作为主指标, 主指标项目可以独立配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/kpi-grp-mainsub.gif" alt="" /></p>
<h2 id="同比环比"> 同比环比</h2>
<p>指标卡 输入没有行维度信息时只有<strong>一个指标值</strong>，如果需要进行同环比比较计算，需要增加行维，让一个值变成一个系列，然后引擎会按照默认偏移量进行比较计算，</p>
<blockquote>
<p>默认情况下，环比比较偏移量为1，即与上一个数值进行比较， 同比比较偏移量为12，支持微调项目中修改</p>
</blockquote>
<div style="text-align:left">
  <img src="http://qiniu.ibidemo.cn/kpi%E5%90%8C%E7%8E%AF%E6%AF%94.png"  />
</div>
<h2 id="数据源层计算同环比"> 数据源层计算同环比</h2>
<p>从上面的同环比快速计算逻辑可以看出，如果数据过滤了对比日期之后表面数据，那么同环比值无法计算。<br>
如果希望在数据源层面进行计算，并且希望看板参数上能指定过滤周期，可以参考下面的逻辑实现</p>
<h3 id="日环比"> 日环比</h3>
<ol>
<li>增加计算字段<strong>今日销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span><span><span>`</span>r_date<span>`</span></span> <span>=</span> <span>'${dt!cdt.now("yyyy-MM-dd")}'</span><span>,</span> <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="2">
<li>增加计算字段<strong>昨日销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span>addDay<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>1</span><span>)</span> <span>=</span> <span>'${dt!cdt.now("yyyy-MM-dd")}'</span><span>,</span> <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="3">
<li>增加汇总表达式<strong>日环比</strong></li>
</ol>
<div><pre><code>CHGRATE<span>(</span><span>sum</span><span>(</span><span><span>`</span>昨日销售额<span>`</span></span><span>)</span><span>,</span> <span>sum</span><span>(</span><span><span>`</span>今日销售额<span>`</span></span><span>)</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="4">
<li>拖拽<strong>今日销售额</strong>、<strong>昨日销售额</strong>到指标栏，汇总类型选择sum, 拖拽汇总表达式<strong>日环比</strong>到指标</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151152009.png" alt="" /></p>
<h3 id="月环比"> 月环比</h3>
<ol>
<li>增加计算字段<strong>本月销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span> 
  DATETRUNC<span>(</span><span>'month'</span><span>,</span> <span><span>`</span>r_date<span>`</span></span><span>)</span> <span>=</span> <span>'${cdt.startOfMonth(dt, "yyyy-MM-dd")}'</span><span>,</span> 
  <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><ol start="2">
<li>增加计算字段<strong>上月销售额</strong></li>
</ol>
<div><pre><code><span>IF</span><span>(</span>
  DATETRUNC<span>(</span><span>'month'</span><span>,</span> addMonth<span>(</span><span><span>`</span>r_date<span>`</span></span><span>,</span> <span>1</span><span>)</span><span>)</span> <span>=</span> <span>'${cdt.startOfMonth(dt, "yyyy-MM-dd")}'</span><span>,</span> 
  <span><span>`</span>store_sales<span>`</span></span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br></div></div><ol start="3">
<li>增加汇总表达式<strong>月环比</strong></li>
</ol>
<div><pre><code>CHGRATE<span>(</span><span>sum</span><span>(</span><span><span>`</span>上月销售额<span>`</span></span><span>)</span><span>,</span> <span>sum</span><span>(</span><span><span>`</span>本月销售额<span>`</span></span><span>)</span><span>,</span> <span>0</span><span>)</span>
</code></pre>
<div><span>1</span><br></div></div><ol start="4">
<li>拖拽<strong>本月销售额</strong>、<strong>上月销售额</strong>到指标栏，汇总类型选择sum, 拖拽汇总表达式<strong>月环比</strong>到指标</li>
</ol>
<p><strong>月环比总结:</strong></p>
<ol>
<li>本月销售额中把日期字段通过DATETRUNC('month', <code>r_date</code>)函数处理到月初第一天，然后利用环境变量函数把传入的日期也调整到月初第一天<code>${cdt.startOfMonth(dt, &quot;yyyy-MM-dd&quot;)}</code></li>
<li>上月销售额即把销售日期<code>r_date</code>通过addMonth增加一个月，其他处理和本月销售额一直</li>
<li>注意上面的案例中传入的dt环境变量格式必须为'yyyy-MM-dd'</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501151159937.png" alt="" /></p>
<h2 id="汇总"> 汇总</h2>
<h3 id="列汇总"> <strong>列汇总</strong></h3>
<p>主指标显示为汇总指标</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121051799.png" alt="" /></p>
<h3 id="行汇总"> <strong>行汇总</strong></h3>
<p>有列维时, 增加一个汇总指标卡</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121047391.png" alt="" /></p>
<h2 id="指标卡网络背景图片"> 指标卡网络背景图片</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240220100034.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">瀑布图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/07-waterfall/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/07-waterfall/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="瀑布图"> 瀑布图</h1>
<p>瀑布图（Waterfall Chart）常用于展示数值的累积变化。以下是它的典型使用场景： 瀑布图的使用场景</p>
<ol>
<li>财务分析</li>
</ol>
<ul>
<li><strong>收入和支出：</strong> 展示总收入如何逐步减少到净利润。</li>
<li><strong>成本分析：</strong> 分析各项成本对总成本的贡献。</li>
<li><strong>预算 vs 实际：</strong> 对比计划预算与实际支出的差异。</li>
</ul>
<ol start="2">
<li>数据变化跟踪</li>
</ol>
<ul>
<li><strong>增减分析：</strong> 展示从初始值到最终值的阶段性变化。</li>
<li><strong>时间序列：</strong> 追踪一段时间内的累计值变化。</li>
</ul>
<ol start="3">
<li>业务绩效分析</li>
</ol>
<ul>
<li><strong>销售贡献：</strong> 分析产品、地区或部门对总销售的影响。</li>
<li><strong>市场份额：</strong> 展示竞争对手的加入或退出对市场的影响。</li>
</ul>
<ol start="4">
<li>项目管理</li>
</ol>
<ul>
<li><strong>进度跟踪：</strong> 显示任务完成的阶段性进展。</li>
<li><strong>资源分配：</strong> 了解资源的增减和使用情况。</li>
</ul>
<ol start="5">
<li>其他场景</li>
</ol>
<ul>
<li><strong>库存管理：</strong> 展现库存增减变化。</li>
<li><strong>政策影响：</strong> 分析政策调整对收益或成本的影响。</li>
</ul>
<h2 id="配置要求"> 配置要求</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">不放置</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个或多个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517161740.png" alt="" /></p>
<h2 id="值样式配置"> 值样式配置</h2>
<p>指标值样式配置，作色字段选择自身，作色类型选择自动或者双色可以区分负增长颜色</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161625022.png" alt="" /></p>
<h2 id="轴样式"> 轴样式</h2>
<p>请参考<a href="./02-aix-style.html">轴样式配置</a></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">子弹图/进度占比图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/06-bulletbar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/06-bulletbar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="子弹图-完成度"> 子弹图(完成度)</h1>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">0个或多个</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 2 个或指标，第一个指标为实际值，第二个指标为目标值</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517162311.png" alt="" /></p>
<h2 id="数字标签"> 数字标签</h2>
<ul>
<li>数字标签-[0]控制实际值显示</li>
<li>数字标签-[1]控制目标值显示</li>
</ul>
<h2 id="子弹图0-1规范进度条"> 子弹图0-1规范进度条</h2>
<p>用子弹图实现多进度条可视化，0-1规范对齐不同目标值的项目</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/bullet-progress.gif" alt="" /></p>
<h2 id="轴样式"> 轴样式</h2>
<p>请参考<a href="./02-aix-style.html">轴样式配置</a></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">气泡图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/08-bubble/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/08-bubble/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="气泡图"> 气泡图</h1>
<p>气泡图是一种用于显示三维数据的可视化图表。它通过在二维平面上绘制气泡的 位置 （X轴和Y轴），并用 气泡的大小 和 颜色 表示额外的数据维度，从而帮助用户更直观地分析数据的分布、关系和趋势。</p>
<p><strong>特点</strong></p>
<ul>
<li><strong>二维坐标系</strong>：气泡在X轴和Y轴上定位。</li>
<li><strong>气泡大小</strong>：代表第三个数据维度的数值大小。</li>
<li><strong>颜色编码</strong>（可选）：可用来区分类别或表示第四个维度。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">默认为X轴，设置指标为X轴之后，行维仅用于分类标记</td>
<td style="text-align:left">放置一个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">颜色分类</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">值</td>
<td style="text-align:left">Y 轴、气泡大小、颜色深度</td>
<td style="text-align:left">每个指标节点对应一个属性</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501170914651.png" alt="" /></p>
<h2 id="典型使用场景"> 典型使用场景</h2>
<ol>
<li><strong>市场分析</strong></li>
</ol>
<ul>
<li>展示产品的市场份额（气泡大小）、销售额（Y轴）、客户满意度（X轴）。</li>
<li>比较多个产品的表现差异。</li>
</ul>
<ol start="2">
<li><strong>绩效评估</strong></li>
</ol>
<ul>
<li>分析部门或员工的效率（X轴）、成本（Y轴）、项目完成量（气泡大小）。</li>
<li>用颜色标记不同的部门或岗位类别。</li>
</ul>
<ol start="3">
<li><strong>相关性研究</strong></li>
</ol>
<ul>
<li>探索变量之间的相关性，例如教育水平（X轴）、家庭收入（Y轴）与人口数量（气泡大小）。</li>
</ul>
<ol start="4">
<li><strong>财务分析</strong></li>
</ol>
<ul>
<li>比较不同资产类别的风险（X轴）、收益（Y轴）与资产规模（气泡大小）。</li>
</ul>
<ol start="5">
<li><strong>资源分配</strong></li>
</ol>
<ul>
<li>分析不同地区的资源需求（气泡大小）、经济水平（Y轴）与人口分布（X轴）。</li>
</ul>
<ol start="6">
<li><strong>科学研究</strong></li>
</ol>
<ul>
<li>展示实验变量之间的关系，例如温度（X轴）、压力（Y轴）、实验结果的显著性（气泡大小）。</li>
</ul>
<p><strong>适用条件</strong></p>
<ul>
<li>数据中包含3个以上的维度。</li>
<li>需要对数据的分布特性、关联性或分类进行直观分析。</li>
</ul>
<p><a href="../../assets/widget/Chart_Bubble.png"></a></p>
<h2 id="横轴为指标v1-7"> 横轴为指标<sup>v1.7</sup></h2>
<p>默认横轴为行维，气泡图横轴设定为指标, 通过指标配置可以设定，横轴(x轴)支持显示指标，</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/bubble-xAixs.gif" alt="" /></p>
<ul>
<li>也可以在指标栏放置两个指标，第二个指标设定为x轴</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161724577.png" alt="" /></p>
<div><p>小技巧</p>
<p>出现气泡重叠可以通过设置<strong>单项样式</strong>中边框增加边界效果</p>
</div>
<h2 id="无值轴"> 无值轴</h2>
<p>指标栏不配置指标，可以实现下面所有气泡在一条线上的效果</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240219103644.png" alt="" /></p>
<h2 id="时间线配置"> 时间线配置</h2>
<p>开启时间线配置，选择用于时间线分类的列维数量，默认为0时为所有列维</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161715990.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/scatter-timeline.gif" alt="" /></p>
<h2 id="拆分多图"> 拆分多图</h2>
<blockquote>
<p>开启时间线和拆分逻辑暂时不能同时存在</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161729960.png" alt="" /></p>
<h2 id="矩形分区配置v2-3"> 矩形分区配置<sup>v2.3</sup></h2>
<p>不用开发者模式也能做波斯顿矩阵分析(四象限)</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121106626.png" alt="" /></p>
<h2 id="数字标签"> 数字标签</h2>
<p>开启数字标签支持显示所有维度和指标信息，支持配置关闭不需要的信息显示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161741123.png" alt="" /></p>
<h3 id="关闭特定配置数字标签"> 关闭特定配置数字标签</h3>
<p>如果您只需要关闭类别中特定配置的数字标签显示，可以在配置编辑中在数字标签中显示配置</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501161747861.png" alt="" /></p>
<h3 id="数字标签自定义v2-3"> 数字标签自定义<sup>v2.3</sup></h3>
<p>当维度过多、字段名过长时， 如上四象限分区案例中，<code>销售额增长率</code>和<code>销售额市场占</code>比两个指标都是百分数，并且指标都还比较长，使用自定义数字标签组织重新组织和简化标签格式:</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121107050.png" alt="" /></p>
<h2 id="轴样式"> 轴样式</h2>
<p>请参考<a href="./02-aix-style.html">轴样式配置</a></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">箱线图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/10-boxplot/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/10-boxplot/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="箱线图v1-10"> 箱线图<sup>v1.10</sup></h1>
<p>箱形图（又称为「盒须图」或「箱线图」）能方便显示数字数据组的四分位数。</p>
<p>从盒子两端延伸出来的线条称为「晶须」(whiskers)，用来表示上、下四分位数以外的变量。异常值 (Outliers) 有时会以与晶须处于同一水平的单一数据点表示。这种箱形图可以垂直或水平的形式出现。</p>
<p>箱形图通常用于描述性统计，是以图形方式快速查看一个或多个数据集的好方法。虽然与直方图或密度图相比似乎有点原始，但它们占用较少空间，当要比较很多组或数据集之间的分布时便相当有用。</p>
<p>下面是可以从箱形图得出的观察结果：</p>
<ul>
<li>关键数值，例如平均值、中位数和上下四分位数等。</li>
<li>任何异常值（以及它们的数值）。</li>
<li>数据分布是否对称。</li>
<li>数据分组有多紧密。</li>
<li>数据分布是否出现偏斜（如果是，往什么方向偏斜）。</li>
</ul>
<p>最常用的两种箱形图：可变宽度和带凹槽的箱形图。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201038132.png" alt="" /></p>
<h2 id="配置"> 配置</h2>
<p>箱线图需要2个或2个以上的行维，第一个行维作为横轴(分类轴)，后面的行维把第一个行维拆分之后的数据组和用于绘制一个箱体</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230517153034.png" alt="" /></p>
<table>
<thead>
<tr>
<th style="text-align:left">配置项</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">分组行维数</td>
<td style="text-align:left">用于分组的行维数，默认使用一个行维</td>
</tr>
<tr>
<td style="text-align:left">是否显示最小</td>
<td style="text-align:left">是否显示最小</td>
</tr>
<tr>
<td style="text-align:left">是否显示最大</td>
<td style="text-align:left">是否显示最大</td>
</tr>
<tr>
<td style="text-align:left">分位数-q1</td>
<td style="text-align:left">默认为25%分位数</td>
</tr>
<tr>
<td style="text-align:left">分位数-q2</td>
<td style="text-align:left">默认为50%分位数</td>
</tr>
<tr>
<td style="text-align:left">分位数-q3</td>
<td style="text-align:left">默认为75%分位数</td>
</tr>
</tbody>
</table>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">K线图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/10-k-boxplot/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/10-k-boxplot/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="k线图"> K线图</h1>
<ol>
<li>标准K线图的绘制需要4个关键指标，分别是：<strong>开盘价</strong>、<strong>收盘价</strong>、<strong>最高价</strong>、<strong>最低价</strong>。</li>
<li>如果数据中不足4个指标，系统将重复使用最后一个指标补齐，确保K线图所需数据的完整性。</li>
<li>我们建议优先使用直接计算的结果绘制K线图，以确保图表的准确与性能。</li>
<li>如果计算性能允许，也可以基于原始数据使用<strong>计算字段</strong>功能，通过按行维分组、时间排序的方式计算出开盘价和收盘价，从而生成K线图。这种方法可以更灵活地处理数据，适用于更复杂的分析场景。</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151649583.png" alt="" /></p>
<h2 id="均线配置"> 均线配置</h2>
<p>K线图的均线是技术分析中常用的工具，用于观察股票、期货、外汇等金融产品的价格走势的趋势。均线全称是<strong>移动平均线</strong>，表示在一段时间内价格的平均值，以平滑价格波动并显示趋势方向。</p>
<p>主要特性</p>
<ol>
<li>计算方式
均线是根据过去某一时间段内（如5天、10天、20天等）的收盘价计算平均值，然后将这些平均值连接成一条线。</li>
<li>常见均线有：
• 短期均线：如5日均线（MA5）、10日均线，反映短期趋势。
• 中期均线：如20日均线、50日均线，反映中期趋势。
• 长期均线：如120日均线、200日均线，反映长期趋势。</li>
<li>配置方式
默认显示MA5和MA10均线，用户可输入英文逗号分隔符的多个均线配置</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201045805.png" alt="" /></p>
<h2 id="聚焦配置"> 聚焦配置</h2>
<p>在K线图中，dataZoom 是一个常用的功能，用于实现对数据的局部聚焦和缩放，方便用户在大的数据范围内专注于某一段时间的数据进行分析。</p>
<ul>
<li>默认聚焦区间：初次加载时聚焦的百分比区间范围</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201051264.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">漏斗图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/09-funnel/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/09-funnel/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="漏斗图"> 漏斗图</h1>
<p>漏斗图( Funnel Chart)，形如“漏斗”，用于单流程分析，在开始和结束之间由N个流程环节组成。漏斗图的起始总是100%，并在各个环节依次减少，每个环节用一个梯形来表示，整体形如漏斗。一般来说，所有梯形的高度应是一致的，这会有助人们辨别数值间的差异。</p>
<p>需要注意的是，漏斗图的各个环节，有逻辑上的顺序关系。同时，漏斗图的所有环节的流量都应该使用同一个度量。漏斗图最适宜用来呈现业务流程的推进情况，如用户的转化情况、订单的处理情况、招聘的录用情况等。通过漏斗图，可以较直观的看出流程中各部分的占比、发现流程中的问题，进而做出决策。</p>
<p>一般情况下一个漏斗需要显示如 <em>展示-&gt;点击-&gt;提交-&gt;付款</em>, 一连串不同度量的数值， 在交叉表里面为值轴放置的多个列
行里面的值会按大小自动排序之后形成漏斗<br>
<strong>所以漏斗图一行一个漏斗</strong>， 下面的 Demo 没有实际意义，仅仅作为演示说明</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501171806175.png" alt="" /></p>
<h2 id="漏斗排序"> 漏斗排序</h2>
<p>默认漏斗会把多个指标从大到小降序排列，如果不需要排序或者降序可以在配置栏调整</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/funnel-sort.gif" alt="" /></p>
<h2 id="漏斗对齐"> 漏斗对齐</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/funnel-align.gif" alt="" /></p>
<h2 id="最小最大宽度调整"> 最小最大宽度调整</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/funnel-minmax-width.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">热力图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/11-heatmap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/11-heatmap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="热力图"> 热力图</h1>
<p>热力图，是一种通过对色块着色来显示数据的统计图表。绘图时，需指定颜色映射的规则。例如，较大的值由较深的颜色表示，较小的值由较浅的颜色表示；较大的值由偏暖的颜色表示，较小的值由较冷的颜色表示，等等。</p>
<p>热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异，以及检测它们之间是否存在任何相关性。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201101232.png" alt="" /></p>
<h2 id="配置"> 配置</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191509964.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">环形进度条</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-circleprogress/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-circleprogress/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id=""> </h1>
<ul>
<li><strong>行汇总</strong>: 有列维时，增加一个汇总类别总进度
<img src="http://qiniu.ibidemo.cn/picgo/202508121040270.png" alt="" /></li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">进度条</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-progressbar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-progressbar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="进度条"> 进度条</h1>
<p>进度条类型图表包含<strong>进度条</strong>、<strong>环形精度条</strong>、<strong>计量图</strong>、<strong>水球</strong></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201127165.png" alt="" /></p>
<h2 id="进度条-2"> 进度条</h2>
<p>进度条图表组件是一款基于SVG(<a href="https://loading.io/progress" target="_blank" rel="noopener noreferrer">loading.io</a>)的非ECharts图表组件, 可配置选项和样式可调的效果会不如ECharts类图表</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201349695.png" alt="" /></p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">值</td>
<td style="text-align:left">放置 1 个或多个指标节点，增加第二个指标列维最大值，按指标位置匹配最大值</td>
</tr>
</tbody>
</table>
<h3 id="样式配置"> 样式配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201439331.png" alt="" /></p>
<h3 id="进度条风格"> 进度条风格</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/loding-bar-styles.gif" alt="" /></p>
<blockquote>
<p>如果改变风格不能实时变更，可以尝试点击预览强制更新</p>
</blockquote>
<h2 id="环形进度条"> 环形进度条</h2>
<p>环形进度条ECharts图表，支持一次绘制多个进度环, 与</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点, 用于拆分指标</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">值</td>
<td style="text-align:left">放置 1 个或多个指标节点，增加第二个指标列维最大值，按指标位置匹配最大值</td>
</tr>
</tbody>
</table>
<ul>
<li>可通过列维配置指标拆解，或多指标配置实现多进度条</li>
<li>支持动态最大值配置，可以<strong>按位置匹配最大值</strong>，如下图两个指标，仅第一个指标配置了最大值</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240205141354.png" alt="" /></p>
<h3 id="样式配置-2"> 样式配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201149387.png" alt="" /></p>
<ul>
<li>圆环颜色：多个进度环图时，圆环颜色由调色板控制</li>
<li>环线宽度：控制进度条宽度</li>
<li>半径：以网格<strong>百分比</strong>为单位控制圆环在网格中的大小</li>
<li>背景色：进度槽的颜色</li>
<li>最大值：配置静态最大值</li>
<li>值位置偏移：控制圆环中间百分比指标的位置</li>
<li>标题名称：单个进度环显示时名称配置</li>
<li>标题位置：控制圆环中名称的位置</li>
<li>布局-拆分：控制多图拆分行列</li>
</ul>
<h2 id="计量图"> 计量图</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点, 用于计算同环比</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点, 用于拆分指标</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">值</td>
<td style="text-align:left">放置 1 个或多个指标节点，增加第二个指标列维最大值，按指标位置匹配最大值</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201451372.png" alt="" /></p>
<h3 id="样式配置-3"> 样式配置</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201634593.png" alt="" /></p>
<ul>
<li>轴样式-类别刻度，刻度盘样式: 如果刻度出现小数点可以通过类别轴刻度格式化配置</li>
<li><strong>标题、指标值</strong>、<strong>统计值</strong>(同环比): 支持上下<strong>偏移</strong>配置</li>
<li><strong>统计值间距</strong>: 控制值间间距</li>
</ul>
<h2 id="水球图"> 水球图</h2>
<p>水球图以水球的容量代表进度，最大值可以来自动态指标(增加第二个指标栏位最大值)，如果不配置动态指标也可以设置静态最大值</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">x 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 0 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">值</td>
<td style="text-align:left">放置 1 个指标节点，增加第二个指标列维最大值</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201140304.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">水球图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-waterball/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/12-waterball/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">计量图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/13-gauge/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/13-gauge/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<ul>
<li>圆环起始角度</li>
<li>指针 长度/颜色</li>
<li>splitLine</li>
<li>Anchor样式，边框/背景色/大小</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121141624.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508121145936.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">对比图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/14-contrastbar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/14-contrastbar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="对比图"> 对比图</h1>
<p>对比柱状图是一种以背靠背形式展示的条形图，主要用于展示同一维度下，两个指标的对比分析，便于更直观地看出对比差距。</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">Y轴</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">指标拆分堆叠</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">2对对比的指标</td>
<td style="text-align:left">只能放置两个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240507141229.png" alt="" /></p>
<h2 id="布局"> 布局</h2>
<h3 id="中间刻度宽度"> 中间刻度宽度</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/contrast-midGrid.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">雷达图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/15-radar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/15-radar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="雷达图"> 雷达图</h1>
<p>雷达图是一种显示多变量数据的图形方法。通常从同一中心点开始等角度间隔地射出三个以上的轴，每个轴代表一个定量变量，各轴上的点依次连接成线或几何图形。</p>
<p>雷达图可以用来在变量间进行对比，或者查看变量中有没有异常值。另外，多幅雷达图之间或者雷达图的多层数据线之间，还可以进行总体数值情况的对比。</p>
<p>轴的相对位置和角度通常是无信息的。每个变量都具有自己的轴，彼此间的距离相等，所有轴都有相同的刻度。在将数据映射到这些轴上时，需要注意预先对数值进行标准化处理，保证各个轴之间的数值比例能够做同级别的比较。</p>
<h2 id="图表介绍"> 图表介绍</h2>
<h3 id="元素构成"> 元素构成</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201706563.png" alt="" /></p>
<p>小明用雷达图对自己进行能力评估。能力分为：沟通能力、协作能力、领导能力、学习能力、创新能力、技术能力，每项为0-10分。</p>
<h3 id="适用场景"> 适用场景</h3>
<p>在某一数据对象由多个特征类别构成的情况下，用雷达图来描绘这个数据对象。比如：</p>
<p>· 篮球运动员的能力（得分能力、篮板能力、抢断能力、助攻能力、盖帽能力）</p>
<p>· 食品的营养成分（糖、维生素、矿物质、脂肪、水）</p>
<p>要求特征类别是有限的，不能过多。而且都可以归一化，或者按照统一标准来标准化。比如，身高和体重，虽然单位不同数值分布也不同，但是都可以划分为一个从最小值到最大值（或0到1）的分数（或指数），或者干脆离散化为（差、普通、优异）。</p>
<h3 id="不适用场景"> 不适用场景</h3>
<p>分类过多，或者不可在统一程度上标准化的情况。</p>
<h2 id="配置"> 配置</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">分类</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">系列</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">系列值</td>
<td style="text-align:left">只能放置两个指标节点</td>
</tr>
</tbody>
</table>
<h3 id="按列绘制"> 按列绘制</h3>
<p>默认雷达图与交叉表的关系是按列绘制一组雷达链条，按列绘制分类为行维度</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201712455.png" alt="" /></p>
<h3 id="按行绘制"> 按行绘制</h3>
<p>雷达图可切换按行绘制, 按行绘制的情况下分类为指标</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/radar-drawby.gif" alt="" /></p>
<h2 id="样式配置"> 样式配置</h2>
<h3 id="基础色"> 基础色</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/radar-base-color.gif" alt="" /></p>
<h3 id="指标项名称"> 指标项名称</h3>
<p>指标项目名称，可以配置</p>
<ul>
<li>项目字体</li>
<li>背景色</li>
<li>内边距</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201733050.png" alt="" /></p>
<h2 id="位置与大小"> 位置与大小</h2>
<p>雷达图大小与位置配置与饼图类似，通过控制</p>
<ul>
<li>半径控制大小</li>
<li>偏移控制位置</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">桑基图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/16-sankey/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/16-sankey/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="桑基图"> 桑基图</h1>
<p>桑基图 (Sankey Diagram)，是一种表现流程的示意图，用于描述一组值到另一组值的流向。分支的宽度对应了数据流量的大小。</p>
<h2 id="配置"> 配置</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">起点</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">重点</td>
<td style="text-align:left">只能放置一个或多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">数据流量/宽度</td>
<td style="text-align:left">只能放置两个指标节点</td>
</tr>
</tbody>
</table>
<div style="text-align:center">
  <img src="../../../assets/widget/chart_sanky.png"  />
</div>
<p>以行值和列值为节点，单元格为<strong>行到列</strong>的连接进行画图，交叉表可以视为一个连接矩阵</p>
<h3 id="桑基图数据解析v2-3"> 桑基图数据解析<sup>v2.3</sup></h3>
<p>桑基图新增多种起始节点数据解析模式，方便应对不同的数据组织结构：</p>
<ol>
<li><strong>多个行维组合 → 多个列维组合</strong>: 支持从多个行维组合映射到多个列维组合，适合跨维度的流向分析。<br>
<img src="http://qiniu.ibidemo.cn/picgo/202508121441474.png" alt="" /></li>
<li><strong>多个行维，每个行维为一层数据</strong>: 按行维层级逐层展开，适合分级结构的流向展示。<br>
<img src="http://qiniu.ibidemo.cn/picgo/202508121439233.png" alt="" /></li>
<li><strong>两个行维 = 一个行维 + 一个列维</strong>: 将两个行维解析为“起点行维 + 终点列维”的模式，适合简单的双节点流向。<br>
<img src="http://qiniu.ibidemo.cn/picgo/202508121442257.png" alt="" /></li>
</ol>
<h3 id="为什么我的桑基图没有层级"> 为什么我的桑基图没有层级</h3>
<p>有很多人问为什么自己的桑基图没有层级，其实桑基图的层级和你的数据本身有关.<br>
数据里面有 A -&gt; B 和 B -&gt; C， B为中间层，就会自动适配出两层<br>
另外注意一点EChart对数据要求，不能成环 (A-&gt;B..-&gt;A)</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">树形图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/17-tree/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/17-tree/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="树形图v1-10"> 树形图<sup>v1.10</sup></h1>
<p>树形图按根据行维的层级结构绘制树，可以有0个或者多个指标，层级节点能汇总下级节点指标值, 目前仅支持sum汇总子节点</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202411191508623.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">关系图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/18-relation/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/18-relation/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="关系图"> 关系图</h1>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">起点</td>
<td style="text-align:left">放置 1 个或者 2 个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">终点</td>
<td style="text-align:left">放置 1 个或者 2 个维度节点</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">权重</td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201816757.png" alt="" /></p>
<h2 id="样式配置"> 样式配置</h2>
<h3 id="布局"> 布局</h3>
<p>随机布局配置下可以配置分散度</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501201819825.png" alt="" /></p>
<h3 id="旋转标签"> 旋转标签</h3>
<p>圆环布局配置标签旋转</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/relation-rotatelabel.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">词云</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/19-wordcloud/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/19-wordcloud/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="词云"> 词云</h1>
<p>词云图用于直观展示关键词的频率或重要性，适合在市场营销、学术研究、商业分析等领域中应用。例如，制作用户画像，对用户进行聚类，实现精细化营销。本文为您介绍如何为词云图添加数据并配置样式。</p>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">词语</td>
<td style="text-align:left">放置 1 个或者 2 个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">无</td>
<td style="text-align:left">0</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left">权重</td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211652974.png" alt="" /></p>
<h2 id="分词配置-v2-1"> 分词配置 <sup>v2.1</sup></h2>
<h3 id="维度分词"> 维度分词</h3>
<ul>
<li><strong>在不开维度分词</strong>的情况下，行维上的每个元素组合作为一个关键词</li>
<li><strong>开启维度</strong>的情况下，每个行维上的元素独立作为一个关键词统计</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/wordcloud-splitdims.gif" alt="" /></p>
<h3 id="项目分词"> 项目分词</h3>
<p>项目分词的作用是把一个维度中的一串关键词按<strong>正则拆分</strong>为多个，如：
'惠普 打印机, 白色' 拆分为 [惠普, 但印记, 白色]三个关键词</p>
<ul>
<li>默认的正则拆分规则为: [,|\s|\t] 拆分英文逗号、空格、Tab符号</li>
<li>如果只需要按单个符号拆分可以调整分词正则如：
<ul>
<li><code>,</code>: 按逗号拆分</li>
<li><code>，</code>: 按中文逗号拆分</li>
<li><code>\s+</code>: 按一个或多个空格拆分，</li>
</ul>
</li>
<li><code>[,|\s|\t]</code>：中括号中每个元素用<code>|</code>分割为按多个关键词拆分</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/wordcloud-splititem.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">SVG图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/20-svgmap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/20-svgmap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="svg地图"> SVG地图</h1>
<p>SVG地图是以一张SVG图片作为底图的区域地图，相比较常规地图有更高的订制性，如：商场地图、仓库地图、手绘地图都可以作为底图</p>
<h2 id="操作说明"> 操作说明</h2>
<ol>
<li>在配置栏背景图选项上传SVG作为底图，需要标注的区域元素上需要有 name 属性;
<img src="http://qiniu.ibidemo.cn/picgo/202408191638805.png" alt="" /></li>
<li><strong>如果您没有SVG素材</strong>不要着急，您可以借助synoptic.design工具，上传<strong>普通图片作为底图</strong>，在图片上做区域标记再转换为SVG；可以点击背景图中的链接跳转图片转SVG链接；</li>
<li>synoptic.design标注时，仅需填入第二项AreaName(to display)
<img src="http://qiniu.ibidemo.cn/picgo/202408191643386.png" alt="" /></li>
<li>编辑完成点击<code>EXPORT TO POWER BI</code>,  弹窗中右键保存svg到本地
<img src="http://qiniu.ibidemo.cn/picgo/202408191646767.png" alt="" /></li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151707100.png" alt="" /></p>
<h2 id="按列维分组区域"> 按列维分组区域</h2>
<p>除了按数值大小映射区域颜色深度之外，还支持按列维区分色块</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408151705484.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">区域地图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/21-areamap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/21-areamap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="区域地图"> 区域地图</h1>
<p>顾名思义区域地图是映射的地图的区块，在以区域名称为坐标的一维坐标系上，用户提供的数据名称和区块名称能对上号，则该名称对应的区域被点亮(<code>视觉映射</code>)</p>
<table>
<thead>
<tr>
<th>地图类型</th>
<th>数据查询类型</th>
<th>映射方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>区域地图</td>
<td>聚合数据</td>
<td>区域名称</td>
</tr>
</tbody>
</table>
<p>下图为默认的<code>中国三级行政区域</code>第一级区域</p>
<p><img src="http://qiniu.ibidemo.cn/区域地图.png" alt="" /></p>
<h3 id="区域选择"> 区域选择</h3>
<p>区域选择，地图的区域可以选择，选定了区域之后，数据想要在地图上被正确映射就必须提供对应的区域数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728172803.png" alt="" /></p>
<h3 id="中国三级行政区域"> 中国三级行政区域</h3>
<p>一级区域为全国省级区、直辖市、自治区、特别行政区, 二级区域为地级市, 三级区域为区/县/县级市</p>
<div><p>图层级别选定</p>
<p>用户在选定地图数据之后，取消<code>区域自适应</code>勾选，可以选定固定的级别的区域</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728180433.png" alt="" /></p>
<div><p>常见问题</p>
<p>Q: 我可以在一级中国雄鸡图上映射城市区域吗？<br>
A: <strong>不可以</strong>，一级地图的区块为省份，你可以自己准备一张按城市分割的地图数据，通过<a href="manual/widget/areaMapUserData">自定义区域地图</a>，映射城市区域。
你还可以选择用经纬度地图，<code>数据类型</code>设置为城市，<code>展示类型</code>为散点实现需求</p>
</div>
<h3 id="区域下钻"> 区域下钻</h3>
<p>区域自适应用于地图下钻，要求有和区域地图级别对应的<code>层级维度</code>, 区域自适应勾选之后点击下钻操作，上一级数据被限定于点击的区域，改区域会用来自动改变地图图层</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728175557.png" alt="" /></p>
<ul>
<li><a href="./../areaMapUserData.html">区域地图数据自定义</a></li>
<li><a href="./../map.html">具体查看地图</a></li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">聚合数据经纬度地图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/22-aggdatamap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/22-aggdatamap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<p>聚合数据经纬度地图，是把汇总的数据映射到地图上</p>
<ul>
<li>与区域地图的区别：不考虑地图行政区域，所有映射均基于地图上的经纬度</li>
<li>即使数据类型为地名，最终也会被转换为经纬度再映射到地图上</li>
<li>经纬度地图不支持区域下钻</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211740644.png" alt="" /></p>
<h2 id="区域选择"> 区域选择</h2>
<p>图表样式配置栏，区域选择，选择地图数据</p>
<h2 id="数据配置"> 数据配置</h2>
<h3 id="数据类型"> 数据类型</h3>
<table>
<thead>
<tr>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">解释</th>
<th style="text-align:left">配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">名称</td>
<td style="text-align:left">行政区域名称，如：上海</td>
<td style="text-align:left">散点/气泡图: 行维度放置[地理名称]+[额外信息] <br> 标线: 行维度放置[来源名称]+[目的名称]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211753955.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度分开</td>
<td style="text-align:left">分开的经纬度，如：经度:121.47 纬度: 31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度]+[纬度]+[额外信息] <br> 标线: 行维度放置[来源经度]+[来源纬度]+[目的经度]+[目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211757112.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度组合</td>
<td style="text-align:left">经纬度组合: 121.47,31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度,纬度]+[额外信息]  <br> 标线: 行维度放置[来源经度,来源纬度]+[目的经度,目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211758115.png" alt="" /></td>
</tr>
</tbody>
</table>
<div><p>经纬度映射为什么可以使用名称</p>
<p>Q: 经纬度映射，数据配置里面有一个<code>名称</code>选项?<br>
A: 我们内置了一套中国城市经纬度的字典，方便只有城市名称的情况下也能使用经纬度地图。<strong>使用城市名称做数据映射需要手工对数据进行聚合</strong></p>
</div>
<h3 id="展示类型"> 展示类型</h3>
<p>选择数据类型之后，按配置要求配置数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211801355.png" alt="" /></p>
<p>如数据类型选择为<strong>名称</strong> + 展示类型选择为<strong>标线</strong>，则在维度配置上需要<strong>行维度配置[来源名称]+[目的名称]</strong></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211804047.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">3D地图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/23-3dmap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/23-3dmap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="_3d地图"> 3D地图</h1>
<p>3D地图是基于ThreeJS实现的一套开箱即用的3D效果地图控件，与平面的地图相比3D场景，具有下面的优缺点</p>
<ul>
<li>
<p><strong>优点</strong></p>
<ul>
<li>更好的视觉效果，美观度</li>
<li>更强动态交互性：支持旋转、缩放、倾斜视角等动态交互</li>
</ul>
</li>
<li>
<p><strong>缺点</strong></p>
<ul>
<li>性能要求高：需要更强大的硬件（GPU）支持才能流畅运行，特别是在展示高分辨率模型或大范围场景时</li>
<li>3D场景操作与视角调整有一定的用户学习成本</li>
<li>3D地图的细节可能会显得多余，甚至干扰使用</li>
</ul>
</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408160859143.png" alt="" /></p>
<h2 id="数据配置"> 数据配置</h2>
<table>
<thead>
<tr>
<th>地图类型</th>
<th>数据查询类型</th>
<th>映射方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>3D地图</td>
<td>聚合数据</td>
<td>区域名称，标线地图(区域名称或经纬)</td>
</tr>
</tbody>
</table>
<ul>
<li>3D地图中区域标牌、区域光柱使用配置与区域地图类似</li>
<li>标线地图与经纬度柱使用又与聚合数据经纬度地图类似</li>
</ul>
<h2 id="区域下钻、上卷"> 区域下钻、上卷</h2>
<p>区域下钻与上卷与平面区域地图相同，要求有和区域地图级别对应的<code>层级维度</code>, 区域自适应勾选之后点击下钻操作，上一级数据被限定于点击的区域，改区域会用来自动改变地图图层</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d-map-drill.gif" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d-map-rollup.gif" alt="" /></p>
<h2 id="样式配置"> 样式配置</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501221146725.png" alt="" /></p>
<h2 id="展示类型配置"> 展示类型配置</h2>
<h3 id="区域柱"> 区域柱</h3>
<p>展示类型选择区域柱，行维数据选择区域名称字段</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501221122751.png" alt="" /></p>
<h3 id="区域标牌"> 区域标牌</h3>
<p>展示类型选择区域标牌，行维数据选择区域名称字段，与区域柱的区别在于不显示光柱</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501221151373.png" alt="" /></p>
<h3 id="数据区域自适应"> 数据区域自适应</h3>
<p>区域柱、区域标牌，如果行维中配置多个维度，且非最后一个维度仅有一个值，则区域会根据前面的几个维度自适应</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202408160923016.png" alt="" /></p>
<h3 id="标线地图"> 标线地图</h3>
<h4 id="数据类型"> 数据类型</h4>
<table>
<thead>
<tr>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">解释</th>
<th style="text-align:left">配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">名称</td>
<td style="text-align:left">行政区域名称，如：上海</td>
<td style="text-align:left">行维度放置[来源名称]+[目的名称]+[额外信息]</td>
</tr>
<tr>
<td style="text-align:left">经纬度分开</td>
<td style="text-align:left">分开的经纬度，如：经度:121.47 纬度: 31.23</td>
<td style="text-align:left">行维度放置[来源经度]+[来源纬度]+[目的经度]+[目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211757112.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度组合</td>
<td style="text-align:left">经纬度组合: 121.47,31.23</td>
<td style="text-align:left">行维度放置[来源经度,来源纬度]+[目的经度,目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211758115.png" alt="" /></td>
</tr>
</tbody>
</table>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501221205369.png" alt="" /></p>
<h3 id="经纬度柱"> 经纬度柱</h3>
<p>经纬度柱与聚合数据经纬度地图原理相同，是把汇总的数据映射到地图上</p>
<ul>
<li>与区域地图的如别：不考虑地图行政区域，所有映射均基于地图上的经纬度</li>
<li>即使数据类型为地名，最终也会被转换为经纬度再映射到地图上</li>
<li>经纬度地图不支持区域下钻</li>
</ul>
<h4 id="数据类型-2"> 数据类型</h4>
<table>
<thead>
<tr>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">解释</th>
<th style="text-align:left">配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">名称</td>
<td style="text-align:left">行政区域名称，如：上海</td>
<td style="text-align:left">行维度放置[地理名称]+[额外信息]</td>
</tr>
<tr>
<td style="text-align:left">经纬度分开</td>
<td style="text-align:left">分开的经纬度，如：经度:121.47 纬度: 31.23</td>
<td style="text-align:left">行维度放置[经度]+[纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211757112.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度组合</td>
<td style="text-align:left">经纬度组合: 121.47,31.23</td>
<td style="text-align:left">行维度放置[经度,纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211758115.png" alt="" /></td>
</tr>
</tbody>
</table>
<div><p>经纬度映射为什么可以使用名称</p>
<p>Q: 经纬度映射，数据配置里面有一个<code>名称</code>选项?<br>
A: 我们内置了一套中国城市经纬度的字典，方便只有城市名称的情况下也能使用经纬度地图。<strong>使用城市名称做数据映射需要手工对数据进行聚合</strong></p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501221159592.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">3D地球</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/24-3dearth/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/24-3dearth/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="_3d地球"> 3D地球</h1>
<h2 id="数据配置"> 数据配置</h2>
<table>
<thead>
<tr>
<th>地图类型</th>
<th>数据查询类型</th>
<th>映射方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>3D地球</td>
<td>聚合数据</td>
<td>全球主要国家名称、城市名称</td>
</tr>
</tbody>
</table>
<p><strong>地理位置数据为中文地名</strong>,</p>
<ul>
<li>可以是国家，如：中国、美国；</li>
<li>也可以是全球有主要城市：伦敦、纽约、北京等；</li>
</ul>
<h2 id="展示形式"> 展示形式</h2>
<ul>
<li><strong>区域标牌</strong>: 取行维的第一个字段作为地图位置数据</li>
<li><strong>气泡</strong>: 取行维的第一个字段作为地图位置数据</li>
<li><strong>标线地图</strong>: 取第一个行维为起始位置，第二个行维为结束位置</li>
</ul>
<p>从交叉表到3D地球，轻松一步直达。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d-earth-3.gif" alt="" /></p>
<p>数据展示形式支持多种方式，包括数据标牌、数据气泡和标线，让信息表达更加直观生动。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240815155548.png" alt="" /></p>
<p>此外，还支持地球自动旋转和聚焦中国的功能，提供更具沉浸感和针对性的地理数据展示。</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">明细表</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/25-detailtable/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/25-detailtable/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="明细表"> 明细表</h1>
<p>与透视表/交叉表不同之处在于, 交叉表有行表头与列表头两个表头, 如果把两个表头看做一个二维坐标系，则通过两个表头可以定位唯一一个(<strong>汇总</strong>)值，在明细表中用同样的表头条件查询数据则可以查询出多条记录，
因此在交叉表中就要聚合(sum/avg/min/max等)操作，明细表则不需要聚合操作；</p>
<div><p>什么场景使用明细表</p>
<ul>
<li>有用户可能会有疑问了，“交叉表如果把所有的维度都用上展示效果和明细表输出一样”；</li>
<li><strong>结果一样，数据处理逻辑完全不同，查询性能差异大！</strong>
<ul>
<li>聚合查询是根据用户拖拽的<strong>维度</strong>，对数据集生成<strong>聚合查询语句</strong>，并通过<strong>数据源</strong>的<strong>聚合计算</strong>返回聚合数据。如果仅将<strong>交叉表</strong>用于显示<strong>明细数据</strong>，就会在原本不需要聚合的数据上，对所有<strong>维度</strong>强行执行一次<strong>聚合操作</strong>。若目标结果集较大，<strong>数据库</strong>在进行<strong>聚合</strong>和<strong>去重</strong>时将消耗大量的<strong>内存</strong>和<strong>CPU</strong>资源，造成不必要的<strong>性能损耗</strong>，这将成为一个<strong>严重</strong>的问题。因此，很多不了解<strong>系统工作原理</strong>的用户常在此时抱怨<strong>性能问题</strong>。</li>
</ul>
</li>
</ul>
<p>如下图所示，明细表和交叉表在同时限定维度<code>年</code>与<code>性别(gender)</code>的情况下，明细表会返回大量没有经过聚合的重复数据，交叉表返回的则是对两个维度进行聚合之后的结果集。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501231107973.png" alt="" /></p>
</div>
<h2 id="明细表分页问题"> 明细表分页问题</h2>
<ul>
<li>明细表后台直接对数据集查询，默认返回前 2000 条数据，前端对 2000 条数据进行分页；</li>
<li>明细数据<strong>行数</strong>可在图表配置栏配置；</li>
<li><strong>导出数据不做限制</strong>，最大支持<strong>50万</strong>行数据导出;</li>
<li>页面展示时建议用户可以通过<strong>维度条件过滤</strong>，添加数据筛选条件查询自己关心的明细数据;</li>
</ul>
<h2 id="明细表设置多级表头"> 明细表设置多级表头</h2>
<p>明细表表头为静态表头，支持多级表头配置，相同父级的表头会自动调整顺序之后合并在一起，如下图所示</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161638.png" alt="" /></p>
<h2 id="明细表行合并"> 明细表行合并</h2>
<p>如果您的数据集是已经经过汇总的结果数据，使用明细表的合并行操作，也可以实现类似交叉表的合并表头效果</p>
<div><p>注意</p>
<p>需要合并的维度单元格需要有<strong>排序</strong>配置</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161712.png" alt="" /></p>
<p>版本1.5.0之前明细表合并逻辑不考虑父格是否相同，只要当前格与同列上一格值一样则合并，这样会造成下面的合并错误</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211023162818.png" alt="" /></p>
<p>从版本1.5.0开始明细表合并逻辑需要满足左父格相同的前提条件;</p>
<h3 id="合并单元格父格配置"> 合并单元格父格配置</h3>
<p>此外，您还可以自定义父格列，如：下面的业务场景，母订单可以拆分成2个子订单，但是运费只有一笔需要合并，效果如下:<br>
<img src="http://qiniu.ibidemo.cn/picgo/20211023163153.png" alt="" /><br>
如果按照上面父格相同要求对比父格，则由于子订单不一致合并失败，为了解决该问题，可以修改配置</p>
<ul>
<li>上级列配置指定，只要用户设定<code>运费列</code>的父格为<code>主订单号</code>则只做用户指定列比较</li>
<li>禁止合并: <code>站点</code>列配置禁止合并则不会做合并处理</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20211023164706.png" alt="" /></p>
<h2 id="明细表单元格格式化"> 明细表单元格格式化</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104161730.png" alt="" /></p>
<ul>
<li>单元格格式化函数实例</li>
</ul>
<div><pre><code>
<span>/** 参数说明
 colDef: 列定义: {
 "index":0, "dimType":"column", "typeIndex":0,
 "prop":"_0", "name":"gender", "alias":"性别", "label":"性别",
 "sort":"desc", "formatter":null,
 "align":"left", "width":"100",
 "headers":["合并"]
 },
 value: 当前单元格值
 row:  该行所有列 {
 "gender": { "alias": "性别", "value": "M" },
 "the_year": { "alias": "年", "value": "2016" },
 ...
 }
 **/</span>

<span>formatter</span> <span>=</span> <span>function</span><span>(</span><span>colDef<span>,</span> value<span>,</span> row</span><span>)</span> <span>{</span>
    <span>debugger</span> <span>// 也可以尝试在这里加入断点观察参数结构</span>
    <span>let</span> <span>{</span>label<span>}</span> <span>=</span> colDef<span>;</span>
    <span>if</span> <span>(</span>label <span>==</span> <span>'开销'</span><span>)</span> <span>{</span>
        <span>let</span> color <span>=</span> value <span>></span> <span>2</span> <span>?</span> <span>'green'</span> <span>:</span> <span>'red'</span><span>;</span>
        <span>return</span> <span><span>`</span><span>&lt;div style="fheight:100%;">
                   &lt;span style="margin-right: 5px;color:</span><span><span>${</span>color<span>}</span></span><span>">
                   &lt;i>&lt;/i>&lt;/span> </span><span><span>${</span>value<span>}</span></span><span>
                &lt;/div></span><span>`</span></span>
    <span>}</span> <span>else</span> <span>{</span>
        <span>return</span> value<span>;</span>
    <span>}</span>
<span>}</span>

</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div><h2 id="明细表数据导出数据库"> 明细表数据导出数据库</h2>
<ul>
<li>支持导出的数据库兼容 MySQL/Postgres/Clickhouse/SqlServer/Oracle/Doris</li>
<li>导入数据字段选择、字段类型、字段注释可配置</li>
<li>支持多次导入字段增加、字段减少数据合并</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/download2db.gif" alt="" /></p>
<div><p>注意</p>
<p>如果导出目标数据库为Doris，因为Doris与MySql驱动和链接配置一样，但是建表语法和数据加载机制又有区别，所以需要在数据源中标记数据源为Doris，标记为Doris的数据源，后续数据导入到Doris会有相应优化处理</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230810115759.png" alt="" /></p>
</div>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">散点图(明细数据)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/26-scatter2/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/26-scatter2/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="散点图-明细数据"> 散点图(明细数据)</h1>
<h2 id="数据配置"> 数据配置</h2>
<table>
<thead>
<tr>
<th>地图类型</th>
<th>数据查询类型</th>
<th>映射方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>3D地球</td>
<td>聚合数据</td>
<td>全球主要国家名称、城市名称</td>
</tr>
</tbody>
</table>
<p><strong>地理位置数据为中文地名</strong>,</p>
<ul>
<li>可以是国家，如：中国、美国；</li>
<li>也可以是全球有主要城市：伦敦、纽约、北京等；</li>
</ul>
<h2 id="展示形式"> 展示形式</h2>
<ul>
<li><strong>区域标牌</strong>: 取行维的第一个字段作为地图位置数据</li>
<li><strong>气泡</strong>: 取行维的第一个字段作为地图位置数据</li>
<li><strong>标线地图</strong>: 取第一个行维为起始位置，第二个行维为结束位置</li>
</ul>
<p>从交叉表到3D地球，轻松一步直达。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/3d-earth-3.gif" alt="" /></p>
<p>数据展示形式支持多种方式，包括数据标牌、数据气泡和标线，让信息表达更加直观生动。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240815155548.png" alt="" /></p>
<p>此外，还支持地球自动旋转和聚焦中国的功能，提供更具沉浸感和针对性的地理数据展示。</p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">经纬度地图(百度在线)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/27-gismap-baidu/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/27-gismap-baidu/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="经纬度地图-百度在线"> 经纬度地图(百度在线)</h1>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210207113200.png" alt="" /></p>
<p>该地图调用百度在线地图, 数据要求和上面的中国地图本地一致, 需要联网请求百度地图 API, 基于明细数据渲染(需自行申请百度开发者ak)</p>
<blockquote>
<p>百度地图开发密钥获取流程: <a href="http://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/getkey" target="_blank" rel="noopener noreferrer">点击这里</a><br>
<strong>注意</strong>:百度地图开发者密钥商用需要向百度公司缴费获取权限</p>
</blockquote>
<h2 id="设置开发者密钥"> 设置开发者密钥</h2>
<p>通过扩展配置，增加百度地图开发者调用</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231211160733.png" alt="" /></p>
<div><pre><code><span>[</span>
   <span>[</span>
    <span>"script"</span><span>,</span> <span>{</span>
      <span>"src"</span><span>:</span> <span>"http://api.map.baidu.com/api?v=2.0&amp;ak=xxxx"</span>
    <span>}</span>
   <span>]</span>
    <span>// ... 其他配置项</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h2 id="数据配置"> 数据配置</h2>
<p>数据配置与本地经纬度地图完全一致，经纬度映射，明细数据</p>
<h3 id="数据类型"> 数据类型</h3>
<table>
<thead>
<tr>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">解释</th>
<th style="text-align:left">配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">名称</td>
<td style="text-align:left">行政区域名称，如：上海</td>
<td style="text-align:left">散点/气泡图: 行维度放置[地理名称]+[额外信息] <br> 标线: 行维度放置[来源名称]+[目的名称]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211753955.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度分开</td>
<td style="text-align:left">分开的经纬度，如：经度:121.47 纬度: 31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度]+[纬度]+[额外信息] <br> 标线: 行维度放置[来源经度]+[来源纬度]+[目的经度]+[目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211757112.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度组合</td>
<td style="text-align:left">经纬度组合: 121.47,31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度,纬度]+[额外信息]  <br> 标线: 行维度放置[来源经度,来源纬度]+[目的经度,目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211758115.png" alt="" /></td>
</tr>
</tbody>
</table>
<div><p>经纬度映射为什么可以使用名称</p>
<p>Q: 经纬度映射，数据配置里面有一个<code>名称</code>选项?<br>
A: 我们内置了一套中国城市经纬度的字典，方便只有城市名称的情况下也能使用经纬度地图。<strong>使用城市名称做数据映射需要手工对数据进行聚合</strong></p>
</div>
<h3 id="展示类型"> 展示类型</h3>
<p>选择数据类型之后，按配置要求配置数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211801355.png" alt="" /></p>
<p>如数据类型选择为<strong>名称</strong> + 展示类型选择为<strong>标线</strong>，则在维度配置上需要<strong>行维度配置[来源名称]+[目的名称]</strong></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202502051630975.png" alt="" /></p>
<h2 id="使用bmap高阶开发"> 使用BMap高阶开发</h2>
<p>BMap为开发者提供了很多强大的图层样式控制API，<a href="https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/widget" target="_blank" rel="noopener noreferrer">百度地图开放平台JavaScript API v3.0</a>,
在IBI平台上用户可以通过开发者模式，在afterSetOption函数中进行控制</p>
<div><pre><code><span>afterSetOption</span> <span>=</span> <span>function</span><span>(</span><span>chart</span><span>)</span> <span>{</span>
    <span>const</span> map <span>=</span> chart<span>.</span><span>getModel</span><span>(</span><span>)</span><span>.</span><span>getComponent</span><span>(</span><span>'bmap'</span><span>)</span><span>.</span><span>getBMap</span><span>(</span><span>)</span><span>;</span>
    <span>var</span> top_left_control <span>=</span> <span>new</span> <span>BMap<span>.</span>ScaleControl</span><span>(</span><span>{</span><span>anchor</span><span>:</span> <span>BMAP_ANCHOR_TOP_LEFT</span><span>}</span><span>)</span><span>;</span>
    map<span>.</span><span>addControl</span><span>(</span><span>new</span> <span>BMap<span>.</span>NavigationControl</span><span>(</span><span>)</span><span>)</span><span>;</span>    
    map<span>.</span><span>addControl</span><span>(</span><span>new</span> <span>BMap<span>.</span>OverviewMapControl</span><span>(</span><span>)</span><span>)</span><span>;</span>   
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20201230140628.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">动态排名柱图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/29-racebar/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/29-racebar/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="动态排名柱图"> 动态排名柱图</h1>
<p>动态排名图柱图(条形图), 在排行榜基础上增加了数据变化维度，以列维为变化路径(通常为时间)，固定展示TopN排行变化情况,</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/race-bar.gif" alt="" /></p>
<h2 id="配置要求"> 配置要求</h2>
<table>
<thead>
<tr>
<th style="text-align:left">设计区</th>
<th style="text-align:left">图表</th>
<th style="text-align:left">要求</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行维</td>
<td style="text-align:left">y 轴</td>
<td style="text-align:left">放置 1 个或者多个维度节点</td>
</tr>
<tr>
<td style="text-align:left">列维</td>
<td style="text-align:left">变化维度</td>
<td style="text-align:left">放置1个或多个维度节点，通常为日期类数据</td>
</tr>
<tr>
<td style="text-align:left">指标</td>
<td style="text-align:left"></td>
<td style="text-align:left">放置 1 个指标节点</td>
</tr>
</tbody>
</table>
<h2 id="图表样式"> 图表样式</h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/202502051545237.png" alt="" /></p>
<h3 id="背景信息"> 背景信息</h3>
<p>背景信息展示当前更新列维状态，开启位置自定义可以通过边距调整位置</p>
<h3 id="其他配置"> 其他配置</h3>
<ul>
<li><strong>更新间隔(s)</strong>: 状态更新时间间隔(单位秒)，默认2秒</li>
<li><strong>TopN</strong>: 配置最多展示记录数，默认10项</li>
</ul>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">经纬度地图(本地)</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/27-gismap/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/charts/27-gismap/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="经纬度地图-本地"> 经纬度地图(本地)</h1>
<p><strong>经纬度地图(本地)<strong>与</strong>聚合数据地图</strong>展示形式基本一致，区别在与前置数据处理，聚合数据地图使用汇总之后的数据展示，经纬度地图使用明细数据展示</p>
<blockquote>
<p>如果你的数据为经纬度建议使用非聚合的经纬度地图</p>
</blockquote>
<ul>
<li>与聚合数据地图: 是否使用聚合数据</li>
<li>与区域地图的区别：不考虑地图行政区域，所有映射均基于地图上的经纬度</li>
<li>即使数据类型为地名，最终也会被转换为经纬度再映射到地图上</li>
<li>经纬度地图不支持区域下钻</li>
</ul>
<h2 id="区域选择"> 区域选择</h2>
<p>图表样式配置栏，区域选择，选择地图数据</p>
<h2 id="数据配置"> 数据配置</h2>
<h3 id="数据类型"> 数据类型</h3>
<table>
<thead>
<tr>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">解释</th>
<th style="text-align:left">配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">名称</td>
<td style="text-align:left">行政区域名称，如：上海</td>
<td style="text-align:left">散点/气泡图: 行维度放置[地理名称]+[额外信息] <br> 标线: 行维度放置[来源名称]+[目的名称]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211753955.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度分开</td>
<td style="text-align:left">分开的经纬度，如：经度:121.47 纬度: 31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度]+[纬度]+[额外信息] <br> 标线: 行维度放置[来源经度]+[来源纬度]+[目的经度]+[目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211757112.png" alt="" /></td>
</tr>
<tr>
<td style="text-align:left">经纬度组合</td>
<td style="text-align:left">经纬度组合: 121.47,31.23</td>
<td style="text-align:left">散点/气泡图: 行维度放置[经度,纬度]+[额外信息]  <br> 标线: 行维度放置[来源经度,来源纬度]+[目的经度,目的纬度]+[额外信息] <br> <img src="http://qiniu.ibidemo.cn/picgo/202501211758115.png" alt="" /></td>
</tr>
</tbody>
</table>
<div><p>经纬度映射为什么可以使用名称</p>
<p>Q: 经纬度映射，数据配置里面有一个<code>名称</code>选项?<br>
A: 我们内置了一套中国城市经纬度的字典，方便只有城市名称的情况下也能使用经纬度地图。<strong>使用城市名称做数据映射需要手工对数据进行聚合</strong></p>
</div>
<h3 id="展示类型"> 展示类型</h3>
<p>选择数据类型之后，按配置要求配置数据</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211801355.png" alt="" /></p>
<p>如数据类型选择为<strong>名称</strong> + 展示类型选择为<strong>标线</strong>，则在维度配置上需要<strong>行维度配置[来源名称]+[目的名称]</strong></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202501211804047.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">下钻、上卷</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/drill/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/drill/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="维度层级下钻与上卷"> 维度层级下钻与上卷</h2>
<p><code>维度层级下钻与上卷</code>操作依赖了数据集中的维度层级, 钻取路径沿层级进行, 最常见的是<code>年月日</code>、<code>省市县</code>之类的业务层级</p>
<h3 id="配置维度层级"> 配置维度层级</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/维度层级.gif" alt="" /></p>
<h3 id="下钻效果"> 下钻效果</h3>
<div><p>下钻原理</p>
<p>下钻相当于在点击的维度后面加上他的下级维度，同时点击的维度添加当前点击值进行数据过滤<br>
比如点击&quot;Mexico&quot;单元格下钻，<strong>行维</strong>上国家添加=&quot;Mexico&quot;条件，同时在行维上增加下级维度【大区】</p>
</div>
<p>交叉表下钻</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/交叉表下钻.gif" alt="" /></p>
<p>柱图、饼图下钻</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/bar_pie_drill.gif" alt="" /></p>
<p>区域地图下钻</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/areaMap_drill.gif" alt="" /></p>
<h2 id="交叉表、饼图、柱线图增加drillcross模式、切片"> 交叉表、饼图、柱线图增加drillCross模式、切片</h2>
<p>自由钻取则允许用户在任意维度上进行钻取操作</p>
<h3 id="开启自由下钻"> 开启自由下钻</h3>
<p>考虑到历史图表的数据安全问题，自由下钻默认为关闭状态，通过<code>图表配置</code>-&gt;<code>下钻</code>-&gt;<code>自由下钻</code> 打开<code>自由下钻</code>功能</p>
<img height="200" src="http://qiniu.ibidemo.cn/picgo/20220214150607.png"/>
<h3 id="选中目标格"> 选中目标格</h3>
<ul>
<li>选中单元格(表头或者指标)，每个单元格对应了相应的维度信息(数据范围)<br>
<img src="http://qiniu.ibidemo.cn/picgo/freedrill-1-select.gif" alt="" /></li>
</ul>
<h3 id="自由钻取"> 自由钻取</h3>
<h4 id="追加"> 追加</h4>
<ul>
<li><strong>自由钻取</strong>: 任意维度下钻、上卷
<ul>
<li><strong>下钻</strong>: 选中指标单元格数据范围对应的行维为2017，列维为性别F，行维上进行钻取（DrillCross)）操作，追加维度国家；</li>
<li><strong>上卷</strong>: 上卷操作逻辑为移除行列上已有的维度;<br>
<img src="http://qiniu.ibidemo.cn/picgo/freedrill-2-drill.gif" alt="" /></li>
</ul>
</li>
</ul>
<h4 id="替换"> 替换</h4>
<ul>
<li><strong>自由钻取支持替换</strong>: 替换行列维上所有的维度为钻取维度<br>
<img src="http://qiniu.ibidemo.cn/picgo/freedrill-3-drillreplace.gif" alt="" /></li>
</ul>
<h3 id="切片"> 切片</h3>
<ul>
<li><strong>切片</strong>: 保留、排除选中<br>
<img src="http://qiniu.ibidemo.cn/picgo/freedrill-4-slice.gif" alt="" /></li>
</ul>
<h3 id="历史回退"> 历史回退</h3>
  <img src="http://qiniu.ibidemo.cn/picgo/20220125103500.png" height="200">
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">地图</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/map/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/map/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="地图数据的获取"> 地图数据的获取</h2>
<div><p>声明</p>
<ol>
<li>之前提供的矢量地图数据来自第三方，由于部分数据不符合国家《测绘法》规定，BI发布版中不再打包提供地图数据</li>
<li>由于行政区域是不断在变动的，离线地图文件很容易过期，对地图精度要求较高的用户请向相关权威部门申请地图数据</li>
<li>离线区域地图从技术上来说仅仅为区块示意图，其目的为展示不同区块的数据强度，精准的边界线数据往往体积非常大，网络请求也会变慢，因此地图可视化过程中经常会用到<strong>轮廓数据精简</strong>手段
精简之后的轮廓数据，势必会有一些细节丢失，<span><strong>但这并不代表开发者、分析师、厂商的任何政治立场，请勿过渡解读</strong></span>
<img src="http://qiniu.ibidemo.cn/picgo/mapshaper.gif" alt="" /></li>
<li>如果用户对使用要求严格，请使用中国地图(经纬度地图/百度在线地图)，使用前通过在百度地图开发平台付费申请apikey</li>
</ol>
</div>
<p>一些推荐地图信息获取地址, 以及下载配置：<br>
<a href="https://github.com/ooo1232/geoJson-cn" target="_blank" rel="noopener noreferrer">github geoJson-cn</a></p>
<ol>
<li>下载geoJson-cn数据，拷贝mapdata文件夹到bi的<code>user-files/ext</code>文件夹<br>
<img src="http://qiniu.ibidemo.cn/picgo/20231211153720.png" width="350"></li>
<li>更新区域索引：用管理员账号登录bi平台，在<strong>管理-&gt;图表配置-&gt;区域地图索引</strong>中填入<code>ext/mapdata/area-code/index.json</code>文件内容
<img src="http://qiniu.ibidemo.cn/picgo/20231211154623.png" alt="" /></li>
<li>刷新页面即可生效</li>
<li>关于地图数据相关的操作的详细说明请参考<a href="../areaMapUserData">区域地图数据自定义</a></li>
</ol>
<div><p>延申阅读</p>
<ul>
<li><a href="https://echarts-maps.github.io/echarts-geomapping-book-zh/" target="_blank" rel="noopener noreferrer">地图工匠秘籍</a></li>
<li><a href="https://github.com/Surbowl/world-geo-json-zh/blob/main/world.zh.json" target="_blank" rel="noopener noreferrer">世界地图数据共享</a></li>
<li><a href="https://github.com/georgique/world-geojson" target="_blank" rel="noopener noreferrer">world-geojson</a></li>
</ul>
</div>
<h2 id="区域地图工作原理"> 区域地图工作原理</h2>
<div><p>原理</p>
<ol>
<li>地图绘制首先要有符合规范的<code>地图数据</code>用于绘制地图轮廓， IBI图形库ECharts使用GeoJson 格式的数据，<a href="http://geojson.org/" target="_blank" rel="noopener noreferrer">具体格式见</a></li>
<li>有了地图轮廓绘制之后，第二步是把自己的数据映射到地图上去</li>
<li>映射方式分为两种: 区域映射与经纬度映射。可以把地图轮廓想象为一个坐标系，
<ul>
<li><code>区域映射</code>以名称为坐标的一维坐标系</li>
<li><code>经纬度映射</code>以经纬度为坐标的二维坐标系</li>
</ul>
</li>
<li><strong>百度在线地图</strong>，不需要准备<code>地图数据</code>，通过百度地图在线服务绘制地图轮廓，数据映射为经纬度映射</li>
</ol>
</div>
<h2 id="几种地图说明"> 几种地图说明</h2>
<table>
<thead>
<tr>
<th>地图类型</th>
<th>数据查询类型</th>
<th>映射方式</th>
</tr>
</thead>
<tbody>
<tr>
<td>区域地图</td>
<td>聚合数据</td>
<td>区域名称</td>
</tr>
<tr>
<td>3D地图</td>
<td>聚合数据</td>
<td>区域名称，标线地图(区域名称或经纬)</td>
</tr>
<tr>
<td>3D地球</td>
<td>聚合数据</td>
<td>城市或国家名称</td>
</tr>
<tr>
<td>世界地图(也是一种区域地图)</td>
<td>聚合数据</td>
<td>国家名称</td>
</tr>
<tr>
<td>中国地图本地(经纬度地图)</td>
<td>明细数据</td>
<td>经纬度数据</td>
</tr>
<tr>
<td>中国地图(经纬度地图/百度在线地图)</td>
<td>明细数据</td>
<td>经纬度数据</td>
</tr>
</tbody>
</table>
<h2 id="区域地图"> 区域地图</h2>
<p>顾名思义区域地图是映射的地图的区块，在以区域名称为坐标的一维坐标系上，用户提供的数据名称和区块名称能对上号，则该名称对应的区域被点亮(<code>视觉映射</code>)，下图为默认的<code>中国三级行政区域</code>第一级区域</p>
<p><img src="http://qiniu.ibidemo.cn/区域地图.png" alt="" /></p>
<h3 id="区域选择"> 区域选择</h3>
<ul>
<li>区域选择，地图的区域可以选择，选定了区域之后，数据想要在地图上被正确映射就必须提供对应的区域数据</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728172803.png" alt="" /></p>
<h3 id="中国三级行政区域"> 中国三级行政区域</h3>
<p>一级区域为全国省级区、直辖市、自治区、特别行政区, 二级区域为地级市, 三级区域为区/县/县级市</p>
<div><p>图层级别选定</p>
<p>用户在选定地图数据之后，取消<code>区域自适应</code>勾选，可以选定固定的级别的区域</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728180433.png" alt="" /></p>
<div><p>常见问题</p>
<p>Q: 我可以在一级中国雄鸡图上映射城市区域吗？<br>
A: <strong>不可以</strong>，一级地图的区块为省份，你可以自己准备一张按城市分割的地图数据，通过<a href="manual/widget/areaMapUserData">自定义区域地图</a>，映射城市区域。
你还可以选择用经纬度地图，<code>数据类型</code>设置为城市，<code>展示类型</code>为散点实现需求</p>
</div>
<h3 id="区域下钻"> 区域下钻</h3>
<p>区域自适应用于地图下钻，要求有和区域地图级别对应的<code>层级维度</code>, 区域自适应勾选之后点击下钻操作，上一级数据被限定于点击的区域，改区域会用来自动改变地图图层</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210728175557.png" alt="" /></p>
<h2 id="中国地图本地-经纬度地图"> 中国地图本地(经纬度地图)</h2>
<h3 id="区域选择-2"> 区域选择</h3>
<p>中国地图本地区域选择与<code>区域地图</code>所使用的地图数据(geo data)是相同的，不同的是<code>区域地图</code>映射到地图的区块，<code>经纬度地图</code>映射的是地图上的点或线(两个经纬度点连线)</p>
<h3 id="数据配置"> 数据配置</h3>
<p>使用者需提供经纬度数据明细数据，数据不会做聚合操作，也就是<code>明细数据</code>。
考虑到用户的数据会出现<code>经纬度组合一个字段</code>、<code>经纬度分开存储</code>，我们也准备了相应的数据配置项应对；</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210729085203.png" alt="" /></p>
<div><p>数据配置</p>
<p>Q: 经纬度映射，数据配置里面有一个<code>名称</code>选项?<br>
A: 我们内置了一套中国城市经纬度的字典，方便只有城市名称的情况下也能使用经纬度地图。<strong>使用城市名称做数据映射需要手工对数据进行聚合</strong></p>
</div>
<details><summary>城市经纬度字典</summary>
<div><pre><code><span>{</span>
  <span>"阿克苏地区"</span><span>:</span> <span>[</span><span>80.260604</span><span>,</span> <span>41.168779</span><span>]</span><span>,</span>
  <span>"和田地区"</span><span>:</span> <span>[</span><span>79.922211</span><span>,</span> <span>37.114157</span><span>]</span><span>,</span>
  <span>"上海"</span><span>:</span> <span>[</span><span>121.480237</span><span>,</span> <span>31.236305</span><span>]</span><span>,</span>
  <span>"东莞"</span><span>:</span> <span>[</span><span>113.758231</span><span>,</span> <span>23.026997</span><span>]</span><span>,</span>
  <span>"东营"</span><span>:</span> <span>[</span><span>118.588614</span><span>,</span> <span>37.454925</span><span>]</span><span>,</span>
  <span>"中山"</span><span>:</span> <span>[</span><span>113.399023</span><span>,</span> <span>22.522262</span><span>]</span><span>,</span>
  <span>"临汾"</span><span>:</span> <span>[</span><span>111.526153</span><span>,</span> <span>36.094052</span><span>]</span><span>,</span>
  <span>"临沂"</span><span>:</span> <span>[</span><span>118.36299</span><span>,</span> <span>35.110531</span><span>]</span><span>,</span>
  <span>"丹东"</span><span>:</span> <span>[</span><span>124.362564</span><span>,</span> <span>40.00569</span><span>]</span><span>,</span>
  <span>"丽水"</span><span>:</span> <span>[</span><span>119.929503</span><span>,</span> <span>28.472979</span><span>]</span><span>,</span>
  <span>"乌鲁木齐"</span><span>:</span> <span>[</span><span>87.623314</span><span>,</span> <span>43.832806</span><span>]</span><span>,</span>
  <span>"佛山"</span><span>:</span> <span>[</span><span>113.128432</span><span>,</span> <span>23.027707</span><span>]</span><span>,</span>
  <span>"保定"</span><span>:</span> <span>[</span><span>115.471052</span><span>,</span> <span>38.880055</span><span>]</span><span>,</span>
  <span>"兰州"</span><span>:</span> <span>[</span><span>103.840692</span><span>,</span> <span>36.067312</span><span>]</span><span>,</span>
  <span>"包头"</span><span>:</span> <span>[</span><span>109.846755</span><span>,</span> <span>40.663636</span><span>]</span><span>,</span>
  <span>"北京"</span><span>:</span> <span>[</span><span>116.413554</span><span>,</span> <span>39.911013</span><span>]</span><span>,</span>
  <span>"北海"</span><span>:</span> <span>[</span><span>109.126614</span><span>,</span> <span>21.486955</span><span>]</span><span>,</span>
  <span>"南京"</span><span>:</span> <span>[</span><span>118.802891</span><span>,</span> <span>32.064735</span><span>]</span><span>,</span>
  <span>"南宁"</span><span>:</span> <span>[</span><span>108.373351</span><span>,</span> <span>22.823037</span><span>]</span><span>,</span>
  <span>"南昌"</span><span>:</span> <span>[</span><span>115.864528</span><span>,</span> <span>28.687675</span><span>]</span><span>,</span>
  <span>"南通"</span><span>:</span> <span>[</span><span>120.900301</span><span>,</span> <span>31.985237</span><span>]</span><span>,</span>
  <span>"厦门"</span><span>:</span> <span>[</span><span>118.095915</span><span>,</span> <span>24.485821</span><span>]</span><span>,</span>
  <span>"台州"</span><span>:</span> <span>[</span><span>121.426996</span><span>,</span> <span>28.662297</span><span>]</span><span>,</span>
  <span>"合肥"</span><span>:</span> <span>[</span><span>117.235447</span><span>,</span> <span>31.82687</span><span>]</span><span>,</span>
  <span>"呼和浩特"</span><span>:</span> <span>[</span><span>111.758518</span><span>,</span> <span>40.847461</span><span>]</span><span>,</span>
  <span>"咸阳"</span><span>:</span> <span>[</span><span>108.715712</span><span>,</span> <span>34.335599</span><span>]</span><span>,</span>
  <span>"哈尔滨"</span><span>:</span> <span>[</span><span>126.542417</span><span>,</span> <span>45.807782</span><span>]</span><span>,</span>
  <span>"唐山"</span><span>:</span> <span>[</span><span>118.187036</span><span>,</span> <span>39.636673</span><span>]</span><span>,</span>
  <span>"嘉兴"</span><span>:</span> <span>[</span><span>120.762045</span><span>,</span> <span>30.750912</span><span>]</span><span>,</span>
  <span>"大同"</span><span>:</span> <span>[</span><span>113.306446</span><span>,</span> <span>40.082539</span><span>]</span><span>,</span>
  <span>"大连"</span><span>:</span> <span>[</span><span>121.621391</span><span>,</span> <span>38.919345</span><span>]</span><span>,</span>
  <span>"天津"</span><span>:</span> <span>[</span><span>117.205914</span><span>,</span> <span>39.090908</span><span>]</span><span>,</span>
  <span>"太原"</span><span>:</span> <span>[</span><span>112.55706</span><span>,</span> <span>37.876885</span><span>]</span><span>,</span>
  <span>"威海"</span><span>:</span> <span>[</span><span>122.128245</span><span>,</span> <span>37.519322</span><span>]</span><span>,</span>
  <span>"宁波"</span><span>:</span> <span>[</span><span>121.556686</span><span>,</span> <span>29.880177</span><span>]</span><span>,</span>
  <span>"宝鸡"</span><span>:</span> <span>[</span><span>107.243899</span><span>,</span> <span>34.367747</span><span>]</span><span>,</span>
  <span>"宿迁"</span><span>:</span> <span>[</span><span>118.282062</span><span>,</span> <span>33.967686</span><span>]</span><span>,</span>
  <span>"常州"</span><span>:</span> <span>[</span><span>119.980142</span><span>,</span> <span>31.816791</span><span>]</span><span>,</span>
  <span>"广州"</span><span>:</span> <span>[</span><span>113.270793</span><span>,</span> <span>23.135308</span><span>]</span><span>,</span>
  <span>"廊坊"</span><span>:</span> <span>[</span><span>116.69034</span><span>,</span> <span>39.54352</span><span>]</span><span>,</span>
  <span>"延安"</span><span>:</span> <span>[</span><span>109.496361</span><span>,</span> <span>36.591003</span><span>]</span><span>,</span>
  <span>"张家口"</span><span>:</span> <span>[</span><span>114.894165</span><span>,</span> <span>40.830172</span><span>]</span><span>,</span>
  <span>"徐州"</span><span>:</span> <span>[</span><span>117.29235</span><span>,</span> <span>34.210143</span><span>]</span><span>,</span>
  <span>"德州"</span><span>:</span> <span>[</span><span>116.365825</span><span>,</span> <span>37.441313</span><span>]</span><span>,</span>
  <span>"惠州"</span><span>:</span> <span>[</span><span>114.423348</span><span>,</span> <span>23.116409</span><span>]</span><span>,</span>
  <span>"成都"</span><span>:</span> <span>[</span><span>104.071216</span><span>,</span> <span>30.576279</span><span>]</span><span>,</span>
  <span>"扬州"</span><span>:</span> <span>[</span><span>119.419107</span><span>,</span> <span>32.39986</span><span>]</span><span>,</span>
  <span>"承德"</span><span>:</span> <span>[</span><span>117.969798</span><span>,</span> <span>40.957855</span><span>]</span><span>,</span>
  <span>"拉萨"</span><span>:</span> <span>[</span><span>91.121025</span><span>,</span> <span>29.650088</span><span>]</span><span>,</span>
  <span>"无锡"</span><span>:</span> <span>[</span><span>120.318954</span><span>,</span> <span>31.496704</span><span>]</span><span>,</span>
  <span>"日照"</span><span>:</span> <span>[</span><span>119.533606</span><span>,</span> <span>35.422798</span><span>]</span><span>,</span>
  <span>"昆明"</span><span>:</span> <span>[</span><span>102.839667</span><span>,</span> <span>24.885953</span><span>]</span><span>,</span>
  <span>"杭州"</span><span>:</span> <span>[</span><span>120.161693</span><span>,</span> <span>30.280059</span><span>]</span><span>,</span>
  <span>"枣庄"</span><span>:</span> <span>[</span><span>117.328513</span><span>,</span> <span>34.816569</span><span>]</span><span>,</span>
  <span>"柳州"</span><span>:</span> <span>[</span><span>109.42198</span><span>,</span> <span>24.331519</span><span>]</span><span>,</span>
  <span>"株洲"</span><span>:</span> <span>[</span><span>113.140431</span><span>,</span> <span>27.833737</span><span>]</span><span>,</span>
  <span>"武汉"</span><span>:</span> <span>[</span><span>114.311831</span><span>,</span> <span>30.598428</span><span>]</span><span>,</span>
  <span>"汕头"</span><span>:</span> <span>[</span><span>116.688739</span><span>,</span> <span>23.359289</span><span>]</span><span>,</span>
  <span>"江门"</span><span>:</span> <span>[</span><span>113.088165</span><span>,</span> <span>22.584459</span><span>]</span><span>,</span>
  <span>"沈阳"</span><span>:</span> <span>[</span><span>123.438973</span><span>,</span> <span>41.811339</span><span>]</span><span>,</span>
  <span>"沧州"</span><span>:</span> <span>[</span><span>116.845272</span><span>,</span> <span>38.31022</span><span>]</span><span>,</span>
  <span>"河源"</span><span>:</span> <span>[</span><span>114.707097</span><span>,</span> <span>23.749829</span><span>]</span><span>,</span>
  <span>"泉州"</span><span>:</span> <span>[</span><span>118.682316</span><span>,</span> <span>24.880242</span><span>]</span><span>,</span>
  <span>"泰安"</span><span>:</span> <span>[</span><span>117.094893</span><span>,</span> <span>36.205905</span><span>]</span><span>,</span>
  <span>"泰州"</span><span>:</span> <span>[</span><span>119.932115</span><span>,</span> <span>32.4612</span><span>]</span><span>,</span>
  <span>"济南"</span><span>:</span> <span>[</span><span>117.001319</span><span>,</span> <span>36.671627</span><span>]</span><span>,</span>
  <span>"济宁"</span><span>:</span> <span>[</span><span>116.593852</span><span>,</span> <span>35.420269</span><span>]</span><span>,</span>
  <span>"海口"</span><span>:</span> <span>[</span><span>110.206424</span><span>,</span> <span>20.050057</span><span>]</span><span>,</span>
  <span>"淄博"</span><span>:</span> <span>[</span><span>118.061254</span><span>,</span> <span>36.819182</span><span>]</span><span>,</span>
  <span>"淮安"</span><span>:</span> <span>[</span><span>119.022429</span><span>,</span> <span>33.616272</span><span>]</span><span>,</span>
  <span>"深圳"</span><span>:</span> <span>[</span><span>114.066112</span><span>,</span> <span>22.548515</span><span>]</span><span>,</span>
  <span>"清远"</span><span>:</span> <span>[</span><span>113.062619</span><span>,</span> <span>23.688238</span><span>]</span><span>,</span>
  <span>"温州"</span><span>:</span> <span>[</span><span>120.705869</span><span>,</span> <span>28.001095</span><span>]</span><span>,</span>
  <span>"渭南"</span><span>:</span> <span>[</span><span>109.516739</span><span>,</span> <span>34.505687</span><span>]</span><span>,</span>
  <span>"湖州"</span><span>:</span> <span>[</span><span>120.094566</span><span>,</span> <span>30.899015</span><span>]</span><span>,</span>
  <span>"湘潭"</span><span>:</span> <span>[</span><span>112.950575</span><span>,</span> <span>27.83585</span><span>]</span><span>,</span>
  <span>"滨州"</span><span>:</span> <span>[</span><span>117.9792</span><span>,</span> <span>37.388387</span><span>]</span><span>,</span>
  <span>"潍坊"</span><span>:</span> <span>[</span><span>119.168138</span><span>,</span> <span>36.713212</span><span>]</span><span>,</span>
  <span>"烟台"</span><span>:</span> <span>[</span><span>121.454425</span><span>,</span> <span>37.469868</span><span>]</span><span>,</span>
  <span>"玉溪"</span><span>:</span> <span>[</span><span>102.5537</span><span>,</span> <span>24.357512</span><span>]</span><span>,</span>
  <span>"珠海"</span><span>:</span> <span>[</span><span>113.583235</span><span>,</span> <span>22.276392</span><span>]</span><span>,</span>
  <span>"盐城"</span><span>:</span> <span>[</span><span>120.168187</span><span>,</span> <span>33.355301</span><span>]</span><span>,</span>
  <span>"盘锦"</span><span>:</span> <span>[</span><span>122.077269</span><span>,</span> <span>41.125939</span><span>]</span><span>,</span>
  <span>"石家庄"</span><span>:</span> <span>[</span><span>114.520828</span><span>,</span> <span>38.048684</span><span>]</span><span>,</span>
  <span>"福州"</span><span>:</span> <span>[</span><span>119.302938</span><span>,</span> <span>26.080447</span><span>]</span><span>,</span>
  <span>"秦皇岛"</span><span>:</span> <span>[</span><span>119.606184</span><span>,</span> <span>39.941259</span><span>]</span><span>,</span>
  <span>"绍兴"</span><span>:</span> <span>[</span><span>120.586673</span><span>,</span> <span>30.036519</span><span>]</span><span>,</span>
  <span>"聊城"</span><span>:</span> <span>[</span><span>115.992077</span><span>,</span> <span>36.462681</span><span>]</span><span>,</span>
  <span>"肇庆"</span><span>:</span> <span>[</span><span>112.47177</span><span>,</span> <span>23.052984</span><span>]</span><span>,</span>
  <span>"舟山"</span><span>:</span> <span>[</span><span>122.214339</span><span>,</span> <span>29.991092</span><span>]</span><span>,</span>
  <span>"苏州"</span><span>:</span> <span>[</span><span>120.589613</span><span>,</span> <span>31.304566</span><span>]</span><span>,</span>
  <span>"莱芜"</span><span>:</span> <span>[</span><span>117.683221</span><span>,</span> <span>36.219357</span><span>]</span><span>,</span>
  <span>"菏泽"</span><span>:</span> <span>[</span><span>115.487696</span><span>,</span> <span>35.239435</span><span>]</span><span>,</span>
  <span>"营口"</span><span>:</span> <span>[</span><span>122.241475</span><span>,</span> <span>40.672565</span><span>]</span><span>,</span>
  <span>"葫芦岛"</span><span>:</span> <span>[</span><span>120.843388</span><span>,</span> <span>40.717364</span><span>]</span><span>,</span>
  <span>"衡水"</span><span>:</span> <span>[</span><span>115.676942</span><span>,</span> <span>37.745166</span><span>]</span><span>,</span>
  <span>"衢州"</span><span>:</span> <span>[</span><span>118.880768</span><span>,</span> <span>28.941661</span><span>]</span><span>,</span>
  <span>"西宁"</span><span>:</span> <span>[</span><span>101.784269</span><span>,</span> <span>36.623477</span><span>]</span><span>,</span>
  <span>"西安"</span><span>:</span> <span>[</span><span>108.946306</span><span>,</span> <span>34.347436</span><span>]</span><span>,</span>
  <span>"贵阳"</span><span>:</span> <span>[</span><span>106.636816</span><span>,</span> <span>26.652747</span><span>]</span><span>,</span>
  <span>"连云港"</span><span>:</span> <span>[</span><span>119.229571</span><span>,</span> <span>34.602342</span><span>]</span><span>,</span>
  <span>"邢台"</span><span>:</span> <span>[</span><span>114.510889</span><span>,</span> <span>37.076646</span><span>]</span><span>,</span>
  <span>"邯郸"</span><span>:</span> <span>[</span><span>114.545808</span><span>,</span> <span>36.631222</span><span>]</span><span>,</span>
  <span>"郑州"</span><span>:</span> <span>[</span><span>113.631349</span><span>,</span> <span>34.753488</span><span>]</span><span>,</span>
  <span>"鄂尔多斯"</span><span>:</span> <span>[</span><span>109.787314</span><span>,</span> <span>39.61463</span><span>]</span><span>,</span>
  <span>"重庆"</span><span>:</span> <span>[</span><span>106.557165</span><span>,</span> <span>29.570997</span><span>]</span><span>,</span>
  <span>"金华"</span><span>:</span> <span>[</span><span>119.654027</span><span>,</span> <span>29.084455</span><span>]</span><span>,</span>
  <span>"铜川"</span><span>:</span> <span>[</span><span>108.951558</span><span>,</span> <span>34.902957</span><span>]</span><span>,</span>
  <span>"银川"</span><span>:</span> <span>[</span><span>106.238976</span><span>,</span> <span>38.492392</span><span>]</span><span>,</span>
  <span>"镇江"</span><span>:</span> <span>[</span><span>119.431494</span><span>,</span> <span>32.195688</span><span>]</span><span>,</span>
  <span>"长春"</span><span>:</span> <span>[</span><span>125.33017</span><span>,</span> <span>43.82178</span><span>]</span><span>,</span>
  <span>"长沙"</span><span>:</span> <span>[</span><span>112.945333</span><span>,</span> <span>28.233971</span><span>]</span><span>,</span>
  <span>"长治"</span><span>:</span> <span>[</span><span>113.123046</span><span>,</span> <span>36.201585</span><span>]</span><span>,</span>
  <span>"阳泉"</span><span>:</span> <span>[</span><span>113.587087</span><span>,</span> <span>37.86234</span><span>]</span><span>,</span>
  <span>"青岛"</span><span>:</span> <span>[</span><span>120.389445</span><span>,</span> <span>36.072358</span><span>]</span><span>,</span>
  <span>"韶关"</span><span>:</span> <span>[</span><span>113.603757</span><span>,</span> <span>24.816174</span><span>]</span><span>,</span>
  <span>"九江"</span><span>:</span> <span>[</span><span>116.007993</span><span>,</span> <span>29.711328</span><span>]</span><span>,</span>
  <span>"大庆"</span><span>:</span> <span>[</span><span>125.109727</span><span>,</span> <span>46.593216</span><span>]</span><span>,</span>
  <span>"宁德"</span><span>:</span> <span>[</span><span>119.554701</span><span>,</span> <span>26.671748</span><span>]</span><span>,</span>
  <span>"忻州"</span><span>:</span> <span>[</span><span>112.740804</span><span>,</span> <span>38.422382</span><span>]</span><span>,</span>
  <span>"石嘴山"</span><span>:</span> <span>[</span><span>106.39078</span><span>,</span> <span>38.989783</span><span>]</span><span>,</span>
  <span>"池州"</span><span>:</span> <span>[</span><span>117.497839</span><span>,</span> <span>30.67098</span><span>]</span><span>,</span>
  <span>"淮南"</span><span>:</span> <span>[</span><span>117.006189</span><span>,</span> <span>32.631837</span><span>]</span><span>,</span>
  <span>"吐鲁番地区"</span><span>:</span> <span>[</span><span>89.196029</span><span>,</span> <span>42.957303</span><span>]</span><span>,</span>
  <span>"宜昌"</span><span>:</span> <span>[</span><span>111.292971</span><span>,</span> <span>30.697602</span><span>]</span><span>,</span>
  <span>"景德镇"</span><span>:</span> <span>[</span><span>117.184967</span><span>,</span> <span>29.274337</span><span>]</span><span>,</span>
  <span>"安庆"</span><span>:</span> <span>[</span><span>117.070127</span><span>,</span> <span>30.548594</span><span>]</span><span>,</span>
  <span>"怒江傈僳族自治州"</span><span>:</span> <span>[</span><span>98.863189</span><span>,</span> <span>25.823736</span><span>]</span><span>,</span>
  <span>"白城"</span><span>:</span> <span>[</span><span>122.845302</span><span>,</span> <span>45.6254</span><span>]</span><span>,</span>
  <span>"萍乡"</span><span>:</span> <span>[</span><span>113.86077</span><span>,</span> <span>27.62897</span><span>]</span><span>,</span>
  <span>"抚州"</span><span>:</span> <span>[</span><span>116.364627</span><span>,</span> <span>27.953603</span><span>]</span><span>,</span>
  <span>"朝阳"</span><span>:</span> <span>[</span><span>120.457301</span><span>,</span> <span>41.579487</span><span>]</span><span>,</span>
  <span>"海东"</span><span>:</span> <span>[</span><span>102.003965</span><span>,</span> <span>36.406412</span><span>]</span><span>,</span>
  <span>"湘西土家族苗族自治州"</span><span>:</span> <span>[</span><span>109.745507</span><span>,</span> <span>28.317399</span><span>]</span><span>,</span>
  <span>"鹰潭"</span><span>:</span> <span>[</span><span>117.075765</span><span>,</span> <span>28.265879</span><span>]</span><span>,</span>
  <span>"阿拉善盟"</span><span>:</span> <span>[</span><span>105.735357</span><span>,</span> <span>38.857806</span><span>]</span><span>,</span>
  <span>"大阪府"</span><span>:</span> <span>[</span><span>0</span><span>,</span> <span>0</span><span>]</span><span>,</span>
  <span>"鹤岗"</span><span>:</span> <span>[</span><span>130.304284</span><span>,</span> <span>47.356043</span><span>]</span><span>,</span>
  <span>"吴忠"</span><span>:</span> <span>[</span><span>106.205161</span><span>,</span> <span>38.003863</span><span>]</span><span>,</span>
  <span>"石河子"</span><span>:</span> <span>[</span><span>86.085507</span><span>,</span> <span>44.312423</span><span>]</span><span>,</span>
  <span>"开封"</span><span>:</span> <span>[</span><span>114.313904</span><span>,</span> <span>34.802941</span><span>]</span><span>,</span>
  <span>"延边朝鲜族自治州"</span><span>:</span> <span>[</span><span>129.515602</span><span>,</span> <span>42.897211</span><span>]</span><span>,</span>
  <span>"白银"</span><span>:</span> <span>[</span><span>104.144182</span><span>,</span> <span>36.550821</span><span>]</span><span>,</span>
  <span>"吕梁"</span><span>:</span> <span>[</span><span>111.148086</span><span>,</span> <span>37.525476</span><span>]</span><span>,</span>
  <span>"随州"</span><span>:</span> <span>[</span><span>113.389071</span><span>,</span> <span>31.696341</span><span>]</span><span>,</span>
  <span>"雅安"</span><span>:</span> <span>[</span><span>103.04636</span><span>,</span> <span>30.021277</span><span>]</span><span>,</span>
  <span>"平顶山"</span><span>:</span> <span>[</span><span>113.198935</span><span>,</span> <span>33.772051</span><span>]</span><span>,</span>
  <span>"阜新"</span><span>:</span> <span>[</span><span>121.676518</span><span>,</span> <span>42.027983</span><span>]</span><span>,</span>
  <span>"普洱"</span><span>:</span> <span>[</span><span>100.98114</span><span>,</span> <span>22.788486</span><span>]</span><span>,</span>
  <span>"三亚"</span><span>:</span> <span>[</span><span>109.518646</span><span>,</span> <span>18.258217</span><span>]</span><span>,</span>
  <span>"赣州"</span><span>:</span> <span>[</span><span>114.94126</span><span>,</span> <span>25.837179</span><span>]</span><span>,</span>
  <span>"广元"</span><span>:</span> <span>[</span><span>105.849993</span><span>,</span> <span>32.441808</span><span>]</span><span>,</span>
  <span>"锦州"</span><span>:</span> <span>[</span><span>121.133631</span><span>,</span> <span>41.100869</span><span>]</span><span>,</span>
  <span>"南充"</span><span>:</span> <span>[</span><span>106.117231</span><span>,</span> <span>30.843297</span><span>]</span><span>,</span>
  <span>"衡阳"</span><span>:</span> <span>[</span><span>112.578397</span><span>,</span> <span>26.899517</span><span>]</span><span>,</span>
  <span>"齐齐哈尔"</span><span>:</span> <span>[</span><span>123.924531</span><span>,</span> <span>47.360087</span><span>]</span><span>,</span>
  <span>"兴安盟"</span><span>:</span> <span>[</span><span>122.044544</span><span>,</span> <span>46.088444</span><span>]</span><span>,</span>
  <span>"乌海"</span><span>:</span> <span>[</span><span>106.80185</span><span>,</span> <span>39.660154</span><span>]</span><span>,</span>
  <span>"楚雄彝族自治州"</span><span>:</span> <span>[</span><span>101.534082</span><span>,</span> <span>25.051226</span><span>]</span><span>,</span>
  <span>"伊春"</span><span>:</span> <span>[</span><span>128.84704</span><span>,</span> <span>47.733329</span><span>]</span><span>,</span>
  <span>"陇南"</span><span>:</span> <span>[</span><span>104.928233</span><span>,</span> <span>33.406825</span><span>]</span><span>,</span>
  <span>"荆门"</span><span>:</span> <span>[</span><span>112.205843</span><span>,</span> <span>31.041792</span><span>]</span><span>,</span>
  <span>"辽源"</span><span>:</span> <span>[</span><span>125.150107</span><span>,</span> <span>42.8943</span><span>]</span><span>,</span>
  <span>"怀化"</span><span>:</span> <span>[</span><span>110.008116</span><span>,</span> <span>27.575595</span><span>]</span><span>,</span>
  <span>"牡丹江"</span><span>:</span> <span>[</span><span>129.638976</span><span>,</span> <span>44.558647</span><span>]</span><span>,</span>
  <span>"黄南藏族自治州"</span><span>:</span> <span>[</span><span>102.021495</span><span>,</span> <span>35.526125</span><span>]</span><span>,</span>
  <span>"湛江"</span><span>:</span> <span>[</span><span>110.365494</span><span>,</span> <span>21.277163</span><span>]</span><span>,</span>
  <span>"天水"</span><span>:</span> <span>[</span><span>105.731276</span><span>,</span> <span>34.587162</span><span>]</span><span>,</span>
  <span>"黔东南苗族侗族自治州"</span><span>:</span> <span>[</span><span>107.990602</span><span>,</span> <span>26.589858</span><span>]</span><span>,</span>
  <span>"云浮"</span><span>:</span> <span>[</span><span>112.051045</span><span>,</span> <span>22.921154</span><span>]</span><span>,</span>
  <span>"安康"</span><span>:</span> <span>[</span><span>109.03592</span><span>,</span> <span>32.690575</span><span>]</span><span>,</span>
  <span>"日喀则地区"</span><span>:</span> <span>[</span><span>88.956063</span><span>,</span> <span>29.26816</span><span>]</span><span>,</span>
  <span>"海北藏族自治州"</span><span>:</span> <span>[</span><span>100.907395</span><span>,</span> <span>36.960702</span><span>]</span><span>,</span>
  <span>"海西蒙古族藏族自治州"</span><span>:</span> <span>[</span><span>97.377823</span><span>,</span> <span>37.382839</span><span>]</span><span>,</span>
  <span>"吉安"</span><span>:</span> <span>[</span><span>115.00027</span><span>,</span> <span>27.119751</span><span>]</span><span>,</span>
  <span>"黄石"</span><span>:</span> <span>[</span><span>115.045433</span><span>,</span> <span>30.205336</span><span>]</span><span>,</span>
  <span>"宿州"</span><span>:</span> <span>[</span><span>116.970454</span><span>,</span> <span>33.652034</span><span>]</span><span>,</span>
  <span>"茂名"</span><span>:</span> <span>[</span><span>110.931773</span><span>,</span> <span>21.669051</span><span>]</span><span>,</span>
  <span>"阳江"</span><span>:</span> <span>[</span><span>111.989051</span><span>,</span> <span>21.864421</span><span>]</span><span>,</span>
  <span>"信阳"</span><span>:</span> <span>[</span><span>114.099264</span><span>,</span> <span>32.153186</span><span>]</span><span>,</span>
  <span>"三门峡"</span><span>:</span> <span>[</span><span>111.206832</span><span>,</span> <span>34.778442</span><span>]</span><span>,</span>
  <span>"咸宁"</span><span>:</span> <span>[</span><span>114.328967</span><span>,</span> <span>29.847123</span><span>]</span><span>,</span>
  <span>"许昌"</span><span>:</span> <span>[</span><span>113.858804</span><span>,</span> <span>34.041737</span><span>]</span><span>,</span>
  <span>"保山"</span><span>:</span> <span>[</span><span>99.168373</span><span>,</span> <span>25.117882</span><span>]</span><span>,</span>
  <span>"鹤壁"</span><span>:</span> <span>[</span><span>114.304044</span><span>,</span> <span>35.752656</span><span>]</span><span>,</span>
  <span>"运城"</span><span>:</span> <span>[</span><span>111.013379</span><span>,</span> <span>35.032587</span><span>]</span><span>,</span>
  <span>"达州"</span><span>:</span> <span>[</span><span>107.474504</span><span>,</span> <span>31.214347</span><span>]</span><span>,</span>
  <span>"常德"</span><span>:</span> <span>[</span><span>111.704994</span><span>,</span> <span>29.037723</span><span>]</span><span>,</span>
  <span>"酒泉"</span><span>:</span> <span>[</span><span>98.500427</span><span>,</span> <span>39.738615</span><span>]</span><span>,</span>
  <span>"马鞍山"</span><span>:</span> <span>[</span><span>118.512691</span><span>,</span> <span>31.67633</span><span>]</span><span>,</span>
  <span>"南阳"</span><span>:</span> <span>[</span><span>112.535009</span><span>,</span> <span>32.996701</span><span>]</span><span>,</span>
  <span>"邵阳"</span><span>:</span> <span>[</span><span>111.474133</span><span>,</span> <span>27.245167</span><span>]</span><span>,</span>
  <span>"黔南布依族苗族自治州"</span><span>:</span> <span>[</span><span>107.528663</span><span>,</span> <span>26.260586</span><span>]</span><span>,</span>
  <span>"孝感"</span><span>:</span> <span>[</span><span>113.922962</span><span>,</span> <span>30.930712</span><span>]</span><span>,</span>
  <span>"安顺"</span><span>:</span> <span>[</span><span>105.952622</span><span>,</span> <span>26.259904</span><span>]</span><span>,</span>
  <span>"辽阳"</span><span>:</span> <span>[</span><span>123.243726</span><span>,</span> <span>41.274452</span><span>]</span><span>,</span>
  <span>"黔西南布依族苗族自治州"</span><span>:</span> <span>[</span><span>104.910858</span><span>,</span> <span>25.095974</span><span>]</span><span>,</span>
  <span>"克拉玛依"</span><span>:</span> <span>[</span><span>84.89587</span><span>,</span> <span>45.585765</span><span>]</span><span>,</span>
  <span>"庆阳"</span><span>:</span> <span>[</span><span>107.649305</span><span>,</span> <span>35.716096</span><span>]</span><span>,</span>
  <span>"呼伦贝尔"</span><span>:</span> <span>[</span><span>119.77221</span><span>,</span> <span>49.217977</span><span>]</span><span>,</span>
  <span>"六盘水"</span><span>:</span> <span>[</span><span>104.836786</span><span>,</span> <span>26.599086</span><span>]</span><span>,</span>
  <span>"新余"</span><span>:</span> <span>[</span><span>114.923664</span><span>,</span> <span>27.823541</span><span>]</span><span>,</span>
  <span>"七台河"</span><span>:</span> <span>[</span><span>131.009618</span><span>,</span> <span>45.776512</span><span>]</span><span>,</span>
  <span>"商丘"</span><span>:</span> <span>[</span><span>115.662798</span><span>,</span> <span>34.420378</span><span>]</span><span>,</span>
  <span>"漯河"</span><span>:</span> <span>[</span><span>114.02323</span><span>,</span> <span>33.587703</span><span>]</span><span>,</span>
  <span>"乌兰察布"</span><span>:</span> <span>[</span><span>113.140223</span><span>,</span> <span>40.999972</span><span>]</span><span>,</span>
  <span>"潜江"</span><span>:</span> <span>[</span><span>112.905773</span><span>,</span> <span>30.407633</span><span>]</span><span>,</span>
  <span>"定西"</span><span>:</span> <span>[</span><span>104.631662</span><span>,</span> <span>35.587354</span><span>]</span><span>,</span>
  <span>"鸡西"</span><span>:</span> <span>[</span><span>130.976161</span><span>,</span> <span>45.300906</span><span>]</span><span>,</span>
  <span>"汕尾"</span><span>:</span> <span>[</span><span>115.381693</span><span>,</span> <span>22.791322</span><span>]</span><span>,</span>
  <span>"四平"</span><span>:</span> <span>[</span><span>124.356844</span><span>,</span> <span>43.172447</span><span>]</span><span>,</span>
  <span>"西双版纳傣族自治州"</span><span>:</span> <span>[</span><span>100.803836</span><span>,</span> <span>22.013792</span><span>]</span><span>,</span>
  <span>"遂宁"</span><span>:</span> <span>[</span><span>105.599152</span><span>,</span> <span>30.539156</span><span>]</span><span>,</span>
  <span>"商洛"</span><span>:</span> <span>[</span><span>109.94688</span><span>,</span> <span>33.876525</span><span>]</span><span>,</span>
  <span>"海南藏族自治州"</span><span>:</span> <span>[</span><span>100.626831</span><span>,</span> <span>36.292132</span><span>]</span><span>,</span>
  <span>"文山壮族苗族自治州"</span><span>:</span> <span>[</span><span>104.221606</span><span>,</span> <span>23.404187</span><span>]</span><span>,</span>
  <span>"六安"</span><span>:</span> <span>[</span><span>116.529651</span><span>,</span> <span>31.741226</span><span>]</span><span>,</span>
  <span>"张家界"</span><span>:</span> <span>[</span><span>110.484925</span><span>,</span> <span>29.122477</span><span>]</span><span>,</span>
  <span>"潮州"</span><span>:</span> <span>[</span><span>116.62943</span><span>,</span> <span>23.662923</span><span>]</span><span>,</span>
  <span>"蚌埠"</span><span>:</span> <span>[</span><span>117.395835</span><span>,</span> <span>32.921498</span><span>]</span><span>,</span>
  <span>"桂林"</span><span>:</span> <span>[</span><span>110.296442</span><span>,</span> <span>25.279893</span><span>]</span><span>,</span>
  <span>"甘南藏族自治州"</span><span>:</span> <span>[</span><span>102.917605</span><span>,</span> <span>34.98901</span><span>]</span><span>,</span>
  <span>"驻马店"</span><span>:</span> <span>[</span><span>114.029465</span><span>,</span> <span>33.017546</span><span>]</span><span>,</span>
  <span>"林芝地区"</span><span>:</span> <span>[</span><span>94.368109</span><span>,</span> <span>29.654792</span><span>]</span><span>,</span>
  <span>"百色"</span><span>:</span> <span>[</span><span>106.624969</span><span>,</span> <span>23.907845</span><span>]</span><span>,</span>
  <span>"鞍山"</span><span>:</span> <span>[</span><span>123.000974</span><span>,</span> <span>41.114122</span><span>]</span><span>,</span>
  <span>"郴州"</span><span>:</span> <span>[</span><span>113.021311</span><span>,</span> <span>25.776711</span><span>]</span><span>,</span>
  <span>"巴中"</span><span>:</span> <span>[</span><span>106.753912</span><span>,</span> <span>31.872851</span><span>]</span><span>,</span>
  <span>"恩施土家族苗族自治州"</span><span>:</span> <span>[</span><span>109.494763</span><span>,</span> <span>30.277908</span><span>]</span><span>,</span>
  <span>"十堰"</span><span>:</span> <span>[</span><span>110.80454</span><span>,</span> <span>32.635042</span><span>]</span><span>,</span>
  <span>"临沧"</span><span>:</span> <span>[</span><span>100.10566</span><span>,</span> <span>23.914336</span><span>]</span><span>,</span>
  <span>"泸州"</span><span>:</span> <span>[</span><span>105.449092</span><span>,</span> <span>28.877577</span><span>]</span><span>,</span>
  <span>"平凉"</span><span>:</span> <span>[</span><span>106.671741</span><span>,</span> <span>35.549266</span><span>]</span><span>,</span>
  <span>"宣城"</span><span>:</span> <span>[</span><span>118.765196</span><span>,</span> <span>30.946576</span><span>]</span><span>,</span>
  <span>"绵阳"</span><span>:</span> <span>[</span><span>104.686164</span><span>,</span> <span>31.473364</span><span>]</span><span>,</span>
  <span>"佳木斯"</span><span>:</span> <span>[</span><span>130.32696</span><span>,</span> <span>46.806581</span><span>]</span><span>,</span>
  <span>"遵义"</span><span>:</span> <span>[</span><span>106.933658</span><span>,</span> <span>27.731749</span><span>]</span><span>,</span>
  <span>"钦州"</span><span>:</span> <span>[</span><span>108.66089</span><span>,</span> <span>21.985392</span><span>]</span><span>,</span>
  <span>"玉树藏族自治州"</span><span>:</span> <span>[</span><span>97.01308</span><span>,</span> <span>33.011061</span><span>]</span><span>,</span>
  <span>"本溪"</span><span>:</span> <span>[</span><span>123.773468</span><span>,</span> <span>41.299847</span><span>]</span><span>,</span>
  <span>"朔州"</span><span>:</span> <span>[</span><span>112.438184</span><span>,</span> <span>39.33789</span><span>]</span><span>,</span>
  <span>"毕节"</span><span>:</span> <span>[</span><span>105.333323</span><span>,</span> <span>27.408562</span><span>]</span><span>,</span>
  <span>"张掖"</span><span>:</span> <span>[</span><span>100.456221</span><span>,</span> <span>38.932187</span><span>]</span><span>,</span>
  <span>"南平"</span><span>:</span> <span>[</span><span>118.1843</span><span>,</span> <span>26.647662</span><span>]</span><span>,</span>
  <span>"濮阳"</span><span>:</span> <span>[</span><span>115.035917</span><span>,</span> <span>35.767586</span><span>]</span><span>,</span>
  <span>"宜宾"</span><span>:</span> <span>[</span><span>104.648103</span><span>,</span> <span>28.75761</span><span>]</span><span>,</span>
  <span>"铜仁"</span><span>:</span> <span>[</span><span>109.168558</span><span>,</span> <span>27.674903</span><span>]</span><span>,</span>
  <span>"松原"</span><span>:</span> <span>[</span><span>124.831633</span><span>,</span> <span>45.147201</span><span>]</span><span>,</span>
  <span>"漳州"</span><span>:</span> <span>[</span><span>117.653827</span><span>,</span> <span>24.519197</span><span>]</span><span>,</span>
  <span>"梧州"</span><span>:</span> <span>[</span><span>111.285647</span><span>,</span> <span>23.482873</span><span>]</span><span>,</span>
  <span>"洛阳"</span><span>:</span> <span>[</span><span>112.460033</span><span>,</span> <span>34.624376</span><span>]</span><span>,</span>
  <span>"龙岩"</span><span>:</span> <span>[</span><span>117.023668</span><span>,</span> <span>25.081257</span><span>]</span><span>,</span>
  <span>"莆田"</span><span>:</span> <span>[</span><span>119.014232</span><span>,</span> <span>25.45996</span><span>]</span><span>,</span>
  <span>"济源"</span><span>:</span> <span>[</span><span>112.609314</span><span>,</span> <span>35.072867</span><span>]</span><span>,</span>
  <span>"哈密地区"</span><span>:</span> <span>[</span><span>93.522785</span><span>,</span> <span>42.824642</span><span>]</span><span>,</span>
  <span>"昭通"</span><span>:</span> <span>[</span><span>103.723311</span><span>,</span> <span>27.344057</span><span>]</span><span>,</span>
  <span>"大理白族自治州"</span><span>:</span> <span>[</span><span>100.274223</span><span>,</span> <span>25.612206</span><span>]</span><span>,</span>
  <span>"昌吉回族自治州"</span><span>:</span> <span>[</span><span>87.314822</span><span>,</span> <span>44.016923</span><span>]</span><span>,</span>
  <span>"迪庆藏族自治州"</span><span>:</span> <span>[</span><span>99.70948</span><span>,</span> <span>27.825264</span><span>]</span><span>,</span>
  <span>"黑河"</span><span>:</span> <span>[</span><span>127.535014</span><span>,</span> <span>50.251193</span><span>]</span><span>,</span>
  <span>"吉林"</span><span>:</span> <span>[</span><span>126.556073</span><span>,</span> <span>43.843512</span><span>]</span><span>,</span>
  <span>"广安"</span><span>:</span> <span>[</span><span>106.639772</span><span>,</span> <span>30.461708</span><span>]</span><span>,</span>
  <span>"黄山"</span><span>:</span> <span>[</span><span>118.174807</span><span>,</span> <span>30.133213</span><span>]</span><span>,</span>
  <span>"德阳"</span><span>:</span> <span>[</span><span>104.404319</span><span>,</span> <span>31.133105</span><span>]</span><span>,</span>
  <span>"河池"</span><span>:</span> <span>[</span><span>108.091898</span><span>,</span> <span>24.698828</span><span>]</span><span>,</span>
  <span>"益阳"</span><span>:</span> <span>[</span><span>112.361677</span><span>,</span> <span>28.559818</span><span>]</span><span>,</span>
  <span>"通化"</span><span>:</span> <span>[</span><span>125.946506</span><span>,</span> <span>41.733906</span><span>]</span><span>,</span>
  <span>"永州"</span><span>:</span> <span>[</span><span>111.618703</span><span>,</span> <span>26.426612</span><span>]</span><span>,</span>
  <span>"周口"</span><span>:</span> <span>[</span><span>114.703433</span><span>,</span> <span>33.631958</span><span>]</span><span>,</span>
  <span>"梅州"</span><span>:</span> <span>[</span><span>116.129179</span><span>,</span> <span>24.294311</span><span>]</span><span>,</span>
  <span>"锡林郭勒盟"</span><span>:</span> <span>[</span><span>116.054141</span><span>,</span> <span>43.939525</span><span>]</span><span>,</span>
  <span>"固原"</span><span>:</span> <span>[</span><span>106.24917</span><span>,</span> <span>36.021609</span><span>]</span><span>,</span>
  <span>"滁州"</span><span>:</span> <span>[</span><span>118.323252</span><span>,</span> <span>32.308165</span><span>]</span><span>,</span>
  <span>"荆州"</span><span>:</span> <span>[</span><span>112.24722</span><span>,</span> <span>30.340606</span><span>]</span><span>,</span>
  <span>"芜湖"</span><span>:</span> <span>[</span><span>118.439561</span><span>,</span> <span>31.358798</span><span>]</span><span>,</span>
  <span>"襄阳"</span><span>:</span> <span>[</span><span>112.250093</span><span>,</span> <span>32.229169</span><span>]</span><span>,</span>
  <span>"吉隆坡"</span><span>:</span> <span>[</span><span>0</span><span>,</span> <span>0</span><span>]</span><span>,</span>
  <span>"榆林"</span><span>:</span> <span>[</span><span>109.741195</span><span>,</span> <span>38.290886</span><span>]</span><span>,</span>
  <span>"果洛藏族自治州"</span><span>:</span> <span>[</span><span>100.251341</span><span>,</span> <span>34.477207</span><span>]</span><span>,</span>
  <span>"玉林"</span><span>:</span> <span>[</span><span>110.18743</span><span>,</span> <span>22.660656</span><span>]</span><span>,</span>
  <span>"临夏回族自治州"</span><span>:</span> <span>[</span><span>103.217303</span><span>,</span> <span>35.607475</span><span>]</span><span>,</span>
  <span>"鄂州"</span><span>:</span> <span>[</span><span>114.901557</span><span>,</span> <span>30.396522</span><span>]</span><span>,</span>
  <span>"晋中"</span><span>:</span> <span>[</span><span>112.759375</span><span>,</span> <span>37.692757</span><span>]</span><span>,</span>
  <span>"巴音郭楞蒙古自治州"</span><span>:</span> <span>[</span><span>86.151584</span><span>,</span> <span>41.770226</span><span>]</span><span>,</span>
  <span>"澳门"</span><span>:</span> <span>[</span><span>113.549403</span><span>,</span> <span>22.192961</span><span>]</span><span>,</span>
  <span>"内江"</span><span>:</span> <span>[</span><span>105.065028</span><span>,</span> <span>29.585836</span><span>]</span><span>,</span>
  <span>"揭阳"</span><span>:</span> <span>[</span><span>116.37922</span><span>,</span> <span>23.555773</span><span>]</span><span>,</span>
  <span>"通辽"</span><span>:</span> <span>[</span><span>122.251207</span><span>,</span> <span>43.658363</span><span>]</span><span>,</span>
  <span>"阜阳"</span><span>:</span> <span>[</span><span>115.821389</span><span>,</span> <span>32.895879</span><span>]</span><span>,</span>
  <span>"中卫"</span><span>:</span> <span>[</span><span>105.203332</span><span>,</span> <span>37.506058</span><span>]</span><span>,</span>
  <span>"铜陵"</span><span>:</span> <span>[</span><span>117.818795</span><span>,</span> <span>30.950899</span><span>]</span><span>,</span>
  <span>"红河哈尼族彝族自治州"</span><span>:</span> <span>[</span><span>103.38215</span><span>,</span> <span>23.369914</span><span>]</span><span>,</span>
  <span>"曲靖"</span><span>:</span> <span>[</span><span>103.802685</span><span>,</span> <span>25.496328</span><span>]</span><span>,</span>
  <span>"香港"</span><span>:</span> <span>[</span><span>114.171994</span><span>,</span> <span>22.281089</span><span>]</span><span>,</span>
  <span>"汉中"</span><span>:</span> <span>[</span><span>107.030197</span><span>,</span> <span>33.07382</span><span>]</span><span>,</span>
  <span>"乐山"</span><span>:</span> <span>[</span><span>103.77193</span><span>,</span> <span>29.558141</span><span>]</span><span>,</span>
  <span>"新乡"</span><span>:</span> <span>[</span><span>113.933349</span><span>,</span> <span>35.308973</span><span>]</span><span>,</span>
  <span>"晋城"</span><span>:</span> <span>[</span><span>112.857706</span><span>,</span> <span>35.496081</span><span>]</span><span>,</span>
  <span>"巴彦淖尔"</span><span>:</span> <span>[</span><span>107.394129</span><span>,</span> <span>40.749427</span><span>]</span><span>,</span>
  <span>"武威"</span><span>:</span> <span>[</span><span>102.644524</span><span>,</span> <span>37.934078</span><span>]</span><span>,</span>
  <span>"岳阳"</span><span>:</span> <span>[</span><span>113.135679</span><span>,</span> <span>29.363262</span><span>]</span><span>,</span>
  <span>"赤峰"</span><span>:</span> <span>[</span><span>118.895463</span><span>,</span> <span>42.264586</span><span>]</span><span>,</span>
  <span>"白山"</span><span>:</span> <span>[</span><span>126.431052</span><span>,</span> <span>41.94643</span><span>]</span><span>,</span>
  <span>"攀枝花"</span><span>:</span> <span>[</span><span>101.725262</span><span>,</span> <span>26.588109</span><span>]</span><span>,</span>
  <span>"黄冈"</span><span>:</span> <span>[</span><span>114.878872</span><span>,</span> <span>30.459422</span><span>]</span><span>,</span>
  <span>"绥化"</span><span>:</span> <span>[</span><span>126.975678</span><span>,</span> <span>46.658789</span><span>]</span><span>,</span>
  <span>"双鸭山"</span><span>:</span> <span>[</span><span>131.165442</span><span>,</span> <span>46.652966</span><span>]</span><span>,</span>
  <span>"凉山彝族自治州"</span><span>:</span> <span>[</span><span>102.273965</span><span>,</span> <span>27.887685</span><span>]</span><span>,</span>
  <span>"伊犁哈萨克自治州"</span><span>:</span> <span>[</span><span>81.330697</span><span>,</span> <span>43.922815</span><span>]</span><span>,</span>
  <span>"德宏傣族景颇族自治州"</span><span>:</span> <span>[</span><span>98.591419</span><span>,</span> <span>24.438031</span><span>]</span><span>,</span>
  <span>"安阳"</span><span>:</span> <span>[</span><span>114.3996</span><span>,</span> <span>36.103649</span><span>]</span><span>,</span>
  <span>"三明"</span><span>:</span> <span>[</span><span>117.645742</span><span>,</span> <span>26.269683</span><span>]</span><span>,</span>
  <span>"宜春"</span><span>:</span> <span>[</span><span>114.422683</span><span>,</span> <span>27.820089</span><span>]</span><span>,</span>
  <span>"上饶"</span><span>:</span> <span>[</span><span>117.950028</span><span>,</span> <span>28.460864</span><span>]</span><span>,</span>
  <span>"自贡"</span><span>:</span> <span>[</span><span>104.784891</span><span>,</span> <span>29.345379</span><span>]</span><span>,</span>
  <span>"娄底"</span><span>:</span> <span>[</span><span>112.001082</span><span>,</span> <span>27.703196</span><span>]</span><span>,</span>
  <span>"丽江"</span><span>:</span> <span>[</span><span>100.23357</span><span>,</span> <span>26.862521</span><span>]</span><span>,</span>
  <span>"防城港"</span><span>:</span> <span>[</span><span>108.361138</span><span>,</span> <span>21.693439</span><span>]</span><span>,</span>
  <span>"淮北"</span><span>:</span> <span>[</span><span>116.804878</span><span>,</span> <span>33.96064</span><span>]</span><span>,</span>
  <span>"儋州"</span><span>:</span> <span>[</span><span>109.587145</span><span>,</span> <span>19.527081</span><span>]</span><span>,</span>
  <span>"怒江州"</span><span>:</span> <span>[</span><span>98.863189</span><span>,</span> <span>25.823736</span><span>]</span><span>,</span>
  <span>"焦作"</span><span>:</span> <span>[</span><span>113.248557</span><span>,</span> <span>35.221493</span><span>]</span><span>,</span>
  <span>"铁岭"</span><span>:</span> <span>[</span><span>123.848797</span><span>,</span> <span>42.292573</span><span>]</span><span>,</span>
  <span>"抚顺"</span><span>:</span> <span>[</span><span>123.963595</span><span>,</span> <span>41.886078</span><span>]</span><span>,</span>
  <span>"巢湖"</span><span>:</span> <span>[</span><span>117.88049</span><span>,</span> <span>31.608733</span><span>]</span><span>,</span>
  <span>"西双版纳"</span><span>:</span> <span>[</span><span>100.803836</span><span>,</span> <span>22.013792</span><span>]</span><span>,</span>
  <span>"德宏州"</span><span>:</span> <span>[</span><span>98.591419</span><span>,</span> <span>24.438031</span><span>]</span><span>,</span>
  <span>"恩施"</span><span>:</span> <span>[</span><span>109.485727</span><span>,</span> <span>30.30089</span><span>]</span><span>,</span>
  <span>"湘西州"</span><span>:</span> <span>[</span><span>109.745507</span><span>,</span> <span>28.317399</span><span>]</span><span>,</span>
  <span>"西昌"</span><span>:</span> <span>[</span><span>102.269526</span><span>,</span> <span>27.900601</span><span>]</span><span>,</span>
  <span>"阿坝州"</span><span>:</span> <span>[</span><span>102.231186</span><span>,</span> <span>31.905609</span><span>]</span><span>,</span>
  <span>"黔南州"</span><span>:</span> <span>[</span><span>107.528663</span><span>,</span> <span>26.260586</span><span>]</span><span>,</span>
  <span>"黔东南州"</span><span>:</span> <span>[</span><span>107.990602</span><span>,</span> <span>26.589858</span><span>]</span><span>,</span>
  <span>"黔西南州"</span><span>:</span> <span>[</span><span>104.910858</span><span>,</span> <span>25.095974</span><span>]</span><span>,</span>
  <span>"大理州"</span><span>:</span> <span>[</span><span>100.274223</span><span>,</span> <span>25.612206</span><span>]</span><span>,</span>
  <span>"红河州"</span><span>:</span> <span>[</span><span>103.38215</span><span>,</span> <span>23.369914</span><span>]</span><span>,</span>
  <span>"文山州"</span><span>:</span> <span>[</span><span>104.221606</span><span>,</span> <span>23.404187</span><span>]</span><span>,</span>
  <span>"楚雄州"</span><span>:</span> <span>[</span><span>101.534082</span><span>,</span> <span>25.051226</span><span>]</span><span>,</span>
  <span>"迪庆州"</span><span>:</span> <span>[</span><span>99.70948</span><span>,</span> <span>27.825264</span><span>]</span><span>,</span>
  <span>"山南地区"</span><span>:</span> <span>[</span><span>91.779601</span><span>,</span> <span>29.24309</span><span>]</span><span>,</span>
  <span>"那曲地区"</span><span>:</span> <span>[</span><span>92.0578</span><span>,</span> <span>31.482375</span><span>]</span><span>,</span>
  <span>"博尔塔拉蒙古自治州"</span><span>:</span> <span>[</span><span>82.073064</span><span>,</span> <span>44.912168</span><span>]</span><span>,</span>
  <span>"临夏州"</span><span>:</span> <span>[</span><span>103.217303</span><span>,</span> <span>35.607475</span><span>]</span><span>,</span>
  <span>"甘南州"</span><span>:</span> <span>[</span><span>102.917605</span><span>,</span> <span>34.98901</span><span>]</span><span>,</span>
  <span>"格尔木"</span><span>:</span> <span>[</span><span>94.909745</span><span>,</span> <span>36.408588</span><span>]</span><span>,</span>
  <span>"奎屯"</span><span>:</span> <span>[</span><span>84.90832</span><span>,</span> <span>44.432645</span><span>]</span><span>,</span>
  <span>"亳州"</span><span>:</span> <span>[</span><span>115.7786</span><span>,</span> <span>33.8445</span><span>]</span><span>,</span>
  <span>"崇左"</span><span>:</span> <span>[</span><span>107.3647</span><span>,</span> <span>22.3765</span><span>]</span><span>,</span>
  <span>"定安县"</span><span>:</span> <span>[</span><span>110.3588</span><span>,</span> <span>19.6814</span><span>]</span><span>,</span>
  <span>"东方"</span><span>:</span> <span>[</span><span>108.6518</span><span>,</span> <span>19.0953</span><span>]</span><span>,</span>
  <span>"贵港"</span><span>:</span> <span>[</span><span>109.5989</span><span>,</span> <span>23.1115</span><span>]</span><span>,</span>
  <span>"贺州"</span><span>:</span> <span>[</span><span>111.5666</span><span>,</span> <span>24.4035</span><span>]</span><span>,</span>
  <span>"嘉峪关"</span><span>:</span> <span>[</span><span>98.2891</span><span>,</span> <span>39.7731</span><span>]</span><span>,</span>
  <span>"金昌"</span><span>:</span> <span>[</span><span>102.1880</span><span>,</span> <span>38.5200</span><span>]</span><span>,</span>
  <span>"来宾"</span><span>:</span> <span>[</span><span>109.2214</span><span>,</span> <span>23.7503</span><span>]</span><span>,</span>
  <span>"乐东黎族自治县"</span><span>:</span> <span>[</span><span>109.1730</span><span>,</span> <span>18.7502</span><span>]</span><span>,</span>
  <span>"陵水黎族自治县"</span><span>:</span> <span>[</span><span>110.0375</span><span>,</span> <span>18.5060</span><span>]</span><span>,</span>
  <span>"眉山"</span><span>:</span> <span>[</span><span>103.8485</span><span>,</span> <span>30.0754</span><span>]</span><span>,</span>
  <span>"琼海"</span><span>:</span> <span>[</span><span>110.4921</span><span>,</span> <span>19.2396</span><span>]</span><span>,</span>
  <span>"台湾"</span><span>:</span> <span>[</span><span>120.9605</span><span>,</span> <span>23.6978</span><span>]</span><span>,</span>
  <span>"天门"</span><span>:</span> <span>[</span><span>113.3169</span><span>,</span> <span>30.8657</span><span>]</span><span>,</span>
  <span>"屯昌县"</span><span>:</span> <span>[</span><span>110.1034</span><span>,</span> <span>19.3517</span><span>]</span><span>,</span>
  <span>"万宁"</span><span>:</span> <span>[</span><span>110.3816</span><span>,</span> <span>18.8078</span><span>]</span><span>,</span>
  <span>"文昌"</span><span>:</span> <span>[</span><span>113.8259</span><span>,</span> <span>25.8228</span><span>]</span><span>,</span>
  <span>"五指山"</span><span>:</span> <span>[</span><span>109.5169</span><span>,</span> <span>18.7751</span><span>]</span><span>,</span>
  <span>"仙桃"</span><span>:</span> <span>[</span><span>113.4234</span><span>,</span> <span>30.3608</span><span>]</span><span>,</span>
  <span>"资阳"</span><span>:</span> <span>[</span><span>104.6520</span><span>,</span> <span>30.1246</span><span>]</span><span>,</span>
  <span>"安徽"</span><span>:</span> <span>[</span><span>117.17</span><span>,</span> <span>31.52</span><span>]</span><span>,</span>
  <span>"福建"</span><span>:</span> <span>[</span><span>119.18</span><span>,</span> <span>26.05</span><span>]</span><span>,</span>
  <span>"甘肃"</span><span>:</span> <span>[</span><span>103.51</span><span>,</span> <span>36.04</span><span>]</span><span>,</span>
  <span>"广东"</span><span>:</span> <span>[</span><span>113.14</span><span>,</span> <span>23.08</span><span>]</span><span>,</span>
  <span>"广西"</span><span>:</span> <span>[</span><span>108.19</span><span>,</span> <span>22.48</span><span>]</span><span>,</span>
  <span>"贵州"</span><span>:</span> <span>[</span><span>106.42</span><span>,</span> <span>26.35</span><span>]</span><span>,</span>
  <span>"海南"</span><span>:</span> <span>[</span><span>110.20</span><span>,</span> <span>20.02</span><span>]</span><span>,</span>
  <span>"河北"</span><span>:</span> <span>[</span><span>114.30</span><span>,</span> <span>38.02</span><span>]</span><span>,</span>
  <span>"河南"</span><span>:</span> <span>[</span><span>113.40</span><span>,</span> <span>34.46</span><span>]</span><span>,</span>
  <span>"黑龙江"</span><span>:</span> <span>[</span><span>126.36</span><span>,</span> <span>45.44</span><span>]</span><span>,</span>
  <span>"湖北"</span><span>:</span> <span>[</span><span>114.17</span><span>,</span> <span>30.35</span><span>]</span><span>,</span>
  <span>"湖南"</span><span>:</span> <span>[</span><span>112.59</span><span>,</span> <span>28.12</span><span>]</span><span>,</span>
  <span>"江苏"</span><span>:</span> <span>[</span><span>118.46</span><span>,</span> <span>32.03</span><span>]</span><span>,</span>
  <span>"江西"</span><span>:</span> <span>[</span><span>115.55</span><span>,</span> <span>28.40</span><span>]</span><span>,</span>
  <span>"辽宁"</span><span>:</span> <span>[</span><span>123.25</span><span>,</span> <span>41.48</span><span>]</span><span>,</span>
  <span>"内蒙古"</span><span>:</span> <span>[</span><span>111.41</span><span>,</span> <span>40.48</span><span>]</span><span>,</span>
  <span>"宁夏"</span><span>:</span> <span>[</span><span>106.16</span><span>,</span> <span>38.27</span><span>]</span><span>,</span>
  <span>"青海"</span><span>:</span> <span>[</span><span>101.48</span><span>,</span> <span>36.38</span><span>]</span><span>,</span>
  <span>"山东"</span><span>:</span> <span>[</span><span>117.00</span><span>,</span> <span>36.40</span><span>]</span><span>,</span>
  <span>"山西"</span><span>:</span> <span>[</span><span>112.33</span><span>,</span> <span>37.54</span><span>]</span><span>,</span>
  <span>"陕西"</span><span>:</span> <span>[</span><span>108.57</span><span>,</span> <span>34.17</span><span>]</span><span>,</span>
  <span>"四川"</span><span>:</span> <span>[</span><span>104.04</span><span>,</span> <span>30.40</span><span>]</span><span>,</span>
  <span>"西藏"</span><span>:</span> <span>[</span><span>91.08</span><span>,</span> <span>29.39</span><span>]</span><span>,</span>
  <span>"新疆"</span><span>:</span> <span>[</span><span>87.36</span><span>,</span> <span>43.45</span><span>]</span><span>,</span>
  <span>"云南"</span><span>:</span> <span>[</span><span>102.42</span><span>,</span> <span>25.04</span><span>]</span><span>,</span>
  <span>"浙江"</span><span>:</span> <span>[</span><span>120.10</span><span>,</span> <span>30.16</span><span>]</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br><span>32</span><br><span>33</span><br><span>34</span><br><span>35</span><br><span>36</span><br><span>37</span><br><span>38</span><br><span>39</span><br><span>40</span><br><span>41</span><br><span>42</span><br><span>43</span><br><span>44</span><br><span>45</span><br><span>46</span><br><span>47</span><br><span>48</span><br><span>49</span><br><span>50</span><br><span>51</span><br><span>52</span><br><span>53</span><br><span>54</span><br><span>55</span><br><span>56</span><br><span>57</span><br><span>58</span><br><span>59</span><br><span>60</span><br><span>61</span><br><span>62</span><br><span>63</span><br><span>64</span><br><span>65</span><br><span>66</span><br><span>67</span><br><span>68</span><br><span>69</span><br><span>70</span><br><span>71</span><br><span>72</span><br><span>73</span><br><span>74</span><br><span>75</span><br><span>76</span><br><span>77</span><br><span>78</span><br><span>79</span><br><span>80</span><br><span>81</span><br><span>82</span><br><span>83</span><br><span>84</span><br><span>85</span><br><span>86</span><br><span>87</span><br><span>88</span><br><span>89</span><br><span>90</span><br><span>91</span><br><span>92</span><br><span>93</span><br><span>94</span><br><span>95</span><br><span>96</span><br><span>97</span><br><span>98</span><br><span>99</span><br><span>100</span><br><span>101</span><br><span>102</span><br><span>103</span><br><span>104</span><br><span>105</span><br><span>106</span><br><span>107</span><br><span>108</span><br><span>109</span><br><span>110</span><br><span>111</span><br><span>112</span><br><span>113</span><br><span>114</span><br><span>115</span><br><span>116</span><br><span>117</span><br><span>118</span><br><span>119</span><br><span>120</span><br><span>121</span><br><span>122</span><br><span>123</span><br><span>124</span><br><span>125</span><br><span>126</span><br><span>127</span><br><span>128</span><br><span>129</span><br><span>130</span><br><span>131</span><br><span>132</span><br><span>133</span><br><span>134</span><br><span>135</span><br><span>136</span><br><span>137</span><br><span>138</span><br><span>139</span><br><span>140</span><br><span>141</span><br><span>142</span><br><span>143</span><br><span>144</span><br><span>145</span><br><span>146</span><br><span>147</span><br><span>148</span><br><span>149</span><br><span>150</span><br><span>151</span><br><span>152</span><br><span>153</span><br><span>154</span><br><span>155</span><br><span>156</span><br><span>157</span><br><span>158</span><br><span>159</span><br><span>160</span><br><span>161</span><br><span>162</span><br><span>163</span><br><span>164</span><br><span>165</span><br><span>166</span><br><span>167</span><br><span>168</span><br><span>169</span><br><span>170</span><br><span>171</span><br><span>172</span><br><span>173</span><br><span>174</span><br><span>175</span><br><span>176</span><br><span>177</span><br><span>178</span><br><span>179</span><br><span>180</span><br><span>181</span><br><span>182</span><br><span>183</span><br><span>184</span><br><span>185</span><br><span>186</span><br><span>187</span><br><span>188</span><br><span>189</span><br><span>190</span><br><span>191</span><br><span>192</span><br><span>193</span><br><span>194</span><br><span>195</span><br><span>196</span><br><span>197</span><br><span>198</span><br><span>199</span><br><span>200</span><br><span>201</span><br><span>202</span><br><span>203</span><br><span>204</span><br><span>205</span><br><span>206</span><br><span>207</span><br><span>208</span><br><span>209</span><br><span>210</span><br><span>211</span><br><span>212</span><br><span>213</span><br><span>214</span><br><span>215</span><br><span>216</span><br><span>217</span><br><span>218</span><br><span>219</span><br><span>220</span><br><span>221</span><br><span>222</span><br><span>223</span><br><span>224</span><br><span>225</span><br><span>226</span><br><span>227</span><br><span>228</span><br><span>229</span><br><span>230</span><br><span>231</span><br><span>232</span><br><span>233</span><br><span>234</span><br><span>235</span><br><span>236</span><br><span>237</span><br><span>238</span><br><span>239</span><br><span>240</span><br><span>241</span><br><span>242</span><br><span>243</span><br><span>244</span><br><span>245</span><br><span>246</span><br><span>247</span><br><span>248</span><br><span>249</span><br><span>250</span><br><span>251</span><br><span>252</span><br><span>253</span><br><span>254</span><br><span>255</span><br><span>256</span><br><span>257</span><br><span>258</span><br><span>259</span><br><span>260</span><br><span>261</span><br><span>262</span><br><span>263</span><br><span>264</span><br><span>265</span><br><span>266</span><br><span>267</span><br><span>268</span><br><span>269</span><br><span>270</span><br><span>271</span><br><span>272</span><br><span>273</span><br><span>274</span><br><span>275</span><br><span>276</span><br><span>277</span><br><span>278</span><br><span>279</span><br><span>280</span><br><span>281</span><br><span>282</span><br><span>283</span><br><span>284</span><br><span>285</span><br><span>286</span><br><span>287</span><br><span>288</span><br><span>289</span><br><span>290</span><br><span>291</span><br><span>292</span><br><span>293</span><br><span>294</span><br><span>295</span><br><span>296</span><br><span>297</span><br><span>298</span><br><span>299</span><br><span>300</span><br><span>301</span><br><span>302</span><br><span>303</span><br><span>304</span><br><span>305</span><br><span>306</span><br><span>307</span><br><span>308</span><br><span>309</span><br><span>310</span><br><span>311</span><br><span>312</span><br><span>313</span><br><span>314</span><br><span>315</span><br><span>316</span><br><span>317</span><br><span>318</span><br><span>319</span><br><span>320</span><br><span>321</span><br><span>322</span><br><span>323</span><br><span>324</span><br><span>325</span><br><span>326</span><br><span>327</span><br><span>328</span><br><span>329</span><br><span>330</span><br><span>331</span><br><span>332</span><br><span>333</span><br><span>334</span><br><span>335</span><br><span>336</span><br><span>337</span><br><span>338</span><br><span>339</span><br><span>340</span><br><span>341</span><br><span>342</span><br><span>343</span><br><span>344</span><br><span>345</span><br><span>346</span><br><span>347</span><br><span>348</span><br><span>349</span><br><span>350</span><br><span>351</span><br><span>352</span><br><span>353</span><br><span>354</span><br><span>355</span><br><span>356</span><br><span>357</span><br><span>358</span><br><span>359</span><br><span>360</span><br><span>361</span><br><span>362</span><br><span>363</span><br><span>364</span><br><span>365</span><br><span>366</span><br><span>367</span><br><span>368</span><br><span>369</span><br><span>370</span><br><span>371</span><br><span>372</span><br><span>373</span><br><span>374</span><br><span>375</span><br><span>376</span><br><span>377</span><br><span>378</span><br><span>379</span><br><span>380</span><br><span>381</span><br><span>382</span><br><span>383</span><br><span>384</span><br><span>385</span><br><span>386</span><br><span>387</span><br><span>388</span><br><span>389</span><br><span>390</span><br><span>391</span><br><span>392</span><br><span>393</span><br><span>394</span><br><span>395</span><br></div></div></details>
<h2 id="中国地图-经纬度地图-百度在线地图"> <strong>中国地图(经纬度地图/百度在线地图)</strong></h2>
<p><img src="http://qiniu.ibidemo.cn/picgo/20210207113200.png" alt="" /></p>
<p>该地图调用百度在线地图, 数据要求和上面的中国地图本地一致, 需要联网请求百度地图 API, 基于明细数据渲染(需自行申请百度开发者ak)</p>
<blockquote>
<p>百度地图开发密钥获取流程: <a href="http://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/getkey" target="_blank" rel="noopener noreferrer">点击这里</a><br>
注意:百度地图开发者密钥商用需要向百度公司缴费获取权限</p>
</blockquote>
<h3 id="设置开发者密钥"> 设置开发者密钥</h3>
<p>通过扩展配置，增加百度地图开发者调用</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231211160733.png" alt="" /></p>
<div><pre><code><span>[</span>
   <span>[</span>
    <span>"script"</span><span>,</span> <span>{</span>
      <span>"src"</span><span>:</span> <span>"http://api.map.baidu.com/api?v=2.0&amp;ak=xxxx"</span>
    <span>}</span>
   <span>]</span>
<span>]</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br></div></div><h3 id="百度地图数据配置"> 百度地图数据配置</h3>
<p>数据配置与本地地图完全一致，经纬度映射，明细数据</p>
<h3 id="使用bmap高阶开发"> 使用BMap高阶开发</h3>
<p>BMap为开发者提供了很多强大的图层样式控制API，<a href="https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/widget" target="_blank" rel="noopener noreferrer">百度地图开放平台JavaScript API v3.0</a>,
在IBI平台上用户可以通过开发者模式，在afterSetOption函数中进行控制</p>
<div><pre><code><span>afterSetOption</span> <span>=</span> <span>function</span><span>(</span><span>chart</span><span>)</span> <span>{</span>
    <span>const</span> map <span>=</span> chart<span>.</span><span>getModel</span><span>(</span><span>)</span><span>.</span><span>getComponent</span><span>(</span><span>'bmap'</span><span>)</span><span>.</span><span>getBMap</span><span>(</span><span>)</span><span>;</span>
    <span>var</span> top_left_control <span>=</span> <span>new</span> <span>BMap<span>.</span>ScaleControl</span><span>(</span><span>{</span><span>anchor</span><span>:</span> <span>BMAP_ANCHOR_TOP_LEFT</span><span>}</span><span>)</span><span>;</span>
    map<span>.</span><span>addControl</span><span>(</span><span>new</span> <span>BMap<span>.</span>NavigationControl</span><span>(</span><span>)</span><span>)</span><span>;</span>    
    map<span>.</span><span>addControl</span><span>(</span><span>new</span> <span>BMap<span>.</span>OverviewMapControl</span><span>(</span><span>)</span><span>)</span><span>;</span>   
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br></div></div><p><img src="http://qiniu.ibidemo.cn/picgo/20201230140628.png" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">图表微调开发者模式</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/widget-js-hook/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/widget-js-hook/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h1 id="图表微调开发者模式"> 图表微调开发者模式</h1>
<hr>
<p>随着我们的客户不断增多，数据看板、大屏投放的业务场景，图表主题偏好也随之不断增多，虽然目前我支持到的图表微调项多达数百项，而且还在根据用户的反馈不断的增加。
但是，始终会遇到一些微调需求是不太适合通过界面控制来交互，又或者是迭代速度不够快，影响用户的项目交付。因此，我们从 1.1 开始引入 echarts 图相关的高级开发者模式。把主动权最大化交给用户！</p>
<h2 id="高级开发者模式是什么"> 高级开发者模式是什么？</h2>
<p>开发者模式受众是有前端 js 开发经验的专业开发人员, 并且需要对原生 echarts 配置项有所了解</p>
<div><p>工作原理</p>
<p>允许用户在微调时插入一段 js 代码，该代码运行在<code>echarts.setOption(option)</code>之前，通过 JavaScript 代码、工具包和我们公开的相关 api 接口，
调整图配置option 对象的相关属性，从而做出任意 echarts 支持的渲染效果，如：目前还不支持的渐变色、graphics 水印、toolbox等其他所有 echarts 支持，而且我们的微调界面涵盖不全的配置项。</p>
</div>
<h2 id="怎么做"> 怎么做？</h2>
<ol>
<li>确认图表是否为 echarts 图(目前除交叉表、明细表、进度条、KPI 指标卡之外都属于 ehcarts 图)</li>
<li>在图表微调栏最下方可以看到开发者模式栏，点击代码按钮弹窗显示微调配置脚本编辑栏，如下所示：
<div style="text-align:center">
<img src="../../assets/widget/cn-widget-opiotnjshook.png"  />
</div></li>
<li>支持操作的变量介绍，该插入代码段用户可以使用任意原始，或自定义、或支持的第三方库对option进行操作</li>
</ol>
<table>
<thead>
<tr>
<th>变量</th>
<th>介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td>option</td>
<td>最终会传递给 echarts.setOption 接口的配置对象</td>
</tr>
<tr>
<td>$$option</td>
<td>开放给用户进行合并的对象，改对象最终会与目标对象 option 进行深度合并</td>
</tr>
<tr>
<td>_</td>
<td><a href="https://lodash.com/docs" target="_blank" rel="noopener noreferrer">Lodash</a> 工具函数库</td>
</tr>
<tr>
<td>moment</td>
<td><a href="https://momentjs.com/" target="_blank" rel="noopener noreferrer">moment v2.22</a> 时间处理工具库</td>
</tr>
<tr>
<td>numbro</td>
<td><a href="https://numbrojs.com/old-format.html" target="_blank" rel="noopener noreferrer">numbro v1</a> 数字格式化工具库</td>
</tr>
<tr>
<td>ChartUtils</td>
<td>iBI图表数据处理工具库, ChartUtils.linearGradient2Css(color); 把echarts的线性渐变色对象解析为css background样式</td>
</tr>
<tr>
<td>自定义</td>
<td>你也可以自己在ext.js 定义自己的工具方法</td>
</tr>
</tbody>
</table>
<div><p>关于数组的深度合并</p>
<p>我们知道两个数组合并普通方案都是完全覆盖，后者覆盖替换前者，ehcarts中的大量配置在数组中都以对象的形式记录，微调的时候往往又只需要修改数组项中的其中几个属性，
因为我们支持的深度合并方案允许用户在数组对应的Index位置传递对象，然后进行对象比对，合并到数组中响应对象</p>
</div>
<div><pre><code><span>// 覆盖合并</span>
<span>merge</span><span>(</span>
	<span>[</span><span>{</span> <span>a</span><span>:</span> <span>true</span> <span>}</span><span>]</span><span>,</span>
	<span>[</span><span>{</span> <span>b</span><span>:</span> <span>true</span> <span>}</span><span>,</span> <span>'ah yup'</span><span>]</span>
<span>)</span> <span>// => [{ b: true }, 'ah yup']</span>

<span>// 深度数组合并解释</span>
<span>merge</span><span>(</span>
	<span>[</span><span>{</span> <span>a</span><span>:</span> <span>true</span> <span>}</span><span>]</span><span>,</span>
	<span>[</span><span>{</span> <span>b</span><span>:</span> <span>true</span> <span>}</span><span>,</span> <span>'ah yup'</span><span>]</span>
<span>)</span> <span>// => [{ a: true, b: true }, 'ah yup']</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br></div></div><div><p>调试小技巧</p>
<p>打开编辑器默认模板可以供参照，修改变更之后，点击<code>确认</code>按钮生效，<code>取消</code>测不做任何修改；<code>Reset</code>重置为初始模板状态, 在适当的时候用console.log()控制台打印结果</p>
<ul>
<li>控制台打印观察option对象具体的结构</li>
<li>通过在代码中增加debugger，Chrome F12打开控制台调试</li>
</ul>
</div>
<h2 id="一些例子简单介绍"> 一些例子简单介绍</h2>
<h3 id="修改图例颜色为渐变色"> 修改图例颜色为渐变色</h3>
<p>下面的代码把系列数组中第一个系列的样式进行了跳转，包含barWidth，color等等
<div style="text-align:center">
<img src="../../assets/widget/cn-widget-opiotnjshook-demoLGColor.png"  />
</div></p>
<details><summary>DETAILS</summary>
<div><pre><code>$$option <span>=</span> <span>{</span>
  <span>series</span><span>:</span> <span>[</span><span>{</span>
            <span>type</span><span>:</span> <span>'bar'</span><span>,</span>
            <span>barWidth</span><span>:</span> <span>'30%'</span><span>,</span>
            <span>itemStyle</span><span>:</span> <span>{</span>
                <span>normal</span><span>:</span> <span>{</span>
                    <span>barBorderRadius</span><span>:</span> <span>30</span><span>,</span>
                    <span>color</span><span>:</span> <span>new</span> <span>echarts<span>.</span>graphic<span>.</span>LinearGradient</span><span>(</span>
                        <span>0</span><span>,</span> <span>0</span><span>,</span> <span>0</span><span>,</span> <span>1</span><span>,</span> <span>[</span><span>{</span>
                                <span>offset</span><span>:</span> <span>0</span><span>,</span>
                                <span>color</span><span>:</span> <span>'#00feff'</span>
                            <span>}</span><span>,</span>
                            <span>{</span>
                                <span>offset</span><span>:</span> <span>0.5</span><span>,</span>
                                <span>color</span><span>:</span> <span>'#027eff'</span>
                            <span>}</span><span>,</span>
                            <span>{</span>
                                <span>offset</span><span>:</span> <span>1</span><span>,</span>
                                <span>color</span><span>:</span> <span>'#0286ff'</span>
                            <span>}</span>
                        <span>]</span>
                    <span>)</span>
                <span>}</span>
            <span>}</span><span>,</span>
            
        <span>}</span>
    <span>]</span>
<span>}</span>

<span>// 渐变色需要取消tooltip的fomatter函数</span>
<span>delete</span> option<span>.</span>tooltip<span>.</span>formatter<span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div></details>
<h3 id="增加graphics元素"> 增加graphics元素</h3>
<p>前面介绍数组合并为深度合并，但是我们现在需要往graphic中新增元素，因为不能用之前的合并方案，而且需要直接往opiton.graphic中插入新的绘图元素
<div style="text-align:center">
<img src="../../assets/widget/cn-widget-opiotnjshook-demographic.png"  />
</div></p>
<div><pre><code><span>let</span> graphics <span>=</span> <span>[</span>
        <span>{</span>
            <span>type</span><span>:</span> <span>'image'</span><span>,</span>
            <span>id</span><span>:</span> <span>'logo'</span><span>,</span>
            <span>right</span><span>:</span> <span>20</span><span>,</span>
            <span>top</span><span>:</span> <span>20</span><span>,</span>
            <span>z</span><span>:</span> <span>-</span><span>10</span><span>,</span>
            <span>bounding</span><span>:</span> <span>'raw'</span><span>,</span>
            <span>origin</span><span>:</span> <span>[</span><span>75</span><span>,</span> <span>75</span><span>]</span><span>,</span>
            <span>style</span><span>:</span> <span>{</span>
                <span>image</span><span>:</span> <span>'http://echarts.baidu.com/images/favicon.png'</span><span>,</span>
                <span>width</span><span>:</span> <span>150</span><span>,</span>
                <span>height</span><span>:</span> <span>150</span><span>,</span>
                <span>opacity</span><span>:</span> <span>0.4</span>
            <span>}</span>
        <span>}</span>
    <span>]</span><span>;</span>

option<span>.</span>graphic <span>=</span> option<span>.</span>graphic <span>||</span> <span>[</span><span>]</span><span>;</span>
<span>// pushAll 非标准js语法，为系统扩展数组之后的方法</span>
option<span>.</span>graphic<span>.</span><span>pushAll</span><span>(</span>graphics<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br></div></div><h3 id="自定义tooltip"> 自定义tooltip</h3>
<p>该案例演示了通过es6语法、外部lodash函数库，结合echarts回调给出来的参数处理tooltip</p>
<div><pre><code>$$option <span>=</span> <span>{</span>
  <span>tooltip</span><span>:</span> <span>{</span>
    <span>formatter</span><span>(</span><span>params</span><span>)</span> <span>{</span>
      <span>let</span> name <span>=</span> params<span>[</span><span>0</span><span>]</span><span>.</span>name<span>;</span>
      <span>let</span> s <span>=</span> <span><span>`</span><span>&lt;div style="text-align: left"></span><span><span>${</span>name<span>}</span></span><span>`</span></span><span>;</span>
      _<span>.</span><span>chain</span><span>(</span>params<span>)</span>
          <span>.</span><span>each</span><span>(</span><span>p</span> <span>=></span> <span>{</span>
              <span>let</span> <span>{</span>seriesName<span>,</span> value<span>,</span> marker<span>}</span> <span>=</span> p<span>;</span>
              s <span>+=</span> <span><span>`</span><span>&lt;br/></span><span><span>${</span>marker<span>}</span></span><span>`</span></span><span>;</span>
              s <span>+=</span> <span><span>`</span><span><span>${</span>seriesName<span>}</span></span><span>: </span><span><span>${</span>value<span>}</span></span><span>`</span></span>
          <span>}</span><span>)</span>
          <span>.</span><span>value</span><span>(</span><span>)</span><span>;</span>
      <span>return</span> s<span>;</span>
    <span>}</span>
  <span>}</span>
<span>}</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br></div></div><h3 id="漏斗图中间数值-右边类目"> 漏斗图中间数值，右边类目</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230103142420.png" alt="" /></p>
<blockquote>
<p>ECharts原生配置不支持双标签，实现思路需要复制一个series用于标签配置</p>
</blockquote>
<div><pre><code><span>const</span> s <span>=</span> option<span>.</span>series<span>[</span><span>0</span><span>]</span><span>;</span>
<span>// 相同配置</span>
Object<span>.</span><span>assign</span><span>(</span>s<span>,</span> <span>{</span>
     <span>maxSize</span><span>:</span> <span>'50%'</span><span>,</span>
    <span>//  left: '20%',</span>
<span>}</span><span>)</span><span>;</span>

<span>// 复制一份之后不通用配置</span>
<span>const</span> s2 <span>=</span> _<span>.</span><span>cloneDeep</span><span>(</span>s<span>)</span><span>;</span>

Object<span>.</span><span>assign</span><span>(</span>s<span>.</span>label<span>,</span> <span>{</span>
    <span>formatter</span><span>:</span> <span>'{b}'</span><span>,</span>
    <span>padding</span><span>:</span> <span>[</span><span>5</span><span>,</span> <span>10</span><span>]</span><span>,</span>
    <span>backgroundColor</span><span>:</span> <span>'lightGrey'</span><span>,</span>
    <span>// align: 'right',</span>
    <span>position</span><span>:</span> <span>'right'</span><span>,</span>
<span>}</span><span>)</span><span>;</span>

Object<span>.</span><span>assign</span><span>(</span>s2<span>,</span> <span>{</span>
    <span>label</span><span>:</span> <span>{</span>
        <span>position</span><span>:</span> <span>'inside'</span><span>,</span>
        <span>color</span><span>:</span> <span>'white'</span><span>,</span>
        <span>formatter</span><span>(</span><span>params</span><span>)</span> <span>{</span>
            <span>let</span> <span>{</span>seriesName<span>,</span> name<span>,</span> value<span>,</span> data<span>}</span> <span>=</span> params<span>;</span>
            <span>const</span> <span>{</span> percent <span>}</span> <span>=</span> data<span>;</span>
            <span>return</span> <span><span>`</span><span><span>${</span>data<span>.</span>value<span>}</span></span><span>\n(</span><span><span>${</span>percent<span>}</span></span><span>%)</span><span>`</span></span><span>;</span>
        <span>}</span>
    <span>}</span>
<span>}</span><span>)</span><span>;</span>

option<span>.</span>series<span>.</span><span>push</span><span>(</span>s2<span>)</span><span>;</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br><span>9</span><br><span>10</span><br><span>11</span><br><span>12</span><br><span>13</span><br><span>14</span><br><span>15</span><br><span>16</span><br><span>17</span><br><span>18</span><br><span>19</span><br><span>20</span><br><span>21</span><br><span>22</span><br><span>23</span><br><span>24</span><br><span>25</span><br><span>26</span><br><span>27</span><br><span>28</span><br><span>29</span><br><span>30</span><br><span>31</span><br></div></div><h3 id="更多案例-陆续更新中"> 更多案例，陆续更新中...</h3>
]]></content>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
  <entry>
    <title type="html">图表设计</title>
    <id>http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/widget/</id>
    <link href="http://help.primeton.com/iData/5.4.5.0/zh-cn/manual/widget/widget/"/>
    <updated>2026-03-24T07:13:21.000Z</updated>
    <content type="html"><![CDATA[<h2 id="多维分析简单介绍"> 多维分析简单介绍</h2>
<h3 id="什么是维度-dimension"> 什么是维度(Dimension)</h3>
<p><strong>维度</strong>是数据分析中的分类和分组依据，用来描述数据的不同属性。它定义了分析的切入点和角度，维度具有以下特点:</p>
<ul>
<li><strong>描述性</strong>：维度通常表示“是什么”或“谁”，例如时间、地区、产品、客户等。</li>
<li><strong>离散性</strong>：维度值是离散的，例如，时间维度可能包括“2023年”、“2024年”等。</li>
<li><strong>层次性</strong>：维度可以具有多层次结构，例如时间维度可以分为“年 &gt; 季度 &gt; 月 &gt; 日”。</li>
</ul>
<p>在销售分析中，可能的维度包括：</p>
<ul>
<li><strong>时间维度</strong>：按年、季度、月、日查看。</li>
<li><strong>地区维度</strong>：按国家、省份、城市查看。</li>
<li><strong>属性维度</strong>：按类别、品牌、型号查看。</li>
</ul>
<hr>
<h3 id="什么是指标-measure"> 什么是指标(Measure)</h3>
<p><strong>指标</strong>是需要分析和衡量的核心数据或数值，用于描述“数量”或“表现”, 指标具有以下特点:</p>
<ul>
<li><strong>量化性</strong>：指标通常是数值类型的，表示某种业务的结果或属性。</li>
<li><strong>聚合性</strong>：指标通常可以通过计算（如求和、平均值、计数等）进行聚合。</li>
<li><strong>相关性</strong>：指标是与维度关联的，例如，每个维度值对应一定的指标值。</li>
</ul>
<p>在销售分析中，可能的指标包括：</p>
<ul>
<li><strong>销售额</strong>：表示每个时间段或地区的销售金额。</li>
<li><strong>销量</strong>：表示销售的商品数量。</li>
<li><strong>毛利润</strong>：表示利润的绝对金额。</li>
<li><strong>客户数量</strong>：表示购买产品的客户人数。</li>
</ul>
<hr>
<h3 id="维度与指标的关系"> 维度与指标的关系</h3>
<ul>
<li><strong>维度</strong>是分析的角度（“从哪个方面看数据”），比如时间、地区、产品。</li>
<li><strong>指标</strong>是分析的内容（“具体想看的数值”），比如销售额、销量、利润。</li>
</ul>
<p>维度和指标的关系可以类比为：</p>
<blockquote>
<p><strong>维度是指标的定语</strong></p>
</blockquote>
<ul>
<li>问题：“2023年每个季度的销售额是多少？”
<ul>
<li><strong>维度</strong>：时间（季度）。</li>
<li><strong>指标</strong>：销售额。</li>
</ul>
</li>
</ul>
<hr>
<h3 id="多维分析的典型应用"> 多维分析的典型应用</h3>
<p>在多维分析中，维度和指标结合使用，可以进行灵活的数据切片和聚合。</p>
<p>假设有一张销售数据表，包含以下字段：</p>
<ul>
<li><strong>时间</strong>：2024年1月、2024年2月……</li>
<li><strong>地区</strong>：北京、上海……</li>
<li><strong>产品</strong>：手机、电脑……</li>
<li><strong>销售额</strong>：数值型数据</li>
<li><strong>销量</strong>：数值型数据</li>
</ul>
<ol>
<li>
<p><strong>按时间查看销售额</strong></p>
<ul>
<li><strong>维度</strong>：时间</li>
<li><strong>指标</strong>：销售额</li>
</ul>
</li>
<li>
<p><strong>按地区查看销售额</strong></p>
<ul>
<li><strong>维度</strong>：地区</li>
<li><strong>指标</strong>：销售额</li>
</ul>
</li>
<li>
<p><strong>按时间和地区查看销量趋势</strong></p>
<ul>
<li><strong>维度</strong>：时间、地区</li>
<li><strong>指标</strong>：销量</li>
</ul>
</li>
</ol>
<h3 id="总结"> 总结</h3>
<ul>
<li><strong>维度</strong>：用于分类和分组，是分析的角度（如“时间”、“地区”、“产品”）。</li>
<li><strong>指标</strong>：用于衡量和计算，是分析的内容（如“销售额”、“利润”、“销量”）。</li>
<li><strong>多维分析的核心</strong>：通过不同维度组合来探索和分析指标的变化规律，为决策提供数据支持。</li>
</ul>
<hr>
<p>理解了多维分析理论之后，我们把理论付诸实践，怎么基于多维分析设计图表</p>
<div><p>多维数据可视化基本原理</p>
<p><strong>汇总类图</strong>以数据透视表(交叉表)为基础，按列(系列)或列映射到可视化图，请牢记这一点原则，后面的可视化设计之路会事半功倍。</p>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230518092214.png" alt="" /></p>
<p>点击顶部<code>自助分析</code>菜单进入自助式数据探索、图表设计模块</p>
<h2 id="查询数据"> 查询数据</h2>
<p>数据可视化首先要查询数据，可以从<strong>数据集查询</strong>，也可以直接从数据源以**即席查询(ad-hoc)**的形式查询数据</p>
<h3 id="已有数据集"> 已有数据集</h3>
<p>点击<code>新建图表</code>，弹出<code>编辑查询</code>对话框，读取模式默认为<code>数据集</code>，可以通过下拉菜单选择数据集或者点击下拉框<code>右侧文件夹</code>从资源目录选择数据集模型</p>
<h3 id="即席查询-ad-hoc"> 即席查询(ad-hoc)</h3>
<p>弹出<code>编辑查询</code>对话框, 点击切换为查询获取数据之后，选择要查询的<strong>JDBC 数据源</strong>需要填写读取数据对应的<code>查询语句</code><em>SQL或者是其他数据源对应的查询</em>，真正实现<strong>Type in SQL, Get Chart 的体验</strong></p>
<p><img src="http://qiniu.ibidemo.cn/图表设计-编辑查询.png" alt="" /></p>
<details><summary>AD-HOC支持查询、数据变更维持数据集模型与图表维度配置</summary>
<p>常规数据集变更、查询变更会改变查询返回列，因此更新完查询之后需要清空掉原来的模型与图表配置，但是不排除有时候需要做查询变更，比如只改变查询条件、改变某个数据列的计算方式，这些变更不会影响查询列，进更新查询功能可以保留模型与图表配置，避免每次变更重复拖拽<br>
<img src="http://qiniu.ibidemo.cn/picgo/20210512143328.png" alt="" /></p>
<blockquote>
<p>值得注意的是使用该功能需要保证查询返回列不变，否则引起查询错误，如配置中保留了新查询中不存在的列</p>
</blockquote>
</details>
<h2 id="功能区介绍"> 功能区介绍</h2>
<p><img src="./../../assets/widget/cn-configwidget.png" alt="" /></p>
<h3 id="图表列表"> 图表列表</h3>
<p>点击<code>打开图表</code>, 弹窗展示已保存图表文件树</p>
<ul>
<li>显示已保保存的图表</li>
<li><strong>右键</strong>点击功能键可以查看文件基本信息、复制、编辑、重命名、删除</li>
<li>文件夹右键支持新建子文件夹</li>
<li>删除也一样只能删除单个图表, 或者空文件夹, 如果文件夹里面有其他类型资源, 则删除文件夹操作会被阻止</li>
<li><strong>鼠标双击图表</strong>进入编辑状态</li>
</ul>
<h3 id="查询配置"> 查询配置</h3>
<p>点击<code>编辑查询</code>, 弹窗显示查询配置</p>
<ul>
<li>用户可在<code>数据集</code>与<code>即席查询</code>之间切换
<ul>
<li><code>即席查询</code>: 一次性查询分析, 不可重用, 没有模型的概念, 所有查询出来的字段即可用做维度也可以用做指标，在<code>设计区</code>内的字段不能在维度与指标之间拖拽</li>
</ul>
</li>
<li>查询区默认为选择已经保存的数据集(Cube)</li>
<li>在数据集开启允许图表级别表达式之后，可以在新增临时表达式</li>
<li>点击确认之后, 系统会去获取查询配置对应的字段或者模型, 注意: 不会真正去读取数据, 真实数据会在图表配置完成之后点击预览时获取</li>
</ul>
<h3 id="模型区"> 模型区</h3>
<ul>
<li>模型区的<strong>层级结构</strong>(Hierarchy)需要在数据集设计页面提前定义，否则只能看到原始的可选列属性</li>
<li>模型包含 4 个一级分类节点
<ul>
<li><strong>1. 维度列(Dimensions)</strong>
<ul>
<li>维度列常用数据分组聚合</li>
<li>层级下面的列在支持下钻的图表组件下面可以进行下钻/上卷操作
<div style="text-align:center">
<img src="http://qiniu.ibidemo.cn/picgo/table-drill.gif"/>
</div></li>
</ul>
</li>
<li><strong>2. 指标列(Measures)</strong></li>
<li>指标拖拽到指标栏之后可以设置汇总方式
<div style="text-align:center">
<img src="http://qiniu.ibidemo.cn/picgo/20230518084812.png" width="400" />
</div></li>
<li>指标拖拽到维度做 <strong>分桶/直方图</strong> 统计
指标拖拽到维度之后，默认对指标做类型为直方图的分桶配置<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220125082734.png" alt="" /><br>
在不指定指标最大/最小与分桶信息的情况下，默认按0-100，20分桶做统计计算，可以点击<code>获取字段统计</code>查询该指标字段的准确统计范围</li>
<li><strong>3. 可选表达式(Calulated Measures)</strong>
<ul>
<li>预先定义： 数据集预先定义只能使用，不能修改；数据集上对指标进行修改会影响图表；数据集中删除已经在图表中使用的指标会导致图表运行失败</li>
<li>如果只在单列上的聚合操作可以不使用计算维度, 如: sum(a)</li>
</ul>
</li>
<li><strong>4. 可选过滤器(Filter)</strong>
<ul>
<li>预先定义： 数据集预先定义只能使用，不能修改，不能查看具体内容</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="设计区"> 设计区</h3>
<ul>
<li><strong>图表类型切换</strong>：不同类型的图表对于输入有不同的限制，鼠标放置在图表类型上面有详细提示，点亮状态下为理论可切换状态</li>
<li>通过拖拽至设计区输入栏进行 OLAP 设计</li>
<li>功能按钮
<ul>
<li><strong>预览</strong></li>
<li><strong>预览查询</strong>：用于查看、调试数据源聚合查询下动态查询脚本</li>
<li><strong>保存</strong>:</li>
<li><strong>另存为</strong>: 保存为一个新的图表</li>
<li><strong>重置</strong>：恢复到最编辑之前最原始的操作状态</li>
</ul>
</li>
</ul>
<h3 id="图表设计快捷操作"> 图表设计快捷操作</h3>
<p>点击节点, 如果对应目标栏还允许添加新的配置, 将快捷添加到目标栏</p>
<ul>
<li>点击<code>维度节点</code>: 节点被添加到<code>行维</code></li>
<li><code>ctrl</code> + 点击<code>维度节点</code>: 节点被添加到<code>列维</code></li>
<li><code>alt</code> + 点击<code>维度节点</code>: mac 系统用户可以用 alt/option 替换 ctrl + 点击操作</li>
<li>点击<code>指标列</code>/<code>表达式</code>: 节点会被添加到指标栏</li>
<li>点击<code>过滤器节点</code>: 节点被添加到过滤</li>
</ul>
<h2 id="基本原理-必读"> 基本原理<sup>(必读)</sup></h2>
<h3 id="数据透视"> 数据透视</h3>
<p><strong>定义</strong>：数据透视是一种通过 “行、列、值” 的灵活重组，对数据进行汇总、筛选、排序的快速分析工具，核心是 “动态重组数据视图”。</p>
<p><strong>核心特点：</strong></p>
<p>操作对象：主要针对二维表格（如 Excel 工作表、数据库表），通过 “<strong>拖拽字段</strong>” 实现维度切换。</p>
<blockquote>
<p>例如：一张包含 “日期、地区、产品、销售额” 的表格，可将 “地区” 拖到行、“产品” 拖到列、“销售额” 拖到值区域，快速得到各地区各产品的销售额汇总表。</p>
</blockquote>
<p><strong>核心功能</strong>：</p>
<ul>
<li><strong>汇总计算</strong>：自动完成求和、平均值、计数等基础运算；</li>
<li><strong>动态调整</strong>：随时调换行 / 列维度（如将 “日期” 替换 “地区”），或筛选特定数据（如只看 “2023 年 Q1”）；</li>
<li><strong>可视化呈现</strong>：通常以交叉表（行列交叉的表格）形式展示结果。</li>
</ul>
<h3 id="交叉表组成"> 交叉表组成</h3>
<table>
<thead>
<tr>
<th style="text-align:left">组成</th>
<th style="text-align:left">图表设计栏</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">行表头</td>
<td style="text-align:left">行维栏放置的胶囊</td>
</tr>
<tr>
<td style="text-align:left">列表头</td>
<td style="text-align:left"><strong>列维栏</strong>放置的胶囊 与 <strong>值栏</strong>胶囊的组合</td>
</tr>
<tr>
<td style="text-align:left">中间交叉处对应的聚合数据</td>
<td style="text-align:left">交叉表头查询条件的数据集合+聚合函数</td>
</tr>
</tbody>
</table>
<ul>
<li>对应关系如下图所示，交叉表的表头合并只有在表头排序正确的情况下才能正确合并</li>
</ul>
<blockquote>
<p>开始图表设计之前请先理解此处的对应关系。后续所有汇总数据图对应的数据都和交叉表相关</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141006567.png" alt="" /></p>
<h2 id="维度过滤-切片"> 维度过滤/切片</h2>
<ul>
<li>放置在<strong>行维</strong>与<strong>列维</strong>上面的<strong>胶囊</strong>点击过滤按钮可以进行数据过滤</li>
<li>也可以放置<strong>维度</strong>在<strong>过滤</strong>栏单纯对数据进行过滤</li>
</ul>
<div><p>注意</p>
<p>为了防止某个维度下面成员数量过大，或者误把连续值如时间戳之类的维度不经处理直接放置在维度框，引起服务端数据源查询压力过大，所以在加载维度成员之前加入了确认操作,
服务端对于维度成员的获取数量也做了控制，默认配置下最大返回2000条记录，管理员可通过修改<code>dimension.member.resultLimit</code>配置调整限制</p>
</div>
<div style="text-align:center">
  <img src="../../assets/widget/filter.png"  />
</div>
<div style="text-align:center">
  <img src="../../assets/widget/Range_Filter.png"  />
</div>
<ul>
<li>TOP N 展示</li>
<li>支持输入值域范围比较</li>
</ul>
<h2 id="排序"> 排序</h2>
<h3 id="维度排序"> 维度排序</h3>
<p>点击维度胶囊排序按钮选择维度排序方式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141037816.png" alt="" /></p>
<h3 id="维度自定义排序"> 维度自定义排序</h3>
<p>除了升序,降序,不排序之外, 还可以对维度成员自定义任意顺序排列</p>
<div style="text-align:center">
  <img width="300" src="http://qiniu.ibidemo.cn/picgo/20230213145929.png"  />
</div>
<p>选定参与排序的维度成员,其余的维度成员, 按照默认升序或者降序排列</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213150140.png" alt="" /></p>
<p>效果如下:
指定过顺序的成员被排到了最前面</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230213150258.png" alt="" /></p>
<p>自定义排序参照支持查询参照</p>
<p>该功能用来解决不同数据集之间公共维度统一自定义排序问题</p>
<div><p>场景</p>
<p>某销售型企业，有100种产品，产品维度展示需要自定义排序，产品维度几乎在每个数据集中都需要用到，当产品维度有新增或排序规则修改，都需要手工调整
所有图表的产品排序规则</p>
</div>
<div><p>查询参照</p>
<ul>
<li>使用排序参照，单点维护好产品排序规则，一次配置所有引用了排序参照的图均能生效；</li>
<li>配合查询模板中的变量功能甚至可以做到给不同的用户分配不同的排序规则</li>
</ul>
</div>
<p><img src="http://qiniu.ibidemo.cn/picgo/20221108174743.png" alt="" /></p>
<h3 id="维度按指标排序v2-3"> 维度按指标排序<sup>v2.3</sup></h3>
<p><strong>在维度自定义窗口中打开排序表达式，让维度按表达式返回结果排序</strong></p>
<p>支持按表达式对维度进行动态排序，可基于指定的计算指标（如销售额、利润、增长率等）对维度成员进行汇总计算，并按结果自动排序。<br>
<strong>该功能突破了维度排序只能基于维度本身排序的限制，实现数据驱动的智能排序</strong>，帮助用户快速识别关键类别，提升分析效率与可视化表达的洞察力。</p>
<ul>
<li>行维度按表达式排序</li>
<li>列维度按表达式排序</li>
</ul>
<h4 id="案例1-按行汇总排序"> 案例1: 按行汇总排序</h4>
<p>在最后一个行维配置自定义排序表达式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508120941261.png" alt="" /></p>
<p>父维度有排序设置优先按父维排序</p>
<h4 id="案例2-列维按列汇总排序"> 案例2：列维按列汇总排序</h4>
<p>在最后一个列维配置自定义排序表达式</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508120952241.png" alt="" /></p>
<h4 id="案例3-父级行维按指定列指标排序"> 案例3: 父级行维按指定列指标排序</h4>
<p>通过query函数查询排序指标集合，再汇总作为维度排序依据， 下图中对四个父<code>区域</code>排序，依赖其中某一指标列进行了计算排序</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508111655769.png" alt="" /></p>
<div><pre><code><span>const</span> subset <span>=</span> <span>query</span><span>(</span>
        <span>'利润'</span><span>,</span> <span>// 查询利润指标列</span>
        <span>[</span>
          <span>rowFilters</span><span>(</span><span>)</span><span>,</span> <span>// 当前所有的行维信息过滤器，如: `区域`='中南'过滤</span>
          <span>eq</span><span>(</span><span>'细分'</span><span>,</span> <span>'公司'</span><span>)</span> <span>// 查询`细分`=='公司'</span>
        <span>]</span>
<span>)</span><span>;</span>
<span>sum</span><span>(</span>subset<span>)</span><span>;</span> <span>// query返回的数组汇总求和作为区域维度的排序依据</span>
</code></pre>
<div><span>1</span><br><span>2</span><br><span>3</span><br><span>4</span><br><span>5</span><br><span>6</span><br><span>7</span><br><span>8</span><br></div></div><h3 id="指标排序"> 指标排序</h3>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141053923.png" alt="" /></p>
<p>指标字段也可以设置排序， 需要注意以下几点</p>
<ul>
<li>在有列维时指标被拆解为多列，只能按首列排序</li>
<li>维度有排序设置时，维度的排序设置优先级大于指标排序，如上图中日期维度设置为不排序</li>
</ul>
<blockquote>
<p>从交叉表的形式可以看出，在值排序与行表头排序是冲突的，<strong>行排序、各值排序有且仅有一个生效</strong></p>
</blockquote>
<h2 id="日期维度"> 日期维度</h2>
<ul>
<li>对于日期类型维度系统会自动判断数据集返回列类型是否为日期或时间戳</li>
<li>日期类型的维度字段使用的时候会自动调用该数据源对应的日期转字符串函数输出可读日期格式字符串</li>
<li>日期筛选的时候会调用字符串转日期进行过滤</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/20230104160952.png" alt="" /></p>
<h3 id="日期粒度切换"> 日期粒度切换</h3>
<ul>
<li>配置选择行/列维中日期维度字段之后可以在图上切换日期粒度</li>
</ul>
<p><img src="http://qiniu.ibidemo.cn/picgo/日期粒度切换.gif" alt="" /></p>
<h3 id="日期维度数据补全v2-3"> 日期维度数据补全<sup>v2.3</sup></h3>
<p>日期维度数据补全支持年、月、日、周、季度的日期补全</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508141051133.png" alt="" /></p>
<p><strong>业务场景:</strong></p>
<p>在业务数据分析中，原始数据常因采集不全或系统问题导致<strong>日期断层</strong>，例如某电商平台在促销期间部分订单未及时录入，造成日销售数据缺失。若不处理，将导致趋势图出现日期跳跃、从而忽略缺失日期数据，严重影响分析准确性。</p>
<p><strong>功能特点:</strong></p>
<p>此次新增的日期维度补全功能，可以根据用户设定的日期最小时间粒度（年、季度、月、周、日），并生成完整连续的时间序列。系统会将缺失日期自动填充，并对空值进行合理处理（如置零或插值），确保时间轴上无断裂。</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/202508111456605.png" alt="" /></p>
<h2 id="定制维-衍生维"> 定制维/衍生维</h2>
<p>我们在实际使用过程中, 经常会遇到数据开发工程师给到分析师或者终端用户的数据集模型, 当中某些维度分组不能满足用户的实际需求;</p>
<blockquote>
<p>如: 原有模型中有<code>年-&gt;月-&gt;日</code>, 但是分析师想要对数据进行半年分组或者季度分组, 在此之前的解决方案只能修改数据集, 增加相应维度<br>
有了 <code>定制维/衍生维</code>功能之后, 在图表设计界面, 用户可以不用繁琐的重复要求修改维度定义, 替代的是在原有的维度上面可以随意进行自己需要的维度分组;</p>
</blockquote>
<div style="text-align:center">
  <img src="../../assets/widget/cn-custom-dim.png"  />
</div>
<p>这里的维度定制操作流程与数据集里面维度定制流程一样, 区别在于:</p>
<div style="text-align:center">
  <img src="../../assets/dataset/cn-custom-dim-list.png"  />
</div>
<ul>
<li>图表级别的维度定制不会影响整个模型</li>
<li>图表设计的维度定制暂不支持脚本定制</li>
<li>如果一个维度已经在数据集里面做过维度定制操作, 则在图表设计界面不能再次做定制</li>
</ul>
<div style="text-align:center">
  <img src="../../assets/widget/cn-custom-dim-icon.png"  />
</div>
<h2 id="指标拖拽到维度做直方图统计"> 指标拖拽到维度做直方图统计</h2>
<p>指标拖拽到维度之后，默认对指标做类型为直方图的分桶配置<br>
<img src="http://qiniu.ibidemo.cn/picgo/20220125082734.png" alt="" /><br>
在不指定指标最大/最小与分桶信息的情况下，默认按0-100，20分桶做统计计算，可以点击<code>获取字段统计</code>查询该指标字段的准确统计范围</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/hist.gif" alt="" /></p>
<h2 id="指标用于过滤"> 指标用于过滤</h2>
<blockquote>
<p>从1.5.1开始指标过滤只能在指标配置上进行，而且过滤的数据仅为在图表中使用的汇总记录, 现在用户可以单独的在数据层面对任意指标字段进行汇总前、汇总后过滤操作，让分析功能能加灵活</p>
</blockquote>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220125085419.png" alt="" /></p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220125085345.png" alt="" /></p>
<h2 id="变量设置"> 变量设置</h2>
<h3 id="数据集配置没有声明变量"> 数据集配置没有声明变量</h3>
<p><strong>使用变量不需要提前声明</strong>，在数据集没有声明变量，但是存在变量使用，可以自行添加变量并赋值</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20220125104757.png" alt="" /></p>
<h3 id="数据集有声明变量"> 数据集有声明变量</h3>
<p>数据集设计阶段的<strong>变量声明之后</strong>，打开变量赋值窗口会自动加载声明过的变量以及默认值， 在自助分析页可以便捷的为变量赋值，输入框区分日期、日期范围、数组、字符等</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/20231121085040.png" alt="" /></p>
<div><p>注意 对于数据集中声明为动态值的变量在自助分析阶段</p>
<p>打开变量赋值，通过输入框设定为常量之后，保存图表该变量将失去动态属性，如果要保持变量动态性可以选择下列操作中的任意一种:</p>
<ol>
<li>不打开变量赋值窗口设定变量值，变量保持为动态值</li>
<li>打开变量赋值窗口，删除变量赋值，并确认，变量保持为动态值，<strong>该操作在第二次打开变量赋值窗口时被删除的声明变量会再次出现</strong></li>
<li>打开变量赋值窗口，修改变量类型为数组或其他普通数据框，输入自定义变量表达式，变量保持为动态值
<img src="http://qiniu.ibidemo.cn/picgo/20231121085554.png" alt="" /></li>
</ol>
</div>
<h2 id="图表维度动态裁剪"> 图表维度动态裁剪</h2>
<p>维度动态裁剪是在查询之前根据用户设定条件，动态的移除满足条件的维度配置，从而实现动态颗粒度汇总，使用方式如下：</p>
<ol>
<li>配置维度在满足设定条件时，配置被裁剪(移除配置)，如下图配置，行维默认包含：<code>年</code>,<code>月</code>,<code>日</code>三个维度，通过裁剪实现，[年]，[年-月]，[年-月-日]三种不同颗粒度查询</li>
</ol>
<div>
<img src="http://qiniu.ibidemo.cn/picgo/20240506181219.png" style="width: 100%">
</div>
<ol start="2">
<li>分别配置[月]维度在fmt变量为y时被裁剪, [日]维度在fmt变量为y或M时被裁剪</li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240506181409.png" alt="" /></p>
<ol start="3">
<li>看板上增加单选参数，并绑定到fmt环境变量，手工添加选项，并关闭<code>显示选项值</code></li>
</ol>
<p><img src="http://qiniu.ibidemo.cn/picgo/20240506181836.png" alt="" /></p>
<ol start="4">
<li>最终效果</li>
</ol>
<p>可以看到在环境变量变化时，维度被动态裁剪，实现不同日期粒度的汇总</p>
<p><img src="http://qiniu.ibidemo.cn/picgo/dim_slice.gif" alt="" /></p>
]]></content>
    <category term="guide"/>
    <contributor>
      <name/>
    </contributor>
    <published>2026-03-24T07:13:21.000Z</published>
  </entry>
</feed>