我在报告一对多关系中的两个表时遇到水晶报告的问题。
示例表:
dbo.stock
Barcode Qty
12345 3
11111 5
22222 6
dbo.sales
Barcode SalesDate QtySold<br/>
12345 1/1/2013 1
12345 1/1/2012 1
12345 1/1/2010 1
11111 1/1/2000 1
表格通过
链接dbo.stock Left Outer Join On dbo.sales
报告配置:
Group 1 Header |
Sales |Sales.barcode Sales.QtySold
Group 1 Footer |Group(Barcode) Sum(QtySold) Stock.Qty
问题: 展示销售&amp;库存(没有销售日期限制)
Barcode Sold OnHand
12345 3 3
11111 1 5
22222 6
但是,当选择数据范围时,输出将删除销售超出所选数据范围的有效产品。说1/1/2012 - 2013年1月1日
Barcode Sold OnHand
12345 2 3
22222 6
我有一个使用子报告的版本,但是当每个行的子报告运行时,开销很大。
能想到解决这个问题的方法吗? (不使用子报告)
谢谢B
系统说明:
水晶8.5
通过ODBC驱动程序访问数据库.dbf文件
答案 0 :(得分:2)
问题在于,即使您正在进行左外连接,也要在右侧表中选择日期范围,这有效地使其成为内连接。如果您的记录选择公式中有{Sales.SalesDate}={?DateParameter}
之类的内容,请将其删除。
相反,请使用isnull({Sales.SalesDate}) or {Sales.SalesDate}<>{?DateParameter}
取消详细信息部分,以便只在报告中显示所需日期的销售额。要处理“组页脚”中的“已售出数量”,请仅对您日期范围内的记录使用“运行总计”而不是直接求和。
答案 1 :(得分:1)
所以您想要所有条形码信息,但只需要与日期范围一致的销售额?
详细尝试这个公式 如果dbo.sales.SalesDate在{?daterange}中,那么{dbo.sales.QtySold}否则为0
将摘要插入组页脚
注意:您可能需要在公式编辑器或帐户中切换到Null的默认值,以获取公式中的NULL值
答案 2 :(得分:0)
当您想要在水晶报表中连接两个表时,使用左外连接,同时希望根据右表过滤报表,例如sales.SalesDate&GT; =&#39; 1-JAN-2014&#39;联接将转换为equi join 解决一些人建议使用的问题 (ISNULL(sales.SalesDate)或sales.SalesDate&gt; =&#39; 1-JAN-2014&#39;)
上述解决方案仅适用于库存销售为0并且您仍希望显示这些库存的情况,但如果某些库存的销售额超过0并且销售日期为“开启”或者“在2013年12月31日之前”# 39 ;.在这种情况下,ISNULL(sales.SalesDate)将无效。要解决此类问题,您需要添加命令对象或为sales表创建视图,如下所示
使用以下sql创建命令对象 选择stock.Barcode,sales.Salesdate 库存左边的外部连接订单.Barcode = order.Barcode和sales.SalesDate&gt; =&#39; 1-JAN-2014&#39;
第二个解决方案是为销售创建一个视图 创建或替换视图view_Sales为 从销售中选择* sales.SalesDate&gt; =&#39; 1-JAN-2014&#39; 然后使用报表中的视图而不是订单表作为右表。