【问题标题】:Summarizing Count of Value总结价值计数
【发布时间】:2018-10-31 18:45:39
【问题描述】:

我有一个电话数据集,其中包含一个姓名列。有重复的名字,因为人们可以多次调用。对列进行计数会给我们:

  • 人员 A - 3 次通话
  • B 人 - 5 次通话
  • C 人 - 2 次通话
  • 人员 D - 3 次通话

我真正想要的是调用次数的细分,我将使用它作为图表轴:

  • 2 次通话 - 1 次
  • 3 次通话 - 2 次​​li>
  • 4 次通话 - 0
  • 5 次通话 - 1

感谢阅读!

【问题讨论】:

    标签: sql powerbi dax


    【解决方案1】:

    如果你想要一个 SQL 解决方案,这基本上是聚合:

    select numcalls, count(*)
    from t
    group by numcalls
    order by numcalls;
    

    这不会填充 0 值。为此,您可以使用表构造函数和left join:

    select v.numcalls, count(t.numcalls);
    from (values (2), (3), (4), (5)) v(numcalls) left join
         t
         on v.numcalls = t.numcalls
    group by v.numcalls
    order by v.numcalls;
    

    【讨论】:

      【解决方案2】:

      如果您不需要 0 的调用次数值,您可以在 SQL 中使用子选择

      select numbercalls, count(*)
      from (
        select person, count(*) as numbercalls
        from t
        group by person
      ) group by numbercalls
      order by numbercalls;
      

      【讨论】:

        【解决方案3】:

        您可以在 DAX 中按照以下方式执行此操作:

        CalculatedTable =
        VAR Summary = SUMMARIZE(Table1, Table1[Person], "Cnt", COUNT(Table1[Call]))
        VAR NumCalls = SELECTCOLUMNS(GENERATESERIES(2,5), "Calls", [Value])
        RETURN ADDCOLUMNS(NumCalls, "People", SUMX(Summary, IF([Cnt] = [Calls], 1, 0)))
        

        首先,您汇总数据以计算每个人的数量。

        然后您创建一个表NumCalls,其中包含一个列Calls,其值从25

        最后,您在该表中添加一列,计算Summary 表中Cnt 与当前表中Calls 的数量相匹配的人数。

        【讨论】:

          【解决方案4】:

          你可以试试这个计数,检查计数是否为空,然后 GROUP BY 和 ORDER BY :

          SELECT numcalls, ISNULL(count(*),0)
          FROM t
          GROUP BY numcalls
          ORDER BY numcalls;
          

          【讨论】:

          • count(*)上是否需要ISNULL
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多