2017-10-05 94 views
0

我正嘗試將當前行值與前一行值進行比較,但僅限於同一組內。我有Group1(Plant),ChildGroup1(DeviceTag),Details Group, 我已經嘗試過Fill屬性中的這段代碼,但它不起作用,它似乎只改變每個組的第一行的顏色不管前一行的值如何。根據與之前值之間的差值更改顏色到當前值SSRS

=IIf(Fields!DeviceTag.Value <> Previous(Fields!DeviceTag.Value), "Yellow", "White") 

所以我的數據集是這樣的:

Plant  DeviceTag  Description Location 

    A   Tag1   ABCD   West 
       Tag1   WXYZ   West  DeviceTag Group 1 
_____________________________________________ 
    A   Tag2   EFGH   East 
       Tag2   IJKL   East  DeviceTag Group 2 
       Tag2   IJKL   West 

在這兩個DeviceTag組,說明改,所以我想ABCD的顏色變爲黃色和EFGH黃色但不WXYZ因爲它與EFGH不在同一組。另外第二行表示East應該是Yellow,因爲它與以前的West位置不同。

在Crystal Reports你會怎麼做:

if {#ChangeCounter}=1 then nocolor else 
if currentfieldvalue <> previous({DataSet.Field}) then cryellow else nocolor 

當式#ChangeCounter僅有1

清除泥?

+0

'= IIF(RUNNINGVALUE(領域!Description.Value,COUNTDISTINCT 「的DataSetName」)MOD 2 = 0, 「黃」, 「白」)'不知道這是否是你所追求的變化.....數據集名稱相應 – Neal1581

+0

「DataSetName」來自哪裏,指定的地方在哪裏?這是Tablix的名字嗎? – pinchepooch

+0

無論你在建立報告,你都應該有一些報告數據,這將有一個數據源文件夾和一個數據集文件夾。你的數據集的名稱將在那裏。通常默認爲DataSet1 – Neal1581

回答

1

我總覺得這種事情更容易在數據集查詢做(假設你可以控制數據集中的查詢)。

操縱您的最終數據集(一個SSRS將收到)有另一列告訴SSRS彩色的單元格或不。並在數據庫查詢中保留業務邏輯。

您可以使用row_number()對每一行(在每個組內)進行編號,然後將該表加回到新行號列中。

也許這樣的事情?我不確定我100%是否遵循您的單元格着色邏輯,並且我確定您的數據集比您提供的數據集大,但您可以根據自己的需要進行調整。

 
;with Data as 
(
    select 'A' as Plant, 'Tag1' as DeviceTag, 'ABCD' as Description, 'West' as Location union all 
    select 'A' as Plant, 'Tag1' as DeviceTag, 'WXYZ' as Description, 'West' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'EFGH' as Description, 'East' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'IJKL' as Description, 'East' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'IJKL' as Description, 'West' as Location 
), 

DataWithRowNumbers as 
(
select 
    *, 
    row_number() over (partition by DeviceTag order by Description) as DeviceTagGroupRowNumber 
from 
    Data  
) 

select 
    a.*, 
    case when a.Description != b.Description then 'Yellow' else 'Transparent' end as CellColor 
from 
    DataWithRowNumbers a 
    left join DataWithRowNumbers b on a.DeviceTag = b.DeviceTag and a.DeviceTagGroupRowNumber = b.DeviceTagGroupRowNumber - 1 

然後可以設置在單元(在SSRS)的背景,這將只是Fields!CellColor.Value的表達式。

+0

我完全控制了數據集中的查詢。你能給我舉一個例子,說明如何將一列添加到SSRS來爲單元格着色? – pinchepooch

+0

用一個示例更新了答案 - 並非100%確定了您的業務邏輯 – thomas

+0

這基本上連接了整行的列,然後對前一行進行比較(如果我正確查看結果)。我真正需要的是比較像你這樣做的行,但只將變成黃色的列。 – pinchepooch

0

您需要使用以前的功能的範圍參數,提供您ChildGroup1(DeviceTag)的名稱。例如

= I如果

這裏的DOCO(字段DeviceTag.Value <>上(場DeviceTag.Value, 「ChildGroup1」), 「黃」, 「白」!):

https://docs.microsoft.com/en-us/sql/reporting-services/report-design/report-builder-functions-previous-function

+0

該語法似乎不正確,它強調了Previous(Fields!DeviceTag.Value,「DeviceTag」)當我應用它時,它將所有DeviceTag條目顏色設置爲黃色。 – pinchepooch

+0

不幸的是,語法檢查通常滯後於語法的變化。注意第二個參數應該是行組名稱,而不是字段名稱。 –