格式化数据透视表的多重枚举数据

问题描述 投票:0回答:1

我对 Excel 数据透视表比较陌生,我正在尝试弄清楚如何准确地格式化来自外部应用程序的原始数据转储,以便当我将数据推送到 Excel 进行分析时,我可以构建不同的数据透视表/来自同一数据集的图表,或者最大限度地减少每次发生此数据转储时需要执行的格式化量。

目前,我有一个项目列表(每个项目由一行表示),其中某些列具有多个枚举值。例如,颜色列可以是“红色”或“红、蓝、黑”,动物列可以是“狗”或“狗、鹦鹉”。

元素ID 颜色 动物 状态
1 红、蓝、黑 狗、鹦鹉 KS
2 红、黑 狗、猫 纽约
3 蓝色 鹦鹉 KS

我正在尝试创建一个数据透视表,其中不同的动物作为行,不同的颜色作为列,值是具有该颜色/动物组合的产品计数(原始数据集中的行)。

红色 蓝色 黑色
2 1 2
1 0 1
鹦鹉 1 2 1

据我从我的研究中可以看出,我不认为有一种方法可以用我上面格式化的原始数据创建上述数据透视数据,无论我使用什么分隔符,但如果这是不正确的,请分享.

我知道格式化数据以允许我执行此分析的一种方法是将多个枚举列拆分为单独的行,例如原始数据中的三个不同的行/条目,用于“红、蓝、黑”枚举颜色列,然后对所有其他多枚举列执行相同的操作。

元素ID 颜色 动物
1 红色
1 蓝色
1 黑色
1 红色 鹦鹉
1 蓝色 鹦鹉
1 黑色 鹦鹉

问题在于,当我使用相同的原始数据集生成数据透视表来计算颜色以外的属性(例如“状态”与“动物”)时,同一项目现在已被拆分为多行,并且被多次计算,这是我不想要的。

我考虑的另一个解决方案是获取我拥有的一组原始数据,并在不同的工作表上创建不同的版本,然后由不同的数据透视表摄取。例如,当我计算颜色属性时,我将使用一个表将“红、蓝、黑”条目分成三个不同的行,但是当我不计算颜色时,我将使用另一张纸上只有一行的表格。

我知道我可以使用 countifs 公式矩阵创建上面的分析数据透视表,而无需使用数据透视表,但如果可能的话,我会尝试坚持使用数据透视表,因为它们更易于访问且更易于管理。

我觉得我错过了一些带有数据透视表的东西,因为我猜测有一个我不知道的更优雅的解决方案。任何帮助将不胜感激。

excel pivot-table
1个回答
0
投票

一种方法是使用Power Query

  1. 将第一个数据转储导入 Power Query - 在示例中,我从

    Table1
    导入它(在导入 Excel 并创建表之后)

  2. 通过引用此表创建一个新查询(因此对

    Table1
    的任何更新都将自动反映在新查询中。

  3. 在高级编辑器中输入以下内容以拆分和修剪列

let
  Source = Table1,
  removedState = Table.RemoveColumns(Source, {"State"}),
  splitColorIntoRows = Table.ExpandListColumn(
    Table.TransformColumns(
      Table.TransformColumnTypes(removedState, {{"Color", type text}}),
      {
        {
          "Color",
          Splitter.SplitTextByDelimiter(","),
          let
            itemType = (type nullable text) meta [Serialized.Text = true]
          in
            type {itemType}
        }
      }
    ),
    "Color"
  ),
  splitAnimalIntoRows = Table.ExpandListColumn(
    Table.TransformColumns(
      Table.TransformColumnTypes(splitColorIntoRows, {{"Animal", type text}}),
      {
        {
          "Animal",
          Splitter.SplitTextByDelimiter(","),
          let
            itemType = (type nullable text) meta [Serialized.Text = true]
          in
            type {itemType}
        }
      }
    ),
    "Animal"
  ),
  trimmedCols = Table.TransformColumns(
    splitAnimalIntoRows,
    {
      {"Color", each Text.Trim(_), type nullable text},
      {"Animal", each Text.Trim(_), type nullable text}
    }
  )
in
  trimmedCols
  1. 重命名表格,例如
    tbColorAndAnimal
  2. 关闭并加载到 Excel 中

Power Query Editor

使用此表作为颜色和动物的基础数据透视表,并使用第一个表进行其他摘要。

每当数据发生变化时,单击“数据”选项卡下的“刷新”以刷新 Power Query 和数据透视表中的结果:

Table from Power Query and Pivot Table based on it

© www.soinside.com 2019 - 2024. All rights reserved.