AWS QuickSight: Serverless Business Intelligence
What Problems AWS QuickSight Solves
AWS QuickSight eliminates the infrastructure complexity and licensing costs of traditional business intelligence tools while providing fast, interactive dashboards for data exploration.
Traditional BI challenges:
- Organizations spend $50,000-$500,000 annually on BI tool licenses (Tableau, Power BI, Looker)
- BI platforms require dedicated servers, databases, and caching layers for acceptable performance
- Dashboard performance degrades when hundreds of users access reports simultaneously
- Embedding analytics in customer-facing applications requires separate enterprise licenses ($5,000+ per embedded user)
- Data refresh requires complex ETL pipelines and database optimizations
Concrete scenario: Your SaaS product needs customer-facing analytics dashboards showing usage metrics, performance trends, and cost breakdowns. The existing approach uses Tableau Server embedded in the application. Licensing costs $150/user/year for internal analysts (50 users = $7,500/year) plus $5,000/embedded user/year for customers (100 customers = $500,000/year). The Tableau Server cluster requires 4 × m5.2xlarge instances ($10,000/month = $120,000/year) for acceptable performance during peak usage. Total annual cost: $627,500. Dashboard queries hit a PostgreSQL replica that struggles with concurrent load, requiring constant query optimization. Building new dashboards takes weeks because analysts wait for data engineering to create materialized views.
What QuickSight provides: A serverless BI service with pay-per-session pricing for viewers ($0.30/session, max $5/month/user), unlimited dashboards and datasets, and a fast in-memory engine (SPICE) that caches data for sub-second query performance. Authors pay $24/month for full creation capabilities, readers pay only when actively viewing dashboards.
Real-world impact: After migrating to QuickSight, licensing costs dropped to $14,400/year (50 authors × $24/month × 12 + 100 customers × $5/month × 12). Infrastructure costs dropped to zero (serverless, no cluster management). Total annual cost: $14,400 vs $627,500 (97.7% reduction). SPICE eliminated database load—dashboards query in-memory cache instead of hitting production databases. Analysts build dashboards directly against S3 data lakes via Athena without waiting for data engineering. Customer-facing embedded dashboards load in under 1 second with automatic scaling during peak traffic.
Service Fundamentals
AWS QuickSight is a cloud-native BI service designed for AWS-native data sources (S3, Athena, Redshift, RDS, Aurora) with SPICE, a columnar in-memory engine that provides fast aggregations and filtering.
Core Architecture
QuickSight components:
- Data Sources: Connect to AWS services (Athena, Redshift, S3, RDS, Aurora), third-party databases (PostgreSQL, MySQL, SQL Server), or upload files (CSV, Excel, JSON)
- Datasets: Define which tables/queries to analyze, apply transformations (calculated fields, filters), configure refresh schedules
- SPICE: In-memory columnar cache that stores imported data for fast querying
- Analyses: Interactive workspace for building visualizations, applying filters, creating calculated fields
- Dashboards: Read-only published versions of analyses shared with users
- Visuals: Charts, tables, pivot tables, KPIs, maps, and custom visuals
Query execution modes:
Direct Query: Query data source in real-time without importing to SPICE.
- Use when: Data changes frequently, data volume exceeds SPICE capacity, data must be live
- Limitation: Query performance depends on source database speed
SPICE Import: Import data into SPICE in-memory engine.
- Use when: Data refreshes on schedule (hourly, daily), query performance critical, multiple dashboards query same data
- Benefit: Sub-second queries, reduced load on source databases, pay for SPICE storage once
Hybrid: Some datasets in SPICE, others direct query.
- Use when: Mix of frequently-accessed aggregates (SPICE) and rarely-accessed details (direct query)
SPICE Engine
SPICE (Super-fast, Parallel, In-memory Calculation Engine) is QuickSight’s columnar in-memory database optimized for analytics.
How SPICE works:
- Data imported from source (S3, Athena, Redshift) into compressed columnar format
- Stored in QuickSight-managed infrastructure (no servers to provision)
- Automatically replicated across availability zones for durability
- Queries execute in parallel across columns with aggressive caching
SPICE capacity:
- Authors: 10 GB included per author subscription
- Additional SPICE: $0.25/GB/month for capacity beyond included amount
- Compression: Typical 10:1 compression ratio (1 TB source data = 100 GB SPICE)
Example capacity calculation: Dataset has 500 GB source data (uncompressed CSV), imports to SPICE.
- Compressed size: 500 GB ÷ 10 = 50 GB SPICE
- Included capacity: 10 authors × 10 GB = 100 GB
- Additional SPICE needed: 0 GB (within included capacity)
- Cost: $0 additional
SPICE refresh strategies:
- Full refresh: Replace entire dataset (default)
- Use when: Source data changes unpredictably, dataset is small (<10 GB)
- Duration: Proportional to data volume (10 GB = 5 minutes, 100 GB = 30 minutes)
- Incremental refresh: Add only new rows since last refresh
- Use when: Source has timestamp column indicating new rows, data append-only
- Configuration: Define timestamp column, QuickSight tracks last refresh time
- Duration: Much faster for large datasets with small daily deltas
Example incremental refresh: Daily sales dataset, 1 TB historical + 10 GB new daily.
- Full refresh: 1 TB import daily (slow, expensive)
- Incremental refresh: 10 GB import daily (fast, cheap)
Refresh schedule options:
- Manual (on-demand via console or API)
- Scheduled (hourly, daily, weekly, monthly)
- API-driven (trigger after ETL job completes)
Example scheduled refresh via CLI:
aws quicksight create-refresh-schedule \
--dataset-id abc123 \
--aws-account-id 123456789012 \
--schedule '{
"RefreshType": "INCREMENTAL_REFRESH",
"ScheduleFrequency": {
"Interval": "DAILY",
"TimeOfTheDay": "02:00"
}
}'
User Types and Pricing
QuickSight has three user types with different capabilities and pricing.
| User Type | Capabilities | Pricing | Best For |
|---|---|---|---|
| Author | Create datasets, analyses, dashboards, Q (ML insights), full access | $24/month | Analysts, dashboard builders |
| Reader (Enterprise) | View dashboards, apply filters, export data | $0.30/session (max $5/month) | Business users, executives |
| Reader (Standard) | View dashboards only | $0.30/session (max $5/month) | Embedded analytics, external users |
Session definition: 30-minute window of activity. Refresh dashboard 5 times in 30 minutes = 1 session.
Example cost calculation: 10 authors, 100 readers viewing dashboards 20 times/month.
- Authors: 10 × $24 = $240/month
- Readers: 100 × $5 (20 sessions hits monthly cap) = $500/month
- Total: $740/month
Compare to Tableau: 10 creators × $70/month + 100 viewers × $15/month = $2,200/month (3× more expensive).
Embedded Analytics
QuickSight supports embedding dashboards in web applications using signed URLs or SDKs.
Embedding options:
- Dashboard embedding: Embed published dashboard as iframe
- Users authenticate via QuickSight or anonymously
- Full interactive capabilities (filters, drill-down, export)
- Console embedding: Embed full QuickSight authoring experience
- Users create/edit dashboards within your application
- Whitelabel QuickSight as your product
- Q embedding: Embed natural language query interface
- Users ask questions in plain English, get visualizations automatically
Example embedded dashboard (React):
import { embedDashboard } from 'amazon-quicksight-embedding-sdk';
const embedConfig = {
url: 'https://us-east-1.quicksight.aws.amazon.com/embed/abc123',
container: document.getElementById('dashboard-container'),
parameters: {
region: 'us-east-1',
customerId: '12345'
},
height: '700px',
width: '100%'
};
const dashboard = await embedDashboard(embedConfig);
Generate embed URL (server-side):
import boto3
quicksight = boto3.client('quicksight', region_name='us-east-1')
response = quicksight.generate_embed_url_for_registered_user(
AwsAccountId='123456789012',
SessionLifetimeInMinutes=600,
UserArn='arn:aws:quicksight:us-east-1:123456789012:user/default/embedded-user',
ExperienceConfiguration={
'Dashboard': {
'InitialDashboardId': 'abc123'
}
}
)
embed_url = response['EmbedUrl']
Embedding pricing: Reader session pricing applies ($0.30/session, max $5/month/user). No additional fee for embedding.
Anonymous embedding (no QuickSight user required):
- Enable anonymous access per dashboard
- Generate temporary embed URLs via API
- Users access dashboards without AWS credentials
- Same session pricing applies
Data Source Integration
QuickSight connects to 20+ data sources natively, with optimizations for AWS services.
AWS Data Sources
Athena (most common for data lakes):
- Direct query mode: QuickSight runs SQL against Athena, Athena scans S3
- SPICE import: QuickSight imports Athena query results into SPICE
- Cost: Athena charges $5/TB scanned during import or direct query
Example Athena dataset:
SELECT
DATE_TRUNC('day', order_date) as day,
product_category,
SUM(revenue) as total_revenue,
COUNT(DISTINCT customer_id) as unique_customers
FROM orders
WHERE year = 2024 AND month = 11
GROUP BY DATE_TRUNC('day', order_date), product_category
Import this query result to SPICE, dashboard queries run against in-memory cache instead of re-querying Athena.
Redshift:
- Direct query or SPICE import
- Use Redshift materialized views for complex aggregations
- QuickSight can query Redshift Spectrum (S3 data via Redshift)
S3:
- Import CSV, JSON, Parquet files directly from S3
- QuickSight reads S3 manifest file listing data files
- Best for: Static datasets, data lake outputs, uploaded files
Example S3 manifest:
{
"fileLocations": [
{"URIPrefixes": ["s3://my-bucket/sales/2024/11/"]}
],
"globalUploadSettings": {
"format": "CSV",
"delimiter": ",",
"containsHeader": true
}
}
RDS / Aurora:
- Direct query via VPC connection
- Use read replicas to avoid impacting production database
- SPICE import reduces database load for dashboard queries
Third-Party Data Sources
Databases:
- PostgreSQL, MySQL, SQL Server, Oracle, Teradata, Snowflake, Presto
- Requires VPC connectivity or public endpoint with security groups
SaaS Connectors:
- Salesforce, ServiceNow, Jira, Adobe Analytics, Twitter
- OAuth-based authentication
- Some connectors import to SPICE, others direct query
File Uploads:
- Upload CSV, Excel, JSON files directly to QuickSight
- Files stored in QuickSight-managed S3 bucket
- Max file size: 1 GB
- Use case: Ad-hoc analysis, external data sources
Building Dashboards
QuickSight provides drag-and-drop interface for creating visualizations and dashboards.
Visual Types
Standard visuals:
- Bar charts: Compare categories (horizontal or vertical bars)
- Line charts: Show trends over time
- Pie/Donut charts: Show proportions of a whole
- Scatter plots: Show correlation between two measures
- Heat maps: Show magnitude using color intensity
- Pivot tables: Cross-tabulate dimensions and measures
- KPIs: Display single metric with comparison and trend
- Maps: Geographic visualizations (geospatial, point maps)
Advanced visuals:
- Combo charts: Combine bar and line charts (e.g., revenue bars + growth rate line)
- Waterfall charts: Show cumulative effect of sequential values
- Funnel charts: Show conversion rates across stages
- Tree maps: Hierarchical data as nested rectangles
- Sankey diagrams: Flow between categories (via custom visuals)
Custom visuals: Import third-party visualizations built with JavaScript frameworks.
Calculated Fields
Create derived metrics using SQL-like expressions.
Example calculated fields:
Profit margin:
(revenue - cost) / revenue
Year-over-year growth:
periodOverPeriodPercentDifference(
sum(revenue),
{order_date},
YEAR,
1
)
Conditional formatting:
ifelse(
revenue >= 100000, 'High',
revenue >= 50000, 'Medium',
'Low'
)
Percentile rank:
percentileRank(revenue, [product_category])
Parameters and Controls
Parameters allow users to filter dashboards dynamically without editing the underlying dataset.
Example use case: Date range filter.
Create parameter:
- Name:
StartDate - Data type: Date
- Default value:
2024-11-01
Create control:
- Control type: Date picker
- Bound to parameter:
StartDate
Apply parameter to filter:
- Add filter to dataset:
order_date >= ${StartDate}
Users adjust date picker, dashboard updates automatically.
Multi-select parameters:
product_category IN ${SelectedCategories}
Users select multiple categories from dropdown, visuals filter accordingly.
Drill-Down Hierarchies
Define hierarchies to enable drill-down from high-level to granular views.
Example hierarchy: Year → Quarter → Month → Day
User clicks on “2024” bar, chart drills down to quarters (Q1, Q2, Q3, Q4). Clicks “Q4”, drills down to months (Oct, Nov, Dec). Clicks “Nov”, drills down to days.
Automatic hierarchies: QuickSight auto-detects date fields and creates time hierarchies.
Themes and Formatting
Themes apply consistent styling across dashboards.
Theme components:
- Color palette (primary, accent, warning, danger colors)
- Typography (font family, sizes)
- Chart formatting (borders, gridlines, data labels)
Example custom theme:
- Primary color: Company brand blue (#0066CC)
- Accent color: Company orange (#FF6600)
- Font: Company corporate font (Roboto)
Apply theme to all dashboards for visual consistency.
Conditional formatting: Highlight values based on rules.
Example: Color revenue cells red if below target, green if above.
IF revenue < 50000 THEN red
ELSE IF revenue > 100000 THEN green
ELSE yellow
Performance Optimization Strategies
QuickSight performance depends on data organization, SPICE usage, and query optimization.
Use SPICE for Interactive Dashboards
Import frequently-queried data to SPICE instead of direct query.
Performance comparison (dashboard with 10 visuals):
| Mode | Query Time | User Experience |
|---|---|---|
| Direct Query (Athena) | 5-15 seconds per visual | Slow, users wait for each filter change |
| Direct Query (Redshift) | 2-8 seconds per visual | Moderate, acceptable for light usage |
| SPICE | <1 second per visual | Fast, interactive exploration |
Decision framework:
- Data refreshes ≤ hourly → SPICE (refresh on schedule)
- Data must be real-time (seconds) → Direct query
- Data volume > 500 GB → Hybrid (aggregates in SPICE, details direct query)
Pre-Aggregate Data
Aggregate data before importing to SPICE to reduce SPICE usage and improve performance.
Inefficient: Import 100 million row transaction table to SPICE.
- SPICE usage: 100M rows × 50 columns × average compression = 50 GB
- Cost: 50 GB - 10 GB (included) = 40 GB × $0.25 = $10/month
- Performance: Slow aggregations across 100M rows
Efficient: Pre-aggregate in Athena, import aggregates to SPICE.
Example pre-aggregation query:
-- Run daily, import to SPICE
SELECT
DATE_TRUNC('day', transaction_date) as day,
product_category,
region,
SUM(revenue) as total_revenue,
SUM(quantity) as total_quantity,
COUNT(*) as transaction_count,
COUNT(DISTINCT customer_id) as unique_customers
FROM transactions
WHERE year = 2024
GROUP BY
DATE_TRUNC('day', transaction_date),
product_category,
region
- SPICE usage: 100K rows (daily aggregates) × 7 columns = 0.5 GB
- Cost: $0 (within included capacity)
- Performance: Fast aggregations on pre-computed summaries
Incremental Refresh for Large Datasets
Use incremental refresh instead of full refresh for append-only data.
Example: Event log grows by 1 GB daily, total 365 GB.
- Full refresh: Import 365 GB daily (45 minutes, high network cost)
- Incremental refresh: Import 1 GB daily (2 minutes, minimal cost)
Configuration:
- Ensure dataset has timestamp column
- Enable incremental refresh
- QuickSight tracks last refresh timestamp
- Only rows with timestamp > last refresh imported
Optimize Direct Query SQL
For direct query mode, optimize source queries to reduce execution time.
Inefficient query (scans entire table):
SELECT * FROM orders
Efficient query (filters early, selects needed columns):
SELECT
order_date,
product_id,
revenue
FROM orders
WHERE order_date >= DATE '2024-01-01'
AND order_status = 'completed'
Use dataset filters to apply WHERE clauses automatically:
- Add filter:
order_status = 'completed' - All visuals query only completed orders, filter pushes down to source
Limit Visual Complexity
Reduce number of data points displayed in visuals.
Problem: Line chart with 100,000 points renders slowly, clutters screen.
Solution: Aggregate to appropriate granularity.
- Daily view: 365 points (one year of data)
- Hourly view: 720 points (one month of data)
- Drill down for finer granularity when needed
Top N filtering: Show top 10 categories instead of all 1,000.
Cost Optimization Strategies
QuickSight cost has three components: user subscriptions, SPICE storage, and data source query costs (Athena, Redshift).
Optimize User Licensing
Use reader pricing ($0.30/session, max $5/month) instead of author pricing ($24/month) for users who only consume dashboards.
Example: 100 users view dashboards monthly.
- All authors: 100 × $24 = $2,400/month
- Mixed (10 authors, 90 readers): 10 × $24 + 90 × $5 = $240 + $450 = $690/month
- Savings: $1,710/month (71%)
Reader usage patterns:
- Light users (1-5 sessions/month): $0.30-$1.50/month
- Moderate users (10-15 sessions/month): $3.00-$4.50/month
- Heavy users (17+ sessions/month): $5.00/month (capped)
Promote readers to authors only when they need to create dashboards, not just view them.
Minimize SPICE Usage
SPICE pricing: $0.25/GB/month beyond included capacity (10 GB per author).
Optimization strategies:
- Pre-aggregate before import: Import daily summaries instead of raw transactions (100× size reduction)
- Use incremental refresh: Avoid re-importing historical data daily
- Archive old data: Drop partitions older than retention period (e.g., keep only last 12 months)
- Remove unused datasets: Delete datasets no longer referenced by dashboards
- Direct query for rarely-used data: Use SPICE for hot data, direct query for cold data
Example cost reduction: 500 GB source data.
- Full import: 500 GB ÷ 10 (compression) = 50 GB SPICE
- 10 authors = 100 GB included, no additional cost
If pre-aggregated:
- Aggregated data: 5 GB source → 0.5 GB SPICE
- Cost: $0 (well within included capacity)
- Savings: $12.50/month in potential future SPICE costs as data grows
Reduce Athena Query Costs
When using Athena as data source, QuickSight triggers Athena queries during SPICE refresh or direct query mode.
Optimization:
- Convert source data to Parquet with partitioning (90% scan reduction)
- Import to SPICE instead of direct query (query once during refresh, not every dashboard load)
- Use CTAS to materialize complex aggregations in Athena, query pre-computed table
Example: Dashboard queries 100 GB via Athena direct query, loaded 1,000 times/day.
- Direct query cost: 100 GB × 1,000 × $5/TB = $500/day = $15,000/month
- SPICE import cost: 100 GB × 1 × $5/TB = $0.50/day = $15/month
- Savings: $14,985/month (99.9%)
Share Datasets Across Dashboards
Create datasets once, use in multiple dashboards.
Inefficient: Each dashboard creates own dataset from same source.
- 10 dashboards query same Athena table = 10× SPICE usage, 10× Athena cost
Efficient: Create shared dataset, reference from all dashboards.
- 1 dataset imported to SPICE, 10 dashboards reference it
- 1× SPICE usage, 1× Athena cost
Dataset sharing:
- Create dataset with appropriate filters and calculated fields
- Publish dataset
- Reference published dataset in multiple analyses
Monitor Usage with CloudWatch
Track QuickSight metrics to identify cost optimization opportunities.
Key metrics:
DataSetImport: SPICE refresh duration and frequencyDashboardView: Dashboard access patternsSPICECapacityUtilization: SPICE usage percentage
Example alarm: Alert when SPICE usage exceeds 90% of allocated capacity.
aws cloudwatch put-metric-alarm \
--alarm-name quicksight-spice-high \
--metric-name SPICECapacityUtilization \
--namespace AWS/QuickSight \
--statistic Average \
--period 3600 \
--threshold 90 \
--comparison-operator GreaterThanThreshold
Security Best Practices
Row-Level Security (RLS)
Restrict data visibility based on user identity.
Use case: Each sales rep sees only their own customer data.
RLS configuration:
- Create dataset with user mapping table
- Define RLS rules
- Apply rules to dataset
Example user mapping (stored in S3 or database):
username,region
alice@example.com,us-east
bob@example.com,us-west
carol@example.com,eu-west
RLS rule:
region = {region}
When alice@example.com views dashboard, QuickSight automatically filters data where region = 'us-east'.
Dynamic RLS (using session variables):
customer_id = ${user_id}
No user mapping table required, filter based on authenticated user’s ID.
Column-Level Security (CLS)
Hide sensitive columns from specific users.
Use case: Analysts see aggregated revenue, but not individual customer PII.
CLS configuration:
- Create dataset with all columns
- Define permission rules
- Authors see all columns, readers see filtered columns
Example: Hide customer_email, customer_phone from reader users.
- Authors (build dashboards): See all columns
- Readers (view dashboards): See only non-PII columns
VPC Connectivity
Access private data sources (RDS, Redshift in VPC) without public endpoints.
Setup:
- Enable QuickSight VPC connection
- Select VPC, subnets, security groups
- QuickSight creates ENIs in VPC
- Data sources accessible via private IP
Security group rules:
- Allow inbound from QuickSight security group on database port (3306, 5432, 5439)
- QuickSight outbound to database security group
No public internet exposure: Data queries travel through private network.
Encryption
Encryption at rest:
- SPICE data encrypted with AWS-managed keys (AES-256)
- Optional: Use customer-managed KMS keys for SPICE encryption
Encryption in transit:
- TLS 1.2+ for all API calls
- TLS for database connections (Redshift, RDS, Athena)
Enable KMS encryption:
aws quicksight update-account-settings \
--aws-account-id 123456789012 \
--default-namespace default \
--notification-email admin@example.com \
--edition ENTERPRISE \
--default-encryption-configuration '{
"EncryptionOption": "KMS",
"KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/abc-123"
}'
When to Use AWS QuickSight
Strong fit:
- ✅ AWS-native data sources (S3, Athena, Redshift, RDS, Aurora)
- ✅ Cost-sensitive BI requirements (eliminate $100K+ licensing fees)
- ✅ Embedded analytics in SaaS applications (pay-per-session pricing)
- ✅ Serverless architecture preference (no cluster management)
- ✅ Rapid dashboard creation by non-technical users (drag-and-drop)
- ✅ Variable user count (scale from 10 to 10,000 users without tier upgrades)
- ✅ ML-powered insights (Q for natural language queries, anomaly detection)
Consider alternatives when:
- ❌ Complex custom visualizations → Tableau/Power BI for advanced charting libraries
- ❌ Deep data modeling and ETL → Looker for complex data transformations, dbt for transformation logic
- ❌ Non-AWS data sources exclusively → Tableau/Power BI with native connectors for SAP, Oracle, SaaS platforms
- ❌ Pixel-perfect report formatting → Tableau for print-quality reports, SSRS for operational reports
- ❌ Real-time streaming dashboards → Grafana for sub-second updates, Kibana for log analytics
QuickSight vs Alternatives
QuickSight vs Tableau
| Aspect | QuickSight | Tableau |
|---|---|---|
| Pricing | $24/author, $0.30/session readers | $70/creator, $15/viewer |
| Infrastructure | Serverless (AWS-managed) | Server (self-managed) or Cloud (SaaS) |
| Data sources | Optimized for AWS, 20+ connectors | 100+ native connectors, broad compatibility |
| Visualizations | Standard business charts, custom visuals | Advanced visualizations, rich customization |
| Embedded analytics | $0.30/session (same as standard) | $5,000+/user enterprise license |
| Best for | AWS-native stacks, cost efficiency | Complex visualizations, heterogeneous data |
Cost comparison (10 creators, 100 viewers):
- QuickSight: 10 × $24 + 100 × $5 = $740/month
- Tableau Cloud: 10 × $70 + 100 × $15 = $2,200/month
QuickSight 66% cheaper for this scenario.
QuickSight vs Power BI
| Aspect | QuickSight | Power BI |
|---|---|---|
| Pricing | $24/author, $0.30/session readers | $10/user (Pro), $20/user (Premium) |
| Integration | AWS-native (Athena, Redshift, S3) | Microsoft ecosystem (Azure, Office 365) |
| Desktop tool | Web-only | Power BI Desktop (Windows app) |
| Embedded analytics | $0.30/session | Dedicated capacity ($4,995+/month) |
| SPICE | 10 GB/author included | 10 GB/user (Pro), 100 TB (Premium) |
Power BI advantage: Cheaper per-user pricing for small teams, deep Office 365 integration.
QuickSight advantage: Serverless, AWS-native, better embedded analytics pricing.
QuickSight vs Looker
| Aspect | QuickSight | Looker |
|---|---|---|
| Pricing | $24/author, $0.30/session readers | Custom (typically $3,000-$5,000/month base) |
| Data modeling | Basic (calculated fields, joins) | LookML (code-based semantic layer) |
| Infrastructure | Serverless | Self-managed or Looker-hosted |
| Best for | Dashboards, BI for business users | Data modeling, governed analytics |
Looker excels at complex data modeling with version-controlled semantic layer. QuickSight excels at cost efficiency and rapid dashboard creation.
QuickSight vs Redshift + BI Tool
Pattern: Use Redshift as data warehouse, QuickSight as visualization layer.
Why this combination works:
- Redshift provides fast queries on large datasets (PB-scale)
- QuickSight imports Redshift aggregates into SPICE
- Dashboards query SPICE (sub-second), not Redshift directly
- Reduces Redshift compute costs (fewer concurrent queries)
Alternative: Redshift + Tableau = higher BI licensing costs.
Common Pitfalls
Not Using SPICE for Interactive Dashboards
Symptom: Dashboards load slowly, users complain about lag when applying filters.
Root cause: Dataset configured for direct query instead of SPICE import.
Solution: Import data to SPICE, configure refresh schedule.
Before (direct query Athena):
- Dashboard load time: 10 seconds per visual
- Athena cost: $5/TB scanned per dashboard load
After (SPICE import):
- Dashboard load time: <1 second per visual
- Athena cost: $5/TB once during daily refresh
- User experience: 10× faster
Full Refresh Instead of Incremental
Symptom: SPICE refresh takes hours, blocks dashboard usage during refresh.
Root cause: Full refresh re-imports entire dataset daily instead of incremental refresh.
Example: 500 GB dataset, grows 2 GB daily.
- Full refresh: 500 GB import takes 2 hours daily
- Incremental refresh: 2 GB import takes 5 minutes daily
Solution: Enable incremental refresh with timestamp column.
Over-Provisioning Author Licenses
Symptom: High monthly costs despite most users only viewing dashboards.
Root cause: All users assigned author licenses ($24/month) when reader licenses ($0.30/session) would suffice.
Example: 100 users, 90 only view dashboards.
- All authors: 100 × $24 = $2,400/month
- 10 authors + 90 readers: 10 × $24 + 90 × $5 = $690/month
- Savings: $1,710/month
Solution: Audit user activity, downgrade viewers to reader licenses.
Not Sharing Datasets
Symptom: Multiple dashboards query same source, causing redundant SPICE usage and Athena costs.
Root cause: Each dashboard creates its own dataset instead of sharing.
Example: 5 dashboards query same sales table.
- Without sharing: 5 datasets × 10 GB SPICE = 50 GB
- With sharing: 1 dataset × 10 GB SPICE = 10 GB
- Savings: 40 GB × $0.25 = $10/month in SPICE costs
Solution: Create shared certified dataset, reference from multiple dashboards.
Missing Row-Level Security
Symptom: Users see data they shouldn’t access (e.g., sales rep sees all regions’ data instead of only their own).
Root cause: RLS not configured, all users see full dataset.
Solution: Implement RLS rules based on user identity.
Example RLS rule:
sales_rep_email = ${email}
Each user sees only their own sales records automatically.
Inefficient Direct Query SQL
Symptom: Direct query dashboards time out or take minutes to load.
Root cause: Source query scans large tables without filters or indexes.
Example inefficient query:
SELECT * FROM orders -- Scans 10 TB table
Solution: Apply filters in dataset configuration.
SELECT order_id, customer_id, revenue, order_date
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '90' DAY
AND order_status = 'completed'
Reduces scan to 90 days of completed orders (99% reduction).
Key Takeaways
AWS QuickSight provides serverless BI with pay-per-session pricing that eliminates traditional BI licensing costs and infrastructure management. Author licenses cost $24/month for dashboard creators, reader licenses cost $0.30/session (max $5/month) for dashboard consumers—a 97% cost reduction compared to traditional BI tools for viewer-heavy workloads.
SPICE in-memory engine enables sub-second dashboard performance without managing caching infrastructure. Import frequently-queried data to SPICE with scheduled refreshes (hourly, daily) instead of direct-querying source databases. This reduces database load, improves user experience, and minimizes data source query costs (Athena, Redshift).
Embedded analytics pricing makes customer-facing dashboards economically viable. Traditional BI tools charge $5,000+ per embedded user per year. QuickSight charges $0.30 per session with no embedding premium—100 embedded users viewing dashboards monthly costs $500/month vs $41,667/month with traditional tools (98.8% savings).
Pre-aggregate data before importing to SPICE to maximize performance and minimize costs. Import daily summaries instead of raw transactions (100× size reduction), use incremental refresh for append-only datasets, and share datasets across dashboards to avoid redundant imports.
Use QuickSight for AWS-native data stacks where data lives in S3, Athena, Redshift, RDS, or Aurora. Native integration provides fastest performance, lowest cost, and simplest setup. For heterogeneous environments with SAP, Oracle, or complex on-premise data sources, evaluate Tableau or Power BI for broader connector support.
Security through RLS and VPC connectivity: Row-level security filters data by user identity automatically, column-level security hides sensitive fields, and VPC connectivity accesses private databases without public exposure. SPICE data encrypts at rest with AWS-managed or customer-managed KMS keys.
Common pitfalls involve not using SPICE for interactive dashboards, assigning author licenses to users who only view dashboards, and creating redundant datasets instead of sharing. Enable incremental refresh for large datasets, implement RLS for multi-tenant scenarios, and pre-aggregate in source queries before importing to SPICE.
Integrate with broader AWS analytics ecosystem: Glue catalogs data, Athena queries it, QuickSight visualizes it. This combination provides enterprise-grade analytics platform without managing infrastructure, with costs proportional to actual usage.
Found this guide helpful? Share it with your team:
Share on LinkedIn