Точечный огонь пересекает первые ‘n’ периодов

#function #spotfire

#функция #точечный огонь

Вопрос:

Есть ли способ использовать функцию Over и Intersect, чтобы получить средние продажи за первые 3 периода (не всегда последовательные месяцы, иногда месяц пропускается) для каждого сотрудника?

Например:

  • Значение EmpID 1 равно 71.67 ((80 60 75)/3) несмотря на пропуск «3/1/2007»
  • EmpID 3 равен 250 ((350 250 150)/3).
  • Я не уверен, как будет работать EmpID 2, потому что есть только две точки данных.

Я использовал обходной путь по вычисляемому столбцу, используя DenseRank по дате, «asc», EmpID, а затем использовал другой вычисляемый логический столбец, где имя столбца DenseRank <= 3, затем использовал функции над столбцом Boolean = TRUE, но я хочу понять, как это правильно сделать.

Существуют функции с последним ‘n’ периодом, но я не видел ничего похожего на функцию с первым ‘n’ периодом.

 EmpID    Date   Sales
1   1/1/2007    80
1   2/1/2007    60
1   4/1/2007    75
1   5/1/2007    30
1   9/1/2007    100
2   2/1/2007    200
2   3/1/2007    100
3   12/1/2006   350
3   1/1/2007    250
3   3/1/2007    150
3   4/1/2007    275
3   8/1/2007    375
3   9/1/2007    475
3   10/1/2007   300
3   12/1/2007   200
 

введите описание изображения здесь

Комментарии:

1. Хотелось бы, чтобы у них также была функция FirsPeriods…

Ответ №1:

Я полагаю, решение зависит от того, где вы хотите, чтобы эти данные были представлены, но вот один пример

 If((Rank([Date],"asc",[EmpID])<=3) and (Max(Rank([Date],"asc",[EmpID])) OVER ([EmpID])>=3),Avg([Sales]) over ([EmpID]))
 

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

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

Rank([Date],"asc",[EmpID])

Объяснение

Rank([Date],"asc",[EmpID])

Эта часть функции в основном применяет номер строки (помеченный как RN в приведенных ниже результатах) к каждой EmpID группировке.

Rank([Date],"asc",[EmpID])<=3

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

(Max(Rank([Date],"asc",[EmpID])) OVER ([EmpID])>=3)

Это то, что мы в основном игнорируем EmpID = 2 , или любой EmpID , у кого нет хотя бы 3 строк. Удаление этого даст вам среднее значение (динамически) для каждого EmpID из них на основе их первых 1, 2 или 3 месяцев соответственно.

Avg([Sales]) over ([EmpID])

Теперь, когда наши данные ограничены нужными нам строками, просто возьмите среднее значение для каждой EmpID из них.

введите описание изображения здесь

Ответ №2:

@Chris — Вот решение, которое я придумал

Шаг 1: Вставил вычисляемый столбец ‘rank’ с приведенным ниже выражением

 DenseRank([Date],"asc",[EmpID])
 

Шаг 2. Создал визуализацию перекрестной таблицы из таблицы данных и ограниченных данных с помощью приведенного ниже выражения

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Оба решения @scsimon и ksp585 дают желаемый конечный результат. Однако, чтобы полностью понять, нет ли способа «что-то сделать» В ТЕЧЕНИЕ «первых периодов»n»»?

2. К сожалению, нет, @Chris, ты можешь идти только в обратном направлении. Вы могли бы использовать мой метод и заменить 3 элементом управления свойством, который вы можете динамически устанавливать на то, что хотите, и выполнять то же самое, что и первые n

3. @Chris — В моем решении вы могли бы сделать то же самое (динамически контролировать количество рассматриваемых месяцев) в «Ограничить данные с помощью выражения» и заменить 3 на свойство document