Skip to main content
Skip table of contents

Campaigns NQL examples

This list of NQL query examples is designed to help you select the users relevant to your campaign. Go through the queries below, copy the query that is most similar to your use case, and adjust it accordingly.

Example queries to target users in scheduled campaigns

Retrieve all users from a specific city.
CODE
users
| where ad.city == "Lausanne"

Retrieve users with installed Collector (xTray) that has been running on their device in the last 24 hours.
CODE
users
| include execution.events during past 24h
| where binary.name == "nxtray*"
| compute c1 = binary.name.count()
| where c1 > 0

Retrieve users who have installed MS Teams or Zoom in the last day.
CODE
users
| with package.installations during past 1d
| where package.name in [ "MS Teams", "Zoom" ]

Retrieve users from a specific department.
CODE
users
| where ad.department == "Finance"

Retrieve the last user of a device that has had 3 system crashes in the past 7 days.
CODE
devices past 7d
| with device_performance.system_crashes past 7d
| compute nb_crashes = count()
| where nb_crashes >= 3
| with session.events past 7d
| compute user_sid = user.sid.last()
| list user_sid

Retrieve last users not from the IT department who has a poor battery health.
CODE
devices past 7d
| where remote_action.get_battery_status.execution.outputs.BatteryHealth < 0.3
| with session.events past 7d
| where user.ad.department != "*IT*"
| compute user_sid = user.sid.last()
| list user_sid

Schedule a DEX campaign

To randomly select a different sample of employees to continuously collect the sentiment data, set up the query Below. Replace #dex_campaign_name with the NQL ID of the campaign and adjust the limit below set as 50 to specify the number of new users the campaign targets every hour.

Note that you need to:

  • Define the trigger Schedule and select Only after the (minimum) number of days you want to have in between responses for each employee

  • First, save the campaign at least once before you can use the below NQL query, so that the system is aware that your campaign exists and does not generate a "Table does not exist" error when validating the NQL query.

CODE
users
| include campaign.#dex_campaign_name.responses
| compute number_of_requests = count()
| list sid, number_of_requests
| sort number_of_requests asc
| limit 50

Example queries to inspect campaign results

All responses

All responses for the Remote Work Demo campaign, displaying the username, time, state and state_details, all per user.

CODE
campaign.responses
| where campaign.name == "Remote Work Demo"
| list user.name, response.time, state, state_details

Summary view

Summary view of the Remote Work Demo campaign responses in terms of campaign trigger_method, time, state, state_details and the number of questions answered, all per user.

CODE
campaign.responses
| where campaign.name == "Remote Work Demo"
| list response.trigger_method, user.name, response.time, campaign.response.first_planned, campaign.response.first_targeted, campaign.response.first_displayed, state, state_details, response.number_answered_questions

Count responses per state

Count campaign responses for the Remote Work Demo campaign by user, state and state_details.

CODE
campaign.responses
| where campaign.name == "Remote Work Demo"
| summarize cnt = count() by user.name, campaign.response.state, campaign.response.state_details 
| list user.name, cnt, campaign.response.state, campaign.response.state_details   

Count responses for a specific user

Count campaign responses for a specific user by campaign, state and state_details.

CODE
campaign.responses
| where user.name == "johndoe@DOMAIN"
| summarize cnt = count() by campaign.name, user.username, campaign.response.state, campaign.response.state_details   
| list user.name, campaign.name, cnt, campaign.response.state, campaign.response.state_details 

Historical states

View the historical states of the campaign responses for the Remote Work Demo campaign.

CODE
campaign.responses
| where campaign.name == "Remote Work Demo"
| list response.historical_time, response.historical_state, response.historical_state_details

Count the number of answered or declined responses

Count the number of answered or declined responses of a campaign with the #my_campaign NQL ID.

CODE
campaign.#my_campaign.responses
| where state in [answered, declined]
| summarize cnt_responses = request_id.count() by state
| list state, cnt_responses

Count the number of responses by question choice

Count the number of responses by question choice for a single-choice, opinion-scale or NPS question with the vpn_quality question ID.

CODE
campaign.#my_campaign.responses
| summarize cnt = request_id.count() by answers.vpn_quality.label, state, state_details
| sort cnt desc

List users who answered a specific campaign

List the users who answered a campaign with the #my_campaign NQL ID.

CODE
campaign.#my_campaign.responses
| where state == answered
| list user.name, state, state_details, number_answered_questions

List users who answered with a specific choice

List users who answered with the choice labeled as always for the question with the how_often NQL ID for the campaign with the #my_campaign NQL ID.

CODE
campaign.#my_campaign.responses during past 30d
| where answers.how_often.label = "always"
| list user.name, time

List users with their last answer to a sentiment campaign

List all users with their last answers to the question with the sentiment question ID for the sentiment campaign with the #service_sentiment NQL ID (if any).

CODE
users
| include campaign.#service_sentiment.responses
| where state == answered
| compute last_satisfaction = answers.sentiment.label.last(), last_answer_on_device = device.name.last()
| list user.name, last_satisfaction, last_answer_on_device

List of users with their last answer to a parametric campaign where the parameter had a specific value

List users with their last answer and comment to the question with the sentiment question ID and the ticket_number parameter associated with the request for the parametric campaign with the #ticket_satisfaction NQL ID, where the parameter value with the issue_type ID is Incident.

CODE
users
| with campaign.#ticket_satisfaction.responses
| where state == answered and parameters.issue_type == "Incident"
| compute last_satisfaction = answers.sentiment.label.last(), last_comment = answers.sentiment.comment.last(), ticket_number = parameters.ticket_number.last()
| list ticket_number, last_satisfaction, last_comment, user.name
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.