# Using the Query Plan Analyzer

> How to use the Query Plan Analyzer

*Source: https://docs.sisense.com/main/SisenseLinux/qpa-using.htm*

---

Last updated: June 11, 2026

|  |  |
| --- | --- |
| [Tier](https://www.sisense.com/pricing/#pricing) | [Deployment](https://docs.sisense.com/main/SisenseLinux/introduction-to-sisense-cloud-managed-services.md#ComparisonofManagedCloudandSelfHosted) |
| Launch     Grow    Enterprise | Cloud     On-Prem |

## Running the Query Plan Analyzer

1. Ensure that the [prerequisites](https://docs.sisense.com/main/SisenseLinux/qpa-prerequisites.md) have been met.
2. Open a dashboard.
3. Click the pencil icon of a widget ![Edit icon](https://docs.sisense.com/main/Resources/Images/editicon.png) to edit the widget.
4. Click the widget's three-dot menu, and select **Query Plan Analyzer**.

   ![Query plan analyzer menu](https://docs.sisense.com/main/Resources/Images/query-plan-analyzer-menu.png)

   A graph such as the following is returned, presenting the logical plan of the query.

   ![QPA graph](https://docs.sisense.com/main/Resources/Images/QPA-graph2.png)

## Working with the Query Plan Analyzer

The [JAQLine](https://www.sisense.com/marketplace/visualize-queries/) graph is read from bottom to top to see how the SQL was created.

The Query Plan Analyzer has different types of nodes. Each node describes a different type of action in the SQL:

- SELECTED COLUMNS: Lists all fields that were selected in the SELECT / INNER SELECT part of the query:

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node1.png)

- CROSS JOIN: Represents a join between two SELECT statements.

- INNER JOIN: Shows an inner join between two fields based on the key of each field. Inner Join has two types: Inner joins with Many-to-Many (M2M) detection (which appears as a red circle; this makes it easy for you to recognize M2M joins between tables) and regular inner joins. INNER JOIN may have several connection types: [1]-[M], [M]-[1], [1]-[1], and [M]-[M] (represented by a red inner join node):

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node2_304x254.png) ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node3.png)
- AGGREGATE: Shows an aggregation in the SQL and the GROUP BY fields:

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node4.png)
- FILTER: Shows the filter in the SQL / Inner SQL based on the fields that were filtered:

  ![QPA new](https://docs.sisense.com/main/Resources/Images/QPA_new1.png)
- FILTER SUB\_QUERY: A filter may have another inner SELECT which represents an inner query.  
  For example, the following query contains an inner select:

  - SELECT "Cost\_of\_admission"

    FROM "Sample Healthcare"."Commerce"

    WHERE "Room\_ID" IN **(SELECT "Room\_ID" FROM "Sample Healthcare"."Rooms")**

  In the following example, the inner select is represented as SUBQUERY\_1:

  ![QPA new](https://docs.sisense.com/main/Resources/Images/QPA_new2.png)
- SOURCE TABLE: Lists the source table:

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node8.png)

  The Query Plan Analyzer also indicates the row count of each source table:

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node9.png)

- SORT: Shows the fields that the SQL was sorted by:

  ![QPA Node](https://docs.sisense.com/main/Resources/Images/QPA_Node7.png)
