Your Analysis, Governed

Define domain-specific analytical workflows by composing primitives. No raw SQL. Shareable. Auditable.

Start simple, go deep

Custom analysis scales with your needs, from tweaking parameters to building shareable DAGs.

Level 1

Parameter Configuration

Adjust thresholds, time windows, and sensitivity on existing primitives. No code required. Change the churn window from 90 to 142 days and re-run.

parameter config
om.analysis.threshold(
  metric="churn_risk",
  window_days=142,   # was 180
  method="f1_optimal"
)
Level 2

Primitive Composition

Compose multiple primitives into a reusable workflow using the Python decorator. The system validates that every step uses governed primitives, no escape hatches to raw SQL.

churn_investigation.py
@om.analysis.custom
def churn_investigation(metric):
    trend = om.analysis.trends(metric)
    if trend.value["direction"] == "accelerating":
        drivers = om.analysis.drivers(metric)
        top = drivers.value[0]
        sensitivity = om.analysis.sensitivity(
            metric, dimension=top["dimension"]
        )
        correlation = om.analysis.correlate(
            metric, "customer_spend"
        )
    return {
        "trend": trend,
        "drivers": drivers,
        "sensitivity": sensitivity,
        "correlation": correlation,
    }
Level 3

Analysis Catalog

Export your custom analysis as a JSON DAG. Store it on the server. Share it across teams. Other agents can discover and run it. Version-controlled, auditable, portable.

churn_investigation.json
{
  "name": "churn_investigation",
  "version": "1.2.0",
  "steps": [
    { "id": "trend", "primitive": "trends" },
    { "id": "drv", "primitive": "drivers",
      "depends_on": "trend" },
    { "id": "sens", "primitive": "sensitivity",
      "depends_on": "drv" },
    { "id": "corr", "primitive": "correlate",
      "depends_on": "trend" }
  ]
}

Governed execution

Custom analysis isn't a backdoor. Every workflow runs inside guardrails.

Primitive-only execution

Custom workflows can only call OnlyMetrix primitives. No raw SQL, no arbitrary code, no file system access. If it's not a primitive, it doesn't run.

Automatic health checks

Before any workflow runs, the system checks metric freshness and data health. Stale data gets flagged, not silently used.

Depth guard

Recursive or deeply-nested workflows are bounded. The system prevents infinite loops and exponential blowup, so your Snowflake bill stays predictable.

Build analysis workflows your team can trust

Compose primitives. Share DAGs. Keep everything governed.