cassionData Analysis

Lesson 8 of 8

Unit · Reading it against something else

What exactly was counted?

Four questions, a provenance block that answers them, and a worked interrogation of one figure from raw value to published percentage. The question this course exists to make answerable.

PythonR75 minUNICEF indicator definitionsResults-Based Management (RBM)Core Humanitarian Standard (CHS)

The question

Somebody presents a slide: penta3 coverage, 78%. Somebody else asks what exactly was counted.

It is not a hostile question and it is not a technical one. It is the question the whole of module 2 and module 3 have been building toward, and a figure that cannot answer it is a figure that cannot be defended, however carefully it was computed.

Four parts

What was counted? The data element, its aggregation operator, and whether any category disaggregation was collapsed on the way out.

Where? Which org units, at which level, on which version of the hierarchy.

When? Which periods, by activity date or entry date, and how complete they were at extraction.

Out of what? The denominator, its source, its year, and how many of the expected reporting units contributed.

Each of those has been a lesson. Together they are the block below.

The provenance block

Figure            Penta3 coverage, district, 2024
Value             77.5%

What              Data element PENTA3_DOSES ("Penta 3rd dose administered"),
                  aggregation operator SUM over periods and org units.
                  No category disaggregation in the extract; the element has
                  none configured.
Where             38 facilities at org unit level 4, hierarchy as pinned in
                  extracts/2026-07-28/raw/organisationUnits.json. No facility
                  was reassigned during 2024.
When              202401 to 202412, by activity period. Analytics tables last
                  run 2026-07-27 23:14 UTC, so late entry up to that point is
                  included.
Out of what       Surviving infants, MoH catchment estimates 2024, projected
                  from the 2015 census at 2.4% annual growth. Denominator
                  pro-rated to the months each facility reported: 9,238 of a
                  full-year 11,774.
Completeness      349 of 456 facility-months reported (76.5%). August 29%,
                  September 45%. The figure is coverage among reporting
                  facility-months and is a lower bound on district coverage.
Extract           extracts/2026-07-28/, manifest.json, script extract.py 1.3

Seven lines and a heading. It takes ten minutes the first time and two thereafter, because six of the seven come straight out of the manifest and the metadata the extract already pulled.

Attach it to the figure, not to the report. A slide with the number and a footnote pointing at the block is what survives being forwarded.

Interrogating a figure you did not produce

More often you are handed a number and asked whether it can be used. Six questions, in the order that eliminates the most possibilities fastest.

1. Is it a data element or an indicator? If an indicator, ask for the numerator and denominator expressions. Most disagreements end here.

2. What is the denominator’s year? A 2024 numerator over a 2019 projection is common and understates coverage by whatever nine years of growth amounts to.

3. What was the reporting rate? Below 90%, the figure is a lower bound. If nobody knows, that is the answer to whether it can be used.

4. Which org unit level? A figure that mixes levels double-counts; a facility-level coverage figure is unreliable for the catchment reasons lesson 2 gave.

5. Was the period complete when it was pulled? A recent month is provisional, and a figure quoted from a pull three days after month end will not reproduce.

6. What is it being compared to? Most misuse is comparison — against a different measure, a different denominator, or a period with a different reporting rate.

def interrogate(figure):
    return {
        "type": figure.get("element_or_indicator"),
        "denominator_year": figure.get("denominator_year"),
        "reporting_rate": figure.get("reporting_rate"),
        "org_unit_level": figure.get("level"),
        "period_complete_at_extraction": figure.get("period_closed"),
        "comparable_to": figure.get("comparable_to"),
    }
interrogate <- function(figure) {
  figure[c("element_or_indicator", "denominator_year", "reporting_rate",
           "level", "period_closed", "comparable_to")]
}

A blank in any of those is the finding. You are not asking somebody to justify themselves; you are establishing whether the number can carry the decision it is about to be used for.

What the system cannot tell you

Three things no amount of API work recovers, and each has to come from a person.

Why a facility stopped reporting. The system records that it did. The reason — a staff departure, a broken tablet, a security incident, a supervisor who left — is in somebody’s head and it decides whether the gap is a data problem or a service problem.

What the data entry clerk understood the field to mean. A column labelled “cases” collects whatever a person believes a case is. Two facilities can be internally consistent and mean different things, and that is the definition problem the indicator course exists for.

What happened outside the catchment. Routine data sees what came to the service. The previous lesson decomposed exactly what that excludes.

The system is a record of what was reported, not of what happened. Every figure it produces inherits that, and stating it once in a report is worth more than any additional decimal place.

Where this course leaves you

You can read a DHIS2 extract as the database it came from, aggregate up a hierarchy that moves, treat completeness as a denominator, pull the same extract every month with a manifest that says what you asked for, place a routine figure beside a survey estimate and explain the gap, and answer what was counted for any number the system produces.

Where module 3 leaves you

Three courses. Indicator Design and the LogFrame defined the number. Survey Analysis, Sampling and Weighting put an interval on it. This one traced it back to the system that produced it.

Together they are the answer to the platform’s own standing instruction — always state how an indicator is calculated, what its denominator is, and what decision it informs — for the two kinds of data this sector actually has: a survey and a routine system.

Module 4, Sector Analysis, is next and is the largest in the spine at six courses. It applies all of this to the sector you report on, starting with Nutrition Analysis: CMAM and SMART — the WHO growth standards, the SMART plausibility report, the Sphere performance thresholds, and coverage estimation, which is where the difference between admissions over expected caseload and actual coverage finally gets the twenty-four hours it needs.

Teach this lesson

The lesson as a slide deck, with the prose kept in the speaker notes rather than on the slide. Generated from this page, so it cannot fall out of step with it.

Start the slideshowRead the slides

The PDF needs no software and projects from any machine. The PowerPoint file is there to be edited — add your organisation's branding, cut a section for a shorter session, or merge two lessons into a workshop.