A common ask from teams evaluating Sigma is migrating their IBM Cognos Analytics footprint — usually to trade a server-administered, report-centric platform for a live-query workspace their analysts can actually drive. The conversion itself is often the thing that stalls the project.
The typical Cognos-to-Sigma migration loop is rebuild-the-data-module-by-hand, rewrite every Cognos expression and calculated measure as a Sigma formula, recreate each report's visualizations and layout, then eyeball the numbers and hope nothing drifted in the translation. Done on a single report it's tedious. Across a real Cognos estate — typically dozens of reports reading from shared packages and data modules — it's the reason migration projects slip.
This QuickStart walks through a Claude Code skill called cognos-to-sigma that automates the loop.
Point it at a Cognos report; it discovers the report's visualizations and the data module or package behind them via the Cognos REST API. It translates each visualization's expression into a Sigma formula, builds a Sigma data model from the warehouse tables the data module points at, mirrors the report layout on Sigma's grid, and runs a parity pass comparing Sigma's results against the live warehouse. It surfaces a punch list of anything it couldn't auto-translate — instead of silently producing a broken workbook.
A pure lift-and-shift is the floor, not the ceiling. The same skill family supports three follow-on moves that turn a migration into an upgrade:
For the demonstration, we'll convert a dashboard called Commerce Dashboard — 6 visualizations built on a data module that reads from Snowflake. You'll see the discovery artifacts each phase produces, the converter's breakdown of how each Cognos expression mapped to a Sigma formula, the parity report against the live warehouse, and the resulting Sigma data model and workbook landed in your org — along with the gap list of items to hand-polish.

Sigma SEs, technical CSMs, and migration partners running Cognos-to-Sigma conversions — or scoping a batch migration with the companion cognos-assessment skill.
Claude Code installed (CLI or desktop).Python 3.10 or newer. macOS's stock system Python is typically 3.9 — older than the skill needs. If python3 --version reports anything below 3.10, install a newer interpreter via Homebrew (brew install python@3.12) or python.org.Node.js (any recent LTS) for the converter MCP.
cognos-to-sigma is one of two skills that ship together as a single repo (cloned in the next section). Most of this QuickStart focuses on the converter — but knowing where the assessment skill fits avoids dead ends later when scoping a batch migration.
Skill | Role | When to reach for it |
| Scoping | Auditing a Cognos instance before committing to a conversion plan. Emits a per-report complexity readout (visualization-type mix, expression convertibility, data module vs package flags, join complexity, filter/parameter complexity), usage signal from Cognos's activity API, and a value/cost-ranked migration shortlist that |
| Conversion | The subject of this QuickStart. Converts a single Cognos report (or a batch via shortlist) to a Sigma data model and matching workbook with verified row-level parity. |
Here's how the two skills connect in a full migration — cognos-assessment hands the converter a ranked shortlist, and cognos-to-sigma produces the Sigma workbooks with a verified parity report:

Not every migration needs both skills. Use the table below to map your scenario to the smallest set that fits.
In this QuickStart we're in the first row — one Cognos dashboard whose data module reads directly from the same Snowflake warehouse Sigma will connect to.
Your situation | Skill(s) to use |
One report to migrate, warehouse already in Sigma |
|
Need to scope your full estate first |
|
Unknown data model complexity | Start with |
Batch migration from a shortlist |
|

First we need to clone the skill's GitHub repository, configure Cognos REST credentials, and capture your Sigma credentials.
The two skills live in sigmacomputing/quickstarts-public under cognos-migration-skills/.
From a terminal, run each command below one at a time so you can confirm each step before moving on.
Step 1: Create a local folder for the clone
mkdir -p ~/quickstarts-public
Step 2: Move into the new folder
cd ~/quickstarts-public
Step 3: Clone the repo without pulling any files yet
git clone --filter=blob:none --sparse https://github.com/sigmacomputing/quickstarts-public.git .
Step 4: Fill in only the cognos-migration-skills folder
git sparse-checkout set cognos-migration-skills
Step 5: Symlink cognos-to-sigma into the Claude skills folder
ln -s ~/quickstarts-public/cognos-migration-skills/cognos-to-sigma ~/.claude/skills/cognos-to-sigma
Step 6: Symlink cognos-assessment
ln -s ~/quickstarts-public/cognos-migration-skills/cognos-assessment ~/.claude/skills/cognos-assessment
Steps 5 and 6 should return with no error.

Step 7: Add your Sigma API credentials.
The Cognos skill uses bootstrap.sh.
Because bootstrap.sh is non-interactive, write your Sigma API credentials directly to the shared env file it reads:
cat >> ~/.sigma-migration/env <<'EOF'
export SIGMA_BASE_URL='https://api.us-a.aws.sigmacomputing.com'
export SIGMA_CLIENT_ID='{your-client-id}'
export SIGMA_CLIENT_SECRET='{your-client-secret}'
EOF
Get SIGMA_CLIENT_ID and SIGMA_CLIENT_SECRET from Sigma under Administration > Developer Access > Create New Client Credentials (requires Admin role).
For information, see: Generate Sigma API client credentials
SIGMA_BASE_URL must match your Sigma deployment region. The value shown (https://api.us-a.aws.sigmacomputing.com) covers AWS US. To find the correct URL for your instance, see: Supported regions, data platforms, and features

Step 8: Configure Cognos credentials.
The skill authenticates to Cognos using a CA API key — a durable, headless credential that doesn't require a browser session.
8a. Generate a CA API key.
In your Cognos instance, open the user menu (top-right) and select Profile. Under the API keys section, select Create key, give it a name (e.g., sigma-migration), and copy the generated key value — it is only shown once.
8b. Set the Cognos env vars.
export COG_INSTANCE="https://{your-cognos-host}"
export COG_APIKEY="{your-ca-api-key}"
COG_INSTANCE is the base URL of your Cognos instance — the part before /api/v1 or /bi. It appears in your browser address bar when you're logged in (e.g., https://us3.ca.analytics.ibm.com).
8c. Establish the session.
eval "$(bash ~/.claude/skills/cognos-to-sigma/scripts/cognos-apikey-session.sh)"
No return is expected.
8d. Smoke-test the connection.
cog_get "/session"
A successful response returns a JSON object containing "isAnonymous":false — confirming the skill can reach Cognos and the API key is valid:


Step 9: Run the environment bootstrap.
This single command verifies that all runtime dependencies are in place (Ruby, Python 3, Node.js), installs any that are missing without requiring admin access, and writes the sentinel file the skill gates on before starting. Run it once per machine:
SIGMA_SKIP_CRED_SMOKE=1 bash ~/.claude/skills/cognos-to-sigma/scripts/bootstrap.sh
A successful run ends with:
bootstrap: COMPLETE — doctor green; sentinel written to ~/.sigma-migration/bootstrap.json.

If a runtime dependency fails to install, follow the message's suggestion (usually a Homebrew install) and rerun.

Step 10: Verify Claude Code can invoke the skill.
Type claude in your terminal to start Claude Code, then invoke the skill:
claude
/cognos-to-sigma
Claude should start reading the reference files and ask what dashboard you want to convert.
Pause at this prompt — we'll hand it everything in one shot via the kickoff prompt in the Run the Conversion section later.


The Snowflake JDBC URL must include the database, warehouse, and schema as query parameters. Without them, Cognos connects but shows no assets. Verify your JDBC URL includes:
jdbc:snowflake://{account}.snowflakecomputing.com/?db=QUICKSTARTS&warehouse=COMPUTE_WH&schema=COGNOS_ECOMMERCE
Note the ? separator before the first parameter, & between parameters, and .snowflakecomputing.com in the account hostname (the hostname alone without that suffix will fail to resolve).
Personal Snowflake accounts provisioned through SSO (Okta, Google) cannot authenticate via JDBC — only password-based accounts work. Create a dedicated Snowflake user for Cognos:
CREATE USER COGNOS_USER PASSWORD='{your-password}' DEFAULT_ROLE=SIGMA_SERVICE_ROLE;
GRANT ROLE SIGMA_SERVICE_ROLE TO USER COGNOS_USER;
Use COGNOS_USER and its password in the Cognos User ID and password signon dialog.
The Cognos Subscription administrator role manages users and billing — it does not grant a product seat. Check License user in addition to Subscription administrator under your user profile to enable content creation and API access.
The bootstrap credential check can return a false failure even when the credentials are valid (for example, when the Sigma API endpoint resolves differently in the bootstrap probe than it does for the skill). Bypass it — the credentials are checked again during the actual token mint:
SIGMA_SKIP_CRED_SMOKE=1 bash ~/.claude/skills/cognos-to-sigma/scripts/bootstrap.sh
Validate the credentials directly if you want to confirm them before running the skill:
curl -s -X POST \
-H "Authorization: Basic $(printf '%s:%s' "$SIGMA_CLIENT_ID" "$SIGMA_CLIENT_SECRET" | base64 | tr -d '\n')" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
"${SIGMA_BASE_URL}/v2/auth/token"
A response containing access_token confirms the credentials are valid.
cog_get smoke test returns HTTP 400 "Invalid id format"The /content/.public_folders/items path is a /bi/v1 alias that doesn't exist in the /api/v1 surface the API key session uses. Use /session instead:
cog_get "/session"
A response containing "isAnonymous":false confirms the session is established and ready.

The demo uses four tables loaded into Snowflake — the same ecommerce dataset used across the migration skill family. Both Cognos and Sigma will query these tables directly, which is what makes the parity check meaningful.
Run the following script in Snowflake. It creates the schema, stages the source files from S3, loads the tables, and grants read access to the Sigma service role.
USE ROLE ACCOUNTADMIN;
USE WAREHOUSE COMPUTE_WH;
CREATE DATABASE IF NOT EXISTS QUICKSTARTS;
CREATE SCHEMA IF NOT EXISTS QUICKSTARTS.COGNOS_ECOMMERCE;
USE SCHEMA QUICKSTARTS.COGNOS_ECOMMERCE;
CREATE OR REPLACE FILE FORMAT COGNOS_csv_format
TYPE = CSV
FIELD_DELIMITER = ','
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
NULL_IF = ('', 'NULL')
EMPTY_FIELD_AS_NULL = TRUE
PARSE_HEADER = TRUE;
CREATE OR REPLACE STAGE COGNOS_ecommerce_stage
URL = 's3://sigma-quickstarts-main/Cognos/'
FILE_FORMAT = COGNOS_csv_format;
CREATE OR REPLACE TABLE BRAND (
"Brand ID" NUMBER,
"Brand" VARCHAR
);
CREATE OR REPLACE TABLE CATEGORY (
"Category ID" NUMBER,
"Category" VARCHAR
);
CREATE OR REPLACE TABLE COUNTRY (
"Country ID" NUMBER,
"Country" VARCHAR
);
CREATE OR REPLACE TABLE COMMERCE (
"Visit ID" NUMBER,
"Date" DATE,
"Brand ID" NUMBER,
"Category ID" NUMBER,
"Country ID" NUMBER,
"Revenue" FLOAT,
"Quantity" NUMBER,
"Cost" FLOAT,
"Age Range" VARCHAR,
"Gender" VARCHAR,
"Condition" VARCHAR
);
COPY INTO BRAND FROM @COGNOS_ecommerce_stage/BRAND.csv MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
COPY INTO CATEGORY FROM @COGNOS_ecommerce_stage/CATEGORY.csv MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
COPY INTO COUNTRY FROM @COGNOS_ecommerce_stage/COUNTRY.csv MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
COPY INTO COMMERCE FROM @COGNOS_ecommerce_stage/COMMERCE.csv MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
SELECT 'BRAND' AS TBL_NAME, COUNT(*) AS ROW_COUNT FROM BRAND
UNION ALL
SELECT 'CATEGORY', COUNT(*) FROM CATEGORY
UNION ALL
SELECT 'COUNTRY', COUNT(*) FROM COUNTRY
UNION ALL
SELECT 'COMMERCE', COUNT(*) FROM COMMERCE;
SELECT
ROUND(SUM("Revenue"), 3) AS TOTAL_REVENUE,
SUM("Quantity") AS TOTAL_QUANTITY
FROM COMMERCE;
GRANT USAGE ON DATABASE QUICKSTARTS TO ROLE SIGMA_SERVICE_ROLE;
GRANT USAGE ON SCHEMA QUICKSTARTS.COGNOS_ECOMMERCE TO ROLE SIGMA_SERVICE_ROLE;
GRANT SELECT ON ALL TABLES IN SCHEMA QUICKSTARTS.COGNOS_ECOMMERCE TO ROLE SIGMA_SERVICE_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA QUICKSTARTS.COGNOS_ECOMMERCE TO ROLE SIGMA_SERVICE_ROLE;
The final two queries confirm the load. Expected results: 613,002 rows in COMMERCE, total revenue 39,759,625.515, total quantity 91,206.

With the Snowflake data in place, build the source dashboard in Cognos Analytics. This is the content the skill will discover and convert to Sigma.
The dashboard has six panels — two KPI tiles and four charts — built on a star-schema data module that reads from the four tables loaded in the previous section.
New > Data module.Select sources, choose Data servers and schemas and select the Snowflake connection you configured.QUICKSTARTS > COGNOS_ECOMMERCE and select all four tables: BRAND, CATEGORY, COMMERCE, and COUNTRY. Select OK.COMMERCE is the fact table: COMMERCE."Brand ID" → BRAND."Brand ID"COMMERCE."Category ID" → CATEGORY."Category ID"COMMERCE."Country ID" → COUNTRY."Country ID"
COMMERCE and select Calculation. Name it Year and enter the expression:year(Date_)
eCommerce Data Module.New > Dashboard.eCommerce Data Module.Commerce.Panel 1 — Revenue KPI
SummaryCOMMERCE > Revenue (Sum)Panel 2 — Quantity KPI
SummaryCOMMERCE > Quantity (Sum)Panel 3 — Revenue by Country
Bar (horizontal)COUNTRY > CountryCOMMERCE > Revenue (Sum)Panel 4 — Quantity by Category
PieCATEGORY > CategoryCOMMERCE > Quantity (Sum)Panel 5 — Revenue by Category
Bar (horizontal)CATEGORY > CategoryCOMMERCE > Revenue (Sum)Panel 6 — Revenue by YEAR
Bar (vertical)COMMERCE > Year (the calculated column)COMMERCE > Revenue (Sum)Commerce Dashboard.The completed dashboard should show Revenue 39.8M and Quantity 91.2K with country, category, and year breakdowns matching the screenshot in the Overview:


The skill lands workbooks in a Sigma folder. Create a dedicated folder now so the output is organized from the start.
In Sigma, navigate to Home and create a new folder named Cognos Migration. Copy the folder's ID from the URL — you'll pass it to the skill in the next section.
The folder ID appears in the URL after /folder/:
https://app.sigmacomputing.com/{your-org}/folder/{your-folder-id}


With credentials configured and the demo dashboard built, run the converter. Open Claude Code and invoke the skill with the kickoff prompt below — substituting your dashboard ID, connection ID, and folder ID.
Select option 4. Something else:

Open the Commerce Dashboard in Cognos and copy the content ID from the browser URL — it is the long alphanumeric value that begins with i (e.g., i20CF97EDA4FC43498424E42A24835D16).

Replace the placeholder values before running:
{your-dashboard-id}{your-folder-id}{your-snowflake-connection-id}Run /cognos-to-sigma on the following. Walk every phase in SKILL.md end-to-end and stop only if a hard gate fails.
Cognos
- COG_INSTANCE and COG_APIKEY are already exported in this shell (run Step 8 first)
- Dashboard ID: {your-dashboard-id}
Warehouse — same on both sides
- Cognos reads from Snowflake via data module — database QUICKSTARTS, schema COGNOS_ECOMMERCE
- Sigma reads from Snowflake — same schema QUICKSTARTS.COGNOS_ECOMMERCE
Sigma
- SIGMA_API_TOKEN = mint from ~/.sigma-migration/env
- SIGMA_CONNECTION_ID: {your-snowflake-connection-id}
- SIGMA_FOLDER_ID: {your-folder-id}
Options
- Name prefix: Cognos Demo
- Auto-approve mid-pipeline questions: yes
- Parity: data should match exactly since both sides read from the same warehouse. Report any deltas.
Don't declare GREEN until the parity gate passes and the visual-QA loop passes.

The skill runs through five phases: Discover → Translate → Build → Verify → Report. Each phase emits a progress summary — watch for any WARN or MANUAL flags, which land on the gap list rather than stopping the run.

When the skill completes, it prints a migration summary — the count of visualizations converted, any items flagged for manual review, and the parity result:

Open the workbook in your Sigma folder and compare it against the source Cognos dashboard. The layout mirrors the source, and each visualization is backed by the translated formula.

The skill also creates a data model in the same folder — the tables, joins, and calculated columns derived from the Cognos data module.

Any visualization or expression the skill couldn't auto-translate lands in the gap list — with the source expression, the reason it was flagged, and a suggested Sigma equivalent where one exists. Work through the list to finish the migration.


We converted a Cognos dashboard to a verified Sigma workbook without rebuilding the data model by hand. The credential setup and kickoff prompt you used here work for any Cognos dashboard on a paid instance — same pattern, different content ID.
The part of the migration that usually takes days is the data module — mapping query subjects to warehouse tables, carrying over joins, translating Cognos expressions to Sigma formulas. The skill handles that automatically and surfaces anything it couldn't convert on the gap list, so you know exactly what needs a manual pass before calling it done.
The parity gate provides proof. Because Sigma and Cognos both query the same Snowflake tables, any number mismatch is a translation error — not a data difference. GREEN means the migration is done. Short of GREEN, the gap list tells you why.
When you're ready to scale, run cognos-assessment across the full estate first. It ranks each artifact by migration complexity against what the converter can actually handle, so you can shortlist the high-value, low-effort content before committing to a full run.
Additional Resource Links
Blog
Community
Help Center
QuickStarts
Be sure to check out all the latest developments at Sigma's First Friday Feature page!
