根据多个数组条件对表中的行进行计数

时间:2018-07-24 12:52:59

标签: arrays excel

我试图根据该表不同列中的多个条件来对表中的行进行计数。但是,标准并不直接包含在公式中。它们是我要引用的数组(而不是直接在公式中列出)。

范围表示例:

Group   Status
a       1
b       4
b       6
c       4
a       6
d       5
d       4
a       2
b       2
d       3
b       2
c       1
c       2
c       1
a       4
b       3

条件/数组示例:

group
a
b

status
1
2
3

如果我只能通过该表中的某个范围(1列)进行一个数组搜索,则可以执行此操作:

{=SUM(COUNTIFS(data[Group],group[group]))}

按预期返回“ 9”(=数据表的group列中与group [group]中的任何值匹配的行之和)

但是,如果我添加第二个不同的范围和另一个数组,则会得到错误的结果:

{=SUM(COUNTIFS(data[Group],group[group], data[Status],status[status]))}

返回“ 3”,但应返回“ 5”(=在状态列中具有1、2或3而在组列中具有a或b的行的总和)

我搜索并搜索了与使用sumproduct或在公式中定义数组有关的各种想法,而不是将整个公式分类为数组,但是我无法通过这些方法获得预期的结果。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

由于您的groupstatus条件是不同数量的值(group有2个值,而status有3个值),所以我不确定您可以在一个公式中做到这一点。我所知道的最好方法是使用一个帮助器列(如果需要,可以将其隐藏)。

将此 array 公式放在帮助器列中并复制数据的长度(必须通过 Ctrl + Shift 确认数组公式+ 输入):

=AND(OR(data[@Group]=group[group]),OR(data[@Status]=status[status]))

然后通过以下方式获取计数:=COUNTIF(helpercolumn,TRUE)

答案 1 :(得分:0)

您可以使用稍微不同的方法,即Power Query / Power Pivot。

命名表DataGroupStatus,然后创建以下查询,命名为Filtered Data

let
    tbData = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    tbGroup = Excel.CurrentWorkbook(){[Name="Group"]}[Content],
    tbStatus = Excel.CurrentWorkbook(){[Name="Status"]}[Content],
    #"Merged Group" = Table.NestedJoin(tbData,{"Group"},tbGroup,{"Group"},"tbGroup",JoinKind.Inner),
    #"Merged Status" = Table.NestedJoin(#"Merged Group",{"Status"},tbStatus,{"Status"},"Merged Status",JoinKind.Inner),
    #"Removed Columns" = Table.RemoveColumns(#"Merged Status",{"tbGroup", "Merged Status"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Status", type number}})
in
    #"Changed Type"

Load To仅作为连接,然后勾选Load to Data Model

现在创建DAX度量:

Status Sum:=SUM ( 'Filtered Data'[Status] )

然后,对于与GroupStatus表中指定的条件匹配的行,您可以在工作表上使用以下公式来获取状态总和值:

=CUBEVALUE("ThisWorkbookDataModel","[Measures].[Status Sum]")

只需刷新数据连接即可更新值。