簡體   English   中英

SQL SSRS顏色代碼/根據SSRS中的Tablix創建熱圖(基於值的Tablix行中的顏色)

[英]SQL SSRS Color Code / Create a heatmap out of a tablix in SSRS (color in tablix rows based on value)

所以我創建了一個看起來像這樣的簡單tablix

https://i.imgur.com/njzI19Y.png

有什么方法可以向此Tablix添加表達式,以便基於基值對行進行顏色編碼。

因此,我設想的方式是,基本值是列“平均值”,我將設置該列的背景色為灰色。

然后,我希望每個正在運行的AOV根據與該基本值的差異進行顏色編碼。 因此,例如,在該Tablix行5中,基值為$ 88。

那么RunningAOV1st是$ 77,所以它將是紅色。 RunningAOVTwo是$ 84,所以它會是非常淺的紅色。 接下來,RunningAOVThree的價格為87美元,因此它的紅色版本更輕。 如果價格是90美元,那將是非常淺的綠色陰影。

這可能嗎? 我只是假設需要為單元格的背景色添加一些表達式,但是我不確定該表達式是什么。

這個答案與您的答案略有不同。 我有一個類似的情況,選擇在SQL中進行顏色計算。 我認為這樣做比較容易,盡管我認為您可以很輕松地將其轉換為報表中的自定義代碼功能。

這是報告中的數據集示例,該報告根據某些數據的使用期限對單元格進行了着色。 這個年齡已經被人們預知了,所以這里引用的AGe欄只是一個數字。 如果年齡超過90天,它將始終顯示為純紅色。

數據集查詢的一部分

SELECT 
     lp.*
    , 255 as Red-- Red: always 255
    , 255 - (Age/3) AS Green -- Green: gives range from 255 - 225 for 0 to 90 days. Anything over 90 will be set to 255 in next statement
    , 254 - (Age * (254/90)) AS Blue -- Blue: Give range of 254 - 0 for 0 to 90 days
    , cast(NULL as varchar (7)) AS HexColour
INTO #t 
 FROM #d lp
    JOIN Dim.Geography g ON lp.CountryID = g.CountryID


UPDATE #t SET HexColour =  [fn].[ConvertRGBValuesToHexColour] (Red, CASE WHEN Green <225 THEN 225 ELSE Green END , Blue) 

SELECT * FROM #t

上面根據age列計算出的紅色,綠色和藍色值,我們還添加了一個列來存儲最終的十六進制值,並根據函數(如下)對其進行更新。 這個想法是可以在報表設計中直接將HexColor列作為color屬性引用。

以下是將RGB值轉換為十六進制值以供報告使用的函數。

CREATE FUNCTION [fn].[ConvertRGBValuesToHexColour] (@R int, @G int, @B int)

RETURNS varchar(7)
AS
BEGIN
    RETURN '#' + RIGHT(CONVERT(VARCHAR(11), CONVERT(BINARY(1),@R,0) + CONVERT(BINARY(1),@G,0) +CONVERT(BINARY(1),@B,0) , 1),6)
END

您可以右鍵單擊該數據的文本框,然后打開“屬性”。 然后在“填充”選項卡上單擊“ fx”,然后打開“表達式”框。 然后根據IIF語句設置所需的背景色。 在此處輸入圖片說明

我建議有一個表格來定義基於最小值和最大值的顏色編碼。 創建了一個臨時表來顯示它是如何完成的,我沒有獲得所有的組合,但是使用了一個樣本數據集

使用SQL

        select * INTO #Data
        from (
        Select 1 AS Counts,75 AS Value,'Total Orders' AS Category UNION ALL
        Select 1 AS Counts,250 AS Value,'Avg Orders' AS Category UNION ALL
        Select 1 AS Counts,10 AS Value,'Avg Value' AS Category UNION ALL
        Select 1 AS Counts,13 AS Value,'Running 1st' AS Category UNION ALL
        Select 1 AS Counts,'' AS Value,'Running 2nd' AS Category UNION ALL
        Select 1 AS Counts,'' AS Value,'Running 3rd' AS Category UNION ALL
        Select 2 AS Counts,23 AS Value,'Total Orders' AS Category UNION ALL
        Select 2 AS Counts,46 AS Value,'Avg Orders' AS Category UNION ALL
        Select 2 AS Counts,30 AS Value,'Avg Value' AS Category UNION ALL
        Select 2 AS Counts,34 AS Value,'Running 1st' AS Category UNION ALL
        Select 2 AS Counts,'' AS Value,'Running 2nd' AS Category UNION ALL
        Select 2 AS Counts,'' AS Value,'Running 3rd' AS Category UNION ALL
        Select 3 AS Counts,'' AS Value,'Total Orders' AS Category UNION ALL
        Select 3 AS Counts,23 AS Value,'Avg Orders' AS Category UNION ALL
        Select 3 AS Counts,55 AS Value,'Avg Value' AS Category UNION ALL
        Select 3 AS Counts,67 AS Value,'Running 1st' AS Category UNION ALL
        Select 3 AS Counts,77 AS Value,'Running 2nd' AS Category UNION ALL
        Select 3 AS Counts,'' AS Value,'Running 3rd' AS Category  ) a

        select * INTO #Colors
        from (
        select 'Green' color, 1 min_value , 50 max_value  UNION ALL
        select 'Yellow' color, 51 min_value , 100 max_value   UNION ALL
        select 'Red' color, 101 min_value , 1000 max_value 
        ) b

        select  a.Category, a.Counts, a.Value, b.color
        from    #Data a
        left join   #Colors b
                on a.Value between b.min_value and b.max_value

        drop table #Colors
        drop table #Data

這將為輸出提供您想要的顏色

輸入數據集為

在此處輸入圖片說明

輸出看起來像這樣

在此處輸入圖片說明

如果您有物理表,則可以靈活地使用表更改顏色。

設計窗口

在此處輸入圖片說明

在顏色值上添加了背景表達式

在此處輸入圖片說明

因此,根據可用於執行此操作的實際表達式,我在此處看不到任何答案。 我先要說,這將有些復雜,可能需要對端進行一些調整才能使值正確。 您將希望使用SWITCH使其盡可能簡單,並只需為每種顏色指定所需的范圍。 假設所有AOVRunning值均從數據庫的同一列中填充,則以下表達式應在背景色屬性中起作用。

=SWITCH(Fields!AOV.Value > (Fields!Avg.Value + 10), "Green",
Fields!AOV.Value >= (Fields!Avg.Value + 5) AND Fields!AOV.Value <= (Fields!Avg.Value + 10), "LightGreen",
Fields!AOV.Value = Fields!Avg.Value, "Yellow",
Fields!AOV.Value <= (Fields!Avg.Value - 5) AND Fields!AOV.Value >= (Fields!Avg.Value -10), "LightRed",
Fields!AOV.Value < (Fields!Avg.Value - 10), "Red",
true, "White")

這只是將每個AOV值與平均值以及與該平均值關聯的范圍進行比較。 顯然,您可以根據選擇的跨度向其中添加盡可能多的顏色-這只是一個示例。 最終的true, "White"僅捕獲不滿足任何其他條件比較的所有剩菜。 您也可以在SWITCH外部添加一個IIF以消除這些結果,然后再進入SWITCH ...

=IIF(Fields!AOV.Value Is Nothing, "White", SWITCH(....))`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM