【发布时间】:2018-10-31 18:45:39
【问题描述】:
我有一个电话数据集,其中包含一个姓名列。有重复的名字,因为人们可以多次调用。对列进行计数会给我们:
- 人员 A - 3 次通话
- B 人 - 5 次通话
- C 人 - 2 次通话
- 人员 D - 3 次通话
我真正想要的是调用次数的细分,我将使用它作为图表轴:
- 2 次通话 - 1 次
- 3 次通话 - 2 次li>
- 4 次通话 - 0
- 5 次通话 - 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;
【讨论】:
如果您不需要 0 的调用次数值,您可以在 SQL 中使用子选择
select numbercalls, count(*)
from (
select person, count(*) as numbercalls
from t
group by person
) group by numbercalls
order by numbercalls;
【讨论】:
您可以在 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,其值从2 到5。
最后,您在该表中添加一列,计算Summary 表中Cnt 与当前表中Calls 的数量相匹配的人数。
【讨论】:
你可以试试这个计数,检查计数是否为空,然后 GROUP BY 和 ORDER BY :
SELECT numcalls, ISNULL(count(*),0)
FROM t
GROUP BY numcalls
ORDER BY numcalls;
【讨论】: