Сумма по уникальному идентификатору в Spotfire

#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. Я также добавил больше деталей к сообщению, которое, надеюсь, поможет лучше объяснить, какой должна быть моя конечная цель.