在很多查询模板中,我们经常会直接在模板中输入excel公式,比如,查询出业务日期和当天日期后,可以用公式直接去计算间隔天数,但也有一些比较特殊的情况,无法在设计时输入excel公式,这时候就需要对excel计算表达式做预处理,再把处理好的excel公式填充到查询表的对应位置,
需求描述
如下图,这是冶炼厂熔铸车间的一个查询模板,需求见截图描述。
实现步骤:
1、如图中数据所示,区域、部位、总次数和不合格数是有记录数据的,而合格率和汇总需要计算显然在记录数据中是没有的,那就需要事先做好区域、部位、统计项的配置表,查询表新建时先把配置项内容先提取过来。
2、把统计数按行列匹配提取到表格中,这2步提取完成,应该就是上图中的样子。
3、在辅助表中利用提取公式拼接生成excel公式。
F列填充内容:
CASE
WHEN 本报表.[示例1_扩展表].[no]%3 = 0
THEN '=round((F' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+ '-F' +
cast(本报表.[示例1_扩展表].[no]-1 as varchar)+ ')/F' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+
'*100,2)&"%"'
END
G列填充内容:
CASE
WHEN 本报表.[示例1_扩展表].[no]%3 = 0
THEN '=round((G' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+ '-G' +
cast(本报表.[示例1_扩展表].[no]-1 as varchar)+ ')/G' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+
'*100,2)&"%"'
END
H列填充内容:
CASE
WHEN 本报表.[示例1_扩展表].[no]%3 = 0
THEN '=round((H' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+ '-H' +
cast(本报表.[示例1_扩展表].[no]-1 as varchar)+ ')/H' +
cast(本报表.[示例1_扩展表].[no]-2 as varchar)+
'*100,2)&"%"'
ELSE '=F' + 本报表.[示例1_扩展表].[no] + '+' + 'G' + 本报表.[示例1_扩展表].[no]
END
4、填充公式
统计数1填充内容:
CASE
WHEN 本报表.[示例1_扩展表].[no]%3 = 0
THEN 本报表.[示例1公式_扩展表].[F列公式]
ELSE 本报表.[示例1_扩展表].[统计数1]
END
统计数2填充内容:
CASE
WHEN 本报表.[示例1_扩展表].[no]%3 = 0
THEN 本报表.[示例1公式_扩展表].[G列公式]
ELSE 本报表.[示例1_扩展表].[统计数2]
END
辅助表提取结果截图:
需要注意的是no列中的序号需要和设计模板中的行号保持一致,所以这个no不是从1开始而是4
小结:
必要的时候,设计模板中需要辅助字段或是辅助表过渡处理,我们可以把辅助过渡的这些字段或表看成是编程中的变量,只是表现方式不同而已,本示例只是展示了该查询需求的其中一种解决方式,也可以用其他方式来处理,我们的目标无外乎是分析解决用户需求,如果您有更好的处理本案方式,可以去官网fine友分享中分享讨论。
以上就是本次的分享内容,如果您对我们的冶炼行业熔铸车间特殊查询格式的实现感兴趣,或希望了解更多其他应用技巧,欢迎留言告诉我们。
相关文章
- 原文地址 教程 | 冶炼行业熔铸车间特殊查询格式的实现↗
#Excel公式生成#组合生成#辅助表
请登录后查看回复内容