带有实际条目的数据透视表

时间:2017-09-19 15:47:13

标签: google-sheets

我有一个表单,用电子表格填充制造商类别的数据对,如下所示:

Mfr Category
A   Servers
A   Workstations
B   Components
C   Workstations
D   Networking
E   Workstations
F   Other
G   Components

我想构建一个类似于数据透视表的列表,其中包含类别条目作为列标题,但每个列表都包含制造商列表:

Servers Workstations Components Networking Other
A       A            B          D          F
        C            G
        E

可以在路上添加类别,因此我希望像在数据透视表中一样自动检测它们。

2 个答案:

答案 0 :(得分:1)

试试这个:

=ARRAYFORMULA(TRANSPOSE(SPLIT(TRANSPOSE(QUERY(QUERY(A1:B8," select max(A) group by A pivot B"),,5000))," ")))

你不能订购标题。

答案 1 :(得分:0)

由于我的数据包含空格,以匿名' answer为基础,我提出了以下解决方案:

  1. 如果数据中存在空格,请使用中间工作表Sheet2进行引用。单元格A1包含公式
  2. =ARRAYFORMULA(SUBSTITUTE('Sheet1'!A:B," ","_"))
    1. 在第三张Sheet3上,在单元格A1中输入以下内容:
    2. =ARRAYFORMULA(SUBSTITUTE(TRANSPOSE(SPLIT(TRANSPOSE(QUERY(QUERY(Sheet2!$A$1:$B$1000,"select max(A) group by A pivot B",1),,5000))," ")),"_"," "))

      解释每个公式的顺序:

      QUERY(Sheet2!$A$1:$B$1000,"select max(A) group by A pivot B",1)执行Google Visualization API查找以产生以下结果:

      Components Networking Other Servers Workstations
      
                                  A       A
      B
                                          C
                 D            
                                          E
                            F     
      G

      它开始看起来像一个数据透视表,但每列的元素之间存在不必要的间隙。

      QUERY( ... ,,5000)是一个直接的黑客攻击。它采用先前的查询结果,并将所有列及其条目连接成一行单元格。下面添加了一个管道来表示该行中的新单元格。注意条目之间的空格。

      Components B G |Networking D |Other F |Servers A |Workstations A C E

      TRANSPOSE( ... )获取此行结果并将其转换为列。

      Components   B     G
      Networking     D   
      Other       F 
      Servers  A      
      Workstations  A  C  E 

      SPLIT( ... ," ")将文本分隔为整齐的列。忽略多个空格字符。注意:如果没有被ARRAYFORMULA()包围,则不会显示此功能和以下功能。

      Components   B G   
      Networking   D      
      Other        F      
      Servers      A      
      Workstations A C E

      TRANSPOSE( ... )将所有内容放回列中:

      Components Networking Other Servers Workstations
      B          D          F     A       A
      G                                   C
                                          E

      最后,我们删除下划线并使用SUBSTITUTE( ... ,"_"," ")替换空格,并用ARRAYFORMULA()包围所有内容,以便显示。