Суммирующий счет ценностей - PullRequest
0 голосов
/ 31 октября 2018

У меня есть набор телефонных звонков, который содержит столбец имени. Есть повторяющиеся имена, так как люди могут звонить несколько раз. Подсчет столбца дает нам:

  • Лицо А - 3 звонка
  • Человек B - 5 звонков
  • Персона C - 2 звонка
  • Лицо D - 3 звонка

Что мне действительно нужно, так это разбивка # вызовов, которую я буду использовать в качестве оси графика:

  • 2 звонка - 1
  • 3 звонка - 2
  • 4 звонка - 0
  • 5 звонков - 1

Спасибо за чтение!

Ответы [ 4 ]

0 голосов
/ 02 ноября 2018

Вы можете сделать это в 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.

Наконец, вы добавляете столбец к этой таблице, который подсчитывает количество людей, чей Cnt в таблице Summary соответствует числу Calls в текущей таблице.

0 голосов
/ 31 октября 2018

Если вам не нужно 0 значений количества вызовов, вы можете работать с подвыбором в SQL

select numbercalls, count(*)
from (
  select person, count(*) as numbercalls
  from t
  group by person
) group by numbercalls
order by numbercalls;
0 голосов
/ 01 ноября 2018

Вы можете попробовать это для подсчета, проверить, является ли счет нулем, а затем GROUP BY и ORDER BY:

SELECT numcalls, ISNULL(count(*),0)
FROM t
GROUP BY numcalls
ORDER BY numcalls;
0 голосов
/ 31 октября 2018

Если вы хотите решение 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;
...