2012-04-11 108 views
3

我有一個SSRS「聲明」類型且具有文本框和表格總體佈局的報告。對於主文本框中我想,讓用戶提供值作爲參數,使文本可定製,即文本輸入包括字段名稱

Parameters!MainText.Value = "Dear Mr.Doe, Here is your statement." 

那麼我可以設置文本框的值是參數的值:

=Parameters!MainText.Value 

不過,我需要能夠允許傳入的參數值,包括數據集字段,就像這樣:

Parameters!MainText.Value = "Dear Mr.Doe, Here is your [Fields!RunDate.Value] statement" 

,使我的報表輸出會是什麼樣子:

「親愛的Mr.Doe,這是您的11月份聲明。」

我知道,您可以通過提供靜態文本和現場要求定義它這樣做在文本框中,但我需要SSRS認識到參數字符串中有需要的字段要求逃避和綁定。

有沒有人有任何想法?我使用SSRS 2008 R2

回答

1

有幾個顯着的不同方法。要知道,這是最適合你將需要更多的信息:

  1. 在報告中嵌入代碼。可能最快到 工具將嵌入代碼在報告中返回 參數,但適當地調用String.Replace()代替 動態值。你需要爲用戶建立一些代碼來替換字符串。嵌入式代碼可讓您訪問報告中的許多對象。例如:

    Public Function TestGlobals(ByVal s As String) As String 
        Return Report.Globals.ExecutionTime.ToString 
    End Function 
    

    將返回執行時間。顯示報告參數的其他方法here.

    1.5 如果此功能變得非常大,請查看使用自定義程序集。然後,您可以通過Visual Studio獲得更好的創作體驗

  2. 修改XML。根據您使用 的位置,您可以直接修改.rdl/.rdlc XML。

  3. 考慮其他工具,報表製作等。如果你需要給用戶 更多的靈活性,在報表製作,有很多工具內置 專門爲此,如SSRS的報表生成器。
+0

嗨傑米,感謝您的快速反應。我認爲'String.Replace()'將成爲我唯一可行的選擇。雖然我不太確定這會起作用......因爲即使我進行了替換,比如尋找** RunDate%**並替換爲「Fields!RunDate.Value」,它仍然只是文本,並且在渲染時,SSRS將會像這樣對待它。我的備份選項是在數據集到達ssrs之前完成所有操作。 – dashstar 2012-04-11 18:24:44

+0

如果您需要將字段值傳遞給函數,但對於其他許多事情,我認爲您可以從嵌入代碼訪問全局報告屬性。我會在接下來的幾個小時內嘗試測試。 – 2012-04-11 18:48:36

+0

在嵌入式代碼路由中增加了一些更多的細節。 – 2012-04-11 20:34:52

1

你試過串聯?

參數!MainText.Value =「親愛的Mr.Doe,這是您的」& [Fields!RunDate。值] &「聲明」

+0

嗨路易斯,這將作爲文本框的值,但不作爲參數值。因爲SSRS似乎將整個事件視爲一個字符串,即**「Dear Mr.Doe,這是您的&[Fields!RunDate,Value]&statement」**,即使您指定了自己的引號。我試圖用幾種不同的方式逃避報價,但它似乎不起作用。 – dashstar 2012-04-11 18:28:36

1

這裏的另一種方法:顯示參數字符串已經填入數據集中值

這樣做:創建一個名爲RunDate例如參數和設置默認值「得到查詢值「並選擇第一個數據集和值字段(RunDate)。現在參數將保存RunDate字段,您可以在其他地方使用它。使此參數隱藏或內部並設置正確的數據類型。例如日期/時間,以便日後格式化其值。

現在創建將舉行您想要的默認文本的第二個參數:

Parameters!MainText.Value = "Dear Mr.Doe, Here is your [Parameters!RunDate.Value] statement" 

不知道這句法的作品,但你的想法。您也可以在此處進行格式設置,例如只有日期時間的月份:

="Dear Mr.Doe, Here is your " & Format(Parameters!RunDate.Value, "MMMM") & " statement" 

這種方法只使用內置的方法和避免瞭解析器的需要,因此用戶不必學習語法它。

當然存在一個缺點:用戶完全控制參數內容並且可以提供與報告內容不匹配的值 - 但String Replace方法也是如此。

而貪圖完整性另外還有簡單的選項:追加多個參數:創建一個名爲MainTextBeforeRunDate和MainTextAfterRunDate 2個參數。

文本框數值表達式變爲:

=Parameters!MainTextBeforeRunDate.Value & Fields!RunDate.Value & Parameters!MainTextAfterRunDate.Value. 

這應該解釋本身。最簡單的解決方案往往是最好的,但在這種情況下,我有我的懷疑。至少這可以確保你的RunDate結束於最終的報告文本。