您有三種基本方法實現這一目標:
- 添加一個明確的參數選項爲「全部」(即,不是「全選」選項)和使用,在你的數據集來返回不同的結果。
- 確定用戶是否在查詢中選擇了所有可能的值。
- 在報告中進行分組。
明確的參數選項
假設你的數據集查詢看起來像
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值)。然後在您的報告,使用這個新列作爲父組。
因此,如果用戶選擇所有的銷售區域,默認情況下使用這個新列(數據集中的所有行將設置爲「全部」)對數據進行分組,然後仍然允許他們將其擴展到個人水平,如果他們如此渴望。
您提供了多個選擇或單個選擇參數嗎? – 2014-10-29 16:53:27
將另一個(布爾型)參數稱爲「只顯示集合」,可以檢查以更改顯示是否明智?我不知道報告的詳細信息,但是這些分組可以包含對這個新參數的引用,以便選擇如何對數據求和?這可能比觸發更改是否選擇所有選項更容易,並且可能對用戶更靈活。 – 2014-10-29 17:03:34