【问题标题】:How can I have the informations from 2 differents columns represented as 1 in a pivot table?如何在数据透视表中将来自 2 个不同列的信息表示为 1?
【发布时间】:2019-04-25 18:50:06
【问题描述】:

在我的数据中,我有 2 列代表之前访问过的国家和在我正在研究的城市之后访问过的国家。

这是我的数据样本的图片:https://i.imgur.com/kS4K9uK.png

我想在我的数据透视表中表示与每个城市相关联的所有国家/地区(因此在城市之前和之后)。我希望将我的行中的城市以及之前和之后可能访问的所有国家作为我的列和我的价值观中的那些。

这是我想要实现的目标的图片,但我只能为其中一个列(在这种情况下为国家之后)做到这一点。我想要相同的格式,但之前和之后都有数据(但重要的是要知道两列中不一定是相同的国家,所以我不能只将国家列中的一个作为头部并且两者都有作为值):https://i.imgur.com/PUjhSmB.png

当我将城市放在一行中,将 2 个国家列放在 value 和 columns 中时,表格很难阅读,因为前后都是分开的,甚至可能被视为一对。如果它们不在数据透视表列中,它们只会给我之前和之后的国家数量,而不是国家数量,这不是我想要的。

这是透视表结果的图片:https://i.imgur.com/3j4BD3k.png

我还尝试通过«Country before» + «Country after» 来创建一个新字段,但它似乎不起作用,因为数据是文本。

【问题讨论】:

  • 您能否添加首选输出的图像/表格,因为这会影响最佳解决方案
  • 我刚刚添加了我想要的输出作为第二张图片。有帮助吗?

标签: excel merge pivot-table


【解决方案1】:

好的,我想现在了解输出。您基本上想要计算 B+C 列中每个国家/地区出现的次数,按城市分组。我将提供几种方法,以便您选择最适合您的方法。

最简单的方法

我能想到的最简单的方法是将第二列粘贴到第一列下面,然后在这个新表上进行旋转。

COUNTIF

一种更可重复的方法是基本上制作您自己的数据透视表并使用COUNTIF 函数来计算每个国家/地区的实例。

=COUNTIFS($A$1:$A$6,$F2,$B$1:$B$6,G$1)+COUNTIFS($A$1:$A$6,$F2,$C$1:$C$6,G$1)

Power Query

最可重复的方法是使用 PowerQuery。这将使您能够通过单击按钮来刷新数据。为此(假设您有 excel 2016),请转到“数据”选项卡,然后在选择数据的情况下单击“从表/范围”。 Power Query 窗口将打开。屏幕左上方将是一个带有高级编辑器的按钮。打开后会看到如下代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"City", type text}, {"Country Before", type text}, {"Country After", type text}})
in
    #"Changed Type"

将代码替换为以下代码。请注意,您的表可能被称为不同的东西。您可以在代码的第二行看到它的名称。下面的代码使用“Table1” - 您可以将其替换为您的表格名称。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"City", type text}, {"Country Before", type text}, {"Country After", type text}}),
    #"Before" = Table.RemoveColumns(#"Changed Type",{"Country Before"}),
    #"After" = Table.RemoveColumns(#"Changed Type",{"Country After"}),
    #"Append" = Table.Combine({#"Before",#"After"}),
    #"Inserted Merged Column" = Table.AddColumn(Append, "Country", each Text.Combine({[Country After], [Country Before]}, ""), type text),
    #"Removed Columns" = Table.RemoveColumns(#"Inserted Merged Column",{"Country After", "Country Before"})
in
    #"Removed Columns"

希望对您有所帮助。

【讨论】:

  • 这些字段排列的问题是列比需要的要宽得多,这给了我之前和之后的总数。我想要得到的是将 before+after 的结果作为列标题以及表中两者的值。尝试合并 2 个数据透视表(之前的 1 个和之后的 1 个)会更容易,还是有办法只使用 1 个数据透视表直接获得结果?
  • 您能否举一个不在数据透视表中的所需输出的示例(例如,只需输入您想在哪里看到的内容) - 我无法理解如何在拥有更少列时这样一系列可能的组合(任何国家与任何国家)。
  • 如果你看数据样本(第一张图片),对于A列中的所有Baie Comeau,我想看看加拿大在B和C列中出现的总时间(7) .所以在我的数据透视表中,Baie Comeau 行和 Canada 列的组合将出现 7。对于 Duluth 行和 Column USA,它将出现 6。我真的很抱歉,我似乎很难很好地解释什么我想。是不是更清楚了?
  • 对于 A 列中的每个城市,我想查看 B 列和 C 列中每个国家/地区的出现次数。
  • 我已经更新了答案以提供一些不同的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2022-07-05
相关资源
最近更新 更多