full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序
這是在實現多表關聯時想到的。
我們現在這套體系,實現多表關聯比較復雜。如果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、过滤条件的顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福建学业水平测试计算机考点大纲,福建高中
- 下一篇: c语言网页版在线编译器_C语言编译器ID