{"id":853,"date":"2018-12-17T10:24:54","date_gmt":"2018-12-17T18:24:54","guid":{"rendered":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/option-sets-and-many-to-many-relationships-for-canvas-apps\/"},"modified":"2025-06-11T08:05:48","modified_gmt":"2025-06-11T15:05:48","slug":"option-sets-and-many-to-many-relationships-for-canvas-apps","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/option-sets-and-many-to-many-relationships-for-canvas-apps\/","title":{"rendered":"Option Sets and Many-to-Many Relationships for Canvas apps"},"content":{"rendered":"<p>We continue to expand our Canvas support for the Common Data Service for Apps, on the road to CDS + Canvas = Awesome.\u00a0 \u00a0With this installment we have refined how Option Sets and Two Option data types work and have added support for Many-to-Many relationships.<\/p>\n<p>These features are available now with the CDS Experimental Connector.\u00a0 \u00a0To enable it, go to the File menu, App settings, Advanced Settings, and scroll to the bottom of the list where you will find this switch:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignleft wp-image-882\" height=\"119\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\" width=\"500\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h40_05.webp 579w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h40_05-300x72.webp 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<p>As the name implies these features are\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/working-with-experimental\">Experimental<\/a>.\u00a0 They are not done, you will experience bugs and gaps in functionality, and you should not deploy production solutions based on this work.\u00a0 We will let you know when it is safe to depend on these features, the primary indication being when we move this switch to <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/working-with-experimental#feature-roll-out-stages\">Preview<\/a> and it is on by default for new apps.<\/p>\n<p>As always, we would love to hear your feedback on the <a href=\"https:\/\/powerusers.microsoft.com\/t5\/PowerApps-Community\/ct-p\/PowerApps1\">community forum<\/a> or at the end of this blog post.\u00a0 This is the final stage before we turn this feature on by default, <strong>now is the time!<\/strong><\/p>\n<h1>Option Sets<\/h1>\n<p>Until now Option Sets have been very difficult to use.\u00a0 For a single <strong>category<\/strong> field there were two fields exposed\u00a0<strong>_category_label<\/strong> and <strong>_category_value<\/strong>.\u00a0 To compare values you had to either take a hard dependency on the label, which is not a good idea as they can be localized which I&#8217;ll discuss later, or you had to look up the numerical value in the portal.<\/p>\n<p>No longer.\u00a0 Now a\u00a0<strong>category<\/strong> is just a <strong>category<\/strong>.\u00a0 An enumeration is brought in for each Option Set making it easy to compare values in a safe manner independent of localization and without you needing to know or care about the numerical value.<\/p>\n<p>Let&#8217;s take a look.\u00a0 My goal with these screenshots is to show how simple it is.\u00a0 You should be completely underwhelmed by the complexity.<\/p>\n<p>Here&#8217;s a screen showing the Products entity in a <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/controls\/control-gallery\"><strong>Gallery<\/strong> control<\/a>, part of the sample data that is included when you check the box to &#8220;add sample apps and data&#8221; when creating an environment:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-869\" height=\"655\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h11_09.png\" width=\"1145\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_09.webp 1145w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_09-300x172.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_09-1024x586.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_09-768x439.webp 768w\" sizes=\"auto, (max-width: 1145px) 100vw, 1145px\" \/><\/p>\n<p>This gallery is showing three different Option Sets.\u00a0 First we have your basic single select Option Set showing the <strong>Category<\/strong> field:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-870\" height=\"281\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h11_17.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_17.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_17-300x74.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_17-1024x252.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h11_17-768x189.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<p>This field appear in the portal&#8217;s entity viewer, with the options available for this Option Set expanded:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-887\" height=\"755\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_13h08_20-1.png\" width=\"1366\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h08_20-1.webp 1366w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h08_20-1-300x166.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h08_20-1-1024x566.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h08_20-1-768x424.webp 768w\" sizes=\"auto, (max-width: 1366px) 100vw, 1366px\" \/><\/p>\n<p>An Option Set value will coerce to a text string automatically making them easy to display to the user.\u00a0 The icon next to the label is an image control that will show a different icon for each of the possible categories:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-871\" height=\"278\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h14_47.png\" width=\"1143\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h14_47.webp 1143w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h14_47-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h14_47-1024x249.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h14_47-768x187.webp 768w\" sizes=\"auto, (max-width: 1143px) 100vw, 1143px\" \/><\/p>\n<p>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-if\"><strong>Switch<\/strong> function<\/a> compares the Category against Laptops, Keyboards, Mice, and Monitors and uses the appropriate icon for each.\u00a0 <strong>Laptops<\/strong> in the formula is an enumeration value, similar to <strong>Red<\/strong> or <strong>Green<\/strong> if you have ever used the <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-colors\"><strong>Color<\/strong> enumeration<\/a> in a Canvas app.\u00a0 If you click into the formula it becomes a little clearer about where these values are coming from:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-878\" height=\"277\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h18_23.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h18_23.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h18_23-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h18_23-1024x248.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h18_23-768x186.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><br \/>\n<strong>&#8216;Category (Products)&#8217;<\/strong> is the name of the enumeration that contains all the possible options for the <strong>Category<\/strong> Option Set.\u00a0 This is a local Option Set defined for this field of this entity only.\u00a0 To disambiguate it from other uses of the word Category we add the name of the entity in parenthesis after the field name.<\/p>\n<p>Our Switch function is missing an entry for <strong>Monitors <\/strong>&#8211; let&#8217;s add that.\u00a0 As we start to type <strong>Category<\/strong> we see the enumeration name among other names that start with &#8220;Category&#8221; (the red wavy lines are because we haven&#8217;t finished typing the formula):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-872\" height=\"342\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h15_20.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_20.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_20-300x90.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_20-1024x306.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_20-768x230.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<p>After we pick our enumeration and add a dot, we see the values for this enumeration, which are the options in the Option Set:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-873\" height=\"339\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h15_53.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_53.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_53-300x89.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_53-1024x303.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h15_53-768x228.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<p>We select <strong>Monitors<\/strong> and complete our formula:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-874\" height=\"278\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h16_09.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_09.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_09-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_09-1024x249.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_09-768x187.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<h2>Multi Select Option Sets<\/h2>\n<p>Moving on, let&#8217;s look at the next field <strong>Size<\/strong>.\u00a0\u00a0Yes, computer hardware is typically not sold by size, please go with it this is only for illustration.\u00a0 This is an example of a Multi Select Option Set.\u00a0 In the portal&#8217;s entity viewer, with the Option Set values expanded:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-888\" height=\"755\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_13h09_06-1.png\" width=\"1372\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_06-1.webp 1372w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_06-1-300x165.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_06-1-1024x563.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_06-1-768x423.webp 768w\" sizes=\"auto, (max-width: 1372px) 100vw, 1372px\" \/><br \/>\n<strong>Size<\/strong> is an example of a global Option Set this can be shared across entities and managed through the Option Sets entry point under Data in the portal:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-893\" height=\"696\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_22h35_59.png\" width=\"1369\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h35_59.webp 1369w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h35_59-300x153.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h35_59-1024x521.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h35_59-768x390.webp 768w\" sizes=\"auto, (max-width: 1369px) 100vw, 1369px\" \/><\/p>\n<p>Since this field is multi valued, when in a Canvas app the\u00a0<strong>Size<\/strong> field is a single column table of Option Set values.\u00a0 Each record contains a single value in the\u00a0<strong>Value\u00a0<\/strong>column.\u00a0 We can use the <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-concatenate\"><strong>Concat<\/strong> function<\/a>\u00a0to aggregate the values in the table together with comma separators into a single text string to show in a label control:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-875\" height=\"278\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h16_18.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_18.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_18-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_18-1024x249.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_18-768x187.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<p>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-text\"><strong>Text<\/strong> function<\/a> is needed since coercion to string is not yet working yet in the <strong>Concat<\/strong> function &#8211; we are still experimental, you will find functional gaps like this here and there.<\/p>\n<h2>Two Option<\/h2>\n<p>Finally, let&#8217;s look at a Two Option field.\u00a0 Two Option fields are very similar to Option Sets but are backed by a Boolean value (<em>true<\/em>, <em>false<\/em>, or <em>blank<\/em>) instead of a numerical field.\u00a0 In the portal&#8217;s entity viewer we have added a <strong>Discontinued<\/strong> field:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-928\" height=\"755\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_13h09_25-2.png\" width=\"1372\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_25-2.webp 1372w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_25-2-300x165.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_25-2-1024x563.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_13h09_25-2-768x423.webp 768w\" sizes=\"auto, (max-width: 1372px) 100vw, 1372px\" \/><\/p>\n<p>Here again we are using the coercion to a text string for end user display:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-883\" height=\"279\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h54_43.png\" width=\"1156\"\/><\/p>\n<p>For the conditional coloring, we use the <strong>Color<\/strong> property of the <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/controls\/control-text-box\"><strong>Label<\/strong> control<\/a>.\u00a0 At present we need to compare this to the enumeration that for\u00a0<strong>Discontinued<\/strong>.\u00a0\u00a0\u00a0But since this is a Boolean value under the covers, in the future, you will be also able to just test it for true\/false directly without the comparison.\u00a0 Both forms will be valid:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-876\" height=\"279\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h16_27.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_27.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_27-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_27-1024x250.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_27-768x187.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><\/p>\n<p>If we click into the formula, we&#8217;ll see the enumeration more clearly, just as we did for <strong>Category<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-884\" height=\"279\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h57_50.png\" width=\"1156\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h57_50.webp 1156w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h57_50-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h57_50-1024x247.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h57_50-768x185.webp 768w\" sizes=\"auto, (max-width: 1156px) 100vw, 1156px\" \/><\/p>\n<p>The check mark and X icons are two different icon controls with conditional visibility (note which icon control is selected in the navigation pane on the left, only one of which is visible on the canvas at a time):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-877\" height=\"278\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h16_32.png\" width=\"1144\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_32.webp 1144w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_32-300x73.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_32-1024x249.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h16_32-768x187.webp 768w\" sizes=\"auto, (max-width: 1144px) 100vw, 1144px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-885\" height=\"279\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h59_02.png\" width=\"1156\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h59_02.webp 1156w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h59_02-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h59_02-1024x247.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_21h59_02-768x185.webp 768w\" sizes=\"auto, (max-width: 1156px) 100vw, 1156px\" \/><\/p>\n<h2>Writing Changes<\/h2>\n<p>Making a change to an Option Set&#8217;s value is done just as we do any other column.\u00a0 We can use an <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/controls\/control-form-detail\"><strong>Edit Form<\/strong> control<\/a>, with the Item property wired to the Gallery control&#8217;s selection:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-894\" height=\"554\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_22h46_09.png\" width=\"1152\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_09.webp 1152w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_09-300x144.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_09-1024x492.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_09-768x369.webp 768w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>At the time of this writing, the Form control will insert View data cards by default for Option Sets.\u00a0 You can change this to an Edit data card by selecting the field in the data pane and picking a different card:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-899\" height=\"227\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_23h12_31.png\" width=\"355\"\/><\/p>\n<p>Each of the Option Sets appear in different Data Cards, each with a <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/controls\/control-combo-box\"><strong>Combo Box<\/strong> control<\/a> within.\u00a0 \u00a0The key properties here are the <strong>DefaultSelectedItems<\/strong> which determines which item is currently selected:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-895\" height=\"277\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_22h46_47.png\" width=\"1152\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_47.webp 1152w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_47-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_47-1024x246.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_47-768x185.webp 768w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>And the Items property, which determines what the available Categories are (in this case).\u00a0 We use the <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-choices\"><strong>Choices<\/strong> function<\/a> just as we do for relational Many-to-One lookups, in this case with the Option Set enumeration name:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-896\" height=\"277\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_22h46_59.png\" width=\"1152\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_59.webp 1152w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_59-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_59-1024x246.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h46_59-768x185.webp 768w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>The other two combo boxes are very similar, the only difference being the <strong>DefaultSelectedItems<\/strong> property on for Multi Select Option Sets is already a table, so it need not be wrapped in another table (no need for the extra &#8220;[&#8221; and &#8220;]&#8221; around it):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-897\" height=\"277\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_22h47_09.png\" width=\"1152\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h47_09.webp 1152w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h47_09-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h47_09-1024x246.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_22h47_09-768x185.webp 768w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>You can of course also use the <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-patch\"><strong>Patch<\/strong> function<\/a> directly:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-898\" height=\"277\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_23h05_59.png\" width=\"1152\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h05_59.webp 1152w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h05_59-300x72.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h05_59-1024x246.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h05_59-768x185.webp 768w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>At the time of this writing, there was a bug preventing the saving of a Multi Select Option Set either with the <strong>Patch<\/strong>\u00a0or <strong>SubmitForm<\/strong> functions.\u00a0 We are working on a remedy and it will eventually work as described here.<\/p>\n<h2>Direct String Comparisons<\/h2>\n<p>I mentioned earlier that, although it is tempting, it was a bad idea to compare an Option Set value to a string.\u00a0 In fact it is such a bad idea that we block you from doing it where we can.\u00a0 \u00a0The reason is simple: Option Set names and labels can be localized.<\/p>\n<p>Let&#8217;s look at a quick example.\u00a0 The following screenshots are of the same app, the left being what an English author would see and the right being what a Spanish author would see:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-944\" height=\"402\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_09h26_04.png\" width=\"1513\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_04.webp 1513w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_04-300x80.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_04-1024x272.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_04-768x204.webp 768w\" sizes=\"auto, (max-width: 1513px) 100vw, 1513px\" \/><\/p>\n<p>Note that the column name <strong>Preferred Day<\/strong>\u00a0in the formula bar is localized.\u00a0 Note too that the Option Set&#8217;s labels are also localized: &#8220;Monday&#8221; to &#8220;Lunes&#8221;, &#8220;Sunday&#8221; to &#8220;Domingo&#8221;, etc.\u00a0 \u00a0It is this later localization that is the problem.\u00a0 In the first checkbox we compare against a string which is properly showing an error and not functioning:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-945\" height=\"402\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_09h26_19.png\" width=\"1514\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_19.webp 1514w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_19-300x80.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_19-1024x272.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_19-768x204.webp 768w\" sizes=\"auto, (max-width: 1514px) 100vw, 1514px\" \/><\/p>\n<p>As written, had we not blocked it, that formula might have worked in Spanish but not in English.\u00a0 This is true for the end users too, even if all your authors were using Spanish, the first English end user would see a problem if we allowed this.\u00a0 The answer is to instead compare against the enumeration value, which is based on the underlying numerical value, as is done in the second checkbox:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-946\" height=\"402\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_09h26_28.png\" width=\"1514\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_28.webp 1514w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_28-300x80.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_28-1024x272.webp 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_09h26_28-768x204.webp 768w\" sizes=\"auto, (max-width: 1514px) 100vw, 1514px\" \/><\/p>\n<p>You will notice that this is properly showing the same check mark pattern in both languages.\u00a0 This formula is language independent.\u00a0 We do support coercion to a string so you can localize the checkmark&#8217;s label to be more consistent with the current language:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-947\" height=\"402\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_09h41_06.png\" width=\"1514\"\/><\/p>\n<p>Displaying Option Set labels is fine, that&#8217;s why they are there.\u00a0 Just don&#8217;t compare them.<\/p>\n<h1>Many-to-Many Relationships<\/h1>\n<p>Ok, let&#8217;s shift gears to relationships.\u00a0 Over the summer we added Many-to-One relationships and in early November we added <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/one-to-many-relationships-for-canvas-apps\/\">One-to-Many relationships<\/a>.\u00a0 It&#8217;s time to complete our relationship support with Many-to-Many.<\/p>\n<p>Many-to-Many relationships are as the name implies, Many Students can have a relationship with Many Teachers:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-931\" height=\"171\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h25_38.png\" width=\"549\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h25_38.webp 549w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h25_38-300x93.webp 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/p>\n<p>This differs from an Orders to Customers relationship, where an Order can only be for one Customer (a Many-to-One relationship).\u00a0 It also differs from an Order to Order Lines relationship, where an Order Line can only belong to one Order (a One-to-Many relationship).<\/p>\n<p>Unlike One-to-Many or Many-to-One relationships, there is no lookup field on either side of the relationship.\u00a0 Instead, CDS maintains a separate hidden entity on behalf of the relationship, sometimes referred to as an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Associative_entity\">associative entity or join table<\/a>.\u00a0 There is no direct access to this entity.<\/p>\n<p>Fortunately we can simplify things considerably if we pick a side.\u00a0 From a single Student&#8217;s perspective this looks like a One-to-Many relationship and we can access the information exactly as we do any other One-to-Many relationship:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-905\" height=\"120\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_23h37_01.png\" width=\"465\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h37_01.webp 465w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h37_01-300x77.webp 300w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><\/p>\n<p>In CDS we can create Students and Teachers entities and relate them through a Many-to-Many relationship:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-926\" height=\"190\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_00h39_05.png\" width=\"946\"\/><\/p>\n<p>In a Canvas app, let&#8217;s create a screen with two galleries, one for Students:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-910\" height=\"483\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_00h09_06.png\" width=\"1023\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_06.webp 1023w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_06-300x142.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_06-768x363.webp 768w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<p>And one for the Teachers related to the selected Student, using the same One-to-Many syntax we use elsewhere:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-911\" height=\"483\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_00h09_12.png\" width=\"1023\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_12.webp 1023w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_12-300x142.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h09_12-768x363.webp 768w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<p>Now as we move through students, we&#8217;ll see the Teachers list update automatically:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-932\" height=\"474\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h23_33.gif\" width=\"1000\"\/><\/p>\n<p>Now let&#8217;s reverse the direction and look at this relationship from the Teacher&#8217;s perspective:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-906\" height=\"124\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_23h37_19.png\" width=\"460\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h37_19.webp 460w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-16_23h37_19-300x81.webp 300w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/p>\n<p>Let&#8217;s duplicate our Student driven screen and have the first gallery show Teachers and the second gallery show the Students related to that Teacher:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-914\" height=\"483\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_00h10_43.png\" width=\"1023\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_43.webp 1023w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_43-300x142.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_43-768x363.webp 768w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-915\" height=\"483\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_00h10_49.png\" width=\"1023\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_49.webp 1023w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_49-300x142.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_00h10_49-768x363.webp 768w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<p>And now we can move through the Teachers and see the related Students automatically displayed:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-933\" height=\"474\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h18_25.gif\" width=\"1000\"\/><\/p>\n<p>Great, we can now navigate a Many-to-Many relationship from either direction.\u00a0 But what do we do if we want to add a Student to a Teacher&#8217;s list of Students?\u00a0 Since there are no exposed lookup fields we need something new.<\/p>\n<p>Unfortunately, all we have at the moment is the ability to read Many-to-Many relationships.\u00a0 We are actively working on the ability to relate two records through a Many-to-Many relationship which we expect to ship in January or early February.\u00a0 We&#8217;ll keep you posted on our progress and will announce when it is ready here in the blog.<\/p>\n<p>As a preview, the design calls for two new functions <strong>Relate<\/strong> and <strong>Unrelate<\/strong>\u00a0which you use to relate a Teacher to a Student:<\/p>\n<p><strong>\u00a0 \u00a0 \u00a0 \u00a0 Relate( SelectedTeacher.Students, SelectedStudent )<\/strong><br \/>\n<strong>Unrelate<\/strong> reverses the process.\u00a0 Note that since there can be more than one Many-to-Many relationship between two entities that we need to know which relationship is desired, hence we relate a new item to an existing One-to-Many projection of a Many-to-Many.<\/p>\n<p>In the meantime, you can create a Model-driven app to relate and unrelate records.\u00a0 I&#8217;ll leave the steps required to create this app as an exercise for the reader, but it is actually fairly simple: create an app with Students and Teachers entities as &#8220;subareas&#8221; in the Site Map and the Model-driven UI automatically exposes the Many-to-Many relationship under &#8220;Related&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-937\" height=\"666\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h47_26.gif\" width=\"908\"\/><\/p>\n<p>The video adds Mr. Blake and Mrs. Jones as teachers for Glenn Smith.\u00a0 And if we go back to our Canvas app we will see the result in both directions:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-938\" height=\"474\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h52_11.png\" width=\"1007\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h52_11.webp 1007w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h52_11-300x141.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h52_11-768x362.webp 768w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-940\" height=\"474\" src=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-17_01h56_01.png\" width=\"1007\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h56_01.webp 1007w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h56_01-300x141.webp 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2018\/12\/2018-12-17_01h56_01-768x362.webp 768w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/p>\n<h1>Road Ahead<\/h1>\n<p>Besides delivering Option Sets and Many-to-Many relationships, this release marks a turning point for us.<\/p>\n<p>As you can see we have simplified Option Sets.\u00a0 We were not happy with the previous dual field approach both for those and for polymorphic lookups (Owner, Customer,\u00a0 and Regarding fields).\u00a0 From your many questions and frustrations you weren&#8217;t happy with them either.<\/p>\n<p>But this improvement comes at a price: we are making a breaking change.\u00a0 Formulas written to the old style will need to be updated.\u00a0 We never take breaking changes lightly and this one is no exception.\u00a0 This is why we are currently using an experimental switch that must be explicitly be turned on per app.<\/p>\n<p>The good news, and the turning point, is that we believe we have\u00a0made all the breaking changes we will need to make.\u00a0 You can move your apps to the experimental connector with confidence that you won&#8217;t need to update them again.\u00a0 \u00a0This also enables us to move to Preview in January and turn the new connector on by default for new apps.<\/p>\n<p>To ensure that we wouldn&#8217;t break anyone later we have temporarily disabled some features that are not yet ready.\u00a0 All of these are actively being worked on and we expect will land in late January or early February:<\/p>\n<ul>\n<li><strong>Polymorphic Lookups.<\/strong>\u00a0 Owner, Customer, and Regarding fields are not available in a Canvas app.\u00a0 Like Option Sets, these were represented as two different fields that were very painful to use.\u00a0 Doing it properly is challenging for Canvas apps as the formula language is strongly typed with no generic object or variant data type.\u00a0 We do have a design in hand and will be adding these back in as a single field with the ability to determine the type and cast to a specific type.\u00a0 These were so hard to use that we believe most apps will not be impacted.<\/li>\n<li><strong>Time Zone Independent Fields.\u00a0\u00a0<\/strong>There is a bug that prevents Date Time and Date Only fields that have the &#8220;Time zone independent&#8221; behavior from being saved properly.\u00a0 This should not impact most apps as this is not the default setting for standard entity fields or fields created in the portal.\u00a0 When this bug is fixed we&#8217;ll turn these fields back on.<\/li>\n<\/ul>\n<h1>Feedback Please!<\/h1>\n<p>Now is the time to give us your feedback while we are still experimental.\u00a0 When we move to Preview it becomes significantly harder to make changes.\u00a0 \u00a0I realize that many take time off at the end of the year.\u00a0 \u00a0But if you can fit in a few minutes to try these concepts out and drop us a note we would very much appreciate it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We continue to expand our Canvas support for the Common Data Service for Apps, on the road to CDS + Canvas = Awesome.   With this installment we have refined how Option Sets and Two Option data types work and have added support for Many-to-Many relationships. These features are available now with the CDS Experimental Connector.<\/p>\n","protected":false},"author":86,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[3424],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2104],"class_list":["post-853","post","type-post","status-publish","format-standard","hentry","audience-it-professional","content-type-news","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog<\/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:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"We continue to expand our Canvas support for the Common Data Service for Apps, on the road to CDS + Canvas = Awesome.  With this installment we have refined how Option Sets and Two Option data types work and have added support for Many-to-Many relationships. These features are available now with the CDS Experimental Connector.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-17T18:24:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:05:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\" \/>\n\t<meta property=\"og:image:width\" content=\"579\" \/>\n\t<meta property=\"og:image:height\" content=\"138\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Greg Lindhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Greg Lindhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\"},\"author\":[{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/greg-lindhorst\/\",\"@type\":\"Person\",\"@name\":\"Greg Lindhorst\"}],\"headline\":\"Option Sets and Many-to-Many Relationships for Canvas apps\",\"datePublished\":\"2018-12-17T18:24:54+00:00\",\"dateModified\":\"2025-06-11T15:05:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\"},\"wordCount\":2510,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\",\"keywords\":[\"Dataverse\",\"Formulas\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\",\"name\":\"Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\",\"datePublished\":\"2018-12-17T18:24:54+00:00\",\"dateModified\":\"2025-06-11T15:05:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage\",\"url\":\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\",\"contentUrl\":\"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Option Sets and Many-to-Many Relationships for Canvas apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/dbd4cb8af4503e696f240353831f05d4\",\"name\":\"Greg Lindhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g0133d144d5ed416197bd3b29ccd9a59c\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g\",\"caption\":\"Greg Lindhorst\"},\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/gregli\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog","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:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/","og_locale":"en_US","og_type":"article","og_title":"Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog","og_description":"We continue to expand our Canvas support for the Common Data Service for Apps, on the road to CDS + Canvas = Awesome.  With this installment we have refined how Option Sets and Two Option data types work and have added support for Many-to-Many relationships. These features are available now with the CDS Experimental Connector.","og_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/option-sets-and-many-to-many-relationships-for-canvas-apps\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2018-12-17T18:24:54+00:00","article_modified_time":"2025-06-11T15:05:48+00:00","og_image":[{"width":579,"height":138,"url":"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png","type":"image\/png"}],"author":"Greg Lindhorst","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Greg Lindhorst","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/"},"author":[{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/greg-lindhorst\/","@type":"Person","@name":"Greg Lindhorst"}],"headline":"Option Sets and Many-to-Many Relationships for Canvas apps","datePublished":"2018-12-17T18:24:54+00:00","dateModified":"2025-06-11T15:05:48+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/"},"wordCount":2510,"commentCount":0,"publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage"},"thumbnailUrl":"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png","keywords":["Dataverse","Formulas"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/","name":"Option Sets and Many-to-Many Relationships for Canvas apps - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage"},"thumbnailUrl":"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png","datePublished":"2018-12-17T18:24:54+00:00","dateModified":"2025-06-11T15:05:48+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#primaryimage","url":"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png","contentUrl":"https:\/\/powerapps-blog.azurewebsites.net\/web\/\/app\/uploads\/2018\/12\/2018-12-16_21h40_05.png"},{"@type":"BreadcrumbList","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2018\/12\/17\/option-sets-and-many-to-many-relationships-for-canvas-apps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Option Sets and Many-to-Many Relationships for Canvas apps"}]},{"@type":"WebSite","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/dbd4cb8af4503e696f240353831f05d4","name":"Greg Lindhorst","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g0133d144d5ed416197bd3b29ccd9a59c","url":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g","caption":"Greg Lindhorst"},"url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/gregli\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/86"}],"replies":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=853"}],"version-history":[{"count":1,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/853\/revisions"}],"predecessor-version":[{"id":130981,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/853\/revisions\/130981"}],"wp:attachment":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=853"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=853"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=853"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=853"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=853"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=853"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=853"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}