Visualize Data in a View with Copilot (Preview) – Dataverse / Dynamics 365


The copilot-powered data visualization in views feature, currently in preview, allows us to generate quick and insightful charts from Dataverse table views using natural language. We can select a table view and ask Copilot to generate visualizations, making data interpretation easier.

  • Natural Language Queries – Ask Copilot in simple terms to generate relevant charts.
  • Multiple Chart Types – Bar charts, pie charts, line graphs, and more.
  • Instant Insights – No need to build reports; visualize directly from your data view.
  • Interactive Refinements – Modify the chart type or tweak the data selection.

To enable it, for the environment, navigate to Settings >> Features and enable Natural Language Grid and View Search.

We can see the Visualize button added to the views.

A screenshot of a computer

AI-generated content may be incorrect.

It generates the Chart based on the data in the view.

A screenshot of a computer

AI-generated content may be incorrect.

Selecting a particular area filters the data in the view accordingly.

We also have the option to change the chart type, copy the chart, expand the view, etc.

A screenshot of a computer screen

AI-generated content may be incorrect.

We can also use natural language to specify the data or can select AI-generated suggestions for the views.

More on Natural Language Grid and View Search – https://nishantrana.me/2025/02/04/check-out-the-natural-language-grid-and-view-search/

A screenshot of a computer

AI-generated content may be incorrect.

Here we selected/specified the query “Cases where customer is Alpine Ski House” and the Chart and View updated accordingly.

A screenshot of a computer

AI-generated content may be incorrect.

This Copilot-driven data visualization feature is a game-changer for users who need quick insights from their data without setting up complex reports. With just a few clicks and simple queries, Power Apps can now deliver meaningful charts on the fly.

Get more information

Hope it helps..

Advertisements

Unable to save. This form can’t be saved due to a custom setting error in Dynamics 365 / Dataverse.


Recently we got the below error while trying to assign the record.

Unable to save. This form can’t be saved due to a custom setting.

A screenshot of a computer error

AI-generated content may be incorrect.

Turned out we had certain conditions in the OnSave event for the form, and if the record satisfies those conditions we were canceling the save event using

executionContext.getEventArgs().preventDefault();

A screen shot of a computer program

AI-generated content may be incorrect.

So it was the expected behaviour, just that the error message was a bit generic.

Hope it helps..

Advertisements

Querying / Filtering MultiSelect Choice / OptionSet Fields in Dataverse / Dynamics 365


MultiSelect OptionSet (Choices) fields in Dataverse provide a flexible way to store multiple values within a single field. However, querying and filtering these fields require different techniques depending on the approach used.

In this blog post, we will explore various ways to filter records based on the Skills field (cr1a7_skills), which has the following values:

Name

Value

C#

255780000

Java

255780001

Python

255780002

We have the Skills (choices) field in our Contact table.

The query is to fetch all the contact records where skills includes C# or Java.

Filtering Using FetchXML

FetchXML allows filtering MultiSelect Option Set fields using the contain-values operator.

<fetch>
  <entity name="contact">
    <attribute name="fullname" />    
    <filter>
      <condition attribute="cr1a7_skills" operator="contain-values">
        <value>255780000</value>
        <value>255780001</value>
      </condition>
    </filter>
  </entity>
</fetch>

Filtering Using QueryExpression (C#)

Using QueryExpression, we can apply the ContainValues condition to filter Multi

var query = new QueryExpression("contact");
query.ColumnSet.AddColumns("fullname");
query.Criteria.AddCondition("cr1a7_skills", ConditionOperator.ContainValues, 255780000, 255780001);

Filtering Using OData (Web API)

OData allows filtering MultiSelect Option Set fields using the ContainValues function.

https://orgname.crm.dynamics.com/api/data/v9.2/contacts?$select=fullname,createdon,modifiedon,statecode&$filter=(Microsoft.Dynamics.CRM.ContainValues(PropertyName='cr1a7_skills',PropertyValues=['255780000','255780001']))

Filtering Using SQL4CDS (XrmToolBox)

If you’re using the SQL4CDS tool in XrmToolBox, you can filter MultiSelect Option Set fields using LIKE conditions.

SELECT contactid,
       fullname
FROM   contact
WHERE  statecode = 0
       AND (cr1a7_skills = '255780000'
            OR cr1a7_skills LIKE '255780000,%'
            OR cr1a7_skills LIKE '%,255780000,%'
            OR cr1a7_skills LIKE '%,255780000'
            OR cr1a7_skills = '255780001'
            OR cr1a7_skills LIKE '255780001,%'
            OR cr1a7_skills LIKE '%,255780001,%'
            OR cr1a7_skills LIKE '%,255780001'            
            );

Filtering Using LINQ (C#)

For LINQ queries, MultiSelect Option Sets must be processed as OptionSetValueCollection.


        if (myServiceClient.IsReady)
        {
            using (var context = new OrganizationServiceContext(myServiceClient))
            {

                var skillValues = new List<int> { 255780000, 255780001 };              
                              
                var allContacts = context.CreateQuery("contact")
                .Where(c => c["cr1a7_skills"] != null &&
                            (int)c["statecode"] == 0)
                .ToList();                
              
                var filteredContacts = allContacts
                    .Where(c => ((OptionSetValueCollection)c["cr1a7_skills"])
                                .Select(osv => osv.Value)
                                .Any(skill => skillValues.Contains(skill)))
                    .Select(c => new
                    {
                        ContactId = c["contactid"],
                        FullName = c.Contains("fullname") ? c["fullname"].ToString() : string.Empty
                    })
                    .ToList();

                var result = filteredContacts;

            }
        }

Get more detailed information

Hope it helps..

How to Trigger a Plugin on a Calculated Column Change in Dataverse / Dynamics 365


In Microsoft Dataverse, calculated columns are a powerful way to derive values dynamically without the need for manual updates. However, one challenge is that plugins do not trigger directly on calculated column changes since these values are computed at runtime and not stored in the database.

Calculated field considerations

A screenshot of a field

AI-generated content may be incorrect.

Since calculated columns use/depend on other fields, we can register a plugin on the change of those dependent fields. If a calculated column Total Amount is based on Quantity and Unit Price, then we can trigger the plugin on the Update event of Quantity and Unit Price.

Let us see it in action, we have the below plugin registered in the update event.

A computer screen shot of a program

AI-generated content may be incorrect.

On specifying the Formula / Calculated column as a Filtering attribute, our plugin doesn’t get triggered.

A screenshot of a computer

AI-generated content may be incorrect.

Here we updated the Unit Price, which changed the Total Amount, but we do not see any trace log generated.

A screenshot of a computer

AI-generated content may be incorrect.

Now we have updated the filtering attribute to be Quantity and Unit Price the field used by the Calculated column.

A screenshot of a computer

AI-generated content may be incorrect.

We updated both the Quantity and Unit Price and see the log generated i.e. plugin triggered.

A computer screen with a green arrow pointing to a white box

AI-generated content may be incorrect.

The trace log –

A screenshot of a computer

AI-generated content may be incorrect.

While plugins can’t directly trigger on the calculated column changes, this workaround ensures we still get the desired automation.

Hope it helps..

The async operation was skipped because the org is in “Disable Background Processing” mode – Dataverse / Dynamics 365


While testing one scenario we observed one of the plugins (asynchronous) was not updating the record as expected.

Checking the System Jobs, we saw the below error.

The async operation was skipped because the org is in “Disable Background Processing” mode.

Well, this was because we had recently created this environment by copying our UAT environment and had forgotten to disable the Admin mode / enable Background operations.

A screenshot of a computer screen

AI-generated content may be incorrect.

Get more details – Administration Mode.

Hope it helps..

How to – Configure Copilot Row Summary for tables main form – Dataverse / Dynamics 365


We all know how frustrating it can be to dig through records just to find key details. With AI-generated record summaries, users can instantly access important information—saving time, reducing effort, and boosting productivity.

We can now create AI-powered record summaries for any table in Power Apps using a simple, guided prompt builder. We get to choose the fields and details that matter most, ensuring users see the right information briefly. There’s even an online testing option to fine-tune the summary before rolling it out. Once set up, the record summary will be readily available in forms, making information access effortless.

To enable it inside the Power Platform Admin Center, select an environment and navigate to

Environment >> Settings >> Features >> AI insights cards

Inside Maker Portal, select the table, and from the Customizations section select the Row summary option.

A screenshot of a computer

AI-generated content may be incorrect.

In the Prompt box, we can specify the columns we want to include as part of the summary.

We can click on +Add data to do so can type the name of the field after “/

A screenshot of a computer

AI-generated content may be incorrect.
A screenshot of a computer

AI-generated content may be incorrect.

After specifying the fields, we can click on the Test prompt to see the response. And can fine tune it further.

A screenshot of a computer

AI-generated content may be incorrect.

Clicking on Apply to main forms applies to all the main forms for the table.

A screenshot of a computer

AI-generated content may be incorrect.

We can see the icon added next to the main forms.

A screenshot of a computer

AI-generated content may be incorrect.

The Row summary toolbar allows us to show, hide, and edit the summary.

A screenshot of a computer

AI-generated content may be incorrect.

Publish the changes.

Below we can see the summary generated for the Contact’s main forms.

Get more details.

Hope it helps..

Advertisements