【问题标题】:Counting rows in a table based on multiple array criterias根据多个数组条件计算表中的行数
【发布时间】:2018-07-24 12:52:59
【问题描述】:

我正在尝试根据该表不同列中的多个条件来计算表中的行数。但是,标准并不直接在公式中;它们是我想引用的数组(而不是直接在公式中列出)。

范围表示例:

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 或在公式中定义数组相关的各种想法,而不是将整个公式分类为数组,但我无法通过这些方式获得预期的结果。

感谢您的帮助。

【问题讨论】:

    标签: arrays excel


    【解决方案1】:

    因为您的 groupstatus 标准是不同数量的值(group 有 2 个值,status 有 3 个值),我不确定您是否可以在单个公式中执行此操作。我所知道的最好的方法是使用辅助列(如果愿意,可以隐藏)。

    把这个数组公式放在辅助列中,并把数据的长度复制下来(数组公式必须用Ctrl+Shift确认+输入):

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

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

    【讨论】:

    • 感谢tigeravatar。我现在很喜欢,有机会我会尽快尝试。
    • 工作就像一个魅力,我理解你用和/或帮助列解决挑战的方式。再次感谢您!
    【解决方案2】:

    您可以使用稍微不同的方法,使用 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]")
    

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

    【讨论】:

    • 最后我想搬到 PBi 所以谢谢你的建议。我现在很喜欢,但会尽快检查您的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多