本帖最后由 Bella.Yuan 于 2024-12-19 15:05 编辑
相信大家都使用过Lookup和LookupSet,但是每次在使用时是不是都是混乱的,以及有时需要再次统计数据,发现无法计算,今天就来带大家一起看看这2个函数的使用和用法吧~
咱们先来看看报表表达式对这2个函数的解释:
Lookup:
语法:Lookup(<主数据集字段>,<关联数据集匹配字段>,<关联数据集数据字段>,<关联数据集名称>)
解释:返回外键关联的另一数据集的指定字段值
LookupSet:
语法:LookupSet(<主数据集字段>,<关联数据集匹配字段>,<关联数据集数据字段>,<关联数据集名称>)
解释:返回外键关联的另一数据集的指定字段值的一组匹配值
从上面的语法和解释来看,这2个函数就是从主数据集使用关联字段来获取关联数据集的其他字段,直接看语法和解释大家看不清楚,我们直接上图来看对应的意思:
左边的表是Demo_商品类别表,右边是Demo_商品表,这2个表都是wyn自带的数据源WynDemoData的表。
这里大家可以看C003这个类别编号,很明显其中Lookup是一对一的返回,LookupSet是一对多的返回,这样图文解释说明大家应该很好理解对应的函数意思,此时使用报表较多的同学应该就猜出来我接下来要说什么了,So,LookupSet需要配合Join来一起使用。针对Join函数这里稍作说明一下。
Join:
语法:Join(<数组>,<分隔符>)
解释:连接指定数组的元素或集合的成员,在每个元素或成员之间使用指定的分隔符
效果:
OK,至此这2个函数的说明就结束了,下面我们来一起看看实际使用中针对这2个函数如何做计算。
大多时候我们不只是想展示关联的数据,还有可能对数据进行聚合运算或者其他的操作,这里将常见的Count和Sum说明一下,其余函数也可以参考这2个函数去实现:
方法1:直接使用报表函数,这里用Count为例,Sum也是一样的。
Count,话不多说,上图直接看效果(看下图):很明显,多值时需要使用LookupSet,这里我用的是矩表,所以数据行肯定是需要做聚合的,这里我使用的是Count,此时Count可以的表达式参考下面:
- {Count(LookupSet(类别编号, 类别编号, 商品编号, "商品详情表"), "1")}
复制代码
有时大家用的是表格,好像Count有时会失效,此时可以给Count再加一个参数,该参数可以是任意值,参考下图:
表达式,表达式中的第二个参数,可以是任意值
- {Count(LookupSet(EmpID, EmpID, Address, "Addresses"), "1")}
复制代码 方法2:使用自定义函数
这里需要先使用系统管理员的账号登录系统后台,编写对应的类型的代码后记得要点击编译按钮,编译通过后记得点击保存按钮来保存函数,然后在报表中可以使用Code来引用这些自定义函数。
针对自定义函数可以参考这个教程,自定义函数
这里我使用的是vb代码,大家也可以用c#,根据自己的实际情况选择就可以。
下面来看效果,很明显值是一样的,所以这个方法也不错:
下面附上对应的vb代码供大家参考:
- <div>'''lookupset求Sum
- Public Function SumLookup(ByVal items As Object()) As Decimal
- If items Is Nothing Then
- Return Nothing
- End If
- Dim suma As Decimal = New Decimal()
- Dim ct as Integer = New Integer()
- suma = 0
- ct = 0
- For Each item As Object In items
- suma += Convert.ToDecimal(item)
- ct += 1
- Next
- If (ct = 0) Then return 0 else return suma
- End Function
- '''lookupset求Count
- Public Function CountsLookup(ByVal items As Object()) As Decimal
- return items.length
- End Function </div>
复制代码
附件是上面截图的demo,如有需要,可以下载后从系统后台导入查看,欢迎交流~
wyn-export-20241219150303.zip
(469.49 KB, 下载次数: 0)
|
|