Сегодня расскажу, как простое использование функции RowNo() с выражением IF() поможет вам удобно считать итоги в сводной таблице.

Анархия EXCEL

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

Часто в разработке можно столкнуться с просьбами: «Вот наш Excel, вот наши таблицы, переведите все в QlikView/ Qlik Sense, а вот визуализаций никаких нам не надо, наш формат – хардкорные сводные таблицы»! Ок, мы не станем спорить с тем, кто так просит, ведь есть случаи, где без таблиц невозможно обойтись, например, финансовому директору или актуариям в страховой компании.

Рано или поздно к вам обратятся за помощью в добавлении строки среднего по итогам. Это не проблема, если вы работаете с прямой таблицей, но в сводных таблицах все не так просто. Давайте посмотрим настройки диаграмм:

Chart properties dialogue for a straight table
Прямая таблица. Опции для итогов, смотрите.
Chart properties dialogue for a pivot table
Сводная таблица. Функция итогов неактивна.

В большинстве случаев рекомендуют использовать функцию aggr(), но такой способ явно не самый простой. Давайте попробуем решить задачу иначе.

Сводные таблицы: маленькие хитрости

Давайте добавим в нашу сводную таблицу выражение RowNo(), у нас получится что-то такое:

RowNo() in the last column. Note that RowNo() returns 0 in the Total row.
RowNo() в последней колонке. Обратите внимание: в итогах RowNo() получается «0».

А давайте поработаем с If():

1 If(RowNo()=0,’Yes!!!’,’Nope’)

RowNo() gives us the ability to manipulate what happens in each cell.
RowNo() позволяет нам управлять каждой ячейкой столбца. Давайте поправим наше условие If(), добавив среднее по годам:

1 If(RowNo()=0
2  ,RangeAvg(Top(count(OrderID),1,(NoOfRows())))
3  ,Count(OrderID)
4 )

A pivot table showing an average instead of a total

Да, так просто – таблица показывает среднее!

Вы можете спросить, почему мы используем не простое среднее, а RangeAvg(). Такой способ экономит память на вычислениях, т.к. он является внутренней функцией. Также мы заменили итоги на среднее в ячейке. Это мы изменили через представление (настройки объекта, ярлык для итогов):

Pivot Table - Presentation Settings

Итоги

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

Что вам для этого понадобиться: ColumnNo() и функция First() вместо RownNo() и Top().

Коллеги, на этом сегодня все! Спасибо за внимание.