Creating an effective Standard Operating Procedure (SOP) is about bridging the gap between what needs to be done and how someone actually does it. A good SOP is a training tool, a reference guide, and a quality assurance document all in one.
Here are comprehensive tips for writing Effective SOPs, broken down by category:
Phase 1: Planning & Preparation
Before you write a single word, you need a strategy.
- Define the “Why”: What problem does this SOP solve? (e.g., “To ensure all customers are billed correctly” or “To prevent safety incidents during machine setup”).
- Know Your Audience: Are they new hires, seasoned technicians, or cross-departmental staff? The language and detail level must match their existing knowledge.
- Scope Creep: Clearly define the boundaries. What does this procedure cover, and more importantly, what does it not cover? (e.g., “This SOP covers changing a toner cartridge. It does not cover clearing paper jams.”)
- Involve the Doers: Ask the people who actually perform the task to review your draft. They know the shortcuts, the potential hiccups, and the real-world challenges.
Phase 2: Structure & Format (The “Look”)
If an SOP is hard to navigate, people won’t use it.
- Use a Standardized Template: Having a consistent format across your organization builds familiarity. Users know where to find the “Purpose” section or the “Safety Warnings” in every document.
- Prioritize Readability:
- Use Headings and Subheadings: Break up the text into logical chunks.
- Short Sentences and Paragraphs: Walls of text are intimidating.
- Bullet Points and Numbered Lists: These are the backbone of a good SOP. Steps should be easy to scan.
- Version Control is Non-Negotiable: Include a table at the beginning with:
- Version Number
- Effective Date
- Next Review Date
- Author/Owner
- Summary of Changes
===
4. Configure ID Details
- Type: From the dropdown menu, select WorkplaceGiving.
- Lookup ID: Enter the specific identifier using one of the two approved formats below.
- Option A (Internal): The Organization Name as it appears in DMS.
- Option B (External): The Organization Name as it appears in the 3rd-party source file.
RedCross).
5. Data Entry Examples
| Source Name | Formatted Lookup ID |
| DMS Org Name: Helping Hands, Inc. | HelpingHandsInc |
| 3rd Party File: Helping-Hands_2026 | HelpingHands2026 |
Would you like me to add a specific list of “Special Characters” to exclude (like &, #, or -) to ensure no errors occur during entry?
This guide is designed to walk users through the initial intake process in Coupa, ensuring all legal and financial data points are captured correctly to prevent workflow delays.
Standard Operating Procedure (SOP)
Document Title: Schema Migration for Cost Center & Program Code Fields (Single Workbook)
Objective: Transition an individual Tableau workbook from legacy tracking fields to future-state fields seamlessly when using a direct or embedded Custom SQL connection.
Target Audience: Power Users, Data Engineers, and Dashboard Developers
1. Overview & Field Mapping
To support the future-state data model, the underlying Custom SQL query and Tableau metadata definitions inside the workbook must be updated. This SOP uses Tableau’s Replace References feature, allowing you to update the data schema without breaking your existing calculated fields, filters, or dashboard layouts.
| Current-State Field (Legacy) | Future-State Field (New) |
costCenter | costCenter_new |
programCode | program Code_new |
2. Phase 1: Prerequisites & Verification
Before modifying the workbook, verify the following:
- Database Readiness: The new columns (
costCenter_newandprogram Code_new) are active and populated in the source database. - Data Types: The data types of the new columns exactly match the legacy columns (e.g., both are Strings).
- Workbook Backup: Save a backup copy of the workbook (
.twbor.twbx) to a secure local folder before proceeding.
3. Phase 2: Updating the Custom SQL Schema
Because the workbook relies on Custom SQL, we must explicitly expose the new columns so Tableau’s metadata layer can see them.
- Open the workbook in Tableau Desktop.
- Go to the Data Source tab in the bottom-left corner.
- If your workbook has multiple data sources, select the specific connection that contains the cost center and program code fields.
- Double-click the logical table to view the physical layer, right-click the Custom SQL object, and select Edit Custom SQL Query.
- Modify the SELECT Statement: Add the new fields to the query.
⚠️ CRITICAL STEP: Do not delete or overwrite the old fields in the SQL statement yet. Keeping them in the SQL temporarily prevents Tableau from breaking your dashboard elements before we map them.
SQL
SELECT
costCenter AS [costCenter], -- KEEP TEMPORARILY
programCode AS [programCode], -- KEEP TEMPORARILY
costCenter_new AS [costCenter_new], -- ADD NEW FIELD
[program Code_new] AS [program Code_new] -- ADD NEW FIELD
FROM your_database_table
- Click OK to run the query. Navigate back to any worksheet tab and confirm that both the old and new fields are now visible in the Data Pane.
4. Phase 3: Reference Remapping
This step programmatically rewrites every calculation, filter, LOD expression, and sheet placement within this workbook to point to the new fields.
Remap Cost Center
- In the Data Pane, locate the legacy
costCenterfield. - Right-click
costCenterand select Replace References… - In the dialog window, select the new target field:
costCenter_new. - Click OK.
Remap Program Code
- Locate the legacy
programCodefield. - Right-click
programCodeand select Replace References… - In the dialog window, select the new target field:
program Code_new. - Click OK.
Verification Check: Confirm that the old
costCenterandprogramCodefields no longer display a blue/green checkmark next to them in the Data Pane. This indicates they are completely free of dependencies.
5. Phase 4: Custom SQL Clean-up
To maintain clean database performance and query standards, remove the deprecated fields from the SQL string.
- Return to the Data Source tab and edit the Custom SQL Query again.
- Safely remove the legacy lines from the statement:
SQL
SELECT
costCenter_new AS [costCenter_new],
[program Code_new] AS [program Code_new]
FROM your_database_table
- Click OK. The old fields will disappear from the Data Pane entirely.
6. Phase 5: Validation & Save
- Review all dashboard tabs within the workbook to ensure all charts, text boxes, and filters are populating with the future-state data.
- Check Aliases (If Applicable): If your old fields used custom aliases, right-click the new fields, select Aliases, and ensure they match your expected display names.
- Save the workbook, or publish it back to Tableau Server/Cloud if it is a shared dashboard.
When launching a schema update like this, clear communication is just as critical as the technical execution. If business users aren’t prepared, they might panic thinking their historical data vanished or that the dashboard is broken.
Here is the communication process for the dashboard owner, followed by a plug-and-play email/Slack template to send to the business stakeholders.
The Communication Process
1. Identify the Timeline & Dependencies
- Data Backfill: Ensure the data engineering team has backfilled historical data into the new cost centers/program codes (if applicable). If history is not being carried over, note the exact cutoff date.
- Freeze Window: Set a 30-minute window to perform the technical update where users should avoid pulling critical reports.
2. Post-Update Validation (The “Smoke Test”)
Before telling the business the update is live, the dashboard owner must personally verify:
- Do the filter dropdowns show the new cost centers?
- Are high-level total metrics matching expected future-state targets?
- Are layout elements intact?
3. Hypercare Period
Designate the 48 hours following the release as a “Hypercare” window. The dashboard owner should prioritize and fast-track any user feedback or data discrepancy reports related to the migration.
Email / Slack Communication Template
Subject: [Action/Notice] Upcoming Updates to Cost Center & Program Code Fields in [Dashboard Name]
Hi Team,
To align with our organizational future-state data model, we will be updating the underlying data structure for the [Dashboard Name] dashboard.
⚙️ What is Changing?
We are transitioning to a new tracking schema. The legacy fields are being retired and replaced by our new future-state tracking fields:
- Old Cost Center $\rightarrow$ Replaced by New Cost Center (
costCenter_new) - Old Program Code $\rightarrow$ Replaced by New Program Code (
program Code_new)
📅 Timeline & Maintenance Window
The technical update will take place on [Date] between [Start Time] and [End Time] [Time Zone].
- Please avoid exporting reports or using the dashboard during this brief window.
💡 What this means for you:
- Layout & Functionality: The overall dashboard layout, your saved custom views, and performance metrics will remain exactly the same.
- Filters: The filter dropdown menus for Cost Centers and Program Codes will automatically update to reflect the new future-state structures.
- Historical Data:[Select Option A or B]
- [Option A – If backfilled]: Historical data has been mapped to the new codes, ensuring seamless year-over-year reporting.
- [Option B – If NOT backfilled]: Please note that historical data prior to [Cutoff Date] will remain tied to legacy codes, and the new tracking fields will begin populating data moving forward from [Cutoff Date].
🙋♂️ Questions or Issues?
If you notice any data discrepancies, missing filters, or broken views after the update goes live, please reach out directly to [Dashboard Owner Name / Slack Channel] so we can resolve it immediately.
Thank you for your cooperation as we modernize our reporting infrastructure!
Best regards,
[Dashboard Owner Name] [Title/Role]
Sending a communication after the change is highly recommended. The “before” announcement sets expectations, but the “after” note acts as a critical signal that the dust has settled and the dashboard is safe to use again.
Without a follow-up, business users are left guessing whether the maintenance window finished on time or if something broke behind the scenes.
Here is why a quick “All Clear” note matters, along with a brief template you can use.
Why the “After” Comm is Necessary
- Triggers User Validation: It prompts your power users to jump in and verify their specific views, helping catch edge-case bugs early during your Hypercare window.
- Prevents Support Noise: If a user logs in during the update and sees a broken filter, they might open a support ticket. The “All Clear” email officially marks the boundary of when the dashboard is stable.
- Confirms the Cutover: It reinforces the timeline (e.g., “Data from today forward is now using the new codes”).
“All Clear” Post-Update Template (Email/Slack)
Keep this one short, sweet, and direct.
Subject: [Resolved] Updates Complete: New Cost Centers & Program Codes Live in [Dashboard Name]
Hi Team,
The planned data structure update for the [Dashboard Name] dashboard is now complete, and the system is fully operational.
What to look for:
- The filter dropdowns for Cost Center and Program Code now display the future-state tracking structure.
- All underlying calculations have been seamlessly migrated.
Action Required: > If you currently have the dashboard open in your browser, please hard refresh your page (Ctrl + F5 or Cmd + Shift + R) to ensure you are viewing the latest published version.
If you notice any anomalies or have questions about the new codes, please drop a note in [Slack Channel / Email].
Thank you for your patience during this cutover!
Best,
[Dashboard Owner Name]
Summary Process for Dashboard Owners
- 24–48 Hours Before: Send the “Upcoming Update” heads-up.
- During Window: Perform the Custom SQL and Replace References steps (from the SOP).
- Immediately After: Run a quick quality check on the dashboard.
- Post-Validation: Send the “All Clear” note.