【问题标题】:SSRS only apply parameters to certain fields or exclude LookUp/Expressions?SSRS 仅将参数应用于某些字段或排除查找/表达式?
【发布时间】:2015-06-05 22:42:58
【问题描述】:

我有一个显示employeeIDemployeeEmailsupervisorIDexpirationDate 的报告。然后我使用这个 LookUp 函数来查找主管的电子邮件:

=Lookup(Fields!supervisorID.Value, Fields!employeeID.Value, Fields!employeeEmail.Value, "DataSet1")

当我在expirationDate上设置特定日期范围的参数时出现问题

       expirationDate >=@startdate 
   AND expirationDate <=@enddate

这会缩小搜索结果的范围,仅显示日期范围内到期日期的员工。但是,如果主管 expirationDate 也不在该范围内,它也会过滤掉我的主管电子邮件地址。

我不希望 LookUp 表达式受制于日期范围的参数。我希望主管电子邮件始终显示。因为日期范围参数旨在按到期日期过滤掉员工,而不是主管。

因此,当员工因expirationDate 在范围内而显示时,他们的supervisorID 应始终显示,但由于 LookUp 表达式随后重新查询数据集以查找电子邮件,结果被阻止时expirationDate 也不在主管的范围内。

有没有办法从参数中排除我的查找/表达式?还是让参数只过滤掉特定的列字段?

【问题讨论】:

    标签: reporting-services parameters report lookup ssrs-expression


    【解决方案1】:

    所以您也在日期上过滤“DataSet1”?您应该能够删除该过滤,以便数据集包含所有可供查找的电子邮件地址。这不会影响报告中显示哪些主管,因为可能内容来自与 DataSet1 不同的数据集,这就是您使用查找的原因!

    【讨论】:

      【解决方案2】:

      您在哪里指定日期范围过滤器?如果它在数据集上,则查找函数无法引用未包含在数据集中的行。一种可能性是将日期过滤器添加到 table(或您正在使用的任何数据区域),从而使数据集中的所有行都由查找函数引用。对于小型数据集,这是一个不错的解决方案,但如果未经过滤的数据集非常大,显然不能很好地扩展。

      一般来说,更好的解决方案是检索数据集中每一行的主管详细信息,方法是编辑查询以在员工和主管之间进行连接。这将更有效,然后您可以过滤员工日期的数据集并忘记查找功能,这意味着您的报告要做的工作更少。

      【讨论】:

      • 我最终做的是使用子报表。在子报表中,我列出了所有的员工 ID 和员工电子邮件。然后,当我将子报表传回主报表时,我只显示主报表上的 supervisorID 与子报表中的employeeID 匹配的电子邮件。我尝试查找如何加入查询中的字段,但我猜想不通用不同的方式得出相同的结果。
      • 很高兴听到您能够找到适合您的解决方案,杰夫
      • 为了将来参考,假设您有一个“Employee”源表,其中包含 EmployeeID、EmployeeEmail 和 SupervisorID 列,您可以编写如下查询:SELECT emp1.EmployeeID、emp1.EmployeeEmail、emp1.SupervisorID、 emp2.​​EmployeeEmail AS SupervisorEmail FROM Employee emp1 LEFT OUTER JOIN Employee emp2 ON emp1.SupervisorID = emp2.​​EmployeeID - 这为您提供了一个数据集中所需的所有列。像这样将表连接回自身称为自引用连接,在处理分层数据(例如主管 - 员工关系)时很常见。
      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2022-07-22
      • 2013-10-31
      • 2015-01-28
      相关资源
      最近更新 更多