谷歌电子表格中的一对多报告



我正试图将"一对多关系"(如在数据库中)从一张表复制到另一张表(在同一电子表格中)。

我做过类似主题的研究,但似乎没有解决方案涵盖我

从本质上讲,这在原则上可以描述如下:

  • 假设我们有一个存储元素的表(PrimaryTable)具有pkElementID列(主键)和
  • 第二个工作表(SecondaryTable),其中每个元素的属性为存储,根据它们对应的ElementID(还有充当外键的fkElementID列)

关于这一点的一些补充说明:

  • PrimaryTable由2000多条线路组成,其中SecondaryTable的范围大致相同
  • 上述SecondaryTable中的"属性"实际上是分布在多个列之间,这些列也通过数组公式
  • 辅助表中的"报告"数据不是数字,而是HTML文本的大字符串(约1000个字符或更多),需要已加入
  • 公式应该是数组公式,以便填充当更多的行被添加到工作表时自动进行,最好是在第一行的标题单元格,以便将其锁定

所有这些的一个例子是,在次表的每行的HTML代码(标记)中,每个元素的几个图像的url报告给PrimaryTable中的相应单元格。

到目前为止,我在Ted Juch的博客上进行了一些讨论,并为此目的对公共电子表格做出了贡献,之后我找到了一个解决方案,该电子表格使用了以下公式:

ArrayFormula表'!B1:B&",");(A1:A=运输表'!A1:A))*(LEN(A1:A>0))&REPT(CHAR(9)&"&CHAR(9);TRANSPOSE(ROW(‘辅助表’!A1:A))=ROWS(‘辅助表'!A1:A));","&CHAR(9);0))

我认为上面的公式是TC Adam提出的,虽然我似乎已经了解了它的工作原理,但我几乎无法维护它或根据不同的情况修改它。在最后一个例子中,它返回一个"超出范围"的错误,并且不知道原因。

此后,我对公式所做的唯一修改是在初始数组公式中添加一个"if(row(A1:A)=1;"Column Header";formula)",结果是:

数组公式(IF(ROW(A1:A)=1;"列标题";TRANSPORT(SPLIT(CONCATENATE(REPT(TRANSPORT)('辅助表'!B1:B&",");(A1:A=运输表'!A1:A))*(LEN(A1:A>0))&REPT(CHAR(9)&"&CHAR(9);TRANSPOSE(ROW(‘辅助表’!A1:A))=ROWS(‘辅助表'!A1:A));","&CHAR(9);0)))

我怀疑,是大数据集产生了如此大的数组,在谷歌电子表格的限制下无法正确处理,因此才是问题的原因,还是我把试图调整它的公式搞砸了。

我还尝试使用ArrayLib库制作一个自定义函数,该库有一个名为ArrayLib.filterByText的类似函数,但它只运行几行,直到收到"错误:服务超时"消息。

我应该尝试实现查询方法吗?有人能帮忙吗?

以下是我为此找到的"最佳"解决方案(学分归Alexander Ivanov所有)

请注意一对多关系不是以规范化的方式保存的,而是以序列化的方式保存,但它确实是开箱即用的,可能会为更完整、更彻底的解决方案提供灵感。

最新更新