在SQL Server報(bào)表服務(wù)中使用報(bào)表參數(shù)
當(dāng)你在使用報(bào)表時(shí),你需要添加參數(shù)來(lái)縮小報(bào)表范圍進(jìn)行更好的分析。你將經(jīng)常看到你需要不止一個(gè)的參數(shù),第二個(gè)參數(shù)可能取決于第一個(gè)參數(shù),通常要求你基于第一個(gè)參數(shù)更新第二個(gè)參數(shù)。
此外,你可能需要添加具有多個(gè)和/或默認(rèn)值的參數(shù)。這篇文章講述怎樣在SQL Server 2005報(bào)表服務(wù)(SSRS)中創(chuàng)建參數(shù)。
前提要求
要理解本篇文章的內(nèi)容,你應(yīng)該對(duì)在SSRS中創(chuàng)建報(bào)表有所了解,因?yàn)檫@篇文章會(huì)詳細(xì)地回顧怎樣在SSRS中創(chuàng)建報(bào)表。然而,我將在講述SSRS報(bào)表的創(chuàng)建時(shí)盡可能多地介紹。還有,你將需要知道怎么編寫(xiě)連接兩個(gè)或更多表的基本T-SQL 查詢。
為了達(dá)到有效地利用資源,你需要將SQL Server 2005和SQL Server商業(yè)智能開(kāi)發(fā)套件安裝在一起。因?yàn)槲覍⑹褂肁dventureWorks 示例數(shù)據(jù)庫(kù)中的數(shù)據(jù),如果你在你的SQL Server 版本中安裝了AdventureWorks 數(shù)據(jù)庫(kù),那將會(huì)簡(jiǎn)單得多。
示例
因?yàn)橥ㄟ^(guò)示例對(duì)讀者進(jìn)行解釋總是很有幫助的,所以讓我們假設(shè)我們想要根據(jù)雇員的國(guó)家、州/省和城市列出雇員。用戶應(yīng)該有一個(gè)選擇國(guó)家的選項(xiàng)。根據(jù)選出的國(guó)家,我們要列出所選國(guó)家的州/省。在選擇了一個(gè)州后,我們應(yīng)該列出相關(guān)的城市,并且用戶應(yīng)該具有能從列表中選擇一個(gè)或多個(gè)城市的選項(xiàng)。根據(jù)選擇的一個(gè)或多個(gè)城市,最后用戶應(yīng)該就可以得到一個(gè)符合標(biāo)準(zhǔn)的雇員列表。
實(shí)現(xiàn)
首先,你必須從SQL Server商業(yè)智能中創(chuàng)建一個(gè)報(bào)表服務(wù)項(xiàng)目,然后添加一個(gè)報(bào)表到這個(gè)項(xiàng)目中。接下來(lái)是創(chuàng)建一個(gè)指向AdventureWorks數(shù)據(jù)庫(kù)的共享數(shù)據(jù)源。我們現(xiàn)在需要為國(guó)家添加一個(gè)數(shù)據(jù)集。你可以通過(guò)在數(shù)據(jù)集列表框中選擇‘選項(xiàng)’從數(shù)據(jù)庫(kù)標(biāo)簽添加這個(gè)數(shù)據(jù)集。然后如下圖所示的配置dsCountry數(shù)據(jù)集。
下一個(gè)工作是將這個(gè)dsCountry 分配給一個(gè)報(bào)表參數(shù)。從報(bào)表菜單中選擇‘Report Parameters’選項(xiàng)。
#p#下面是你應(yīng)該看到的一個(gè)截屏。
上面對(duì)話框中的選項(xiàng)有:
Name – 參數(shù)的名稱。當(dāng)你選擇了一個(gè)值后,這個(gè)值會(huì)存儲(chǔ)在這個(gè)參數(shù)中。因?yàn)檫@是一個(gè)變量名稱,所以你不能在這個(gè)字段中包含有特殊字符(*,!或空格等等)。
Data Type – 參數(shù)的數(shù)據(jù)類型。這個(gè)選項(xiàng)的選擇包括:Boolean、Datetime、Integer、Float 和String。在這個(gè)例子中,我們將選擇‘String’用于國(guó)家參數(shù)。
Prompt – 提示就是你在報(bào)表中將看到的。因?yàn)樗且粋€(gè)標(biāo)簽,所以你可以在提示中使用任何字符。
下面的屬性如它們的名稱所顯示的一樣簡(jiǎn)單。Hidden和Internal 的不同之處是Hidden變量可以改變而internal 變量則不能。
下一步是給參數(shù)賦值。
當(dāng)參數(shù)具有固定值如是/否、男/女等時(shí),應(yīng)該使用非詢問(wèn)選項(xiàng)。詢問(wèn)選項(xiàng)是從一個(gè)數(shù)據(jù)集給參數(shù)賦值。在這個(gè)示例中,數(shù)據(jù)集是dscountry,我們需要添加兩個(gè)值:值字段和標(biāo)簽字段。標(biāo)簽字段是用戶將會(huì)看到的,而值字段是將要存儲(chǔ)在參數(shù)中的。在這個(gè)示例中,如果用戶選擇了United Status,那么在國(guó)家參數(shù)中將存儲(chǔ)的值是US。
下一步是賦予缺省值。一個(gè)缺省值使得用戶可以更容易地使用報(bào)表,因?yàn)槿笔≈凳怯脩糇羁赡苓x擇的值。例如,在這個(gè)報(bào)表中用戶選擇United States,所以將United States 作為缺省值使得用戶可以更容易地填寫(xiě)表格。
使用另一個(gè)參數(shù)的參數(shù)
下一個(gè)工作是創(chuàng)建州/省參數(shù)。如同我前面所說(shuō)的,州/省參數(shù)取決于在第一個(gè)詢問(wèn)中用戶所選擇的國(guó)家,所以在我們的州/省數(shù)據(jù)集中,我們應(yīng)該編寫(xiě)詢問(wèn)來(lái)達(dá)到這個(gè)標(biāo)準(zhǔn)。
你從上面的圖片中可以看到包含了‘@Country’用于詢問(wèn)。這個(gè)@Country 變量將獲得用戶選擇的國(guó)家參數(shù)的值。
接下來(lái)是創(chuàng)建一個(gè)叫做Province的報(bào)表參數(shù),并將它附加到dsProvience數(shù)據(jù)集中。這個(gè)的做法和Country 參數(shù)的做法一樣。Province 報(bào)表參數(shù)屏幕如下圖所示。
因?yàn)槲覀円呀?jīng)做了接近一半的報(bào)表工作,所以我們?cè)撟鰝€(gè)簡(jiǎn)單測(cè)試了,點(diǎn)擊“preview”標(biāo)簽。你可以看到當(dāng)你改變國(guó)家時(shí)省份列表也跟著改變了。例如,當(dāng)國(guó)家是Australia和Germany時(shí)會(huì)看到下面兩個(gè)圖片。
多值參數(shù)
在配置了國(guó)家和省參數(shù)之后,現(xiàn)在我們要配置城市參數(shù)。城市數(shù)據(jù)沒(méi)有主表。我們將使用Person.[Address]表來(lái)獲得一個(gè)城市列表作為工作區(qū)。因?yàn)槌鞘腥Q于所選的省,所以我們需要使用@Province 參數(shù)來(lái)獲得城市列表。下面是城市數(shù)據(jù)集dsCity的截屏。
【編輯推薦】