1. 函數作用
報表中,若使用到複雜的FR腳本表達式,如:=if (很長很長的公式 > 0,執行語句 1(很長很長的公式),執行語句 2(很長很長的公式)),首先想到的是:将很長很長的公式先放在一個單元格(如:A1)中,然後在另一個單元格中,輸入=if(a1>0, 執行語句1(a1), 執行語句2(a1))。對於這樣的很長公式,一般公式中還會有部分内容是一些其他的簡單運算,若再使用單元格去求算一下,最終求算最終結果時就得引用多個單元格。這樣的賦值方式,不但多占用空間内存使得重複計算,其性能往往也不是很好。據此 FR 已增加 LET 公式,可将其很長的公式直接賦值,且可直接使用此公式求解最終結果(複雜的腳本表達式),還可提高其性能。
2. 使用說明
2.1 LET()函數說明
LET(變量名,變量值,變量名,變量值,...,表達式):局部變量賦值函數,參數的個數 N 必須爲奇數, 最後一個是表達式,前面是 N-1(偶數)爲局部變量賦值對。
變量名:必須是合法的變量名,以字母開頭,可包括字母,數字和下劃線。
表達式:根據其前面的 N-1 個參數賦值後,需計算的結果表達式,且這些變量賦值只在這個表達式内部有效。
示例:
LET(a, 5,b, 6, a+b)等於 11。
2.2 示例
下面根據如上所遇的情況示例介紹,您可根據實際情況,參照示例使用此公式。
1)一個很長的公式爲((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1),若将其賦給 a,需計算 IF(a>1000,(a+200)/a,(a-200)*a)的結果表達式。
2)通常的做法:在任意單元格(如:A1)中,輸入((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1),然後在另一個單元格(如:B1)中,輸入=IF(A1>1000,(A1+200)/A1,(A1-200)*A1)。
3)而計算時是将 A1 中的值,對應帶入其結果表達式中的。如這邊帶入的話就是計算=IF((((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1))>1000,((((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1))+200)/(((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1)),((((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1))-200)*(((10+20+30)*MAX(10,20,30)+DATEDIF("2001/2/28","2004/3/20","D"))*COS(0.5)/ROUND(2.15, 1)))
不僅多占用單元格且使得表達式重複計算,其性能往往也不是很好。
4)LET 公式的寫法:只需在單元格中直接賦值和寫入結果表達式。在一個單元格中,直接輸入=LET(a, ((10 + 20 + 30) * MAX(10, 20, 30) + DATEDIF("2001/2/28", "2004/3/20", "D")) * COS(0.5) / ROUND(2.15, 1), IF(a> 1000, (a+ 200) / a, (a - 200) * a))即可執行結果表達式,從而得出最終結果。
2.3 總結
對比可看出,使用 LET 公式明顯比通常的做法來得簡單,且公式中若再有其他簡單運算,如:最大值、平均值等等,也可不必再次占用其他單元格然後再引用此類單元格,這邊可直接一步到位求算結果(亦可在 LET 中直接寫一些常用的計算公式),這樣也大大地提高了性能。