SSRS不包括日期;管理工作室是?

时间:2015-04-17 20:13:22

标签: reporting-services ssrs-2008 ssms ssrs-tablix ssrs-2012

为什么当我在Management Studio中使用以下where子句运行查询时,它会在cash_date等于参数FromDate时正确返回数据。

 FILMTRAN.cash_date >= (@FromDate) AND

但是,当我将相同的查询复制到SSRS时,它不再包含@FromDate等于cash_date的数据。用户在SSRS中输入参数。我甚至做了一个测试,在那里我显示了完整的日期,包括时间,并做了一个if语句返回" yay"如果他们匹配或"不"如果他们没有。即使根据SSRS,他们匹配,但为什么我的数据在同一天发生时没有被退回?!当我在管理工作室清楚地工作时,我傻眼了,这是行不通的。

我甚至尝试在我的sql语句中添加dateadd函数,它在管理工作室中再次正确响应,但不是ssrs。

编辑:我使用更简单的3行查询测试了> =它按预期工作但它仍然不适用于我的查询,它在管理工作室但不适用于SSRS。所以现在我认为在我的长篇查询中有一些非常具体的错误,我已经附上了。为了在管理工作室中测试我的代码,我将变量声明如下所示。但是,当我将查询导入SSRS时,我删除了此代码,而是在SSRS中创建参数(就像我一直做的那样,没有任何问题)。

DECLARE @FromDate AS DATETIME
SET @FromDate = '1-Oct-2013'
DECLARE @ToDate AS DATETIME
SET @ToDate = '8-Apr-2015'
DECLARE @Loan AS VARCHAR(20)
SET @Loan = 'TAX_B'

enter image description here

SELECT distinct LOANMAST.loan, 
CARDINDX.DESCRIPTION AS BorrowerName, 
CARDINDX.contact_name,
CARDINDX.in_care_of,
--loan_ipt.interest,
CARDINDX.mail_address1, 
CARDINDX.mail_address2,
CARDINDX.mail_city, 
CARDINDX.mail_state,
CARDINDX.mail_country,
LOANMAST.closed_date,
PROPERTY.STATE,
CARDINDX.MAIL_ZIP_CODE, 
PROPERTY.address1, 
PROPERTY.address2,
PROPERTY.city, 
PROPERTY.ZIPCODE, 
PROPERTY.country,
FILMTRAN.cash_date, 
CASE FILMTRAN.TRAN_SUBTYPE WHEN 'REGINST' THEN 'Regular Collections'
WHEN 'PAC' THEN 'PAC'
WHEN 'CORREST' THEN 'Group Collection'
WHEN 'ESCROWTAX' THEN 'Tax Disbursement'
WHEN 'SUNDRY' THEN 'Tax Refund'
WHEN 'FULL PAY' THEN 'Payoff'
END AS TRANSUBTYPE,
FILMTRAN.TAX_ESCROW,
FILMTRAN.TRANSACTION079,
JK.taxescrowbalance,
CASE FILMTRAN.TRANSACTION079 WHEN 'COLLECTION' THEN FILMTRAN.TAX_ESCROW
WHEN 'DISBURSEMENT' THEN 0 
END AS TAXESCROWCOLL,
CASE FILMTRAN.TRANSACTION079 WHEN 'DISBURSEMENT' THEN FILMTRAN.TAX_ESCROW *-1
WHEN 'COLLECTION' THEN 0 
END AS TAXESCROWDIS

FROM LOANMAST LEFT OUTER JOIN BORROWER ON LOANMAST.loan=BORROWER.loan
 LEFT OUTER JOIN LOANCOLL ON LOANMAST.loan=LOANCOLL.loan
 LEFT OUTER JOIN PROPERTY ON LOANCOLL.code=PROPERTY.prop_code
 LEFT OUTER JOIN BALHIST ON BALHIST.loan=LOANMAST.loan
 LEFT OUTER JOIN CARDINDX ON BORROWER.SHORT_NAME=CARDINDX.SHORT_NAME
 LEFT OUTER JOIN LOAN_IPT ON LOAN_IPT.short_name=CARDINDX.short_name
 LEFT OUTER JOIN FILMTRAN ON FILMTRAN.loan=LOANMAST.loan 
JOIN (
 SELECT distinct FILMTRAN.loan, FILMTRAN.cash_date,  FILMTRAN.transaction079 ,FILMTRAN.tax_escrow,
sum(FT.taxescrowcoll)+sum(FT.taxescrowdis)+isnull(BH.esc_tax_bal_p, 0) AS "TaxEscrowBalance" 
from 
FILMTRAN
LEFT OUTER JOIN (SELECT loan, accounting_date, esc_tax_bal_p,
rank () over (order by accounting_date desc) AS date_rank
 FROM BALHIST
 where loan = @Loan) BH ON BH.loan=FILMTRAN.loan
JOIN 
(
SELECT loan, cash_date, 
FILMTRAN.transaction079,
CASE FILMTRAN.TRANSACTION079 WHEN 'COLLECTION' THEN TAX_ESCROW
WHEN 'DISBURSEMENT' THEN 0 
END AS TAXESCROWCOLL,
CASE FILMTRAN.TRANSACTION079 WHEN 'DISBURSEMENT' THEN TAX_ESCROW *-1
WHEN 'COLLECTION' THEN 0 
END AS TAXESCROWDIS FROM FILMTRAN
WHERE loan = @Loan)
FT ON FT.loan=FILMTRAN.loan
where FT.cash_date <= FILMTRAN.cash_date 
AND (BH.date_rank ='1' OR BH.accounting_date IS NULL)
AND (len(FT.transaction079) <= len(FILMTRAN.transaction079) OR FT.cash_date < FILMTRAN.cash_date)
GROUP BY FILMTRAN.loan,FILMTRAN.cash_date,  FILMTRAN.transaction079, FILMTRAN.TAX_ESCROW, BH.esc_tax_bal_p) JK ON JK.loan=FILMTRAN.loan AND JK.cash_date = FILMTRAN.cash_date AND JK.transaction079=FILMTRAN.transaction079

WHERE 
FILMTRAN.RVRS_REASON <> 'ERROR_CORR' AND
Loancoll.prim_ind = 'Y' AND
LOANMAST.loan_status <> '1_INQUIRY' AND
LOANMAST.loan_status <> '2_APP_ISS' AND
LOANMAST.loan_status <> '3_APP_ACC' AND
LOANMAST.loan_status <> '4_APPROVED' AND
LOANMAST.loan_status <> '5_COMMITTED' AND
LOANMAST.loan_status <> '9_DELN_SLF' AND
LOANMAST.loan_status <> '9_REJ_BRWR' AND
FILMTRAN.cash_date >= (@FromDate)
AND FILMTRAN.cash_date <= (@ToDate)
AND LOANMAST.loan = @Loan
AND FILMTRAN.tax_escrow <> 0

3 个答案:

答案 0 :(得分:0)

您有日期格式问题。

希望您调用存储过程来生成数据集。 如果没有,你应该是!

要查看发生了什么,您可能希望将传递的日期输出到表中 - 然后在运行报告后查看该表。显然,一旦调试完成,您将删除此表。 确保将此表中的日期存储为文本而不是DateTime。 从SSRS和Management Studio运行时,请查看差异。

答案 1 :(得分:0)

我无法复制此问题。在我的系统中,使用SSRS-2008,SSRS中的结果与SQl-Server中的结果相同。我使用带有SSRS参数的where子句和&gt; =运算符。我使用Text和Date / Time参数类型进行了测试,两者都运行良好。

我建议您确保数据源与您在SQL Server中查询的数据源相同。此外,如果您在参数中输入时间,请尝试无时间输入日期。

如需进一步的帮助,请在SSRS中发布您的完整查询(或传真)以及有关您的表格和参数设置的信息。

编辑: 只是看看你的查询,我觉得这可能是问题所在:

where FT.cash_date <= FILMTRAN.cash_date
AND (BH.date_rank ='1' OR BH.accounting_date IS NULL)
AND (len(FT.transaction079) <= len(FILMTRAN.transaction079) OR FT.cash_date < FILMTRAN.cash_date)

可能源于对使用Filmtran而在子查询中没有别名的混淆,当它已经包含在主查询中时?我将在没有From子句中的两个子查询的情况下运行查询,并查看日期是否与您期望的一样,在子查询中逐个添加以确定问题的位置。

答案 2 :(得分:0)

好的,所以我的问题的解决方案比我想承认的更笨。因此,除了陈述我的解决方案之外,我还将建议与SSRS / Management Studio中的日期相关的潜在问题/解决方案:

  1. 检查SSRS中数据集的过滤器!这是我的问题,因为我使用的报表模板已经在数据集上有过滤器,即使我通常在SQL管理工作室中手动执行所有过滤器。 (见下图)

  2. 确保时间正确,而不仅仅是日期。例如,可能会出现10/1/2013,但该日期背后的实际值类似于10/1/2013 5:43 PM。因此,如果您尝试包含在2013年10月1日下午5:43之后但在2013年10月2日之前发生的值,那么&lt; =将无效。

  3. 确保SSRS和SQL Server的区域日期设置相同。例如,如果一台机器以欧洲格式DD / MM / YYYY查看日期,那么如果另一台用户的机器期望日期为MM / DD / YYYY格式,则可能会导致问题。

  4. enter image description here