这是在实现多表关联时想到的。

我们现在这套体系,实现多表关联比较复杂。如果Superset能官方支持多表关联,不知道会是什么样的方案,复杂度如何。


  • 在公式这个层面,没有关联条件,只有两个列、或者多个列,相互之间该如何计算(+-*/)。

->由此可知,在展开公式之前,结果集要先进行join,以保证列计算时,每一行被正确的对齐了。

->查找基础KPI、分组、查询的操作不需要改变。在获取df之后,merge各个df,要提前到展开公式之前。

  • 如果没有定义join条件呢?

join是在结果集层面定义的,两个结果集如何关联起来。

如果查询的结果集是单结果集,完全不影响在公式里引用来自其他结果集的KPI,这个时候是没有join条件的。

--在程序中,要把这种情况当成错误来处理,即,KPI公式中出现的其他KPI,不能来自join定义之外。

->在逐层嵌套的KPI定义体系中,可能存在需要到本层join定义之外,再去下层获取join条件的情况(假设KPI有4层,第1层的join条件,很可能无法把第4层的数据集关联起来)。所以,join条件也需要迭代处理。每一层都需要join操作。

  • 当前的策略是独立查询各个table的数据,关联条件作用在pandas.DataFrame之间,每个DataFrame中可能包含不需要的数据,即,不满足join条件的数据也可能会被加载到DataFrame中。再考虑到每个查询中limit的存在,会有部分满足条件的数据不会出现在join之后的结果集中。

--这个问题没找到完善的解决方案

  • pandas的merge行成一个独立的DataFrame,存在列名重复的可能。

--参见这个讨论:https://stackoverflow.com/questions/19125091/pandas-merge-how-to-avoid-duplicating-columns

--来自两个DataFrame的列如果重名,可以用suffixes函数控制列名加什么后缀。

--https://blog.csdn.net/brucewong0516/article/details/82707492

--所以,这个问题至少是可以解决的。

  • 过滤条件(如果有的话),应该和join一起处理。

细节待定

展开公式的逻辑

->从KPI到换算成列

2019-08-06补充:

  • Context

写二叉树代码的时候,就在想,拼接公式时要不要加一个上下文。

今早模糊想到,的确需要一个上下文(Context)。拼接公式是从叶子节点开始,如果叶子节点是KPI,要查到对应的KPI属于哪个数据集,一旦涉及两个或多个KPI之间的运算,就有可能需要join才能计算,否则,不对齐的行之间运算没有意义。

join之后呢,就需要有个地方保存这个join出来的数据集,而且,还要供公式树上的上一级节点使用。

假设有Dataset_1/Dataset_2/Dataset_3三个数据集。

Dataset_1 : 『KPI_1/KPI_2/KPI_3』

Dataset_2 : 『KPI_4/KPI_5』

Dataset_3 : 『KPI_6/KPI_7』

KPI_2 = KPI_5 + KPI_7

KPI_3 = KPI_6 + KPI_7

对KPI_3来说,KPI_6/KPI_7属于同一个数据集,不需要先join再计算。

对KPI_2来说,KPI_5/KPI_7不属于同一个数据集,需要先join Dataset_2、Dataset_2再计算,否则两个数据集的行没对齐,计算得到的结果没有实际意义。

公式展开的过程,就是计算得到pandas.core.series.Series的过程;同一个数据集的各个KPI即是多个pandas.core.series.Series,数据集是pandas.core.series.Series的集合,也就是一个pandas.DataFrame。

对完全由公式KPI构成的数据集,遍历KPI,展开公式,就是计算Series,保存到DataFrame。即,在查询数据时,一个数据集,和一个DataFrame对应。

把Series加到DataFrame,可以参考:https://stackoverflow.com/questions/12555323/adding-new-column-to-existing-dataframe-in-python-pandas

见joaquin的回答,2017年更新的方法,是调用assign,把Series加入到DataFrame。

2019-08-08补充:如果需要动态命名新增列,可以参考 https://stackoverflow.com/questions/39767718/pandas-assign-with-new-column-name-as-string

--从2019年3月开始重新做Superset二次开发,快五个月了,像是把2017年想要实现但没条件实现的功能,都实现了。是不是又要告一段落了呢?

full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序相关推荐

  1. full join 和full outer join_带你了解数据库中JOIN的用法

    前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识! 本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点.本次会介绍数据库 ...

  2. 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论

    一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...

  3. mysql left outer join_关于mysql中的left join和left outer join的区别

    关于mysql中的left join和left outer join的区别 LEFT JOIN是LEFT OUTER JOIN的简写版; 内连接(INNER JOIN) :只连接匹配的行; 左外连接( ...

  4. mysql join on 索引_连接查询,表关联查询join on,索引,触发器,视图

    一.连接查询 1.统计每一个部门的人数  "部门名,部门的人数" select department,count(eid) from employee group by depar ...

  5. Spark性能调优案例-优化spark估计表大小失败 和 小表关联 走 broadcast join

    背景 A任务中关联一张表,该表经过过滤和去重,数据量小于10MB,实际任务耗时较长. B任务关联一张小表,实际任务耗时较长 排查思路 A任务排查 查看spark UIsql界面: 问题1:发现并没有走 ...

  6. oracle表关联问题 -- full join

    关于工作中使用sql进行表关联引发的问题 前言: 是在工作中需要将两个查询结果集关联起来并得到最后的数据. 问题: 我们需要在将两个查询结果集关联起来并得到最后的数据,但是在关联时遇见了一个问题,我们 ...

  7. 表关联使用INNER JOIN实现更新功能

    准备一些数据,创建2张表,表1为学生表: CREATE TABLE [dbo].[Student] ([SNO] INT NOT NULL PRIMARY KEY,[Name] NVARCHAR(10 ...

  8. sql三个表关联查询LEFT JOIN

    SELECT 别名1.字段1,别名1.字段2,别名2.字段1,别名2.字段2,别名3.字段1,别名3.字段2 FROM 表名1AS 别名1 LEFT JOIN 表名2AS 别名2 ON 别名1.字段1 ...

  9. spark sql优化:小表大表关联优化 union替换or broadcast join

    ----原语句(运行18min) SELECTbb.ipFROM(SELECTip ,sum(click) click_num,round(sum(click) / sum(imp), 4) user ...

最新文章

  1. Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应...
  2. R语言par函数设置图像个数、边界、颜色等实战
  3. Qt编写OpenMP程序--HelloWorld
  4. 前端学习(237):IE条件注释法
  5. 我恋爱了,对象是纸片人
  6. Spring(1)-IOC
  7. 计算机画画作品 人物 游泳,夏天主题的儿童画-游泳的儿童绘画作品
  8. 【clickhouse】mac 10.15.7使用docker安装clickhouse
  9. 【三支火把】--- 关于BIOSUEFI查阅资料网站总结
  10. 时间序列深度学习:状态 LSTM 模型预测太阳黑子(中)
  11. 如何在windows下用dos进入mysql
  12. 【POJ 3057】Evacuation【最大流+二分】
  13. socket学习之电脑手机通信
  14. windows11虚拟机安装失败解决办法
  15. 人工神经网络编程内容,神经网络用什么编程
  16. python数据分布统计_Python 数据可视化:数据分布统计图和热图
  17. mysql时区作用_一文解决MySQL时区相关问题
  18. 15数字华容道解法 图解_数字华容道最后一行怎么解 最后一道解答技巧
  19. html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
  20. js封装QQ音乐api

热门文章

  1. CentOS离线安装httpd服务
  2. Linux chattr 与 lsattr命令
  3. 数字化让618有了洞悉消费者内心的“大脑”
  4. 使用MaxCompute LOAD命令批量导入OSS数据最佳实践—STS方式LOAD开启KMS加密OSS数据
  5. 持续定义Saas模式云数据仓库+实时搜索
  6. 服务3000万制造企业 阿里云数字工厂诚邀合伙人
  7. 十余位权威专家深度解读,达摩院2019十大科技趋势点燃科技热情
  8. 如何保障研发质量不踩坑?阿里技术专家教你几招
  9. 漫话:如何给女朋友解释什么是元宇宙?
  10. 四大招让无处不在的工作空间成为可能?揭秘Ivanti 的战略布局