簡體   English   中英

Google 電子表格中工作表之間的一對多報告

[英]one-to-many reporting between sheets in Google Spreadsheets

我正在嘗試將“一對多關系”(如在數據庫中)從一張工作表復制到另一張工作表(在同一個電子表格內)。

我已經對類似主題進行了研究,但似乎沒有解決方案涵蓋我。

本質上,這可以在原則上描述如下:

  • 假設我們有一個工作表 (PrimaryTable),其中元素以 pkElementID 列(主鍵)唯一地存儲(無重復),以及一個
  • 第二張表 (SecondaryTable) 根據它們對應的 ElementID(還有一個 fkElementID 列充當外鍵),其中存儲了每個元素的屬性。

關於此的一些免費說明:

  • PrimaryTable 包含 2000 多行,其中 SecondaryTable 的范圍大致相同。
  • SecondaryTable 中的上述“屬性”實際上分布在多個列中,這些列也通過數組公式連接在一列中。
  • 輔助表中的“報告”數據不是數字,而是需要連接的 HTML 文本的大字符串(~1000 個字符或更多)。
  • 該公式應該是一個數組公式,以便在向工作表中添加更多行時自動填充它,最好是在第一行的標題單元格中,以便它可以被鎖定。

所有這一切的一個例子是二級表格每一行的 HTML 代碼(標簽)內每個元素的幾個圖像的網址,報告給初級表格中的相應單元格。

直到現在,我在 Ted Juch 的博客上進行了一些討論后找到了一個解決方案,並為此目的對公共電子表格做出了貢獻,其中使用了以下公式:

ArrayFormula(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE('Secondary Table'!B1:B&", ");(A1:A=TRANSPOSE('Secondary Table'!A1:A))*(LEN(A1:A) >0))&REPT(CHAR(9)&" ""&CHAR(9);TRANSPOSE(ROW('Secondary Table'!A1:A))=ROWS('Secondary Table'!A1:A)));", " &CHAR(9);0)))

上面的公式是我認為來自 TC Adam 的建議,雖然我似乎已經了解它的工作原理,但我幾乎無法維護它或將其修改為不同的情況。 在最后一個示例中,它返回“超出范圍”的錯誤並且無法弄清楚原因。

此后我對公式所做的唯一修改是在初始數組公式中添加一個“if (row(A1:A)=1;”Column Header”; FORMULA)”,結果為:

ArrayFormula(IF(ROW(A1:A)=1;"Column Header"; TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE('Secondary Table'!B1:B&", ");(A1:A=TRANSPOSE('Secondary Table'!A1:A))*(LEN(A1:A)>0))&REPT(CHAR(9)&" "&CHAR(9);TRANSPOSE(ROW('Secondary Table'!A1:A))=ROWS ('輔助表'!A1:A)));", "&CHAR(9);0))))

我懷疑大型數據集是否會產生如此大的數組,無法在 Google 電子表格的限制下正確處理,從而導致問題,或者是我弄亂了試圖調整它的公式。

我還嘗試使用 ArrayLib 庫創建一個自定義函數,該庫具有一個名為 ArrayLib.filterByText 的類似函數,但它只運行了幾行,直到收到“錯誤:服務超時”消息。

我應該嘗試實現查詢方法嗎? 有人可以幫忙嗎?

這是我為此找到的“最佳”解決方案(歸功於亞歷山大·伊萬諾夫

請注意,一對多關系不是以規范化的方式保存,而是以序列化的方式保存,但它確實是開箱即用的,並且可能是一個更完整和徹底的解決方案的靈感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM