我试图根据该表不同列中的多个条件来对表中的行进行计数。但是,标准并不直接包含在公式中。它们是我要引用的数组(而不是直接在公式中列出)。
范围表示例:
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或在公式中定义数组有关的各种想法,而不是将整个公式分类为数组,但是我无法通过这些方法获得预期的结果。
谢谢您的帮助。
答案 0 :(得分:0)
由于您的group
和status
条件是不同数量的值(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。
命名表Data
,Group
和Status
,然后创建以下查询,命名为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] )
然后,对于与Group
和Status
表中指定的条件匹配的行,您可以在工作表上使用以下公式来获取状态总和值:
=CUBEVALUE("ThisWorkbookDataModel","[Measures].[Status Sum]")
只需刷新数据连接即可更新值。