1. A method, comprising: at one or more computing devices comprising one or more processors and memory storing one or more computer programs executed by the one or more processors to perform the method, performing the operations of: annotating a plurality of datasets with metadata, the plurality of datasets including a plurality of fields, the metadata including a plurality of categories, each category of the plurality of categories corresponding to one or more fields of the plurality of fields; generating a hierarchy mapping that indicates a hierarchical relationship between different categories of the plurality of categories; receiving a natural language query that specifies a first granularity level that indicates a particular category of the plurality of categories and one or more field values that correspond to the particular category; determining against which of the plurality of datasets to execute the natural language query based on: identifying, based on the hierarchy mapping, one or more categories of the plurality of categories that are hierarchically related to the particular category; selecting, based on the metadata, two or more datasets of the plurality of datasets that include at least one category of the one or more categories; generating one or more dataset filters based on the first granularity level; translating the one or more dataset filters to a second granularity level corresponding to the at least one category; after translating the one or more dataset filters, applying the one or more dataset filters to at least one dataset of the two or more datasets; joining the two or more datasets to generate a composite dataset that includes the particular category; and executing the natural language query against the composite dataset to return a result for the natural language query.