2014-10-29 36 views
0

我們有幾個層次結構,我們希望將其用作Reporting Services環境中的參數。SSRS:對參數使用「全選」時,顯示總計而不是單個記錄

I.e.

**SalesRegion** -- **Country** 
Americas -- Canada 
Americas -- United States 
APAC -- Australia 
APAC -- Japan 
EMEA -- Germany 
EMEA -- United Kingdom 

我們實施的參數,使用戶能夠選擇一個或多個區域爲SalesRegions,並Country(用「全選」選項一起)。然後,報告將顯示基於用戶選擇的具體銷售數據,以及一系列圖表(導致像圖表這樣的經理)。

典型的情況是區域經理挑選他或她的區域,然後是一些重點國家。不過,我們也有頂級管理人員使用相同的報告,他們對整體概覽更感興趣,因此通常會爲SalesRegionCountry選擇「全選」選項。

不幸的是,我們在使用使用IN兩個SalesRegionCountry一個WHERE子句查詢集,因此,報告愉快地吐出來的是有史以來銷售每一個國家,導致與斑點的數據和圖表的大規模BARF線。

在用戶選擇Select all作爲參數的情況下,是否可以以某種方式顯示累計數字?我並不反對使用包含所有彙總數字的第二個數據集,但不知道如何在選擇「全選」條件下將其作爲報告的基礎。

+0

您提供了多個選擇或單個選擇參數嗎? – 2014-10-29 16:53:27

+0

將另一個(布爾型)參數稱爲「只顯示集合」,可以檢查以更改顯示是否明智?我不知道報告的詳細信息,但是這些分組可以包含對這個新參數的引用,以便選擇如何對數據求和?這可能比觸發更改是否選擇所有選項更容易,並且可能對用戶更靈活。 – 2014-10-29 17:03:34

回答

3

您有三種基本方法實現這一目標:

  • 添加一個明確的參數選項爲「全部」(即,不是「全選」選項)和使用,在你的數據集來返回不同的結果。
  • 確定用戶是否在查詢中選擇了所有可能的值。
  • 在報告中進行分組。

明確的參數選項

假設你的數據集查詢看起來像

select sum(salesAmt) as TotalSales, Country, SalesRegion 
WHERE Country IN ISNULL(@Country, Country) AND SalesRegion IN ISNULL(@SalesRegion, SalesRegion) 
GROUP BY Country, SalesRegion 

而且你SalesRegion(鄉村)參數查詢看起來像

select Country as Label, Country as Value 
From Country 
Union 
select 'All' as Label, NULL as value 

您可以將您數據集到類似

select 
    sum(salesAmt) as TotalSales, 
    CASE WHEN @Country IS NULL THEN 'All' else Country end as Country, 
    CASE WHEN @SalesRegion IS NULL then 'All' else SalesRegion end as SalesRegion 
    WHERE Country = ISNULL(@Country, Country) 
AND SalesRegion = ISNULL(@SalesRegion, SalesRegion) 
    GROUP BY CASE WHEN @Country IS NULL then 'All' else Country end, 
    CASE WHEN @SalesRegion IS NULL then 'All' else SalesRegion end 

現在,如果用戶爲國家和銷售地區選擇明確的「全部」選項,則會爲所有人返回單個總計。如果他們選擇一個地區,但所有的國家,他們得到該地區的總和

問題當然,你已經失去了粒度 - 他們得到所有這就是。當然還有用戶培訓。

查詢哈克

在你的數據集,補充一點:

declare @userSelectedAllContries tinyint; 
select @userSelectedAllCountries = 
    case when 
    (select count(distinct Country) from DataSet) = 
    (select count(distinct Country) from Dataset where Country in (@Country)) 
    then 1 else 0 end; 

如果用戶打全選上多值參數,這將返回,而不是0 1,和您可以在查詢中使用它來聚合並返回一組不同的數據。

報告分組

這實質上是的方法#2從上面的擴展。只需將該值作爲新列添加到數據集中(甚至更好,而不是返回1或0,如果爲1則返回「全部」,如果爲0則返回Country/SalesRegion值)。然後在您的報告,使用這個新列作爲父組。

因此,如果用戶選擇所有的銷售區域,默認情況下使用這個新列(數據集中的所有行將設置爲「全部」)對數據進行分組,然後仍然允許他們將其擴展到個人水平,如果他們如此渴望。

相關問題