> ## Documentation Index
> Fetch the complete documentation index at: https://quill.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Relevant concepts in Quill BI Platform

## 1. Environments

### What is an Environment?

An Environment is a single instance of Quill. Each environment has at least one tenant, a virtual schema, and dashboards that belong to it.

You can promote changes in one environment to another environment on a report, dashboard, virtual table level.

## Common Example

A Development and Production environment.

### Development

* Points to your development postgres database
* The Development Environment `publicKey` is used in your development and staging React apps (passed to `QuillProvider` as the `publicKey` prop, e.g. `process.env.QUILL_PUBLIC_KEY`).
* The Development Environment `privateKey` is used in your development and staging server apps (read by the server SDK from `process.env.QUILL_PRIVATE_KEY`).
* When your server's schema changes, you can test those changes on the Development Environment.
* You can promote changes to the Production Environment when they are ready.

### Production

* Points to your production postgres database
* The Production Environment `publicKey` is used in your production React apps (passed to `QuillProvider` as the `publicKey` prop, e.g. `process.env.QUILL_PUBLIC_KEY`).
* The Production Environment `privateKey` is used in your production server apps (read by the server SDK from `process.env.QUILL_PRIVATE_KEY`).

<Note>
  `publicKey` / `privateKey` are the property names on the SDKs themselves.
  When stored as environment variables (recommended), use `QUILL_PUBLIC_KEY`
  and `QUILL_PRIVATE_KEY` respectively.
</Note>

## 2. Tenant

### What is a Tenant?

A tenant is a **logical partition** of data within a datasource.

### Tenant Roles

* **Owner**:

  * Controls access to data at the **virtual table** level.
  * Dashboards must only use virtual tables owned by that tenant.

* **Viewer**:
  * Can view dashboards if a **mapping** exists.
  * The mapping is a **SQL query** that defines which owners a viewer can access.

***

## 3. Virtual Table

### Creating a Virtual Table

To create a virtual table:

1. Navigate to the **Virtual Schema** tab.
2. Click **Create Table**.

### What is a Virtual Table?

A virtual table is:

* A **SQL query** executed on top of your datasource.
* Designed to **enforce tenancy** by requiring a tenant foreign key field (called an **owner**).
* A mechanism for **cleaning and structuring** data for reporting purposes.

> Note: A virtual table can have **multiple owners**.

***

## 4. Dashboard

### What is a Dashboard?

A dashboard organizes and presents reports. It includes:

* **Sections**:

  * Each section has a name and a list of reports.

* **Global Filters**:
  * Apply across all reports in the dashboard.
  * Common filters include **date filters** and tenant-level fields.

> A dashboard provides a unified interface to explore tenant-filtered, structured, and visualized data.

***

## 5. Report

### Creating a Report

Once you have created at least one virtual table, you can create a report.

### What is a Report?

A report is a SQL query based on the **virtual schema**. It supports the following views:

* **Chart view**
* **Tabular view** – A formatted output of the SQL query.
* **Pivot (optional)** – Adds grouping and/or aggregation to the result, useful for visualizations.

### Report Features

* **Access Control**:

  * Defines which **subset of tenants** can view the report on their dashboards.

* **Dashboard Filter Field Mappings**:
  * Used when a common field appears across multiple tables.
  * Ensures proper linkage to dashboard-level filters.

### Report Placement

* A report can be assigned to only **one dashboard**.
* It can be placed in only **one section** within that dashboard.

### Promoting a report

* You can promote a report from one dashboard to another, in the same environment

***

## Summary

The virtual table reporting model consists of:

1. **Virtual Tables**: SQL-based, tenant-aware cleaned data structures.
2. **Reports**: Charted and tabular queries built from virtual tables.
3. **Tenants**: Access control units for data partitioning and security.
4. **Dashboards**: Grouped reports with global filters and sectioning.

This structure ensures multi-tenant, clean, and secure reporting across your datasource.
