Табличные данные

Расширение предназначено для вывода табличных данных в различном представлении с сортировками, выборками, расчётом производных показателей и получения спектра статистических данных по колонкам. Несколько примеров использования расширения с массивными объёмами данных можно найти по ссылке: Табличные данные.
Запуск расширения из статьи осуществляется функцией txk(ud), где ud - стандартный указатель данных (см. Указатели данных )

Описание табличных данных

Указатель данных в функции txk() должен ссылать на массив данных расширения, включающий сами данные и их описатели. Пример статьи, включающей такого рода массив данных и обращение к нему, можно посмотреть по этой ссылке
В указанном примере всё содержание статьи состоит из вызова функции txk("*~s1"). Её данными является указатель на секцию .s1, в которой размещается массив данных этого типа расширения. Помимо стандартных для такого рода массивов системных разделов ($.x, $.n, $.a, $.d - см. Массивы данных расширений ), в нём содержится несколько специфических для данного расширения описателей данных.
Раздел $.r определяет последовательность символов, разделяющих колонки исходных данных. В примере по приведённой ссылке - это ; (точка с запятой).
Раздел $.k определяет задаваемые через пробелы идентификаторы колонок таблицы исходных данных в той последовательности, в которой задаются колонки таблицы в каждой её строке. В примере по ссылке - это 12 колонок: code country company gics industry personnel value sales profit ebitda nopat assets. К этим идентификаторам в последующем привязываются описатели свойств колонок.
Раздел $.h определяет свойства колонок таблицы. Они задаются в формате
<идентификатор_колонки>.<свойство> <значение_свойства>
Каждая колонка может иметь следующие свойства:
n - название;
p - порядок сортировки;
s - признак необходимости вычисления статистических показателей по данным колонки;
g - признак группирования для выборок.
Свойство n задаётся произвольной строкой текста. В табличном представлении данных этот текст будет выводиться заголовком соответствующей колонки. В ленточном представлении данных (ссылка Лента в отчёте) - этот текст будет повторяться в каждой выводимой строке как метка (описатель) соответствующего значения. Если свойство n для какой-либо колонки не задано - в качестве названия будет использован идентификатор колонки. При выводе отчёта названия колонок выводятся как ссылки, переход по которым вызывает сортировку отчёте в соответствии со значениями в данной колонке.
Свойство p определяет порядок сортировки данных по значениям в данной колонке. По умолчанию значением свойства является ноль, что определяет сортировку по убыванию. Если задаётся ненулевое значение, то сортировка будет производиться по убыванию.
Свойство s определяет признак необходимости вычисления статистических показателей по данным колонки. По умолчанию признак устанавливается равным нулю (статистики не вычисляются). При задании значения 1 в подвале таблицы по всем строкам выборки, содержащим в колонке непустые значения, выводятся следующие показатели:
sum - сумма;
kz - количество непустых значений;
sa - среднее арифметическое, выведенное по непустым значениям;
me - медиана;
so - среднее квадратическое отклонение;
kv - коэффициент вариации;
ka - коэффициент асимметрии;
ke - коэффициент эксцесса.
Если таблица отсортирована по значениям какой-либо колонки, по которой вычисляются статистические показатели, то помимо перечисленных данных выводится также строка (kk), содержащая коэффициенты корреляции колонки, по которой произведена сортировка, с другими колонками, для которых определён признак подсчёта статистик.
Если свойству s присвоено значение 2, то выводятся те же показатели, за исключением общей суммы.
Свойство g определяет признак возможности установки фильтра по значениям соответствующей колонки. Если свойство не установлено, то возможность установки фильтра не предусмотрена. При установленном значении в заголочной части таблицы выводится раскрывающийся список со всеми уникальными значениями, содержащимися в данной колонке. При выборе конкретного значения после нажатия на кнопку "Выбрать" таблица будет перевыведена и ней будут присутствовать только те строки, у которых в данной колонке имеется выбранное значение. Одновременно можно задать признаки отбора для нескольких колонок. Статистические данные в подвале таблицы будут вычисляться по данных запрошенной выборки. Для сброса выборки по колонке в раскрывающемся списке следует выбрать значение [...]. Обычно свойство выборки имеет смысл задавать для колонок, в которых заведомо имеются повторяющиеся значения.
Перечисленные свойства могут задаваться не только для реально существующих в массиве колонок данных, определяемых разделом $.k, но и для виртуальных колонок, в которых предполагается выводить расчётные показатели, вычисленные на основе показателей, содержащихся в каждой строке исходных данных. Для определения правил формирования производных показателей используется раздел $.m.
Раздел $.m определяет программный модуль, написанный на встроенном языке системы, результатом выполнения которого является массив, содержащий значения всех переменных, выводимых в строке. Если такой модуль задан, то основная программа перед выводом строки вызывает этот модуль, передавая ему массив исходных данных, а также массив описателей свойств колонок. В результате обработки этих данных модулем в основную программу возвращается массив, ключами которого являются идентификаторы колонок, а значениями - вычисленные значения всех ячеек строки, для которых установлены свойства.
Например, для таблиц, отображаемых статьями:
на данном сайте заданы следующие общие описания данных, содержащиеся в файле td/fg2000.txt и импортируемые указанные статьи:
$.r ;
$.k rank company country sales profits assets value 
/$.h
rank.n Ранг
rank.s 0
rank.o 0

company.n Компания
company.s 0

country.n Страна
country.g 1
country.s 0

sales.n Выручка
sales.p 1

profits.n Прибыль
profits.p 1

assets.n Активы
assets.p 1

value.n Стоимость
value.p 1

v2p.n Стоимость/Прибыль
v2p.p 1
v2p.s 2

p2s.n Прибыль/Выручка
p2s.p 1
p2s.s 2

p2a.n Прибыль/Активы
p2a.p 1
p2a.s 2
//
/$.m
# x d
s=x('sales')
p=x('profits')
a=x('assets')
v=x('value')
if p#0
   x('v2p')=v/p
end   
if s#0
   x('p2s')=p/s
end   
if a#0
   x('p2a')=p/a
end   
vz(x)
//
В частности, здесь указано, что разделителем колонок исходных данных является точка с запятой ($.r ;), идентификаторами колонок в массиве исходных данных являются rank, company, country, sales, profits, assets, value ($.k rank company country sales profits assets value), но свойства заданы для большего числа колонок. Помимо колонок, отводимых для размещения исходных данных, определены свойства также и для колонок с идентификаторами v2p, p2s, p2a. Правила вычисления их значений задаёт раздел $.m, содержащий модуль следующего содержания:
# x d
s=x('sales')
p=x('profits')
a=x('assets')
v=x('value')
if p#0
   x('v2p')=v/p
end
if s#0
   x('p2s')=p/s
end
if a#0
   x('p2a')=p/a
end
vz(x)
Модуль вызывается при выводе каждой детальной строки таблицы. У него два формальных параметра - x и d. В первый (x) заносятся исходные данные очередной строки таблицы, определяемые ключами rank company country sales profits assets value. Второй массив (d) получает матрицу описателей свойств колонок. Её строки имеют ключи rank, company, country, sales, profits, assets, value, v2p, p2s, p2a, а столбцами - значения свойств (n, p, s, g). В рассматриваемом примере эти данные модулем не используются. Однако в более сложных случаях вполне могут быть задействованы.
Сначала модуль выбирает нужные ему исходные данные и заносит их в свои вспомогательные переменные:
s=x('sales')
p=x('profits')
a=x('assets')
v=x('value')
Далее, на их основе формируются значения расчётных показателей, которые с нужными ключами заносятся в результатный массив.
if p#0
   x('v2p')=v/p
end
if s#0
   x('p2s')=p/s
end
if a#0
   x('p2a')=p/a
end
В ряде случаев значения не будут вычислены и часть переменных результатного массива не будут иметь значений (NULL). При их выводе они станут пустыми ячейками в табличной форме отчёта и отсутствующими значеними в ленточной.
Результатный массив возвращается основной программе функцией vz() - вернуть значение.
Подробнее о создании и функционировании модулей на встроенном языке см. статью: Вычислительная среда.
Сами исходные данные задаются в произвольно именуемом несистемном разделе массива данных расширения (см. Массивы данных расширений ) в формате, очень похожем на csv. Однако следует иметь в виду, что данный формат отличается от формата массивов структурированных записей тем, что в последнем имена и разделители колонок задаются прямо в потоке данных, а здесь для этого используются отдельные описатели $.r и $.k.
Оцените публикацию по предложенной шкале
-5  -4  -3  -2  -1  0  +1  +2  +3  +4  +5

Статистика Код