Spotfire DenseRank по категориям, я использую OVER? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь ранжировать некоторые данные в пламени, и у меня возникли проблемы с написанием формулы для их вычисления.Вот разбивка того, с чем я работаю.

Группа: тестовая группа

SNP: на какой SNP я смотрю

Подсчет: сколько я получу законкретный SNP

То, что я хотел бы сделать, это оценить среднее число подсчетов, которые присутствуют для каждого SNP в группе.Таким образом, я мог видеть внутри группы, какой SNP занимает # 1, # 2 и т. Д.

Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2018

TL; DR Отказ от ответственности: Вы можете сделать это, хотя, если вы часто меняете кросс-стол, это может стать гигантской проблемой.Удостоверьтесь, что вы перепроверили логику после любой модификации. Действуйте с осторожностью.

Основа пользовательского выражения, которое вам нужно, выглядит следующим образом:

Max(DenseRank(Count() OVER (Intersect([Group],[SNP])),"desc",[Group]))

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

Если все, что у вас есть, это группа и SNP, вложенные слева, то все готово и готово к работе.

Первый выпуск , когда вы хотите отфильтровать его, он дает вам плотный ранг только тех, кто в отфильтрованном наборе.В некоторых случаях это хорошо, и то, что вы ищете;в других это не так.Если вы хотите, чтобы он сохранял свое значение быстро, независимо от фильтрации, вы можете использовать ту же логику, но бросить ее в столбец «Рассчитано», а не в пользовательское выражение.Затем в вашей агрегации CrossTable получите максимальное значение для вычисляемого столбца.

Расчетный столбец:

DenseRank(Count() OVER (Intersect([Group],[SNP])),"desc",[Group])

Второй выпуск: Вы хотите повернуть что-то другоечем группа и SNP.Может быть, например, по дате?Если вы добавите дату вверху, она будет показывать одни и те же цифры для каждого месяца - общие цифры.Это не особенно полезно.

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

Max(DenseRank(Count() OVER (Intersect([${Axis.Columns.ShortDisplayName}],[Group],[SNP])),"desc",[Group],[${Axis.Columns.ShortDisplayName}]))

Это автоматически подтянет столбец сверху и покажет вам рейтинг для каждой отдельной даты процесса.

Однако, если вы начнете вкладывать, использовать иерархии, переименовывать столбцы или иметь несколько агрегаций и выбрасывать (имена столбцов) сверху, вам придется много платить своему пользовательскому выражению.Вам нужно будет выполнить некоторую форму замены строк вокруг Axis.Column или использовать выражение вместо коротких имен, избавиться от гнезд и т. Д.

Любой уровень сложности потребует такого рода анализа,поэтому, если у ваших конечных пользователей есть доступ к изменению сводной таблицы ... честно, я бы, вероятно, не дал им этот столбец.

Третий выпуск: Я не знаю, если этоэто точно проблема, но вы сказали "Среднее число" - Среднее за день?В месяц?

При усреднении вам нужно будет решить, например, является ли месяц общим числом дней в месяце или количеством дней, в течение которых у конкретного плательщика были данные.Однако вы решите объединить это, убедитесь, что вы делаете это на правильном уровне.

Для протокола, мне понравилась предпосылка этого вопроса;я подумал, что это было бы полезно раньше, но никогда не пытался реализовать это, поскольку сортировка столбца или ограничение таблицы только для отображения первых 10 значений намного проще

...