【问题标题】:SSRS Find the closest date/timeSSRS 查找最近的日期/时间
【发布时间】:2016-02-02 08:17:36
【问题描述】:

我有以下问题: 案例将使用最新的计算文件进行计算。案例和计算文件来自两个不同的数据集,没有任何关键元素。

数据集 1:

数据集 2:

我想得到类似以下的东西:

对于 1 月 12 日和 1 月 27 日创建的案例,他们使用了 1 月 12 日上传的计算文件。然后 1 月 28 日上传了一个新文件。1 月 29 日创建的新案例使用了这个最新的计算文件。

现在,我有了生成使用过的计算文件的表达式:

我将行号添加到数据集 2。要获取 使用的计算文件,我有

=iif(LookUp(1, Fields!Row.Value, Fields!File_Upload_Time.Value, "Dataset 2")

它现在可以完成这项工作,但是数据集 2 中会有很多行,我无法使用上面的内容来查找第 N 行。有什么有效的方法可以完成这项工作吗?

基本上,想法是针对每个案例,过滤Used的计算文件:早于Case Created Time,然后,选择最新的Used Calculation Value

如果我未能正确解释某些事情,请要求进一步澄清。谢谢。

【问题讨论】:

  • 是否可以在 SQL 中组合数据集?
  • 数据集 1 包含最终数据集的前两列(案例 ID 和创建时间)。
  • @stubker 谢谢 :) 但数据集 1 和 2 之间没有关系,即没有连接它们的主键元素....想知道如何做一个循环来找到最接近的数据集 2,而不是使用有限的多重 iif 函数...

标签: reporting-services


【解决方案1】:

我建议更改您的数据集(如果可能),而不是在报告本身上尝试这种类型的比较;你可以使用APPLY operator 喜欢:

SELECT ct.CaseId, ct.CreatedTime, CalcFile.UsedCalcValue
FROM CaseTable AS ct 
    CROSS APPLY(SELECT TOP 1 cft.UsedCalcValue
                FROM CalcFileTable AS cft
                WHERE ct.CreatedTime >= cft.UsedCalcValue
                ORDER BY cft.UsedCalcValue DESC) AS CalcFile

【讨论】:

  • 谢谢。这看起来是一个很好的解决方案。我会试试看。 :)
  • 非常感谢您的时间和帮助。我试过 CROSS APPLY 功能,效果很好! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2019-06-30
  • 2019-08-26
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多