Visual studio 根据从先前值到当前值SSRS的值差更改颜色

Visual studio 根据从先前值到当前值SSRS的值差更改颜色,visual-studio,reporting-services,Visual Studio,Reporting Services,我试图将当前行值与前一行值进行比较,但仅在同一组中进行比较 我有第1组工厂,第1组设备标签,详细信息组, 我在Fill属性中尝试了这段代码,但它不起作用,它似乎每次都会改变每组第一行的颜色,而不管前一行的值如何 =IIf(Fields!DeviceTag.Value <> Previous(Fields!DeviceTag.Value), "Yellow", "White") 因此,我的数据集如下所示: Plant DeviceTag Description

我试图将当前行值与前一行值进行比较,但仅在同一组中进行比较

我有第1组工厂,第1组设备标签,详细信息组, 我在Fill属性中尝试了这段代码,但它不起作用,它似乎每次都会改变每组第一行的颜色,而不管前一行的值如何

=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不在同一组中。另外,第二行表示东部应为黄色,因为它与之前的西部位置不同

在Crystal Reports中,您可以执行以下操作:

if {#ChangeCounter}=1 then nocolor else
if currentfieldvalue <> previous({DataSet.Field}) then cryellow else nocolor
其中公式更改计数器仅为1


清除为mud???

如果您可以控制数据集中的查询,我总是发现在数据集查询中这样做更容易

操纵SSRS将接收到的最终数据集,使其具有另一列,该列告诉SSRS是否为单元格着色。并将业务逻辑保留在DB查询中

您可以使用row_number对每个组中的每一行进行编号,然后在新的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中的单元格中将背景设置为仅为字段的表达式!CellColor.Value.

您需要使用上一个函数的Scope参数,提供ChildGroup1设备标记的名称。e、 g

=iiffeelds!DeviceTag.Value PreviousFields!设备标记值,子组1,黄色,白色

这是文件:


=IIFRUNNINGVALUEFields!Description.Value,COUNTDISTINCT,DataSetName MOD 2=0,黄色,白色不确定这是否是您想要的。。。。。根据更改数据集名称数据集名称来自何处,指定在何处?这是Tablix名称吗?无论您在哪里构建报表,都应该有一些报表数据,这将有一个datasource文件夹和一个dataset文件夹。数据集的名称将在其中。通常默认为DataSet1Mine是默认的DataSet1,但是,这似乎会随机给值着色,有时是为了更改,有时是在没有更改时。似乎也与组无关。try=iifields!DeviceTag.Value=以前的字段!Value,Nothing,Yellow语法似乎不正确,它在前面的字段下面加下划线!当我应用它时,它将所有的DeviceTag条目都涂成黄色。不幸的是,语法检查通常滞后于语法的更改。注意第二个参数应该是行组名,而不是字段名。我可以完全控制数据集中的查询。你能给我举个例子,说明我如何在SSRS中添加一列来给单元格上色吗?用一个例子更新了答案-不是100%确定你的业务逻辑这基本上连接了整行列,然后如果我看的结果正确的话,对前一行进行比较。我真正需要的是像您这样比较行,但只将已更改为黄色的列变为黄色。我认为您将需要多个CellColor列—每个要应用业务逻辑的字段一个。因此,您的说法只是添加多个case语句:case when a.CyberAssetDesc!=b、 CyberAssetDesc然后为“黄色”或“透明”结尾为CyberAssetDesCellColor,如果a.DeviceLoc!=b、 DeviceLoc然后为“黄色”或“透明”,最后为DeviceLocCellColor