superset-chart-builder
Expert guidance for selecting, configuring, and optimizing Apache Superset charts. This skill helps you choose the right visualization, configure it properly, and avoid common mistakes - with specific examples for Finance SSC, BIR compliance, and business intelligence use cases.
$ インストール
git clone https://github.com/jgtolentino/insightpulse-odoo /tmp/insightpulse-odoo && cp -r /tmp/insightpulse-odoo/docs/claude-code-skills/community/superset-chart-builder ~/.claude/skills/insightpulse-odoo// tip: Run this command in your terminal to install the skill
name: superset-chart-builder description: Expert guidance for selecting, configuring, and optimizing Apache Superset charts. This skill helps you choose the right visualization, configure it properly, and avoid common mistakes - with specific examples for Finance SSC, BIR compliance, and business intelligence use cases. license: MIT
Superset Chart Builder Skill
Purpose
Expert guidance for selecting, configuring, and optimizing Apache Superset charts. This skill helps you choose the right visualization, configure it properly, and avoid common mistakes - with specific examples for Finance SSC, BIR compliance, and business intelligence use cases.
When to Use This Skill
- Selecting the right chart type for your data story
- Configuring chart properties and customizations
- Optimizing chart performance and interactivity
- Building dashboards for Finance Shared Service Centers
- Creating BIR compliance visualizations
- Designing analytics for InsightPulse AI or business operations
Chart Selection Decision Tree
Start Here: What's Your Primary Goal?
1. COMPARE VALUES ACROSS CATEGORIES
- Few categories (2-7): Bar Chart (horizontal or vertical)
- Many categories (8+): Table or Horizontal Bar Chart
- Need to show change over time: Line Chart or Area Chart
- Need to show parts of whole: Stacked Bar Chart
2. SHOW TRENDS OVER TIME
- Continuous time series: Line Chart
- Multiple metrics: Multi-Line Chart or Mixed Chart
- Show volume + trend: Area Chart
- Compare periods: Bar Chart with time grouping
- Cumulative values: Stacked Area Chart
3. DISPLAY SINGLE KEY METRIC (KPI)
- Just the number: Big Number
- Number + trend: Big Number with Trendline
- Progress to goal: Gauge Chart
- Multiple related KPIs: Big Number cards in grid layout
4. SHOW COMPOSITION/PARTS OF WHOLE
- 2-5 categories: Pie Chart or Donut Chart
- 6+ categories: Bar Chart (easier to read)
- Hierarchical data: Treemap or Sunburst
- Over time: Stacked Area Chart or 100% Stacked Bar
5. COMPARE MANY ITEMS WITH DETAIL
- Tabular data with sorting: Table
- Cross-tabulation: Pivot Table
- Heatmap of values: Heatmap
6. SHOW RELATIONSHIPS/DISTRIBUTION
- Correlation between two metrics: Scatter Plot
- Distribution: Histogram or Box Plot
- Network/flow: Sankey Diagram
7. GEOGRAPHIC DATA
- Points on map: Deck.gl Scatterplot
- Regions/choropleth: Country Map or Deck.gl Polygon
Chart Type Configuration Guide
Bar Charts
Best For: Comparing values across categories, rankings, showing magnitude differences
Configuration Essentials:
Chart Type: Bar Chart / Horizontal Bar Chart
Key Settings:
Metrics: [sum(amount), avg(value)]
Dimensions: [agency_name, month, category]
Orientation: Horizontal (for long labels) | Vertical (for time series)
Formatting:
Show Legend: Yes (for multiple metrics)
Show Values: Yes (for exact numbers)
Sort Bars: Descending (for rankings)
Color Scheme: Use categorical colors
Performance:
Row Limit: 50 (default) | 100 (for comprehensive views)
Server Pagination: Enable for 1000+ rows
Finance SSC Example:
-- BIR Filing Status by Agency
SELECT
agency_code,
agency_name,
COUNT(CASE WHEN filing_status = 'Completed' THEN 1 END) as completed_filings,
COUNT(CASE WHEN filing_status = 'Pending' THEN 1 END) as pending_filings,
COUNT(CASE WHEN filing_status = 'Overdue' THEN 1 END) as overdue_filings
FROM bir_filing_tracker
WHERE filing_period = '2025-Q4'
GROUP BY agency_code, agency_name
ORDER BY overdue_filings DESC
Chart: Horizontal Bar Chart, Stacked, showing status breakdown per agency
Common Mistakes:
- ❌ Too many bars (20+) - hard to read
- ❌ Using pie chart instead for 5+ categories
- ❌ Not sorting bars meaningfully
- ✅ Use color to highlight key insights (red for overdue)
Line Charts
Best For: Time series trends, continuous data, showing patterns over time
Configuration Essentials:
Chart Type: Line Chart / Time-series Line Chart
Key Settings:
Metrics: [sum(revenue), avg(processing_time)]
Time Column: filing_date, closing_date, processed_at
Time Grain: Day | Week | Month | Quarter
Formatting:
Line Style: Solid (for primary) | Dashed (for comparison)
Markers: Show on hover only
Y-Axis: Start at zero (for volume) | Auto (for percentages)
Rolling Window: 7-day moving average (for smoothing)
Annotations:
Reference Lines: Budget targets, deadlines
Event Markers: BIR filing due dates, month-end close
Finance SSC Example:
-- Monthly Closing Task Completion Trend
SELECT
DATE_TRUNC('day', completed_at) as date,
COUNT(*) as tasks_completed,
AVG(EXTRACT(EPOCH FROM (completed_at - created_at))/3600) as avg_hours_to_complete
FROM month_end_closing_tasks
WHERE completed_at >= '2025-01-01'
AND task_status = 'Done'
GROUP BY DATE_TRUNC('day', completed_at)
ORDER BY date
Chart: Line Chart with 2 Y-axes (count left, hours right), annotations for month-end dates
Common Mistakes:
- ❌ Not using time-series chart type (loses time features)
- ❌ Too many lines (5+) - confusing
- ❌ Jagged lines without smoothing for daily data
- ✅ Use area chart to emphasize volume
Big Number (KPI Cards)
Best For: Executive dashboards, highlighting key metrics, status at-a-glance
Configuration Essentials:
Chart Type: Big Number / Big Number with Trendline
Key Settings:
Metric: COUNT(*), SUM(amount), MAX(date)
Subheader: Comparison text or time period
Formatting:
Number Format:
- ",.0f" for whole numbers (1,234)
- ",.2f" for decimals (1,234.56)
- ".1%" for percentages (45.2%)
- "₱,.0f" for Philippine Peso
Font Size: Large (for primary KPIs)
Comparison:
Show Trend: Yes (with comparison period)
Comparison Type: Values | Percentage | Change
Time Comparison: Previous period, year-over-year
Conditional Formatting:
Color Rules: Green (good) | Yellow (warning) | Red (critical)
Finance SSC Example:
-- Overdue BIR Filings (Critical KPI)
SELECT COUNT(*) as overdue_count
FROM bir_filing_tracker
WHERE filing_status = 'Overdue'
AND due_date < CURRENT_DATE
Big Number Config:
- Metric:
overdue_count - Subheader: "BIR Filings Past Due"
- Number Format: "0"
- Color: Red if > 0, Green if = 0
InsightPulse AI Example:
-- Daily Document Processing Volume
SELECT
COUNT(*) as documents_processed,
AVG(ocr_confidence_score) as avg_confidence
FROM document_processing_logs
WHERE processed_at >= CURRENT_DATE
AND processing_status = 'Completed'
Two Big Number cards side-by-side with trendlines (7-day comparison)
Tables & Pivot Tables
Best For: Detailed data exploration, drilldown views, multi-dimensional analysis
Configuration Essentials:
Chart Type: Table / Pivot Table
Key Settings:
Columns: Dimensions and metrics to display
Row Limit: 50-500 depending on use case
Formatting:
Column Formatting:
- Align Right: Numbers and dates
- Align Left: Text and categories
Conditional Formatting: Highlight cells based on rules
Features:
Sorting: Enable column header sorting
Filtering: Enable search box
Pagination: Server-side for large datasets
Pivot Table Specific:
Rows: Primary grouping (Agency, Month)
Columns: Secondary dimension (Filing Status)
Aggregation: SUM, AVG, COUNT
Finance SSC Example:
-- Month-End Closing Task Status Matrix
SELECT
agency_name,
task_category,
task_name,
assignee_name,
due_date,
completion_date,
CASE
WHEN completion_date IS NULL AND due_date < CURRENT_DATE THEN 'Overdue'
WHEN completion_date IS NULL THEN 'In Progress'
ELSE 'Completed'
END as status,
CASE
WHEN completion_date IS NOT NULL
THEN EXTRACT(EPOCH FROM (completion_date - due_date))/86400
END as days_variance
FROM month_end_closing_tasks
WHERE closing_period = '2025-10'
ORDER BY agency_name, task_category, due_date
Table Config:
- Conditional formatting: Red for overdue, green for early completion
- Sortable columns
- Search box enabled
Pie & Donut Charts
Best For: Showing composition of a whole, 2-5 categories maximum
Configuration Essentials:
Chart Type: Pie Chart / Donut Chart
Key Settings:
Dimension: Category column (status, type)
Metric: SUM, COUNT, or percentage
Formatting:
Show Labels: Yes (with percentages)
Show Legend: Yes (for more than 3 categories)
Donut Radius: 50-70% (for donut charts)
Color Scheme: Categorical or custom
Best Practices:
Max Categories: 5 (use bar chart for 6+)
Sort: By size (largest first)
Finance SSC Example:
-- BIR Form Types Distribution
SELECT
form_type,
COUNT(*) as filing_count
FROM bir_filing_tracker
WHERE filing_period = '2025-Q4'
GROUP BY form_type
Donut Chart:
- Center Text: Total filings count
- Labels: Form type with percentage
- Colors: Distinctive categorical palette
When NOT to Use:
- ❌ More than 5 categories
- ❌ Values are similar (hard to distinguish)
- ❌ Comparing multiple pie charts side-by-side
- ✅ Use bar chart instead for better comparison
Gauge Charts
Best For: Progress toward goal, performance metrics, completion percentages
Configuration Essentials:
Chart Type: Gauge Chart
Key Settings:
Metric: Percentage or completion value
Min Value: 0 or baseline
Max Value: 100 or target
Formatting:
Color Ranges:
- 0-33%: Red (critical)
- 34-66%: Yellow (warning)
- 67-100%: Green (good)
Show Needle: Yes
Show Values: Current and target
Finance SSC Example:
-- Month-End Closing Progress
SELECT
(COUNT(CASE WHEN task_status = 'Done' THEN 1 END)::FLOAT /
COUNT(*)::FLOAT * 100) as completion_percentage
FROM month_end_closing_tasks
WHERE closing_period = '2025-10'
Gauge: 0-100%, color thresholds at 33% and 67%
Advanced Chart Types
Heatmap
Best For: Correlation matrices, time-based patterns, intensity visualization
Finance SSC Example:
-- Task Completion by Agency and Day
SELECT
agency_code,
TO_CHAR(completed_at, 'Day') as day_of_week,
COUNT(*) as task_count
FROM month_end_closing_tasks
WHERE completed_at IS NOT NULL
GROUP BY agency_code, TO_CHAR(completed_at, 'Day')
Treemap
Best For: Hierarchical data, proportional comparison, space-efficient visualization
InsightPulse AI Example:
-- Document Processing Volume by Type and Status
SELECT
document_type,
processing_status,
COUNT(*) as document_count
FROM document_processing_logs
GROUP BY document_type, processing_status
Performance Optimization
Query Performance
- Use indexed columns in WHERE clauses and GROUP BY
- Aggregate at database level rather than post-processing
- Limit row counts appropriately (50-500 for tables, 10-20 for charts)
- Use materialized views for complex calculations
- Cache query results for frequently accessed dashboards
Chart Rendering Performance
- Reduce data points for line charts (use time grain: day → week → month)
- Paginate tables server-side for large datasets
- Async queries for slow-running reports
- Progressive loading for multi-chart dashboards
Your Database Context
For Odoo 18/19 + Supabase PostgreSQL:
-- Use Odoo's optimized views
FROM account_move_line_view -- Pre-joined accounting data
FROM stock_move_stats -- Aggregated inventory data
-- Leverage PostgreSQL features
WITH RECURSIVE -- Hierarchical queries
WINDOW FUNCTIONS -- Running totals, rankings
MATERIALIZED VIEW -- Pre-computed aggregations
Common Patterns for Finance SSC
BIR Compliance Dashboard Charts
1. Filing Status Overview (Big Number Cards)
- Total filings this period
- Completed count (green)
- Pending count (yellow)
- Overdue count (red)
2. ATP Expiration Timeline (Line Chart)
SELECT
agency_name,
atp_expiry_date,
CASE
WHEN atp_expiry_date < CURRENT_DATE THEN 'Expired'
WHEN atp_expiry_date < CURRENT_DATE + INTERVAL '30 days' THEN 'Expiring Soon'
ELSE 'Valid'
END as status
FROM bir_atp_registry
WHERE atp_status = 'Active'
3. Form Submission by Agency (Stacked Bar)
- X-axis: Agency names
- Y-axis: Filing count
- Stack: Form types (1601-C, 2550Q, 1702-RT)
4. Compliance Rate Trend (Line + Area)
SELECT
DATE_TRUNC('month', filing_date) as month,
(COUNT(CASE WHEN filing_status = 'Completed' THEN 1 END)::FLOAT /
COUNT(*)::FLOAT * 100) as compliance_rate
FROM bir_filing_tracker
GROUP BY DATE_TRUNC('month', filing_date)
ORDER BY month
Month-End Closing Dashboard Charts
1. Progress Gauge
- Overall completion percentage
- Color thresholds: <70% red, 70-90% yellow, >90% green
2. Task Status Breakdown (Donut)
- Done
- In Progress
- Blocked
- Not Started
3. Tasks by Agency (Horizontal Bar)
- Sorted by completion rate
- Stacked by status
4. Timeline View (Gantt Alternative)
SELECT
task_name,
due_date,
completion_date,
assignee_name,
EXTRACT(EPOCH FROM (completion_date - due_date))/86400 as days_variance
FROM month_end_closing_tasks
WHERE closing_period = CURRENT_PERIOD
ORDER BY due_date
Use Table with conditional formatting for variance
Chart Configuration Checklist
Before finalizing any chart:
Data Quality:
- No NULL values breaking visualizations
- Date formats consistent
- Number formats appropriate (decimals, currency)
- Categories are complete (no missing groups)
Visual Design:
- Chart type matches data story
- Colors are meaningful (not just default)
- Labels are clear and readable
- Legend is necessary and placed well
- Axes have appropriate scales
Performance:
- Query executes in < 30 seconds
- Row limit is appropriate
- Caching is enabled
- No unnecessary calculations
Accessibility:
- Color-blind friendly palette
- Text is legible (font size 12+)
- Tooltip provides full context
- Alternative text/description for screen readers
Interactivity:
- Filters apply correctly
- Cross-filtering configured (if needed)
- Drill-down enabled (if multi-level data)
- Export options available
Color Schemes for Finance SSC
Status Colors (Universal)
- Green (#52C41A): Completed, On-time, Good
- Yellow (#FAAD14): In Progress, Warning, Pending
- Red (#F5222D): Overdue, Critical, Failed
- Blue (#1890FF): Informational, Neutral
- Gray (#8C8C8C): Not Started, Inactive
BIR Form Types
- 1601-C (Monthly Withholding): #1890FF (Blue)
- 2550Q (Quarterly VAT): #52C41A (Green)
- 1702-RT/EX (Annual ITR): #FA8C16 (Orange)
- ATP Renewals: #722ED1 (Purple)
Agency Differentiation
Use distinct categorical colors:
RIM: #1890FF
CKVC: #52C41A
BOM: #FA8C16
JPAL: #722ED1
JLI: #13C2C2
JAP: #F5222D
LAS: #FADB14
RMQB: #EB2F96
Integration with Your Stack
Odoo Database Queries
-- Connect to Odoo PostgreSQL through Supabase
SELECT
move.name as invoice_number,
partner.name as partner_name,
move.amount_total,
move.state
FROM account_move move
JOIN res_partner partner ON move.partner_id = partner.id
WHERE move.move_type = 'out_invoice'
AND move.state IN ('posted', 'paid')
Supabase Realtime Data
-- Query Supabase tables directly
SELECT * FROM month_end_closing_tasks
WHERE assignee_id = current_user_id()
AND task_status != 'Done'
ORDER BY due_date
InsightPulse AI Metrics
-- Document processing analytics
SELECT
DATE_TRUNC('hour', processed_at) as hour,
COUNT(*) as documents_processed,
AVG(processing_time_seconds) as avg_processing_time,
AVG(ocr_confidence_score) as avg_confidence,
SUM(CASE WHEN processing_status = 'Failed' THEN 1 ELSE 0 END) as failed_count
FROM document_processing_logs
WHERE processed_at >= NOW() - INTERVAL '24 hours'
GROUP BY DATE_TRUNC('hour', processed_at)
ORDER BY hour DESC
Quick Reference: Chart Selection
| Your Goal | Best Chart | Alternative |
|---|---|---|
| Show KPI | Big Number | Gauge |
| Compare categories | Bar Chart | Table |
| Show trend | Line Chart | Area Chart |
| Parts of whole | Donut Chart | Stacked Bar |
| Detailed data | Table | Pivot Table |
| Time series | Line Chart | Bar Chart (grouped) |
| Progress | Gauge | Big Number |
| Distribution | Histogram | Box Plot |
| Correlation | Scatter Plot | Heatmap |
| Geographic | Deck.gl Map | Country Map |
Next Steps
After building your chart:
- Test with real data - Ensure query performs well
- Add to dashboard - Position with related charts
- Configure filters - Enable user interactivity
- Set up alerts - For critical metrics
- Document - Add description for other users
Related Skills:
superset-dashboard-designer- Layout and compositionsuperset-sql-developer- Query optimizationodoo19-oca-devops- Data source integration
Support
For Superset-specific features, check:
# View available chart types
http://your-superset-url/chart/list/
# Check your Superset version
SELECT version FROM superset_version;
Your Context:
- Odoo 18/19 database
- Supabase PostgreSQL (spdtwktxdalcfigzeqrz)
- Finance SSC multi-agency environment
- BIR compliance requirements
- InsightPulse AI document processing
Repository
