{"id":389482,"date":"2018-12-21T06:20:16","date_gmt":"2018-12-21T14:20:16","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=389482"},"modified":"2024-11-11T12:35:38","modified_gmt":"2024-11-11T20:35:38","slug":"whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","title":{"rendered":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)"},"author":6981,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[777102,22941],"tags":[],"industry":[],"product":[36551],"class_list":["post-389482","blog","type-blog","status-publish","format-standard","hentry","category-arcade","category-mapping","product-arcgis-online"],"acf":{"short_description":"Arcade is one of the many ways you can make smarter, and more elegant maps.  Learn how FeatureSets let you work with other layers in your map.","flexible_content":[{"acf_fc_layout":"content","content":"<p>In <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/product\/mapping\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-1\/\">Part 1<\/a> of this series, we introduced <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#featureset\">FeatureSets<\/a> as a way to work with other layers within your map to make more expressive pop-ups by writing just a few lines of code.\u00a0 In Part 2, we\u2019ll look at performance and how to access features in the FeatureSet.<\/p>\n<p>Before we go further, I think the single most important piece of advice with Arcade is to <strong>be purposeful<\/strong> when writing Arcade expressions. Sketch out the goal on a pad of paper first before you start writing and think about the problem you want to solve before you dive in.<\/p>\n<h3>Understanding what\u2019s slowing you down<\/h3>\n<p>If your expression is slow (e.g. the pop-up is too slow), the fastest way to investigate the performance is to use the Network tab of the Chrome browser debugger (Ctrl+Shift+J) to filter the requests by the word query.\u00a0 Then click a feature on the map, watch the queries being executed and find the bottleneck by looking at the time column. Once you have an idea which query is slowing you down, you can start to understand how you might be able to optimize the expression.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":389492,"id":389492,"title":"slowdown_arcade","filename":"slowdown_arcade.png","filesize":1110665,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\/slowdown_arcade","alt":"","author":"6981","description":"","caption":"","name":"slowdown_arcade","status":"inherit","uploaded_to":389482,"date":"2018-12-21 12:54:11","modified":"2018-12-21 12:54:11","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1315,"height":932,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade-300x213.png","medium-width":300,"medium-height":213,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade-768x544.png","medium_large-width":768,"medium_large-height":544,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade-1024x726.png","large-width":1024,"large-height":726,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade.png","1536x1536-width":1315,"1536x1536-height":932,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade.png","2048x2048-width":1315,"2048x2048-height":932,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade-656x465.png","card_image-width":656,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/slowdown_arcade.png","wide_image-width":1315,"wide_image-height":932}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><a name='chaining-number-of-queries-and-performance'><\/a><\/p>\n<h3>Chaining, number of queries, and performance<\/h3>\n<p>Arcade needs to query the data in the feature layer in order to evaluate expressions. Because of that, it stands to reason that the more times an Arcade expression queries the feature layer, the slower the pop-up loads.\u00a0 This is true whether you write one expression that queries the layer multiple times, or write multiple expressions that each query the data. If you recall the <a href=\"http:\/\/www.arcgis.com\/home\/webmap\/viewer.html?webmap=2b998111603f4cd4bf135647b24b21b6\">map<\/a> from Part 1, you\u2019ll notice that from time to time the pop-up can take a bit longer than you\u2019d like to load.\u00a0 There are 3 expressions in the pop-up:<\/p>\n<ul>\n<li>One to get the total trees in the neighborhood<\/li>\n<li>One to get the total trees and then calculate the density<\/li>\n<li>And one to get all the maple trees in the neighborhood<\/li>\n<\/ul>\n<p>The first 2 expressions are using an identical FeatureSet and therefore the same query.\u00a0 In order to load the pop-up, the expression executes 2 identical queries, plus a 3<sup>rd<\/sup> unique query.\u00a0 In the following example from Part 1, we could adjust the pop-up to use a single Arcade expression and improve the performance by reducing the number of queries to the trees layer from 3 to 2.<\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">\/\/ Get all the trees and count them<br \/>\nvar trees = FeatureSetByName($map,\"Urban Forestry\")<br \/>\nvar countTrees = Count(Intersects(trees,$feature))<\/code><\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">\/\/ Calculate the tree density<br \/>\nvar treeDensity = Round(countTrees \/ AreaGeodetic($feature, 'square-kilometers'),2)<\/code><\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">\/\/ Get all the maple trees and count them<br \/>\nvar mapleTrees = Filter(trees,\"COMMON_NAM LIKE '%MAPLE%'\")<br \/>\nvar countMapleTrees = Count(Intersects(mapleTrees,$feature))<\/code><\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">\/\/ Build the pop-up string<br \/>\nvar finalString = \"The Neighborhood of \" + $feature[\"AREA_NAME\"] + \" has a total of \"+ countTrees + \" street trees making for \" + treeDensity + \" trees per SQ KM. Of those trees, \" + countMapleTrees + \" of them are part of the Maple tree family.\"<br \/>\nreturn finalString<\/code><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":389512,"id":389512,"title":"part2arcade_popup","filename":"part2arcade_popup.png","filesize":440595,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\/part2arcade_popup","alt":"","author":"6981","description":"","caption":"","name":"part2arcade_popup","status":"inherit","uploaded_to":389482,"date":"2018-12-21 12:57:36","modified":"2018-12-21 12:57:36","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":737,"height":449,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup-300x183.png","medium-width":300,"medium-height":183,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","medium_large-width":737,"medium_large-height":449,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","large-width":737,"large-height":449,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","1536x1536-width":737,"1536x1536-height":449,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","2048x2048-width":737,"2048x2048-height":449,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","card_image-width":737,"card_image-height":449,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/part2arcade_popup.png","wide_image-width":737,"wide_image-height":449}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>The result will be identical but what we\u2019ve done (as shown below) is combine all 3 previous expressions into 1, which gives us the opportunity to reuse <code>FeatureSetByName($map,\"Urban Forestry\")<\/code> to get the count and then not have to query it again to calculate the density.\u00a0\u00a0 The 2<sup>nd<\/sup> query is still sent to get the number of Maple trees.\u00a0 While the performance savings may not always be obvious depending on the complexity of the data, it is always a good practice to think about how many queries are getting sent to the feature layer to ensure performant expressions.<\/p>\n<p>Chaining happens when the script executes. Functions that can be chained are aggregated as a single query, which is then sent to the feature layer. The FeatureSet is lazy, meaning it doesn&#8217;t evaluate until it is used in another function, or iterated through in a loop.\u00a0 That is why just defining <code>FeatureSetByName($map,\"Urban Forestry\")<\/code> doesn&#8217;t query the service in the example above. Once it is used in this function chain <code>Count(Intersects(trees,$feature))<\/code> the query is made with the parameters determined by the functions.<\/p>\n<p>Because of that lazy execution and chaining, the following two expressions are identical, and will have the same performance with respect to query execution:<\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var trees = FeatureSetByName($map,\"Urban Forestry\")<br \/>\nvar treesInt = Intersects(trees,$feature)<br \/>\nvar treesCount = Count(treesInt)<br \/>\nreturn treesCount<\/code><\/p>\n<p>VS<\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var treesCount = Count(Intersects(FeatureSetByName($map,\"Urban Forestry\"),$feature))<br \/>\nreturn treesCount<\/code><\/p>\n<p>&nbsp;<\/p>\n<h3>Reduce, sort, and summarize<\/h3>\n<p>Up until now, the examples we\u2019ve used have only involved getting the number of features in a FeatureSet and then doing something with it.\u00a0 You can also dig into a FeatureSet by looping through it and exploring individual features.\u00a0 Before we look at that, though, I want to talk about the importance of reducing the number of FeatureSets before you start iterating over them.\u00a0 Reduction is essential especially with larger datasets.\u00a0 Trying to query and work with millions of features will not be fast enough to be useful.\u00a0 There are over 500,000 trees in the layer above and if I wanted to iterate over all the trees just to show a value in the pop-up, we would be waiting for a very long time.\u00a0 You need to leverage the functions available to you to reduce the features you\u2019re working with down to a manageable size. That can be done in a variety of ways:<\/p>\n<ul>\n<li>Filter the <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/create-maps\/apply-filters.htm\">layer<\/a> in your map before you start writing your expression or use the <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#filter\">filter<\/a>. Attribute-based filtering is almost always faster than spatial filtering and you should use it first if possible. If you are looking to refer to a variable inside of your filter expression, you can reference inside the filter function by putting an @ in front of the variable.<\/li>\n<\/ul>\n<p style=\"padding-left: 60px;\"><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var filterValue = '%MAPLE%'<br \/>\nvar mapleTrees = Filter(trees,\"COMMON_NAM LIKE @filterValue \")<br \/>\nvar countMapleTrees = Count(Intersects(mapleTrees,$feature))<\/code><\/p>\n<ul>\n<li>Use <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/\">Geometry<\/a> operations like Intersects, Overlaps, etc. to minimize the features that you\u2019re working with.<\/li>\n<li>Pair together Sorting (<a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#orderby\">Orderby<\/a>) and Limiting (<a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/data_functions\/#top\">Top<\/a>) the results to get what you want. For example:<\/li>\n<\/ul>\n<p style=\"padding-left: 60px;\"><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var trees = FeatureSetByName($map,\"Urban Forestry\")<br \/>\nvar diamTrees = Top(OrderBy(Intersects(trees,$feature), 'DBH_TRUNK DESC'),5)<\/code><\/p>\n<p style=\"padding-left: 60px;\">This will give you a FeatureSet that only contains the top 5 trees with the largest trunk size sorted by size in the neighborhood.<\/p>\n<ul>\n<li>Let the feature layer calculate the <a href=\"https:\/\/developers.arcgis.com\/arcade\/function-reference\/math_functions\">stats<\/a> for you instead of doing it yourself.<\/li>\n<\/ul>\n<p style=\"padding-left: 60px;\"><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var trees = FeatureSetByName($map,\"Urban Forestry\")<br \/>\nreturn Max(Intersects(trees,$feature), 'DBH_TRUNK')<\/code><\/p>\n<p style=\"padding-left: 60px;\">This returns the tree in the neighborhood with the largest trunk size.<\/p>\n<p>Now that we have that out of the way, let\u2019s do something useful with the features inside the FeatureSet.<\/p>\n<h3>Working with data inside FeatureSets<\/h3>\n<p>Continuing with the example above, let\u2019s look at the 5 trees with the largest diameter in each neighborhood, and add some information into the pop-up like the tree name and the tree\u2019s diameter. To start, we\u2019ll use our previous code and add a for loop to iterate over the 5 trees in the FeatureSet.<\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">var trees = FeatureSetByName($map,\"Urban Forestry\")<br \/>\nvar diamTrees = Top(OrderBy(Intersects(trees,$feature), 'DBH_TRUNK DESC'),5)<br \/>\nvar popupResult = ''<br \/>\nfor (var f in diamTrees) {<br \/>\npopupResult += f.COMMON_NAM + \"(\" + f.DBH_TRUNK + \"cm)\" + TextFormatting.NewLine<br \/>\n}<br \/>\nreturn Proper(popupResult)<\/code><\/p>\n<p>If you add the expression above to the Neighborhood layer, and then put that in a custom pop-up with a nice header (\u201cTop 5 Largest Trees\u201d), it might look something like this. The red box below shows the Arcade expression portion.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":389542,"id":389542,"title":"top5treesarcade","filename":"top5treesarcade.png","filesize":1074953,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\/top5treesarcade","alt":"","author":"6981","description":"","caption":"","name":"top5treesarcade","status":"inherit","uploaded_to":389482,"date":"2018-12-21 13:06:55","modified":"2018-12-21 13:06:55","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":930,"height":522,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade-300x168.png","medium-width":300,"medium-height":168,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade-768x431.png","medium_large-width":768,"medium_large-height":431,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade.png","large-width":930,"large-height":522,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade.png","1536x1536-width":930,"1536x1536-height":522,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade.png","2048x2048-width":930,"2048x2048-height":522,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/top5treesarcade.png","wide_image-width":930,"wide_image-height":522}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>So, what is happening in the example above? We\u2019ve introduced a <code>for<\/code> loop into the expression to iterate over the FeatureSet <code>diamTrees<\/code>. Inside that for loop, we\u2019ve got a single statement:<\/p>\n<p><code style=\"background: #f4f4f4;border: 1px solid #ddd;border-left: 3px solid #f36d33;color: #666;page-break-inside: avoid;font-family: monospace;font-size: 15px;line-height: 1.6;margin-bottom: 1.6em;max-width: 100%;overflow: auto;padding: 1em 1.5em;display: block;word-wrap: break-word;\">popupResult += f.COMMON_NAM + \"(\" + f.DBH_TRUNK + \"cm)\" + TextFormatting.NewLine<\/code><\/p>\n<p>This statement builds the text we see in the screenshot above.\u00a0 It does this by concatenating values from the feature together with some static text for formatting.\u00a0 You\u2019ll notice the <strong>f.&lt;fieldname&gt;<\/strong> notation is used to access a specific field within the current feature (denoted by f) in the FeatureSet, and is also taking advantage of\u00a0\u00a0 <code>TextFormatting.NewLine<\/code> to add a break between feature information in the pop-up.\u00a0 With each pass through the for loop, we append the new string to <code>popupResult<\/code> using the += assignment.<\/p>\n<h3>Key things to remember<\/h3>\n<p>I happen to like lists, so heres a list to help summarize what we\u2019ve learned into a handy set of tips:<\/p>\n<ul>\n<li>Define the minimum needed FeatureSets required to do the job<\/li>\n<li>Always reduce your FeatureSets when you can<\/li>\n<li>Filtering by attributes will always be faster than filtering by geometry<\/li>\n<li>Chain functions together when possible to reduce queries<\/li>\n<li>Use stats and sorting to avoid unnecessary loops<\/li>\n<li>Review\u00a0<a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/product\/mapping\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-1\/\">Part 1<\/a>\u00a0of this blog series<\/li>\n<\/ul>\n<h3>Learn more<\/h3>\n<p>Keep an eye on our blog page for a closer look into using FeatureSets, specifically when calculating fields.\u00a0 Until then, if you want to read more about Arcade, be sure to check out the <a href=\"http:\/\/developers.arcgis.com\/arcade\/\">Developers Site<\/a>, along with our <a href=\"https:\/\/github.com\/Esri\/arcade-expressions\/\">Community Github<\/a> site with great Arcade examples.<\/p>\n<p>&nbsp;<\/p>\n"}],"authors":[{"ID":6981,"user_firstname":"Paul","user_lastname":"Barker","nickname":"Paul Barker","user_nicename":"pbarker_esri","display_name":"Paul Barker","user_email":"PBarker@esri.com","user_url":"http:\/\/www.arcgis.com","user_registered":"2018-03-02 00:19:05","user_description":"Product Engineer for ArcGIS Online and technology enthusiast.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/Card.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/Banner.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-11T20:35:38+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\"},\"author\":{\"name\":\"Paul Barker\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/846786f93743fa3bc93d8dfb0174351e\"},\"headline\":\"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)\",\"datePublished\":\"2018-12-21T14:20:16+00:00\",\"dateModified\":\"2024-11-11T20:35:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\"},\"wordCount\":11,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"articleSection\":[\"Arcade\",\"Mapping\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\",\"name\":\"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2018-12-21T14:20:16+00:00\",\"dateModified\":\"2024-11-11T20:35:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/846786f93743fa3bc93d8dfb0174351e\",\"name\":\"Paul Barker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=96&d=blank&r=g\",\"caption\":\"Paul Barker\"},\"description\":\"Product Engineer for ArcGIS Online and technology enthusiast.\",\"sameAs\":[\"http:\/\/www.arcgis.com\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/pbarker_esri\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","og_locale":"en_US","og_type":"article","og_title":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-11-11T20:35:38+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2"},"author":{"name":"Paul Barker","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/846786f93743fa3bc93d8dfb0174351e"},"headline":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)","datePublished":"2018-12-21T14:20:16+00:00","dateModified":"2024-11-11T20:35:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2"},"wordCount":11,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"articleSection":["Arcade","Mapping"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2","name":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2018-12-21T14:20:16+00:00","dateModified":"2024-11-11T20:35:38+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcade\/arcade\/whats-new-with-arcade-taking-a-stroll-through-featuresets-part-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"What\u2019s new with Arcade: Taking a stroll through FeatureSets (Part 2)"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/846786f93743fa3bc93d8dfb0174351e","name":"Paul Barker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ca4f6dbef8cb6af4546310cabd3eb9a72816fbe0d68565c1e9531a955581ed13?s=96&d=blank&r=g","caption":"Paul Barker"},"description":"Product Engineer for ArcGIS Online and technology enthusiast.","sameAs":["http:\/\/www.arcgis.com"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/pbarker_esri"}]}},"text_date":"December 21, 2018","author_name":"Paul Barker","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/pbarker_esri","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/12\/Banner.png","primary_product":"ArcGIS Online","tag_data":[],"category_data":[{"term_id":777102,"name":"Arcade","slug":"arcade","term_group":0,"term_taxonomy_id":777102,"taxonomy":"category","description":"","parent":0,"count":100,"filter":"raw"},{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2717,"filter":"raw"}],"product_data":[{"term_id":36551,"name":"ArcGIS Online","slug":"arcgis-online","term_group":0,"term_taxonomy_id":36551,"taxonomy":"product","description":"","parent":0,"count":2445,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis-online","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/389482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/6981"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=389482"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/389482\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=389482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=389482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=389482"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=389482"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=389482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}