@Nedamohamadzadeh are you set on having the difference displayed on a map? If you are open to displaying the difference number with an indicator, you could write a new data expression, bring in water level data twice, subtract the two water level fields, returning the difference, which then you could display in an indicator, having it render only when the category selectors are activated. With an indicator it would need to be on an individual site, but you could probably do a table similarly if you want to display multiple. Not optimal but could get your functionality.
Edit - I don't think this will work, as there is no way to dynamically filter the years. You would have preprocess for every possible year combination.
Edit2 - It would be possible to do, similar concept as below, in a new data expression but this would only work as a table or an indicator not a map.
// Load the dataset
var data = FeatureSetByPortalItem(
Portal("https://www.arcgis.com"),
"<layerID>",
0, // layer index
["SiteID", "Year", "WaterLevel"]
)
// Get unique SiteIDs
var sites = GroupBy(data, ["SiteID"], [])
var results = []
for (var s in sites) {
var siteID = s.SiteID
// Get all records for this SiteID
var siteRecords = Filter(data, "SiteID = @siteID")
var recordsList = []
// Convert to list for easier looping
for (var r in siteRecords) {
Push(recordsList, r)
}
// Compare each pair of years
for (var i = 0; i < Count(recordsList); i++) {
var recOld = recordsList[i]
var yearOld = recOld.Year
var levelOld = recOld.WaterLevel
for (var j = 0; j < Count(recordsList); j++) {
var recNew = recordsList[j]
var yearNew = recNew.Year
var levelNew = recNew.WaterLevel
// Only include if yearNew > yearOld
if (yearNew > yearOld) {
var diff = levelNew - levelOld
Push(results, {
attributes: {
SiteID: siteID,
YearOld: yearOld,
YearNew: yearNew,
Difference: diff
}
})
}
}
}
}
// Define the new FeatureSet structure
var output = {
fields: [
{ name: "SiteID", type: "esriFieldTypeString" },
{ name: "YearOld", type: "esriFieldTypeInteger" },
{ name: "YearNew", type: "esriFieldTypeInteger" },
{ name: "Difference", type: "esriFieldTypeDouble" }
],
geometryType: "",
features: results
}
return FeatureSet(Text(output))