多sql结果集按列合并新结果报表实现方案

阅读更多
场景:某个报表一个sql出不来,需要多个sql的结果集合并加工
方案要点:按列抽取sql数据,再矩阵转置方式合成目标报表。
方案难点:
  1,各sql结果行数不一致时,空列要按空集处理补数据加工。
  2,实现跨表字断的表达式计算。

部分代码:
 # 关联报表子报表
  def association
    @child_columns = []
    @child_reports = []
    @execute_child_reports = []
    @child_temporary_reports = @temporary_report.child_reports
    @child_temporary_reports.each do |child|
      @child_columns << child.columns.split(" ")
      child_reports = ExecuteReport.new(child.get_report_sql(params)).report 
      @execute_child_reports << child_reports
      @child_reports << Kaminari.paginate_array(child_reports, total_count: child_reports.size).page(params[:page]).per(20)
    end
  end

  # 合并报表子报表
  def composite
    # (默认内容最多的sql放在父亲sql,关键列放在左边)
    # 当多sql数据行不一致时,按照合并关键列补充空数据
    unless (@execute_child_reports.inject([]){|o,j| o< 
 

源码关注:
https://github.com/jamst/pre-report

你可能感兴趣的:(多sql结果集按列合并新结果报表实现方案)