2017-06-19 100 views
1

我想在SSRS中創建報表。此報告最多有30行。每條線代表不同的產品。每個產品系列都有不同的顏色。因此對於產品A,該線是紅色的。列中是不同年份的收入。例如,第一列是2014年。最後一列將顯示產品的總數。現在每一列(產品名稱和總和除外)應按降序排序,每行忽略該產品的顏色。以下是示例數據的圖片。SSRS:以不同顏色顯示每行的報表,並以不同的顏色對每列進行排序

Example Data

格式化的報告應該是這樣的:

Format example

因此,這裏是一些樣本數據的例子來說明排序:

Example with sampel data

我希望這個問題是可以理解的。

首先,我該如何實現顏色編碼?我的第一個猜測是用例如代碼設置顏色並使用IIF(Fields!Product.Value = 'product A', "Yellow", "White")。這似乎有效,但我認爲將每種產品的格式硬編碼到報告中並不實際。有格式化的優雅和動態的方式嗎?

其次,我如何以不同的方式對每個列進行排序並保存與產品的關係?我是否必須爲每列創建一個tablix並隱藏產品名稱?

+0

如果我沒有錯,您正在嘗試每年的產品排名。我認爲這種方法會讓人難以理解數據。也許使用圖表將會是更好的選擇 – niktrs

+0

顏色問題的一個長期良好的解決方案是將顏色記錄中的值存儲在數據庫中。這樣,當添加新產品時,可以選擇顏色。你能改變數據庫/應用程序嗎? –

+0

@niktrs是的產品排名是應該達到的產出。我考慮使用例如折線圖,但需求以表格形式指定可視化。 – DummerTroll

回答

1

當我把它放在一起時,我沒有看到最後一列,但它會很容易添加。

我已經創建了兩個表格,一個是關聯十六進制顏色的產品,另一個是包含一些樣品標準化數據的產品。

最後有一個查詢將它們放在一起。我建議一旦你有這個運行,你編輯查詢,使其動態,所以你不需要硬編碼的價值,但它應該讓你對我採取的方法的想法。

DECLARE @prod TABLE (ProductID int, Productname varchar(50), HexColor varchar(7)) 
INSERT INTO @prod 
VALUES 
(1, 'Bikes', '#FF0000'), 
(2, 'Cars', '#00FF00'), 
(3, 'Vans', '#0000FF') 


DECLARE @t TABLE (ProductID int, PeriodID int, Amount int) 
INSERT INTO @t 
VALUES 
(1, 2014, 10), 
(1, 2015, 12), 
(1, 2016, 14), 
(2, 2014, 12), 
(2, 2015, 9), 
(2, 2016, 8), 
(3, 2014, 11), 
(3, 2015, 16), 
(3, 2016, 4) 



SELECT ' Name' as ColName, p.ProductName, 0 as Amount, ROW_NUMBER() OVER(ORDER BY t.ProductID) AS RankID , HexColor 
    FROM (SELECT DISTINCT ProductID FROM @t)t 
    join @prod p on t.productid = p.productid 
UNION ALL 
SELECT '2014' as ColName, p.ProductName ,amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor 
    FROM @t t 
    join @prod p on t.productid = p.productid 
    where periodID = 2014 
UNION ALL 
SELECT '2015' as ColName, p.ProductName, amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor 
    FROM @t t 
    join @prod p on t.productid = p.productid 
    where periodID = 2015 
UNION ALL 
SELECT '2016' as ColName, p.ProductName, amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor 
    FROM @t t 
    join @prod p on t.productid = p.productid 
    where periodID = 2016 

如果您使用此作爲SSRS數據集中,那麼你可以添加一個簡單的矩陣如下

enter image description here

該行小組RankID完成,列組是在ColName完成。

然後,我們需要一個表達式來選擇顯示Productname還是amount的總和。表達式看起來像這樣。

=IIF(Fields!ColName.Value=" Name", Fields!ProductName.Value, Sum(Fields!Amount.Value)) 

最後,同一單元格的BackgroundColor屬性也是一個表達式,如下所示。

=Fields!HexColor.Value 

如果您願意,您可以從矩陣(但不是組)中刪除RankID列,但爲了清晰起見,我已將其留在此處。最終的輸出看起來像這樣。

enter image description here

相關問題