本帖最后由 Ellia.Duan 于 2024-5-29 16:18 编辑
您好,我们经过调研,发现有一个可以优化的公式,优化后getValue耗时缩短为12秒,如下图所示:
具体优化过程是:
在“总裁办计薪_绩效考核异常_线下数据源”sheet中 在K1单元格输入公式“=A:A&D:D”
然后将您的代码中194行代码
- //(column = columnArray[37]).setFormula2("=IFERROR(ROUND(@IF(OR(AND(LEFT(J2,7)=N2,--RIGHT(J2,2)>15),@XLOOKUP(C2&N2,总裁办计薪_绩效考核异常_线下数据源!A:A&总裁办计薪_绩效考核异常_线下数据源!D:D,总裁办计薪_绩效考核异常_线下数据源!C:C,"")="否"),W2,XLOOKUP(C2&N2,总办计薪绩效金额0412!B:B&总办计薪绩效金额0412!E:E,总办计薪绩效金额0412!P:P))/O2*P2,2),0)");
复制代码
替换为
- (column = columnArray[37]).setFormula2("=IFERROR(ROUND(@IF(OR(AND(LEFT(J2,7)=N2,--RIGHT(J2,2)>15),@XLOOKUP(C2&N2,总裁办计薪_绩效考核异常_线下数据源!K:K,总裁办计薪_绩效考核异常_线下数据源!C:C,"")="否"),W2,XLOOKUP(C2&N2,总办计薪绩效金额0412!B:B&总办计薪绩效金额0412!E:E,总办计薪绩效金额0412!P:P))/O2*P2,2),0)");
复制代码 替换的内容是
这样子做的结果是:
每次IFERROR计算,将不会重新对XLOOKUP中数百万行数据重新计算,新增的K列相当于是一个缓存。
关于类似公式,也可以这样子处理
关于其他优化,我们还在调研中,有结论继续会发给您。
|