Skip to content

Cumba Data Browser - User Guide

Workflow-oriented companion to the User Manual

Version 1.0

πŸ’‘ This guide answers "How do I do X?" - step by step, with the keyboard shortcuts you'll actually use. For a feature reference, see the User Manual.


Workflow 1: Explore Adverse Events

You're handed an SDTM library and asked: "Have a look at the adverse events - anything interesting?" This is the everyday Cumba workflow that touches almost every feature: open, find, filter, merge, pin, save, and inspect.

We'll walk through both ways: the curious way (full exploration) and the lazy way (one-shortcut shortcut at the end).

1. Open the dataset

Drag the SDTM folder onto the application - or File β†’ Open Library…. Cumba uses the folder name as the library's default name and asks for an optional label (e.g. study identifier or description). The library appears in the Library Explorer on the left, shown as <Name> - <Label>, with all domains listed below.

Double-click AE (Adverse Events) - it opens as a tab in the Workspace.

πŸ’‘ The library shows its name in dark and its label in blue - the same visual convention used for datasets and variables. Consistent across all three levels.

πŸ’‘ Cumba shows the green Parquet tonne for Parquet data, blue for SAS, purple for JSON. At a glance you know what kind of data you're looking at.

2. Find the column you need

You want adverse event severity, but is the variable called AESEV, AESEVN, or AESEVERITY in this SDTM version?

Press Ctrl+Shift+F to open Find Column. Type severity - Cumba searches both names and labels and jumps to AESEV ("Severity/Intensity").

Find Column - typing "sever" matches AESEV by its label "Severity/Intensity"

After pressing Enter (or clicking OK), Cumba scrolls to the column and selects it - so you immediately see what you're working on.

After Find Column - AESEV column scrolled into view and highlighted

3. Look at what's in the column

The column has an F marker - a format is applied. Right-click the column header β†’ Open Attached Format. A new tab opens showing the code-decode mapping: MILD, MODERATE, SEVERE.

Right-click on AESEV β†’ Open Attached Format

A new tab opens - $SEV - with the format's code-decode entries:

The $SEV format tab - three identity entries (MILD, MODERATE, SEVERE)

You now know the allowed values without having to scroll through thousands of rows.

πŸ’‘ In this case the format is an Identity mapping - code equals decode (MILD β†’ MILD). That's why values in the data view appear in plain black, not the blue Code-Decode pair you'd see for a Real Mapping format like 1 β†’ Placebo.

πŸ’‘ If any actual value in a formatted column doesn't match its codelist, Cumba marks the F marker red - and offers a "Missing Format Entries" filter to jump straight to the offending rows. A quick visual check for either codelist gaps (legitimate value missing from the format) or data quality issues (wrong, mis-cased, or typo'd values). (Walkthrough with screenshots to follow.)

4. Inspect the variable metadata

Hover the AESEV column header (or a cell in it) and pause for a moment - Cumba shows a metadata tooltip with everything the dataset knows about the variable.

Variable tooltip - name, label, type, length, format, origin, role, mandatory

What you get at a glance: - Name, Label, Type, Length, Format - the variable's structural definition - Origin - where the data came from (e.g. CRF Page numbers) - Role - its CDISC role (Topic, Qualifier, Timing, …) - OrderNumber and Mandatory - submission metadata

πŸ¦‰ Press F2 to focus the tooltip - useful when the values are long and you want to copy or scroll inside it.

5. Sort by severity (descending, severe first)

Right-click the AESEV column β†’ Sort β†’ Sort Descending. The arrow turns green and points down. Severe events are now at the top.

Right-click sort submenu with Sort Descending highlighted

πŸ’‘ Like most actions in Cumba, sorting works through four entry points: the right-click context menu, the top Sort menu, the toolbar (sort icons), or the keyboard shortcut (Ctrl+Alt+Down for descending, Ctrl+Alt+Up for ascending). Pick whichever is closest to your mouse.

6. Filter to "SEVERE" only

There are two ways:

Curious way: - Right-click any cell containing SEVERE β†’ Filter β†’ Filter ≑ - (Or hit Ctrl+Alt+E directly on the selected cell)

Right-click filter submenu with Filter ≑ highlighted on a SEVERE cell

Multiple values at once: - Ctrl-click two or more cells (e.g. MODERATE and SEVERE) - Then Ctrl+Alt+E - Cumba keeps all rows matching any of the selected values

A funnel icon appears in the column header. The row count at the bottom drops.

After filtering - funnel icon on AESEV, only SEVERE rows remain, status bar shows current sort and filter

πŸ’‘ Check the status bar at the bottom - it always shows the current sort order and filter condition in plain text (e.g. Condition: AESEV EQ "SEVERE"). Quick way to verify what you've applied without opening the SQL pane.

7. Inspect the SQL

Cumba has been building a SQL query behind the scenes - every sort and filter action you took is reflected there. Worth a peek now while it's still simple.

Open the SQL bar - click its small triangle handle (or drag the bar down, or Alt+Shift+Q). The editor opens:

SQL bar expanded - the query built from sort and filter actions, with syntax highlighting and Execute / OK buttons

SELECT * FROM AE
WHERE AESEV = 'SEVERE'
ORDER BY STUDYID ASC, USUBJID ASC, AETERM ASC, AESTDTC ASC, AESEQ ASC

Copy it, paste it into SAS or any other SQL engine - same query, same result.

πŸ’‘ Two-way binding: edit the SQL, hit Execute, and the data view updates accordingly. Every UI action you take is reflected here; every SQL edit you make is reflected back in the UI.

πŸ’‘ Close the SQL bar with the same triangle handle, or Alt+Shift+Q again.

8. Get a quick frequency

Before you check the frequency, remove the filter so you see counts for all severities, not just SEVERE. Right-click the AESEV column β†’ Filter β†’ Remove Filter (or click the funnel icon in the column header).

How many of each severity are there? Don't write SAS for that.

Select the AESEV column header. Then Tools β†’ Statistics β†’ Create Frequency (or Ctrl+Alt+F).

Tools β†’ Statistics β†’ Create Frequency, with tooltip

A new tab opens - Freq(AE[AESEV]) - with one row per category and the count and percent:

Frequency result - MILD 770 (64.65%), MODERATE 378 (31.74%), SEVERE 43 (3.61%)

Useful, but you want to know whether one treatment arm produces more severe events than another. You'd need Tools β†’ Statistics β†’ Create Frequency By with TRTA as the grouping variable - but TRTA isn't in AE. Treatment arm lives in DM (or ADSL for ADaM).

That's the perfect motivation for the next step.

9. Merge in patient demographics

Tools β†’ Merge β†’ Merge DM - Cumba joins the Demographics dataset using the standard CDISC key USUBJID automatically. The demographic columns (including ARM) appear to the right. No SQL, no dialog gymnastics.

Tools β†’ Merge β†’ Merge DM, with tooltip "Merge the SDTM domain DM (if available)."

After the merge, the DM columns appear with blue-tinted column headers - Cumba marks merged-in columns visually so you can tell at a glance which variables came from where.

After Merge DM - SUBJID, RFSTDTC, RFENDTC and other DM columns appear with blue headers

πŸ’‘ The blue header tint is a visual reminder that these columns aren't native to the dataset you opened. Useful when you've done several merges and want to remember which fields are which.

Now go back and do Tools β†’ Statistics β†’ Create Frequency By with AESEV Γ— ARM - the new tab shows the severity counts crossed with treatment arm.

Select by Variables picker - typing "arm" finds ACTARM, ACTARMCD, ARM, ARMCD with full metadata tooltip on hover

The result tab Freq(AE[ARM, AESEV]) shows severity per treatment arm:

Frequency By result - counts and percentages per arm Γ— severity

At a glance you can see whether one arm produces a different severity distribution than another - useful for a quick safety signal.

πŸ¦‰ Don't remember the exact variable name? In the Select by Variables dialog, just start typing - Cumba searches both names and labels, the same as Find Column. Coming from ADaM and instinctively typing trt? Try arm instead - that's SDTM's name for treatment arm.

πŸ’‘ Variable metadata tooltips work everywhere a variable appears: in the data view, in the column header, and in any variable-picker dialog. Hover and pause to see Name, Label, Type, Length, Format, Origin, Role, OrderNumber and Mandatory - no matter where you are in Cumba.

πŸ’‘ Frequency tabs are full datasets. You can filter and sort them like any other table.

10. Keep USUBJID and AETERM in sight

Now the table is wide and you want to scroll horizontally without losing the patient ID and event term as anchors. Two ways to achieve that:

The pragmatic way - hide redundant columns: In a single-study dataset, STUDYID and DOMAIN are the same value in every row. Select them and press Ctrl+Shift+H (Columns β†’ Hide Selected Columns). Now USUBJID and AETERM are the leftmost columns and stay in view naturally.

Right-click β†’ Columns submenu showing Hide Selected Columns, Pin Selected Columns and related options

The literal way - pin the columns: Select USUBJID and AETERM column headers (Ctrl-click for multi-select), then Ctrl+Shift+P (Columns β†’ Pin Selected Columns). A vertical separator appears and those columns stay fixed while the rest scrolls.

Columns β†’ Pin Selected Columns with tooltip "Pin the selected columns to the left so they stay visible while scrolling."

Now you can scroll all the way to the right and the two pinned columns stay in sight:

Scrolled right to the merged DM columns (blue headers) - USUBJID and AETERM remain visible on the left, separated by a vertical pin line

πŸ’‘ Pinning works on a continuous left-most group: the selected columns are moved to the left and frozen. If the columns you want to pin are scattered across the table, you may want to drag them next to each other first - or simply hide what's in front of them, as in the pragmatic way above.

11. Memorize the filter

A more realistic memorize use case: you review the same patient repeatedly and want a one-click way to filter to their records.

Right-click the USUBJID column β†’ Filter β†’ Filter IN (or Ctrl+Alt+I). The picker opens - and as a bonus, it shows the count and percent of rows for each value right in the dialog:

Choose Values of USUBJID - each unique subject with its event count and percentage

πŸ’‘ The Filter IN dialog is essentially a mini-frequency. The patient with the most events (15) jumps out immediately - useful when you want to drill into "who has the most going on?".

Pick the patient you want - for this walkthrough we go with 01-701-1111 (8 events, a manageable handful). Click OK. The dataset is now filtered to that one subject:

Filtered to USUBJID 01-701-1111 - 8 events, USUBJID column shows both filter (funnel) and sort (A) markers

Now save the filter for next time: right-click the column β†’ Filter β†’ Memorized Filters β†’ Memorize Current Filter… Give it a name - for this walkthrough we use "Patient 1111":

Memorize Filter dialog - naming the current filter "Patient 1111"

Next time you open this dataset, find the filter in the same submenu and one-click recall it. Memorized filters persist across sessions - close Cumba, reopen tomorrow, the named filter is still there.

12. Use the filter in another dataset

Memorized filters aren't tied to the dataset they were defined in. As long as the referenced variable exists, the named filter appears in any dataset's Filter β†’ Memorized Filters submenu.

Open VS (Vital Signs) from the Library. Right-click USUBJID β†’ Filter β†’ Memorized Filters - "Patient 1111" is there. Hover and Cumba shows what it does: USUBJID IN ("01-701-1111").

VS dataset, Filter β†’ Memorized Filters β†’ Patient 1111 - same named filter available, tooltip shows the underlying condition

One click and VS is filtered to the same patient:

VS filtered to USUBJID 01-701-1111 - vital signs (DIABP, HEIGHT, PULSE) for the same patient across multiple visits and positions

Same logic for LB, EX, EG, and every other domain that has USUBJID. Define once, use everywhere.

πŸ“ Planned: apply a memorized filter to all open datasets at once - currently it has to be applied per dataset, but the same filter is available wherever the referenced variable exists.


Lazy mode: "I just want headaches"

You don't actually need to know the column name. You just want to see all the adverse events with headache.

  1. Open the AE dataset
  2. Press Ctrl+F for full-text search across all columns
  3. Type headache
  4. Cumba jumps to the first match and highlights all of them

That's it. No column knowledge, no SDTM version checking. For 80% of quick lookups, this is all you need.

πŸ¦‰ Lazy combined with smart: use Ctrl+F to find headache rows, then right-click a headache cell β†’ Filter ≑ to keep only those rows. Two clicks total.


What you just used

In one workflow you touched: Library, Find Column, Open Attached Format, variable tooltip, Sort, Filter (multi-value), Frequency, Frequency By, Merge DM, Hide / Pin Columns, Memorized Filter (cross-dataset), SQL Bar, full-text search. That's most of Cumba's daily-use surface.