NuminorBeta

When to roll up subsidiaries in China company data, and when it double-counts

Short answer: roll up only where the dataset has not already done it for you. Disclosed filings are consolidated at the filer, so aggregating a parent with its subsidiaries counts the same relationships twice. Constructed datasets like tender activity are built to be rolled up, and reading them entity by entity shows a fraction of the truth. One column inside SAM is a subtree total that looks perfectly additive and is not.

The column that looks additive and is not

In fin_secu_sam_product_calc, product_income is a subtree roll-up. A parent node's value already includes its children, so summing it across taxonomy nodes double-counts. Use product_b_income, the direct block figure, when you need additive segment revenue. (ChinaScope SAM, data cut 2026-02-26.)

This is the single most expensive line on this page. Nothing about the column name or the values suggests it. The totals simply come out large and plausible.

Already consolidated, so leave it alone

ChinaScope C2C Disclosed carries the consolidated disclosures of the listed filer. Aggregating a parent's rows together with its listed subsidiaries' rows double-counts the same underlying relationships. Treat each filer's disclosure as complete for that filer. (Data cut 2026-05-16.)

Relationships (PIT) has the same shape at table level. internal_guaranty_detail and internal_guaranty_total, and their external and entrusted-investment counterparts, are disclosed separately by the filer. They are not a hierarchy. Adding detail lines to a total double-counts. (Data cut 2026-08-23.)

Built to be rolled up

ChinaScope RFP-Bids attributes a listed company's subsidiaries' tender activity, much of it done by unlisted entities, up to the listed parent. Each link is tagged with the ownership relationship (relation_type) and combined stake (hold_ratio), so you can weight by stake or keep only holdings at or above 50%. Read it entity by entity and you miss most of the footprint. (Data cut 2026-05-29.)

Which ownership number to roll up with

ChinaScope Affiliate gives subsidiaries and associates three stakes: the direct stake, the indirect stake, and the combined total. Use totalrate for economic exposure and directrate for the immediate holding. totalrate folds in stakes held through intermediate entities, which is normally what you want when attributing a subsidiary's activity upward. (Data cut 2026-05-16.)

The coverage is substantial: 191,631 distinct subsidiaries and 23,393 associates and joint ventures, plus a large body of other related parties. (Data cut 2026-05-16.)

Check your units before you multiply. Ownership-graph stakes (ratio, vote_ratio, directrate, indirectrate, totalrate) are decimal fractions from 0 to 1. The shareholder-register ratio is a percentage from 0 to 100. Convert before comparing across tables, or a weighting step is out by a factor of one hundred and still returns numbers. (Data cut 2026-05-16.)

Rolling up a tree, rather than a group

To group product or segment nodes to any level, use the ancestors path rather than recursively resolving parent. It gets you to any level in one step. (ChinaScope Product Taxonomy, as described in the July 2026 profile.)

Two cautions when you do. Disclosure depth is uneven, because companies report each line of business at a single chosen depth, so upper levels 1 to 3 are dense and levels 5 and below are sparse. Aggregation reconstructs upper totals but cannot invent detail a company never disclosed. And in a bitemporal panel like C2C (PIT), one period appears many times on purpose, so grouping without an as-of filter double-counts before you have rolled up anything at all. Filter publish_date <= as_of, take the latest row per key, then aggregate. (Data cut 2026-08-22.)

Datasets this page draws on

Related questions