The Looker Migration Playbook
Migrating from PowerBI to Looker for a global enterprise. LookML patterns, governance, and lessons learned.
I recently led a full BI platform migration from PowerBI to Looker for a global luxury retail company. 50+ dashboards, 200+ users across 15 countries, and a 6-month timeline. Here's everything I learned.
Why Migrate?
PowerBI is a great tool, but it wasn't working for this organization:
- Governance nightmare: 300+ reports with no version control, duplicate logic everywhere
- Performance issues: Import mode datasets hitting refresh limits
- HQ alignment: Global headquarters was standardizing on Looker
- Self-service gap: Business users couldn't explore data without IT help
Looker's semantic layer (LookML) promised to solve the governance issues, and the move to BigQuery would address performance.
Phase 1: Discovery (Weeks 1-4)
Audit Everything
Before migrating anything, we needed to understand what existed:
- Cataloged all 300+ reports (most were unused)
- Identified 50 "critical" dashboards through usage analytics
- Documented business logic embedded in DAX measures
- Mapped data sources and refresh schedules
The 80/20 Rule
80% of users relied on 20% of reports. We prioritized those 50 dashboards for migration and deprecated the rest.
Phase 2: LookML Foundation (Weeks 5-10)
Model Architecture
We organized LookML into three layers:
├── base/ # Raw table definitions
│ ├── sales.view.lkml
│ ├── products.view.lkml
│ └── customers.view.lkml
├── core/ # Business logic & joins
│ ├── order_facts.view.lkml
│ └── core.model.lkml
└── marts/ # User-facing explores
├── sales_explore.lkml
└── inventory_explore.lkml
Naming Conventions
Consistency matters at scale. Our rules:
- Views:
snake_case, singular nouns (order, notorders) - Dimensions: descriptive, no abbreviations (
customer_lifetime_value) - Measures: verb + noun (
total_revenue,count_distinct_customers) - Explores: business domain names (
Sales Performance)
Reusable Patterns
We built a library of common patterns:
# Reusable date dimension
view: _date_dimension {
extension: required
dimension_group: created {
type: time
timeframes: [date, week, month, quarter, year]
sql: ${TABLE}.created_at ;;
}
dimension: is_current_year {
type: yesno
sql: EXTRACT(YEAR FROM ${created_date}) = EXTRACT(YEAR FROM CURRENT_DATE()) ;;
}
}
Phase 3: Dashboard Migration (Weeks 11-18)
Don't Replicate, Reimagine
The biggest mistake teams make is trying to recreate PowerBI dashboards exactly in Looker. Don't do this. Looker has different strengths:
- PowerBI: pixel-perfect reports → Looker: exploratory dashboards
- PowerBI: complex visuals → Looker: simple, filterable tiles
- PowerBI: static exports → Looker: scheduled deliveries & alerts
User Involvement
For each dashboard, we:
- Interviewed the primary users
- Identified the actual questions they needed answered
- Built a Looker dashboard addressing those questions
- Iterated based on feedback
This added time but resulted in better dashboards that people actually used.
Phase 4: DevOps & Governance (Weeks 19-22)
Git Workflow
LookML's biggest advantage is that it's code. We implemented:
- Branch protection on
main - Required PR reviews from BI team
- Spectacles for automated testing
- CI/CD via GitHub Actions
# .github/workflows/lookml-ci.yml
name: LookML CI
on: [pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: spectacles-ci/spectacles-action@v1
with:
looker-url: ${{ secrets.LOOKER_URL }}
client-id: ${{ secrets.LOOKER_CLIENT_ID }}
client-secret: ${{ secrets.LOOKER_CLIENT_SECRET }}
project: my-project
validator: sql
Content Governance
- Folder structure: By department, with clear ownership
- Naming:
[Department] Dashboard Name - Quarterly reviews: Archive unused content
- Training: Self-service exploration guidelines
Phase 5: Rollout & Training (Weeks 23-26)
Staged Rollout
- Week 1: Power users (10 people) for feedback
- Week 2: Department leads (30 people)
- Week 3-4: Full organization (200 people)
Training Program
- 30-min "Getting Started" video
- Written guides for common tasks
- Office hours twice weekly for first month
- Slack channel for questions
Lessons Learned
What Worked
- Starting with governance: LookML structure before dashboards
- User interviews: Better dashboards than 1:1 migration
- Deprecation: Migrating 50 dashboards instead of 300
- CI/CD: Catching errors before they hit production
What I'd Do Differently
- Earlier BigQuery optimization: Some queries were slow initially
- More training time: Users needed longer to adjust
- Clearer deprecation timeline: Some PowerBI reports lingered
Results
Six months after go-live:
- Dashboard count: 300 → 50 (83% reduction)
- Average query time: 45s → 8s
- Self-service exploration: 0 → 40% of queries
- Data team support tickets: -60%
Conclusion
BI migrations are as much about change management as technology. The LookML semantic layer is powerful, but only if you invest in governance and training.
Don't migrate reports—migrate the questions your business needs answered.