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")