## 一、数据简介 公司财务附注中的供应商和客户明细数据表是对上市公司销售和采购情况的详细记录。它包含了公司主要供应商和客户的相关信息,如名称、采购额、销售额、采购额合计、销售额合计及其在总采购和销售中所占的比例。这份数据表为投资者提供了一种独特的透视视角,通过分析主要供应商和客户的关系和动态,投资者可以洞察到公司的财务状况、运营模式、风险控制等关键信息。此外,这份数据表也可以帮助投资者理解公司的产业链位置,评估公司的谈判能力和供应链稳定性,从而有助于投资决策。 - 数据起始时间:2020-01-06 - 数据结束时间:2026-10-30 - 数据更新频率:不定期,上市公司发布相关公告时更新 ## 二、主键说明 | 关键字 | 释意 | | --- | --- | | date | 公告日,即该财报首次披露或更正公告的日期,不是报告期(报告期见 report_date),可能不是交易日;与 cn_stock_financial_changedate 中的 changedate 对应,详见文末“通用文档” | | instrument | 股票代码 | | report_date | 财务报告期,规则见文末“通用文档” | | change_type | 0 表示首次披露的财务数据,1 表示非首次披露或有更改的财务数据 | ## 三、字段说明 主要供应商和主要客户各取前 5 名,字段名由“指标前缀 + 序号”组成,序号 1 到 5 表示排名: | 字段前缀 | 释意 | | --- | --- | | margin_supplier_name_N | 主要供应商名称(第 N 名) | | purchase_amount_N / purchase_ratio_N | 对第 N 名供应商的采购额、采购占比 | | total_purchase_amount_N / total_purchase_ratio_N | 前 N 名供应商的采购额合计、采购额合计占比 | | customer_name_N | 客户名称(第 N 名) | | sale_amount_N / sale_ratio_N | 对第 N 名客户的销售额、销售占比 | | total_sale_amount_N / total_sale_ratio_N | 前 N 名客户的销售额合计、销售额合计占比 | 从示例数据看,占比类字段以百分数存储(8.88 表示 8.88%),部分公司披露的名称是匿名的“第一名”而不是具体公司名。 ## 四、示例数据 2026-10-23 至 2026-10-30 公告的半年报和年报数据,只展示 9 个字段,按日期、股票代码、报告期排序,展示前 5 行和后 5 行。 | instrument | date | report_date | change_type | margin_supplier_name_1 | purchase_amount_1 | purchase_ratio_1 | total_purchase_amount_1 | total_purchase_ratio_1 | customer_name_1 | sale_amount_1 | sale_ratio_1 | total_sale_amount_1 | total_sale_ratio_1 | margin_supplier_name_2 | purchase_amount_2 | purchase_ratio_2 | total_purchase_amount_2 | total_purchase_ratio_2 | customer_name_2 | sale_amount_2 | sale_ratio_2 | total_sale_amount_2 | total_sale_ratio_2 | margin_supplier_name_3 | purchase_amount_3 | purchase_ratio_3 | total_purchase_amount_3 | total_purchase_ratio_3 | customer_name_3 | sale_amount_3 | sale_ratio_3 | total_sale_amount_3 | total_sale_ratio_3 | margin_supplier_name_4 | purchase_amount_4 | purchase_ratio_4 | total_purchase_amount_4 | total_purchase_ratio_4 | customer_name_4 | sale_amount_4 | sale_ratio_4 | total_sale_amount_4 | total_sale_ratio_4 | margin_supplier_name_5 | purchase_amount_5 | purchase_ratio_5 | total_purchase_amount_5 | total_purchase_ratio_5 | customer_name_5 | sale_amount_5 | sale_ratio_5 | total_sale_amount_5 | total_sale_ratio_5 | |:-------------|:--------------------|:--------------------|--------------:|:-------------------------|--------------------:|-------------------:|--------------------------:|-------------------------:|:------------------|----------------:|---------------:|----------------------:|---------------------:|:-------------------------|--------------------:|-------------------:|--------------------------:|-------------------------:|:------------------|----------------:|---------------:|----------------------:|---------------------:|:-------------------------|--------------------:|-------------------:|--------------------------:|-------------------------:|:------------------|----------------:|---------------:|----------------------:|---------------------:|:-------------------------|--------------------:|-------------------:|--------------------------:|-------------------------:|:------------------|----------------:|---------------:|----------------------:|---------------------:|:-------------------------|--------------------:|-------------------:|--------------------------:|-------------------------:|:------------------|----------------:|---------------:|----------------------:|---------------------:| | 000059.SZ | 2026-10-23 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 000430.SZ | 2026-10-23 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 000501.SZ | 2026-10-23 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 000543.SZ | 2026-10-23 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 000550.SZ | 2026-10-23 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 688816.SH | 2026-10-30 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 688826.SH | 2026-10-30 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 920402.BJ | 2026-10-30 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 920427.BJ | 2026-10-30 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | 920985.BJ | 2026-10-30 00:00:00 | 2026-09-30 00:00:00 | 0 | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | | nan | nan | nan | nan | ## 通用文档 ## 【财务数据通用】一、数据体系 平台的财务数据分四类,从原始披露到加工指标逐层派生: | 类别 | 数据表 | 说明 | | --- | --- | --- | | 原始数据 | 资产负债表、利润表、现金流量表 PIT(`cn_stock_financial_*_pit`),财报变更日期(`cn_stock_financial_changedate`),财务附注(`cn_stock_financial_note_*`) | 公司披露什么就记录什么,只在披露财报时有记录,不是日频 | | 衍生数据 | `cn_stock_financial_lf_shift`、`ly_shift`、`mrq_shift`、`ttm_shift`、`notes_shift` | 把原始数据加工成最新一期(LF)、最新年报(LY)、单季度(MRQ)、滚动十二期(TTM),并用 `shift` 带出历史各期 | | 财务分析 | `cn_stock_financial_profitability`、`growth`、`operating`、`debt_repay`、`capital`、`cash_flow`、`earning_quality`、`xps`、`derivative` | 在衍生数据的基础上做加减乘除得到的财务指标 | | 盈利预期 | `cn_stock_financial_earnings_preview`、`cn_stock_financial_forecast_consensus_rolling` | 业绩快报和机构一致预期,口径独立,见各表文档 | 以上财务表都不是日频数据,不能直接当作每日因子使用,需要先按公告日对齐到交易日,做法见本文五。衍生数据和财务分析适合对财务数据有较深了解、希望构建复杂财务因子的用户。 ## 【财务数据通用】二、date 与 report_date 财务表里有两个时间概念,含义不同,使用时不要混淆: - `date`:公告日,即这条财务数据对外公布(首次披露或更正)的日期,也是这条数据可以被使用的最早日期。`date` 不是报告期。 - `report_date`:报告期,即这条数据属于哪一期财报。 关于 `date` 的几点说明: - `date` 就是公告日,原样记录,公告日不是交易日(周末、节假日)时也不会顺延,所以 `date` 可能不是交易日。按交易日使用时,用 `date <= 交易日` 取最新的记录即可(见本文五的 `ASOF JOIN`)。 - `date` 来自 `cn_stock_financial_changedate` 的 `changedate`,二者约等于同一个日期。数据入库时会去重,所有字段的取值完全相同的记录只保留一条。 - 原始表(三大报表 PIT、财务附注)中,一行是某个公司某个报告期在某个公告日的版本。同一个 `report_date` 首次披露和后来更正,会有不同的 `date`。 - 衍生表和财务分析表中,`date` 同样是公告日,表里只有公司有公告的日期。站在这一天,`shift = 0` 是当时能看到的最新一期,`shift = 1, 2…` 是更早的各期,数值是当时能看到的版本,示例见本文四。 报告期的取值: - xxxx-03-31 表示 xxxx 年一季报,比如 2024-03-31 指 2024 年一季报 - xxxx-06-30 表示 xxxx 年半年报,比如 2024-06-30 指 2024 年半年报 - xxxx-09-30 表示 xxxx 年三季报,比如 2024-09-30 指 2024 年三季报 - xxxx-12-31 表示 xxxx 年年报,比如 2024-12-31 指 2024 年年报 上市公司一年内披露四次财务报告,披露时限如下: - 一季报:应在 4 月 30 日前披露 - 半年报:应在 8 月 31 日前披露 - 三季报:应在 10 月 31 日前披露 - 年报:应在次年 4 月 30 日前披露 判断某一天能看到哪些数据要用 `date`,不能用 `report_date`,否则会用到当时还没有公布的数据。 ## 【财务数据通用】三、PIT (Point in Time) 上市公司除了正常披露财务报表外,后续会时常对历史财务数据进行修正。因此在量化投资领域,加工财务数据时不能只用最新修正后的数据,而要基于历史时间节点获取当时能获取的最新数据。PIT(Point In Time)数据指的是在某个时间点上,基于已公布的财务报表获取的某个财务指标的取值。 以 002473.SZ 的财务数据为例,在平台上调用以下代码: ```python import dai import pandas as pd pd.set_option('display.float_format', '{:.2f}'.format) dai.query(""" SELECT date, instrument, report_date, change_type, total_current_assets FROM cn_stock_financial_balance_general_pit WHERE instrument='002473.SZ' AND report_date='2019-12-31' AND date>'2020-01-01' """).df() ``` 运行上述代码,能得到以下数据: | date | instrument | report_date | change_type | total_current_assets | | --- | --- | --- | --- | --- | | 2020-04-30 | 002473.SZ | 2019-12-31 | 0 | 223449880.95 | | 2020-08-27 | 002473.SZ | 2019-12-31 | 1 | 228470428.90 | | 2020-10-26 | 002473.SZ | 2019-12-31 | 1 | 228470428.90 | | 2021-04-29 | 002473.SZ | 2019-12-31 | 1 | 228470428.90 | 该公司于 2020 年 4 月 30 日首次公布 2019 年年报,披露的流动资产(total_current_assets)为 223449880.95,又于 2020 年 8 月 27 日对 2019 年年报的流动资产进行修正,修正为 228470428.90,因此 2019 年年报在表中有多条记录。 date 为 2020-08-27、2020-10-26、2021-04-29 的 total_current_assets 取值相同,这些重复记录是必要的:公司每披露某一期财报,都会附带上年同期或上年年末的数据作对比,极少部分公司即使不发布修正公告,也会通过这种方式修改历史财务数据,所以每次披露都保留一条记录。 原始数据表里与此相关的字段: | 字段 | 释意 | | --- | --- | | change_type | 0 表示首次披露的财务数据,1 表示非首次披露或有更改的财务数据 | | fs_quarter_index | 对应季度,1 指一季报,2 指半年报,3 指三季报,4 指年报,仅报表 PIT 表有 | ## 【财务数据通用】四、衍生数据:LF、LY、MRQ、TTM 与 shift 原始财务数据只在公司披露财报时才有记录,这类非规整的数据很难直接用于量化投资。衍生数据把原始数据加工成四类,字段名就是原始财务字段加上对应的后缀。要查具体字段,先在原始财报的文档里找到财务字段,再加上后缀,比如利润表的 `net_profit` 对应 `net_profit_lf`、`net_profit_ttm`。 - lf(last file):取自最新一期财务数据,表为 `cn_stock_financial_lf_shift` - ly(last year):取自最新一期年报财务数据,表为 `cn_stock_financial_ly_shift` - mrq(most recent quarter):最新一个单季度的财务数据,表为 `cn_stock_financial_mrq_shift` - ttm(trailing twelve months):最新滚动十二个月的财务数据,表为 `cn_stock_financial_ttm_shift` - shift(偏移期):站在历史节点上向前偏移 n 期,shift=0 为当期,shift=1 为上一期。LF、MRQ、TTM 以季为单位,LY 以年为单位 在平台加工的“衍生数据”和“财务分析”两大类财务数据中,我们同样进行 PIT 处理,以 002473.SZ 这只股票的流动资产(total_current_assets)数据举例: ```python import dai import pandas as pd pd.set_option('display.float_format', '{:.2f}'.format) dai.query(""" SELECT date, instrument, report_date, shift, total_current_assets_lf FROM cn_stock_financial_lf_shift WHERE instrument='002473.SZ' AND shift < 3 AND ((date='2020-04-30') OR (date='2020-08-27')) """).df().sort_values("date") ``` 通过上述代码,我们得到以下数据,可以看出,站在 2020 年 4 月 30 日这一天,我们能获取到的 2019 年年报的流动资产为 223449880.95,但站在 2020-08-27 这一天时,我们能获取到的 2019 年年报的流动资产为 228470428.90。 | date | instrument | report_date | shift | total_current_assets_lf | | --- | --- | --- | --- | --- | | 2020-04-30 | 002473.SZ | 2019-09-30 | 2 | 268546184.69 | | 2020-04-30 | 002473.SZ | 2019-12-31 | 1 | **223449880.95** | | 2020-04-30 | 002473.SZ | 2020-03-31 | 0 | 213964081.16 | | 2020-08-27 | 002473.SZ | 2019-12-31 | 2 | **228470428.90** | | 2020-08-27 | 002473.SZ | 2020-03-31 | 1 | 233220236.75 | | 2020-08-27 | 002473.SZ | 2020-06-30 | 0 | 222315509.19 | ## 【财务数据通用】五、日频财务数据与日频 ROE 因子 衍生数据按公告日存储,不是日频。要得到日频数据,把财务表按公告日对齐到交易日:某一天只使用当天及之前已经公告的最新一期(`shift = 0`),在下一次公告之前沿用上一期的值。DAI SQL 用 `ASOF JOIN` 完成。 下面以日频 ROE 为例,ROE = 滚动十二期归属母公司股东的净利润 / 最新一期归属母公司股东的所有者权益: ```python import dai df = dai.query(""" SELECT b.date, b.instrument, t.net_profit_to_parent_shareholders_ttm / l.total_equity_to_parent_shareholders_lf AS roe_ttm FROM cn_stock_bar1d b ASOF JOIN (SELECT * FROM cn_stock_financial_ttm_shift WHERE shift = 0) t ON b.instrument = t.instrument AND b.date >= t.date ASOF JOIN (SELECT * FROM cn_stock_financial_lf_shift WHERE shift = 0) l ON b.instrument = l.instrument AND b.date >= l.date WHERE b.date >= '2024-01-01' ORDER BY b.date, b.instrument """, filters={"date": ["2023-01-01", "2024-12-31"]}).pl() ``` - `filters` 的起点要早于第一个需要的交易日,这里提前一年,这样起点之前已经公告的财报也能取到。 - 所有者权益为 0 或负数时,ROE 会是无穷值或负值,使用前需要处理。 - 其他财务科目的日频因子写法相同,只需替换字段和后缀。现成的 ROE 指标见 `cn_stock_financial_profitability` 的 `roe_avg_ttm`、`roe_period_ttm` 等字段。 平台还提供过已按日频处理好的财务表 `cn_stock_factors_financial_items`,以 002473.SZ 的流动资产(total_current_assets)数据举例(该表已不建议使用,建议基于衍生数据自行计算): ```python import dai import pandas as pd pd.set_option('display.float_format', '{:.2f}'.format) dai.query(""" SELECT date, instrument, total_current_assets_ly FROM cn_stock_factors_financial_items WHERE instrument='002473.SZ' AND ((date>'2020-04-25' and date<'2020-05-05') OR (date>'2020-08-25' and date<'2020-09-01')) """).df().sort_values("date") ``` 通过上述代码,我们得到以下数据。可以看出,当日期来到 2020 年 4 月 30 日这一天时,我们能获取到最新的流动资产(年报)数据是 223449880.95,这个数值一直保持到 2020 年 8 月 27 日,最新一期年报的流动资产变为了 228470428.90,符合预期。 | date | instrument | total_current_assets_ly | | --- | --- | --- | | 2020-04-27 | 002473.SZ | 330113974.90 | | 2020-04-28 | 002473.SZ | 330113974.90 | | 2020-04-29 | 002473.SZ | 330113974.90 | | 2020-04-30 | 002473.SZ | **223449880.95** | | 2020-08-26 | 002473.SZ | 223449880.95 | | 2020-08-27 | 002473.SZ | **228470428.90** | | 2020-08-28 | 002473.SZ | 228470428.90 | | 2020-08-31 | 002473.SZ | 228470428.90 | ## 【财务数据通用】六、财务分析与财务附注 - 财务分析表在衍生数据(LF、MRQ、TTM)的基础上通过加减乘除计算各类财务指标,所以数据结构、`shift` 的含义都与衍生数据相同,字段名带 `_lf`、`_mrq`、`_ttm` 后缀。各指标的计算公式见各表文档的“字段说明”。 - 财务附注是对资产负债表、利润表和现金流量表有关项目的说明,主要包括非经常性项目、收入明细、费用明细、投资收益等。多数附注科目只在半年报和年报中披露,一季报、三季报对应的记录大部分附注字段为空,使用时建议按 `report_date` 的月份筛选出 06-30 和 12-31 的记录。非经常性损益等少数科目在一季报、三季报中也有数据。 ## 【财务数据通用】七、收录范围 - 目前只收录合并报表的数据,没有母公司报表。 - 报表 PIT 表目前只收录一般企业的财务科目,针对金融类企业的特殊字段后续会逐渐加入。
财务附注-供应商&客户 (cn_stock_financial_note_supplier_customer)
数据描述: 该数据表提供了上市公司在特定报告期内的供应商和客户信息,重点关注公司的主要供应商和客户,以及与这些供应商和客户的交易额和交易额占比。主要字段包括财报类型、主要供应商名称(前五名)、对应的采购额及其占比、采购额合计及其占比、主要客户名称(前五名)、对应的销售额及其占比以及销售额合计及其占比。
文档
用例
表结构
| 字段 | 字段类型 | 字段描述 |
| sale_ratio_1 | double | 销售占比(第1名) |
| sale_ratio_2 | double | 销售占比(第2名) |
| sale_ratio_3 | double | 销售占比(第3名) |
| sale_ratio_4 | double | 销售占比(第4名) |
| sale_ratio_5 | double | 销售占比(第5名) |
| sale_amount_1 | double | 销售额(第1名) |
| sale_amount_2 | double | 销售额(第2名) |
| sale_amount_3 | double | 销售额(第3名) |
| sale_amount_4 | double | 销售额(第4名) |
| sale_amount_5 | double | 销售额(第5名) |
| customer_name_1 | string | 客户名称(第1名) |
| customer_name_2 | string | 客户名称(第2名) |
| customer_name_3 | string | 客户名称(第3名) |
| customer_name_4 | string | 客户名称(第4名) |
| customer_name_5 | string | 客户名称(第5名) |
| purchase_ratio_1 | double | 采购占比(第1名) |
| purchase_ratio_2 | double | 采购占比(第2名) |
| purchase_ratio_3 | double | 采购占比(第3名) |
| purchase_ratio_4 | double | 采购占比(第4名) |
| purchase_ratio_5 | double | 采购占比(第5名) |
| purchase_amount_1 | double | 采购额(第1名) |
| purchase_amount_2 | double | 采购额(第2名) |
| purchase_amount_3 | double | 采购额(第3名) |
| purchase_amount_4 | double | 采购额(第4名) |
| purchase_amount_5 | double | 采购额(第5名) |
| total_sale_ratio_1 | double | 销售额合计占比(第1名) |
| total_sale_ratio_2 | double | 销售额合计占比(第2名) |
| total_sale_ratio_3 | double | 销售额合计占比(第3名) |
| total_sale_ratio_4 | double | 销售额合计占比(第4名) |
| total_sale_ratio_5 | double | 销售额合计占比(第5名) |
| total_sale_amount_1 | double | 销售额合计(第1名) |
| total_sale_amount_2 | double | 销售额合计(第2名) |
| total_sale_amount_3 | double | 销售额合计(第3名) |
| total_sale_amount_4 | double | 销售额合计(第4名) |
| date | timestamp[ns] | 日期 |
| margin_supplier_name_1 | string | 主要供应商名称(第1名) |
| margin_supplier_name_2 | string | 主要供应商名称(第2名) |
| margin_supplier_name_3 | string | 主要供应商名称(第3名) |
| margin_supplier_name_4 | string | 主要供应商名称(第4名) |
| margin_supplier_name_5 | string | 主要供应商名称(第5名) |
| total_purchase_ratio_1 | double | 采购额合计占比(第1名) |
| total_purchase_ratio_2 | double | 采购额合计占比(第2名) |
| total_purchase_ratio_3 | double | 采购额合计占比(第3名) |
| instrument | string | - |
| total_purchase_ratio_5 | double | 采购额合计占比(第5名) |
| total_purchase_amount_1 | double | 采购额合计(第1名) |
| total_purchase_amount_2 | double | 采购额合计(第2名) |
| total_purchase_amount_3 | double | 采购额合计(第3名) |
| total_purchase_amount_4 | double | 采购额合计(第4名) |
| total_purchase_amount_5 | double | 采购额合计(第5名) |
| total_purchase_ratio_4 | double | 采购额合计占比(第4名) |
| total_sale_amount_5 | double | 销售额合计(第5名) |
| report_date | timestamp[ns] | 报告期 |
| change_type | int8 | 财报类型 |
| __PARTITION__ | int64 | - |
表名:cn_stock_financial_note_supplier_customer
起始时间:
最近更新时间: