2013-09-24 78 views
0

我遇到了一些情況,我有一個報告,但用戶需要兩種方式來運行它。例如,他們想要輸入員工ID並提取單個員工記錄,或者他們想要輸入公司和部門,或多個公司和部門,並返回所有選定部門的員工記錄& comapnies。SSRS可選參數

我知道如何做級聯參數的事情,所以我可以做任何一種方式,但我不想有2個報告,我想有一個可選參數的報告。當他們第一次打開報告時,我會設想兩個選項卡或複選框,或者這樣說:「點擊查看單個記錄」和「點擊查看多個記錄」,然後選擇他們選擇的任何一個,他們可以輸入參數,跑。

我一直在研究,我傾向於子報告和/或在參數中使用ISNULL並將它們標記爲'允許爲空'。一直玩它,但如果有人有一個漂亮的教程鏈接,我會非常感激。謝謝。

回答

1

你仍然可以擠壓出舒適的SSRS什麼:基於數據集

  • 多值公司參數;
  • 基於自己的數據集級聯(來自公司)多值部門參數;
  • 可選的多值員工ID參數,基於可能過濾公司/部門的數據集;
  • 一個可選的自定義員工id參數,純粹的INT輸入;

您的數據集可能是如下如下內容。

對於@Company

SELECT CompanyId,  -- Param value 
     CompanyName  -- Param display in SSRS 
FROM vw_AllCompanies 

併爲@Department

SELECT DepartmentId, -- Param value 
     DepartmentName, -- Param display in SSRS 
FROM vw_AllDepartments 
WHERE CompanyId = @CompanyId 

而對於@EmployeeId

SELECT EmployeeId, 
     FullName 
FROM vw_Employees 
WHERE (DepartmentId = @DepartmentId AND CompanyId = @CompanyId) 
     OR (@DepartmentId IS NULL AND CompanyId = @CompanyId) -- Optional 

然後你的主數據集會做:

SELECT * -- Okay, don't use "*", but select actual columns :) 
FROM vw_AllMyData 
WHERE EmployeeId IN (@EmployeeId)   -- The cascaded param 
     OR EmployeeId = @SomeCustomEmployeeId -- The custom INT input param 

以我的經驗,這有點笨重,但可能是最好的你可以擺脫基本的SSRS。如果你想要更多的靈活性,我建議你在你的應用程序周圍建立一些東西,並將ID作爲最終參數傳遞給報告。

+0

酷我很接近,謝謝你。一個問題;如果我有一個參數設置爲'from query'的可用值,我不能將它設置爲'accept null'(我的意思是,我可以選中該框,但是當我運行報告時,它是igonored並且需要一個值)。這聽起來是對的嗎?或者我需要處理我的查詢? – BattlFrog

+0

在數據集查詢中執行此操作:'SELECT Id,Name FROM vw_Companies UNION ALL SELECT NULL,'None''來解決該問題。 – Jeroen