Field Service – Inspection Reporting

In previous posts I have explained how we can create inspections; in this post I will focus on how we gain access to the inspection data. (To support reporting).

You can review my earlier post which gave an overview of inspections here.

You may want to create dashboards (both standard Dynamics 365 dashboards and Power BI dashboards) to show inspection activity. Maybe you want to report on the number of inspections completed or produce some KPI data based on specific questions and responses.

As inspections are completed results are written to a table called “inspection responses (aka msdyn_inspectionresponse)”. This is great but the inspection response table “just” contains an encode JSON string which holds the response details. Meaning we can easily see which service tasks related to the inspection but reporting on individual questions and responses is difficult.

The solution is to configure your system to parse the response data and make that available in your Dataverse. For this we need to adjust a system setting.

Below you can see that within my Field Service Settings I can enable analytics. And also decide the frequency!

Our frequency options are daily, immediately and custom.

Immediately will as the name suggests creates your analytics data as soon as the inspection is marked as complete.

Whereas daily and custom the analytics will be updated periodically. If you select daily, then you can also pick what time each day the response data should be generated. (Use custom if you want to update the data every “n” days.)

So, I’d want to use “immediately”, right? Well maybe not! The response data would be generated as soon as the service task is completed. For simple inspections that might work. But if there is any chance the field engineer might make additional updates then you probably need to avoid this option. As any changes after the inspection has been marked as completed will not be reflected in your analytics.


Microsoft documents that your analytics data is stored in three key tables. (Which are standard with customer voice surveys.)

I found several tables in my Dataverse with very similar names to these tables! Notice the prefix here is “msfp_” and we are looking at tables with a display name that starts “Customer Voice”. I have, for example, a table called “msdyn_question”, that isn’t the one we want!

I have added a fourth table below, “msfp_survey”. This wasn’t referenced in the Microsoft documentation! But I found records were also showing in this table hence I have included it.

I also found that some of the relationships between these tables is a little “non-standard”. As the link between the tables is a logical one achieved via a text field which holds a unique identifier. So, I guess you might need to be creative in Power BI, Power Automate or somewhere on how the data in these tables is linked.

Below I will try and document at least some of my findings …

Customer Voice Survey (msfp_survey)

We get one row for each inspection template in the surveys table. The survey entity has a lookup to the inspection template.

Also each survey has a “source survey identifier” column which uniquely identifies this survey.

Schema Name Display Name Details
msfp_surverysource Survey Source Text field that will contain “Inspection” for any survey’s associated with inspection templates
msdyn_inspection Inspection Template A lookup to the inspection template
msfp_sourcesurveyidentifier Source Survey Identifier Unique ID for this survey!

Customer Voice Survey Response (msfp_surveyresponse)

Survey response table has one row for each inspection response.

Schema Name Display Name Details
msfp_sourceresponseidentifier Source response identifier Holds the GUID of the inspection response table record used to generate this response
msfp_surveyid Survey A lookup to the msfp_survey table.

Customer Voice Survey Question (msfp_question)

Each survey will have multiple rows, one for each question in the inspection. Meaning it holds the question type and text from the inspection form.

Links back to survey via “source survey identifier” column. Not the survey lookup!

Schema Name Display Name Details
msfp_survey Survey For “normal” surveys this is a lookup to msfp_survey. But seems to be blank for inspection surveys.
msfp_sourcesurveyidentifier Source survey identifier Links to the “source survey identifier” column in the customer voice survey table.
msfp_name Name The name of the question from the inspection. Often “Question1”, “Question2” etc.
msfp_questiontype Question Type The type of question. Text, Choice, Rating etc
msfp_questiontext Question Text The question
msfp_sourcequestionidentifier Source question identifier Seems to be blank to questions relating to inspections
msfp_sourceparentquestionidentifier Source parent question identifier Seems to be blank to questions relating to inspections

Customer Voice Survey Question Response (msfp_questionresponse)

Schema Name Display Name Details
msfp_questionid Question A lookup to msfp_question

Tip: Means as the question is related you can show the question text and question response in a view.

msfp_response Response The response entered on the survey.

Tip: for choice fields response will be surrounded in square brackets. I assume to give the ability to return a list of selected responses. E.g. [“Yes”]

msfp_sourcequestionidentifier Source question identifier Seems to be blank to questions relating to inspections
msfp_sourceresponseidentifier Source Response identifier Holds the GUID of the inspection response table record used to generate this response.

Could also be used to link to msfp_surveyresponse record.

msfp_source_surveyidentifier Source survey identifier Links to the “source survey identifier” column in the customer voice survey table.

SO … I think I have shown above that we have a mixture of standard lookup columns and identifier columns.

The identifier columns contain a unique reference that could be used to query the source record. But within the model driven app the functionality maybe limited as this isn’t a typical Dataverse relationship!

To try and further explain this! The diagram below shows the table relationships I identified using a traditional lookup.

And this diagram tries to show the additional relationships which could be achieved by mapping the identifier columns.


If your questions involve uploading a file / image. There is another table called “Inspection Attachment”. This is linked to the “Inspection Response” table. And has a note with your file attached.

I hope this information is helpful to anyone trying to report on the inspection data.

You may also want to consult the Microsoft documentation (link below) which may provide you with additional details. Including how we can access this data using Power Automate!

Run reports on inspection responses in Field Service in Dynamics 365 Field Service | Microsoft Learn

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s