Hello!
I am new to data expressions in dashboard. I want to combine two columns from one layer, by dividing them with each other, but my code gives me no results. I also get no error message, it is just empty.
If anyone has an idea what is wrong with my code I am grateful to hear. Thanks in advance.
/Elinor
var fs = FeatureSetByPortalItem(Portal('https://www.arcgis.com'),
'1db5c1db1d2d44a985b2a2144f6c663f', 0,
["M3SK_HA", "M3SK_HA_Lov"], false)
var percentLov = {
'fields': [{'name':'Lovpercent', 'type':'esriFieldTypeDouble'},
],
'geometryType': '',
'features':
[{'attributes':
{'Lovpercent': 'M3SK_HA_Lov'/'M3SK_HA'
}}]};
return FeatureSet(Text(percentLov));
Solved! Go to Solution.
I am experimenting now, and I found someone wrote in this forum that the expression must return a FeatureSet. Can one add something like this to your code:?
var Dict = {
'fields': [{'name':'Lovpercent', 'type':'esriFieldTypeDouble'},
{'name':'M3SK_HA_Lov', 'type':'esriFieldTypeDouble'},
{'name':'M3SK_HA', 'type':'esriFieldTypeDouble'}],
'geometryType': '',
'features':
[{'attributes':
{'Percent': ('M3SK_HA_Lov'/ 'M3SK_HA'),
'M3SK_HA_Lov': 'M3SK_HA_Lov',
'M3SK_HA': 'M3SK_HA'
}}]};
return FeatureSet(Text(Dict));
If you check out the function reference pages, the GroupBy function returns a FeatureSet, which is why it's a great workaround.
The thing with Data Expressions is that, yes, they need to use a FeatureSet, but when you define them yourself, you need to add every feature one by one. Defining the FeatureSet's features array as you have in your expression would leave you with a single feature.
Think of it like this:
features: [
// feature 1
{ attributes: {
attribute1: value,
attribute2: value
}},
// feature 2
{ attributes: {
attribute1: value,
attribute2: value
}},
... // and so on, for every feature in the layer
]
Manually defining each feature is not realistic, so most Data Expressions will use a for loop to iterate over the input features. If you wanted to go that route, you've got a bit more you'll need to add.
var fs = FeatureSetByPortalItem(
Portal('https://www.arcgis.com'),
'1db5c1db1d2d44a985b2a2144f6c663f', 0,
["M3SK_HA", "M3SK_HA_Lov"],
false
)
var out_dict = {
fields: [
{name:'Lovpercent', type:'esriFieldTypeDouble'},
{name:'M3SK_HA_Lov', type:'esriFieldTypeDouble'},
{name:'M3SK_HA', type:'esriFieldTypeDouble'}
],
geometryType: '',
features: []
};
// Iterate over the fs FeatureSet
for (var f in fs){
// calculate percentage
var ha = f['M3SK_HA']
var ha_l = f['M3SK_HA_Lov']
var p = ha_l / ha
// push values into feature array
Push(
out_dict['features'],
{
attributes: {
Lovpercent: p,
M3SK_HA_Lov: ha_l,
M3SK_HA: ha
}
}
)
}
return FeatureSet(Text(out_dict));
Hi Josh!
Big thanks for the explanation how GroupBy works and iterations. The code you wrote was working very good and gave the desired output, I am very grateful for all help! 😄
You're welcome! I'm glad it's working for you!
PS - This GitHub repo is probably the best collection of good, working examples of Data Expressions: https://github.com/Esri/arcade-expressions/tree/master/dashboard_data
Thanks for the link, this page was very good to see real working examples also, even if I wouldn't have been able to do the code you wrote for me based on these examples. I will keep on learning.