Hello,
I'm trying to pass field values to different columns, and also remove the time in the date (like in the image below). I wrote a piece of code but it doesn't work.
// Reference layer using the FeatureSetByPortalItem() method.
var fs = FeatureSetByPortalItem(Portal('https://arcgis.com/'), '74d6c3d630c14458a3c23c71a19447ad', 0, ['*'], false);
// Empty dictionary to capture each value
var choicesDict = {'fields': [{ 'name': 'ID', 'type': 'esriFieldTypeString'},
{ 'name': 'dates', 'type': 'esriFieldTypeDate'},
{ 'name': 'morning', 'type': 'esriFieldTypeString'},
{ 'name': 'afternoon', 'type': 'esriFieldTypeString'},
{ 'name': 'night', 'type': 'esriFieldTypeString'}],
'geometryType': '',
'features': []};
// Store values in the dictionary
for (var feature in fs) {
var id = feature['ID']
var actdate = feature['actionDate']
var morning = feature['Shift_vehicles'] == 'Morning check (6-7am)'
var afternoon = feature['Shift_vehicles'] == 'Afternoon check (2-4pm)'
var night = feature['Shift_vehicles'] == 'Night check (11pm-1am)'
Push(choicesDict.features, {"attributes": {"ID": id,
"dates": actdate,
"morning": morning,
"afternoon": afternoon,
"night": night}})
}
//return choicesDict
// Convert dictionary to featureSet.
var fs_dict = FeatureSet(Text(choicesDict));
return fs_dict
// Return featureset
return GroupBy(fs_dict, ['ID', 'dates'],
[{ name: 'morning', expression: 'morning', statistic: 'COUNT' },
{ name: 'afternoon', expression: 'afternoon', statistic: 'COUNT' },
{ name: 'night', expression: 'night', statistic: 'COUNT' }]);
Solved! Go to Solution.
I believe it is due to the date formatting - expecting in UNIX timestamp.
Also helped to modify the date (remove time) and logic for counting if false (changed to null)
// Reference layer using the FeatureSetByPortalItem() method.
var fs = FeatureSetByPortalItem(Portal('https://arcgis.com/'), '74d6c3d630c14458a3c23c71a19447ad', 0, ['*'], false);
// Empty dictionary to capture each value
var choicesDict = {'fields': [{ 'name': 'ID', 'type': 'esriFieldTypeString'},
{ 'name': 'dates', 'type': 'esriFieldTypeDate'},
{ 'name': 'morning', 'type': 'esriFieldTypeString'},
{ 'name': 'afternoon', 'type': 'esriFieldTypeString'},
{ 'name': 'night', 'type': 'esriFieldTypeString'}],
'geometryType': '',
'features': []};
//define the start of date
var start = ToLocal(Date(1970, 0, 01, 0, 0, 0, 0))
// Store values in the dictionary
for (var feature in fs) {
var id = feature['ID']
//remove the time
var actdate = Date(Year(feature['actionDate']),Month(feature['actionDate']),Day(feature['actionDate']))
//Calculate the difference
var dt = DateDiff(actdate, start, 'milliseconds')
//make the value to null for count
var morning = Iif(feature['Shift_vehicles'] == 'Morning check (6-7am)',1,null)
var afternoon = Iif(feature['Shift_vehicles'] == 'Afternoon check (2-4pm)',1,null)
var night = Iif(feature['Shift_vehicles'] == 'Night check (11pm-1am)',1,null)
Push(choicesDict.features, {"attributes": {"ID": id,
"dates": dt,
"morning": morning,
"afternoon": afternoon,
"night": night}})
}
//return choicesDict
// Convert dictionary to featureSet.
var fs_dict = FeatureSet(Text(choicesDict));
return fs_dict
// Return featureset
return GroupBy(fs_dict, ['ID', 'dates'],
[{ name: 'morning', expression: 'morning', statistic: 'COUNT' },
{ name: 'afternoon', expression: 'afternoon', statistic: 'COUNT' },
{ name: 'night', expression: 'night', statistic: 'COUNT' }]);
Cheers,
Tang
I believe it is due to the date formatting - expecting in UNIX timestamp.
Also helped to modify the date (remove time) and logic for counting if false (changed to null)
// Reference layer using the FeatureSetByPortalItem() method.
var fs = FeatureSetByPortalItem(Portal('https://arcgis.com/'), '74d6c3d630c14458a3c23c71a19447ad', 0, ['*'], false);
// Empty dictionary to capture each value
var choicesDict = {'fields': [{ 'name': 'ID', 'type': 'esriFieldTypeString'},
{ 'name': 'dates', 'type': 'esriFieldTypeDate'},
{ 'name': 'morning', 'type': 'esriFieldTypeString'},
{ 'name': 'afternoon', 'type': 'esriFieldTypeString'},
{ 'name': 'night', 'type': 'esriFieldTypeString'}],
'geometryType': '',
'features': []};
//define the start of date
var start = ToLocal(Date(1970, 0, 01, 0, 0, 0, 0))
// Store values in the dictionary
for (var feature in fs) {
var id = feature['ID']
//remove the time
var actdate = Date(Year(feature['actionDate']),Month(feature['actionDate']),Day(feature['actionDate']))
//Calculate the difference
var dt = DateDiff(actdate, start, 'milliseconds')
//make the value to null for count
var morning = Iif(feature['Shift_vehicles'] == 'Morning check (6-7am)',1,null)
var afternoon = Iif(feature['Shift_vehicles'] == 'Afternoon check (2-4pm)',1,null)
var night = Iif(feature['Shift_vehicles'] == 'Night check (11pm-1am)',1,null)
Push(choicesDict.features, {"attributes": {"ID": id,
"dates": dt,
"morning": morning,
"afternoon": afternoon,
"night": night}})
}
//return choicesDict
// Convert dictionary to featureSet.
var fs_dict = FeatureSet(Text(choicesDict));
return fs_dict
// Return featureset
return GroupBy(fs_dict, ['ID', 'dates'],
[{ name: 'morning', expression: 'morning', statistic: 'COUNT' },
{ name: 'afternoon', expression: 'afternoon', statistic: 'COUNT' },
{ name: 'night', expression: 'night', statistic: 'COUNT' }]);
Cheers,
Tang
Oh wow!!! Thank you very very much!! It works 🙂
I'd like to ask you one thing:
1. why is it necessary to add the start date and then use the DateDiff?
Hi Veronica,
For the date field, it is expecting in the format of Unix Timestamp which is the elapsed time after January 1st, 1970 at UTC.
Cheers,
Tang
With this week's update to Arcade and ArcGIS Dashboards, date fields in feature set constructors now just work. You no longer have to wrap dates with Number() if you pass the dictionary into the FeatureSet() function (which as of this release accepts a dictionary as opposed to only text based JSON).
Instead of:
return FeatureSet(Text(dict))
Do this:
return FeatureSet(dict)
Learn more in this blog post.
NOTE: For Enterprise users, this update is targeted for 11.2