日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、过滤条件的顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。