[英]SSRS Report Manager: Linked report behaving strangely but SQL queries work fine
我在 Report Builder 中創建了一個報告(稱之為主要)和一個鑽取(稱之為次要)。 每一個都有一個 SQL 語句。
在 SQL Server Management Studio 中執行時,SQL 語句按預期工作。
但是,當 Primary.rdl 和 Secondary.rdl 上傳到 Report Manager(Internet Explorer 中的 Web 界面)時,它們在運行時不會生成正確的數據。
因此,我認為問題不在於 SQL 語句。 我認為這與報告管理器有關。
主 SQL 語句:
該語句從多個表中抓取一堆用戶數據並檢查他們的密碼是否可接受。 它填充密碼未通過檢查的用戶列表。
This is pseudocode so pardon inconsistencies in var names
with details as (
select u.userid
, u.password
, u.firstname
, u.lastname
, u.userdescription
, u.status
, u.lastlog
, dbo.IsPassswordAcceptable(u.userid, u.password) as passStatus
from masterListOfUsers as u
)
select d.*, p.datavalue
from details as d
left join passwordDetailList as p
on p.keyvalue = d.passStatus
and p.datatype = 'ERRORMESSAGE'
where d.passStatus <> 1
and d.passStatus <> -5
and d.status = (@USERSTATUS) -- only user ids in use
;
輔助SQL語句:
此語句是一個鑽取。 運行報告的人可以單擊上面列表中的用戶 ID。 執行鑽取,其中填充了該用戶 ID 的聯系信息。
This is pseudocode so pardon inconsistencies in var names
SELECT
m.userid
, c.address
, c.city
, c.state
, c.zip
, c.cphone
FROM userMasterList AS m
left join userDetailList AS d
ON d.userid = m.userid
left join anotherList as e on d.fullkey = e.fullkey
left join yetAnotherList AS c
WHERE m.userid = @USERID;
預期結果:
當用戶運行主時,會填充密碼錯誤的用戶列表。 可以單擊每個用戶的用戶 ID,這會觸發輔助節點填充與該用戶 ID 關聯的位置/聯系信息。
實際結果:
單擊用戶 ID 時,輔助節點無法填充與用戶 ID 關聯的任何位置/聯系信息。 這只是偶爾發生。 其他時候,它工作正常。
我列出了這些“空”用戶 ID,並在 Management Studio 中運行了輔助節點的 SQL 語句,它填充了所有預期的位置/聯系信息。
我嘗試過的解決方案:
我完全被難住了。 我對 SQL 語句進行了三次檢查,並在 Management Studio 中對其進行了測試。 我已將兩個 .rdl 文件重新上傳到 Report Manager。 我已經通過報告管理器中的“創建鏈接報告”選項以及報告生成器的操作 > 轉到報告選項將輔助節點重新分配給主節點。
我還可以做些什么?
這並不是真正的答案,而是我在相同情況下會解決的問題的列表。
運行 SQL Profiler 來跟蹤您的報告會話並確保正在執行的查詢符合您的預期。 根據參數傳遞給 SQL 語句的方式,SSRS 不會總是按照您預期的方式做事。
檢查您是否可以通過單獨運行鑽取報告(而不是通過主報告)來重復該問題
確定問題是否與特定用戶 ID 一致? 即用戶 A 總是失敗而用戶 B 總是工作嗎? 如果問題一致,則問題很可能與數據相關。 檢查顯示為空白的字段中的特殊字符,例如 chr(13)/chr(10),它們可能只是將“真實”內容強制到文本框內的新行中。
在您的報告中添加一些調試信息以幫助識別問題,例如:
一種。 編輯數據集查詢以從數據集本身添加更多信息SELECT .... , c.addrees, len(c.address) as AddresLen from ....
您可以將其添加到報告的副本中
灣添加另一個直接在 SSRS 中執行相同操作的文本框(例如,表達式類似於=LEN(Fields!address.Value)
)。 然后,您可以將兩個數字與您所看到的進行比較。 如果 LEN 文本框顯示 20,但地址字段顯示為空白,則特殊字符可能是問題所在。
經過數小時的修補,問題最終是用戶 ID 被一些查詢工具而不是 SQL 語句本身修剪掉了所有前導和尾隨空格。 因此,當在報表管理器中運行最終報表時,查詢數據時會使用多余的空格,導致找不到數據。
修剪數據點后,此問題已解決。
固定的輔助 SQL 語句:
這是偽代碼,所以請原諒 var 名稱中的不一致
SELECT
rtrim(m.userid) as userid
, rtrim(c.address) as address
, rtrim(c.city) as city
, rtrim(c.state) as state
, rtrim(c.zip) as zip
, rtrim(c.phone) as phone
FROM userMasterList AS m
left join userDetailList AS d
ON d.userid = m.userid
left join anotherList as e on d.fullkey = e.fullkey
left join yetAnotherList AS c
WHERE ltrim(rtrim(m.userid)) = ltrim(rtrim(@USERID));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.