我正在使用Filemaker专业版14.现在使用executionql按月计算我的月份性能的动态图表。
我用"让"函数SELECT SUM用于两个单独的字段。
然后我得到两组分隔数据的结果,如下所示。
我的问题是我不能通过直接划分两组数据来返回一组分隔数据?
例如:
List1: 100;150;200
List2: 1000;1200;1500
期望的结果:
List3: List1/List2 ==> 0.1;0.125;0.133
实际结果(仅返回一个结果):
List3: 0.0010013818
似乎除了所有连接在一起的数据,如
100150200/100012001500
任何建议都非常感谢。
答案 0 :(得分:1)
您获得的结果实际上是预期的行为。正如您自己发现的那样,当您告诉FileMaker将List1除以List2时,它会将每个列表转换为数字然后除以。这将删除所有非数字字符并创建两个长字符串,然后将第一个字符串除以第二个字符串。
您使用的是FileMaker Pro Advanced吗?如果是这样,解决此问题的最简单方法是使用自定义函数,例如:
/*
=======================================================
MathLists ©2017 Drakeling Technologies
Created by Jeff Drake 19 Oct 2017
Parameters: list1 ; list2 ; separator
Purpose: applies the specified operator to each value in list 1 and the corresponding value in list 2, e.g.
MathLists ( "100;150;200" ; "1000;1200;1500" ; "/" ; ";" ) = ".1;.125;.1333333333333333"
Dependencies: none
=======================================================
*/
Let ( [
//CHANGE EACH LIST TO RETURN-DELIMITED.
#list1 = Substitute ( list1 ; separator ; ¶ ) ;
#list2 = Substitute ( list2 ; separator ; ¶ ) ;
//STORE THE MAXIMUM NUMBER OF VALUES TO PROCESS.
#maxValues = Max ( ValueCount ( #list1 ) ; ValueCount ( #list2 ) ) ;
//STORE THE ORIGINAL SEPARATOR.
$ƒMathLists = If ( IsEmpty ( $ƒMathLists ) ; separator ; $ƒMathLists )
] ; //end define Let
Substitute (
List (
//IF THERE IS AT LEAST ONE PAIR OF VALUES REMAINING, RECURSE THE FUNCTION.
If ( #maxValues > 1 ;
MathLists ( LeftValues ( #list1 ; #maxValues - 1 ) ; LeftValues ( #list2 ; #maxValues - 1 ) ; operator ; $ƒDivideLists ) ) ; //end If
//DIVIDE THE nth VALUE FROM LIST 1 BY THE nth VALUE FROM LIST 2.
Evaluate ( GetValue ( #list1 ; #maxValues ) & operator & GetValue ( #list2 ; #maxValues ) )
) //end List
//RESTORE THE ORIGINAL SEPARATOR WHEN DONE.
; ¶ ; $ƒMathLists
) //end Substitute
//CLEAR THE ORIGINAL SEPARATOR WHEN DONE.
& Let ( $ƒMathLists = "" ; "" )
) //end Let
我已经使代码可扩展,因此您可以根据指定的四个运算符中的哪一个进行加,减,乘或除。
希望有所帮助!