---
schema_version: "1"
id: a693c002e1659825bd9704eacdb72f142c1c0efb1bb6722b5a620c41ca475616
title: Perform Bulk Actions on Multiple Salesforce Records from CRM Analytics
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/analytics/264-0-0/bi_dashboards_configure_bulk_actions.md
canonical_url: https://help.salesforce.com/s/articleView?id=analytics.bi_dashboards_configure_bulk_actions.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 83dd1297a60b84a491d0c69049f7c18a7bddc68d40a4650c5001a485e3d9bb5f
description: Sometimes, you need to perform the same action on a group of records. With CRM Analytics bulk actions, you can perform an action on all records shown in a table in CRM Analytics.
products:
  - CRM Analytics
  - Cross Cloud
release: "264"
---
# Perform Bulk Actions on Multiple Salesforce Records from CRM Analytics

Sometimes, you need to perform the same action on a group of records. With CRM Analytics bulk actions, you can perform an action on all records shown in a table in CRM Analytics.

You define the bulk action in a Visualforce page. The Visualforce page can make calls to Apex methods. You can also configure the Visualforce page to display the results of the action or show an interactive form. For example, you can create a form that allows the dashboard viewer to change the account owner of each opportunity shown in the table widget.

Before we get into the details about how to create a bulk action, review the following high-level process.

1. CRM Analytics passes the SAQL query used to populate the table widget to the Visualforce page.
    
    ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png)
    
    Note The SAQL query that CRM Analytics passes usually contains a limit. To return more results, modify the `limit` statement in the SAQL query.
2. You write custom Visualforce and, if needed, Apex code to extract the SAQL query.
    
    ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_tip.png)
    
    Tip When issuing a CRM Analytics API request for the SAQL query, if most of your logic is in Javascript on the client side, then you should use AJAX from Javascript. If most of your logic is in Apex, then use HTTP from your Apex class.
3. Your code executes the SAQL query against the CRM Analytics Query API.
4. The CRM Analytics API returns the results of the query—dataset rows—to the Visualforce page.
5. You write more custom code that performs actions on the returned dataset rows. For example, you can perform a bulk edit, bulk create, or integrate with third party.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png)

Note Bulk actions only work on steps that query datasets. If the table widget is built on a step with type `static` or `soql`, the action doesn’t work.

- **[Bulk Actions Example](https://help.salesforce.com/s/articleView?id=analytics.bi_dashboards_configure_bulk_actions_example.htm&release=264.0.0&type=5)**  
    You want to add the “Create Opportunities” option in a table widget’s action menu. This action must create an opportunity for each account shown in a table widget.