Skip to content

Pipeline 示例

数据过滤

python
from pdf_generator import PDFReportGenerator
config = {
    "metadata": {"title": "过滤示例"},
    "dataSources": [
        {
            "name": "high_sales",
            "type": "csv",
            "path": "data/sales.csv",
            "pipeline": [
                {"op": "filter", "expr": "销量 > 150"},
            ]
        }
    ],
    "elements": [
        {"type": "text", "content": "高销量产品", "style": "title"},
        {
            "type": "table",
            "dataSource": "high_sales"
        }
    ]
}

generator = PDFReportGenerator(config_dict=config)
generator.save("output/pipeline_filter.pdf")

数据转换

python
from pdf_generator import PDFReportGenerator

config = {
    "metadata": {"title": "转换示例"},
    "dataSources": [
        {
            "name": "high_sales",
            "type": "csv",
            "path": "data/sales.csv",
            "pipeline": [
                {"op": "compute", "columns": {"销售额": "销量 * 金额"}},
            ]
        }
    ],
    "elements": [
        {"type": "text", "content": "销售数据", "style": "title"},
        {
            "type": "table",
            "dataSource": "high_sales",
            "columns": ["产品", "销量", "金额", "销售额"]
        }
    ]
}

generator = PDFReportGenerator(config_dict=config)
generator.save("output/pipeline_transform.pdf")

数据聚合

python
from pdf_generator import PDFReportGenerator
config = {
    "metadata": {"title": "聚合示例"},
    "dataSources": [
        {
            "name": "high_sales",
            "type": "csv",
            "path": "data/sales.csv",
            "pipeline": [
                {"op": "group", "by": "区域", "agg": {"销量": "sum", "金额": "sum"}},
            ]
        }
    ],
    "elements": [
        {"type": "text", "content": "销售数据", "style": "title"},
        {
            "type": "table",
            "dataSource": "high_sales"
        }
    ]
}

generator = PDFReportGenerator(config_dict=config)
generator.save("output/pipeline_aggregate.pdf")

完整工作流

python
from pdf_generator import PDFReportGenerator

config = {
    "metadata": {"title": "Pipeline 内嵌 - 完整工作流"},
    "pageTemplate": {
        "footer": {"enabled": True, "height": 0.5,
                   "center": {"type": "pageNumber", "format": "- {page} -"}}
    },
    "dataSources": [
        {
            "name": "raw",
            "type": "inline",
            "data": [
                {"日期": "2024-01", "产品": "笔记本", "销量": 120, "单价": 5999, "退货": 5},
                {"日期": "2024-01", "产品": "台式机", "销量": 80, "单价": 4299, "退货": 2},
                {"日期": "2024-02", "产品": "笔记本", "销量": 145, "单价": 5899, "退货": 3},
                {"日期": "2024-02", "产品": "台式机", "销量": 90, "单价": 4199, "退货": 1},
                {"日期": "2024-03", "产品": "笔记本", "销量": 160, "单价": 5799, "退货": 4},
                {"日期": "2024-03", "产品": "台式机", "销量": 95, "单价": 4099, "退货": 2},
                {"日期": "2024-04", "产品": "笔记本", "销量": 180, "单价": 5699, "退货": 2},
                {"日期": "2024-04", "产品": "台式机", "销量": 100, "单价": 3999, "退货": 1},
            ]
        },
        {
            "name": "processed",
            "type": "inline",
            "data": [
                {"日期": "2024-01", "产品": "笔记本", "销量": 120, "单价": 5999, "退货": 5},
                {"日期": "2024-01", "产品": "台式机", "销量": 80, "单价": 4299, "退货": 2},
                {"日期": "2024-02", "产品": "笔记本", "销量": 145, "单价": 5899, "退货": 3},
                {"日期": "2024-02", "产品": "台式机", "销量": 90, "单价": 4199, "退货": 1},
                {"日期": "2024-03", "产品": "笔记本", "销量": 160, "单价": 5799, "退货": 4},
                {"日期": "2024-03", "产品": "台式机", "销量": 95, "单价": 4099, "退货": 2},
                {"日期": "2024-04", "产品": "笔记本", "销量": 180, "单价": 5699, "退货": 2},
                {"日期": "2024-04", "产品": "台式机", "销量": 100, "单价": 3999, "退货": 1},
            ],
            "pipeline": [
                {"op": "filter", "expr": "销量 > 50"},
                {"op": "compute", "columns": {
                    "销售额": "销量 * 单价",
                    "净销量": "销量 - 退货",
                    "退货率": "退货 / 销量 * 100"
                }},
                {"op": "sort", "by": "销售额", "order": "desc"},
                {"op": "select", "columns": ["日期", "产品", "销量", "净销量", "单价", "销售额", "退货率"]},
                {"op": "rename", "columns": {"退货率": "退货率(%)"}},
            ]
        },
        {
            "name": "monthly",
            "type": "inline",
            "data": [
                {"日期": "2024-01", "产品": "笔记本", "销量": 120, "单价": 5999, "退货": 5},
                {"日期": "2024-01", "产品": "台式机", "销量": 80, "单价": 4299, "退货": 2},
                {"日期": "2024-02", "产品": "笔记本", "销量": 145, "单价": 5899, "退货": 3},
                {"日期": "2024-02", "产品": "台式机", "销量": 90, "单价": 4199, "退货": 1},
                {"日期": "2024-03", "产品": "笔记本", "销量": 160, "单价": 5799, "退货": 4},
                {"日期": "2024-03", "产品": "台式机", "销量": 95, "单价": 4099, "退货": 2},
                {"日期": "2024-04", "产品": "笔记本", "销量": 180, "单价": 5699, "退货": 2},
                {"日期": "2024-04", "产品": "台式机", "销量": 100, "单价": 3999, "退货": 1},
            ],
            "pipeline": [
                {"op": "compute", "columns": {"销售额": "销量 * 单价"}},
                {"op": "group", "by": "日期", "agg": {"销售额": "sum", "销量": "sum"}},
            ]
        }
    ],
    "elements": [
        {"type": "text", "content": "销售分析报告(Pipeline 内嵌处理)", "style": "Title"},
        {"type": "text", "content": "所有数据处理都在 config dataSources 的 pipeline 中完成"},
        {"type": "spacer", "height": 0.2},

        {"type": "text", "content": "处理结果明细", "style": "Heading1"},
        {"type": "table", "dataSource": "processed", "style": "Normal"},
        {"type": "pagebreak"},

        {"type": "text", "content": "月度销售额趋势", "style": "Heading1"},
        {
            "type": "chart", "chartType": "line", "dataSource": "monthly",
            "xAxis": "日期", "yAxis": "销售额",
            "title": "月度销售额趋势", "width": 6.5, "height": 4, "grid": True
        },
        {"type": "spacer", "height": 0.3},
        {
            "type": "chart", "chartType": "bar", "dataSource": "monthly",
            "xAxis": "日期", "yAxis": "销量",
            "title": "月度销量对比", "width": 6.5, "height": 3.5, "grid": True
        },
    ]
}

generator = PDFReportGenerator(config_dict=config)
generator.save("output/pipeline_workflow.pdf")

Released under the MIT License.