You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSRS中关联三个数据集并生成指定账单格式?

在SSRS中连接三个数据集生成指定账单的分步指南

首先得明确三个数据集之间的关联逻辑,这是实现需求的核心:

  • DataSet1 和 DataSet2:靠 LPMJobCardNO(DataSet1)与 JobCardNO(DataSet2)、LPMMestriCode(DataSet1)与 MestriCode(DataSet2)这两组字段关联
  • DataSet1 和 DataSet3:靠 LPMJobCardNO(DataSet1)与 JobCardId(DataSet3)关联

接下来分两种场景给你讲操作方式,优先推荐第一种,性能和易用性都更好:

一、数据库层面关联成单个数据集(推荐)

如果你的数据源(比如SQL Server)支持多表查询,直接写一个联合查询生成包含所有字段的数据集,这样报表里只用处理一个数据集,逻辑会清晰很多。

举个示例SQL(你可以根据实际表结构调整):

SELECT 
    ds1.TransDate,
    ds1.JCTCardID,
    ds1.LPMJobCardNO,
    ds1.LPMMestriCode,
    ds1.MestriName,
    ds1.MestriCity,
    ds1.NoofEmps,
    ds1.GrossAmt,
    ds1.TransAmt,
    ds1.MestriAmt,
    ds1.SundayBounsAmt,
    ds1.NetAmt,
    ds1.CompName,
    ds2.EmpNo,
    ds2.EmpName,
    ds2.EmpAmt,
    ds3.ShrimpVarity,
    ds3.ShrimpGrade,
    ds3.Kgs,
    ds3.Rate,
    ds3.Amount
FROM DataSet1 ds1
LEFT JOIN DataSet2 ds2 ON ds1.LPMJobCardNO = ds2.JobCardNO AND ds1.LPMMestriCode = ds2.MestriCode
LEFT JOIN DataSet3 ds3 ON ds1.LPMJobCardNO = ds3.JobCardId

把这个查询作为新的数据集添加到SSRS里,之后设计报表布局就简单了——直接拖放对应的字段到报表的各个区域即可。

二、用SSRS内置函数关联独立数据集(无法修改数据库查询时用)

如果必须保留三个独立数据集,就用SSRS的Lookup和LookupSet函数来拉取关联数据,步骤如下:

1. 先添加三个数据集到报表

打开你的SSRS项目,在「报表数据」面板右键点击「数据集」,选择「添加数据集」,分别配置DataSet1、DataSet2、DataSet3的数据源和查询,确保每个数据集都能正确返回数据。

2. 设计卡片信息区域(来自DataSet1)

直接把DataSet1的字段拖放到报表头部:

  • 卡号:JCTCardID
  • 师傅姓名:MestriName
  • 城市名称:MestriCity
  • 员工数量:NoofEmps
  • 日期:TransDate
    可以用文本框或表格排版,和你要的账单格式对齐。

3. 设计员工列表区域(来自DataSet2)

因为一个DataSet1记录对应多个员工,需要过滤DataSet2的数据:

  • 添加一个表格,列设置为「序号」和「员工姓名」
  • 序号的表达式:=RowNumber("DataSet2")
  • 员工姓名直接用=Fields!EmpName.Value
  • 给表格添加筛选器:
    • 第一个筛选:表达式=Fields!JobCardNO.Value,运算符=,值=First(Fields!LPMJobCardNO.Value, "DataSet1")
    • 第二个筛选:表达式=Fields!MestriCode.Value,运算符=,值=First(Fields!LPMMestriCode.Value, "DataSet1")
      这样表格只会显示当前师傅对应的员工。

4. 设计虾类明细区域(来自DataSet3)

和员工列表逻辑类似:

  • 添加一个表格,列对应「等级」ShrimpGrade、「品种」ShrimpVarity、「公斤数」Kgs、「单价」Rate、「金额」Amount
  • 给表格添加筛选器:表达式=Fields!JobCardId.Value,运算符=,值=First(Fields!LPMJobCardNO.Value, "DataSet1")
    确保只显示当前JobCard对应的虾类明细。

5. 设计汇总金额区域(来自DataSet1)

直接用DataSet1的字段显示:

  • 总金额:=First(Fields!GrossAmt.Value, "DataSet1")
  • 运输金额:=First(Fields!TransAmt.Value, "DataSet1")
  • 师傅金额:=First(Fields!MestriAmt.Value, "DataSet1")
  • 奖金金额:=First(Fields!SundayBounsAmt.Value, "DataSet1")
  • 最后可以加上NetAmt作为最终金额。

三、调整报表格式

根据你给出的账单样式,给各个区域添加边框、分隔线,调整字体和对齐方式,确保和示例格式一致。最后预览报表,检查所有关联数据是否正确匹配,汇总金额是否准确。

内容的提问来源于stack exchange,提问作者Ayyagari Ravindra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:22:43