#bar-chart #spotfire
#столбчатая диаграмма #spotfire
Вопрос:
Я пытаюсь создать столбчатую диаграмму, которая суммирует значения в поле, но только для каждого уникального идентификатора. Например, для моих данных:
Condition CT_ID Enrollment Company
I 5127 24 H
J 5127 24 H
P 5127 24 H
I 5127 24 O
J 5127 24 O
P 5127 24 O
L 27668 387 C
R 27668 387 C
D 38190 650 D
Q 38190 650 D
F 38785 30 A
E 39682 30 B
M 41818 17 I
O 44093 188 G
A 54850 18 K
G 59183 F
C 59891 266 J
G 61142 48 F
H 61425 28 L
K 61449 N
A 61793 12 E
N 61793 12 E
B 61910 120 M
B 61917 120 M
B 61961 130 M
Или, поскольку я действительно хочу в конечном итоге суммировать эти данные по условию, позвольте мне просто показать приведенные выше данные, к которым прибегает Condition, вместо [CT_ID].
Condition CT_ID Enrollment Company
A 54850 18 K
A 61793 12 E
B 61910 120 M
B 61917 120 M
B 61961 130 M
C 59891 266 J
D 38190 650 D
E 39682 30 B
F 38785 30 A
G 59183 F
G 61142 48 F
H 61425 28 L
I 5127 24 H
I 5127 24 O
J 5127 24 H
J 5127 24 O
K 61449 N
L 27668 387 C
M 41818 17 I
N 61793 12 E
O 44093 188 G
P 5127 24 H
P 5127 24 O
Q 38190 650 D
R 27668 387 C
Строки дублируются разными значениями в Condition и Company. CT_ID — это идентификатор записи.
Я хочу подвести итог по своему столбцу регистрации, но я буду пересчитывать. Итак, я подумал, что мог бы создать пользовательское выражение, например :
Sum(Avg([Enrollment]) OVER ([CT_ID]))
Но это почему-то недопустимое выражение. Где я ошибаюсь?
Для моей столбчатой диаграммы я хотел бы иметь условие в качестве оси категорий и регистрацию в качестве оси значений. В таблице ниже показано, как следует вычислять значение регистрации. Сосредоточьтесь на условиях P, I и J.
Condition Enrollment
A 30
B 370
C 266
D 650
E 30
F 30
G 48
H 28
I 24
J 24
K
L 387
M 17
N 12
O 188
P 24
Q 650
R 387
Мое текущее решение использует функцию ранжирования и помещает информацию о регистрации только в первую строку для каждого уникального CT_ID, но это просто неправильно, когда я начинаю фильтровать данные. Например, представьте, что в моем наборе данных выше у меня было только значение регистрации для первой строки CT_ID 5127. Если я отфильтрую условие «I» (то, что в первой строке), теперь значение регистрации равно нулю!
Мы будем признательны за любую помощь, которую вы можете предоставить! Я не эксперт по выражениям OVER, поэтому, надеюсь, есть простое решение!
Комментарии:
1. Вложенные агрегации не разрешены в версиях до 7.0. Используете ли вы что-то другое, кроме 7.0 или 7.5?
Ответ №1:
Это слишком долго для комментариев…
Можете ли вы предоставить некоторые ожидаемые результаты? Похоже, что каждый из них CT_ID
может иметь только одно значение, поэтому SUM
из них отчетливо будет только одно из значений… верно? Если нет, то что определяет дубликат?
Вот как вы можете выполнить то, что вы пытались в своем коде выше — но из ваших тестовых данных вам не просто дадут значение, Enrollment
поскольку каждое из них CT_ID
, по-видимому, имеет только одно значение (дублируется).
Sum([Enrollment]) over ([CT_ID]) / Count() OVER ([CT_ID])
Вы также могли бы просто использовать First()
First([Enrollment]) OVER ([CT_ID])
Редактировать
Поскольку у вас есть некоторые дубликаты, а некоторые нет … давайте просто разделим дубликаты на среднее значение количества дубликатов. Вставьте этот вычисляемый столбец:
Max([Enrollment]) over (Intersect([CT_ID],[Condition])) / Count([Enrollment]) over (Intersect([CT_ID],[Condition]))
Затем используйте этот столбец вместо Enrollment
в любом выражении, которое вы хотите игнорировать дубликаты, где дубликат имеет то же Condition, CT_ID, and Enrollment
значение.
Например… строки для Condition = P and CT_ID = 5127
будут иметь 12
вместо 24
.
Комментарии:
1. Поэтому я думаю, что они оба будут очень хорошо работать в перекрестной таблице, но ни один из них не работает для моей столбчатой диаграммы. Даже когда я добавляю агрегацию (например
Sum(First([Enrollment]) OVER ([CT_ID]))
), она все равно говорит, что она недействительна.2. Я также добавил больше деталей к сообщению, которое, надеюсь, поможет лучше объяснить, какой должна быть моя конечная цель.