1
我有一個「用戶」表,它將每個用戶映射到允許他們查看的數據。如何使用User!UserID限制報表服務器上的數據
幾個未來的報告將使用此用戶表,我想繼續採用最佳方法來利用全局變量User!UserID。
我設置的探索性報告使用帶有參數@myUser的存儲過程 - 在Sproc中,數據是INNER JOINED用戶表,在WHERE子句中,我使用@myUser限制數據,如下所示:
CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data]
@myUser VARCHAR(50)
AS
SELECT
x.[Date]
, x.Product
, x.Amount
FROM
WHReports.dbo.tb_Dly_Data x
INNER JOIN WHReports.dbo.tb_Users y
ON
x.CustomerKey = y.CustomerKey
WHERE 1 = CASE WHEN (@myUser = y.LoginName) THEN 1 ELSE 0 END
在報告中,我使用此Sproc作爲數據集,然後創建@myUser參數 - 在@myUser參數的默認值部分中,我使用表達式User!UserID。我也使這個參數隱藏。
這是最好的方法嗎?
看起來像有一個在錯誤的JOIN藏漢 - 想這可能是笛卡爾;我將修改其中一個別名 – whytheq 2012-03-26 11:00:54
我在其他查詢中使用了「WHERE 1 = CASE WHEN ....」這個結構,但在上面沒有太多需要。如果我想使參數爲NULLable,可能使用CASE可能相當優雅,即將以下內容添加到我的原始查詢中:「WHEN NULL THEN 1」 – whytheq 2012-03-26 11:06:52
另外,爲了安全起見,您應該重新檢查主數據查詢中的參數,而不僅僅是提供參數的查詢。 (用戶可以使用URL訪問來提供任何有效的參數,而不考慮其ID。) – 2012-03-26 13:48:59