中国式报表(原复杂报表)常见问题
1. 实际有数据,为什么G_LOOKUP函数匹配数据为0?
原因一:视图2中的数据按照视图1的字段进行匹配时,可能是因为两个视图中匹配字段的字段类型不一致。
解决方案:保持不同视图里同一字段类型一致。转换类型需要新建计算字段用函数转换才能真正生效。
? 案例1(点击展开)
公式:=G_LOOKUP(9,明细,可用数量,物料编码
,仓库)解决方案:
将视图1的物料编码用函数转换成文本类型字段,数据就可以正常匹配上了。
原因二:G_LOOKUP公式里查询条件使用了double/float格式的数值。
解决方案:不建议把double/float格式的数值当做维度和查询条件,因为存在精度问题,可能无法正确匹配。场景需要的话,建议使用函数限定小数位数,并转化为文本格式。
原因三:LOOKUP公式里查询条件使用了数值栏的聚合计算结果。G_LOOKUP/G_LOOKUPEXP 函数里查询条件暂时只支持使用维度栏的字段。
解决方案:把用作查询条件的数值字段放入维度栏,数值需要做计算的话建议在ETL里计算好或者在卡片里使用窗口函数计算。
?案例2(点击展开)
使用高级计算-排名功能计算得到了每个大区、每个商品分类销售数量的TOP 10,让后在模板里把「排名」当做查询条件之一。
公式:=G_LOOKUPEXP(9,view1,大区,view1,商品名称,商品分类
,排名,大区:C1)解决方案:在数据准备阶段用窗口函数计算好排名,把「排名」放入维度栏。
2. 用 sum() 求列总计,有数据的情况下为什么计算结果显示为0?
原因:当前列引用的字段是不是数值类型(例如文本类型),无法求和。
解决方案:在视图里用函数把字段转换为数值类型,并放入数值栏。
3. 某列数据调整为数字格式,保存后还是会变成自动格式,展示的数字部分为科学计数法是什么原因?
原因:G_LOOKUP公式里求和的字段是文本格式,对文本求和并设置格式,计算结果不准确,格式也会不生效;数值长度过长时,Excel组件会自动显示为科学计数法。
解决措施:在视图里用函数转换字段格式!!!例如 cast([字段] as double)
4. 能否把复杂报表里的0或者null值替换为其他符号?
答:4.8级以上版本:报表预览界面,点击展开右侧「特殊值」,可以配置多条替换规则。要注意替换规则(可点击添加后的图标查看)。4.8以下版本:仅支持null值替换。
? 示例(点击展开)
5. 数据怎么设置千位分隔符?
本地编辑模式:在Excel里设置格式后上传模板即可。
在线编辑模式:
1)选中需要设置的单元格/公式;
2)表头选择“自定义格式”-“更多数字格式”,选择所需数字格式,点击确定。
?步骤示例
提示:1)在线编辑模式下,目前具有千位分隔符格式的数值不支持同时显示为货币格式“¥...”;
2)千分位分隔符的功能在4.2.0及以上版本可用。
6. 为什么复杂报表数据显示#DIV/0?
原因:当分母为0时,会出现错误而返回#DIV/0!\ 解决方案:可以用excel自带的if(iserror())函数替换。比如:=G_CELLCALCEXP(if(iserror((B{r}-C{r})/B{r}),"--",(B{r}-C{r})/B{r}))
7. 为什么从工具栏里增加或减少小数位数不生效?
原因:单元格默认格式为“自动”,此时不支持调整小数位数。
解决方案:手动修改为带小数点的格式(例如数字、百分比、货币)后再调整小数位数。
8. 派生表是什么意思?
答:派生表 ( 即 Dynamic Table ),即从原表选取进行纵向扩展的字段派生出新的一个表并自动进行排序和去重。默认升序排列,且不可调整排序方式。相当于在卡片里把字段放入维度栏。
原生公式与派生公式生成的报表预览对比:
9. 为什么小计公式不生效?
可能原因1:小计引用的范围字段所在的单元格,动态属性没有设置“分组”方式。
解决方案:给小计范围字段所在的单元格设置分组方式,有3种分组方式,一般常用的为“合并单元格”。
【实际场景案例】
这里小计范围字段为“物料编码”,即按照“物料编码”分组求和,那么A3单元格的“物料编码”动态属性必须勾选“分组”。
10. 横向扩展后列数为什么比期望列数多?
原因1:多行表头同时扩展、或者多列数据交替扩展时,动态属性里的“不额外添加行列数”没有勾选,导致多个单元格公式重复扩展。
解决方案:除了最后一个横向扩展公式,其他公式动态属性需要勾选“不额外添加行列数”。具体请参考 不额外添加行列数的解释和使用场景 。
原因2:派生公式里派生表使用不当,主要有2方面:1)同一列的不同单元格里的公式没有使用同样的派生表,导致每个公式扩展的列数不一致;2)错误使用了double数值、timestamp日期时间等字段当做派生表字段,导致扩展列数过多。
解决方案:1)同一列里的公式都使用同样的派生表;2)派生公式里使用文本string、整数int类型字段来做派生表。
原因3:不需要横向扩展的地方使用了派生公式。
解决方案:使用不带派生表的公式,或者手动创建只有一个值的派生表并使用。
11. 不想让行总计(G_COLTOTAL)、列总计(G_GRANDTOTAL)横向扩展,怎么实现?
解决方案1:行总计(G_COLTOTAL)、列总计(G_GRANDTOTAL)公式里必须引用派生表,不需要横向扩展时,可以在任一视图里新建一个固定字段,内容不限,然后拖到维度栏;然后总计公式了使用这个视图和字段做派生表。参考下图。这个方式对所有派生公式(例如G_LOOKUPEXP)都适用。
解决方案2:不使用总计公式,用sum()等其他公式代替,请参考 复杂报表列总计的不同计算方式。
12. 复杂报表,冻结窗格为什么无法冻结到扩展的行和列?
原因:冻结窗格、冻结行列是物理冻结,冻结范围是固定的,无法随着行列扩展动态变化。
解决方案:建议仅冻结表头部分。
13. 页面筛选后,复杂报表部分单元格显示错误值#NAME,不筛选正常,预览页面也正常,是什么原因?
案例:
原因:左侧维度纵向动态扩展,随着筛选条件变化,行数是不固定的,但是这个案例里格间计算公式=G_CELLCALCEXP({c}{1}+{c}{2}+{c}{3}+{c}{4}+{c}{5}) 要求必须纵向扩展5行才能准确计算,一旦行数不一致,计算结果就会不准确或者无法计算和显示。
解决方案:维度固定的情况下建议改用固定表头;维度不固定时,建议修改求和方式,或者修改展示样式。更多求和计算方式请参考 复杂报表列总计的不同计算方式 。
14. 多次横向扩展,为什么行总计(G_COLTOTAL)计算结果错误?
原因:行总计(G_COLTOTAL)、列总计(G_GRANDTOTAL)公式里需要指定计算范围,第一次动态扩展时,计算范围的初始位置是正确的,动态扩展后计算的范围也是准确的;但是从第二次扩展开始,要计算的范围已经发生动态变化,但系统无法识别变化后的范围,依然还是按照公式里的范围来计算,导致计算错误。
解决方案:
1) 把多次类似扩展合并为一个扩展,行总计都放在最后面。具体请参考 复杂报表行总计实现方式。
案例1:(点击展开)
2) 如果行总计需要分别跟在每次扩展后面,或者多次扩展列数不一致,那从第二次扩展开始,不能使用行总计(G_COLTOTAL)、列总计(G_GRANDTOTAL)公式,建议使用G_LOOKUP/G_LOOKUPEXP/SUM() 来计算行总计和列总计。
案例2:(点击展开)
解决方案:
15. 复杂报表如何带参数跳转到其他仪表板页面?
答:虽然复杂报表卡片本身不支持【跳转】设置,但是可以通过给维度字段设置【显示为超链接】的方式,实现携带当前维度信息跳转目标页面。
解决方案:
1) 确保目标页面有可以传参数的筛选器; 复制目标页面的链接,以及筛选器的id;
2) 在复杂报表的数据准备界面,对要设置跳转的维度字段设置【显示为超链接】,拼接出目标仪表板页面带筛选条件的url;在复杂报表中拖入该字段即可。参数拼接方式请参考 页面URL添加条件参数。
3)如果需要携带多个维度信息跳转,比如同时携带[大区]和[商品分类]的维度信息跳转目标页面,建议在视图中新建计算字段,把2个筛选器id和选项拼接到一起(也可以直接把整个URL拼接好)。参考下图。
16. 模板上公式较多,再次编辑后保存不上了是怎么回事?
可能原因:前端对模板大小的限制为10MB,超过就无法保存。
解决方案:5.9版本模板限制改为30M,可以升级5.9;优化模板设计,尽量不要写太多公式,占用过多单元格。