Меню

Кросс таблицы что это такое

Кросс-таблица из табличной части или запроса

Рейтинг: 2903

Для примера возьмем некоторый документ с табличной частью Остатки на конец смены. Структура полей табличной части представлена на рисунке справа.

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

Основная сложность в сопоставлении колонок кросс-таблицы с соответствующими строками табличной части. Ниже представлены три процедуры, которые решают данную задачу за несколько строк кода. Вот пример их использования:

Небольшие пояснения:
1. Дополнительная информация для связи между исходной и конечной таблицами хранится в служебной таблице. Ее необходимо сохранять на протяжении всей работы с кросс-таблицей. Ее структура простая: Имя, Заголовок и Тип колонок, а также имена полей табличной части, по сочетанию которых будут создаваться колонки. В моем примере это одно поле “Стеллаж”, но их может быть и несколько, например “Номенклатура,Характеристика”. Для рассматриваемого примера структура служебной таблицы с данными представлена на рисунке

2. Прямое преобразование состоит из двух шагов:
— генерируем идентификаторы колонок для кросс-таблицы, заполняем заголовки и типы дополнительных полей. В моем примере в заголовок я пишу наименование стеллажа, тип на пересечении горизонтальных группировок — числовой.
— получаем кросс-таблицу

Отмечу также, что данные методы можно использовать не только для разворачивания табличной части, но и таблицы из запроса (например, в АРМе)

Процедуры тестировались на платформе 8.3 в режиме совместимости с 8.2. Однако скорее всего будут работать и на платформе 8.1

Прикладываю работающий пример для обычных и управляемых форм. Отмечу, что для обычных форм задача намеренно несколько усложнена — в кросс-таблицу добавлена служебная колонка с суммой по строке, а также выводятся все стеллажи, которые связаны со складом, в том числе и те, которых нет в табличной части.

Источник



JasperReports — Кросс-таблицы

Кросс-таблицы (кросс-табулирования) — это отчеты, содержащие таблицы, в которых данные располагаются по строкам и столбцам в табличной форме. Объект кросс-таблицы используется для вставки отчета кросс-таблицы в основной отчет. Кросс-таблицы могут использоваться с любым уровнем данных (номинальным, порядковым, интервальным или относительным) и обычно отображать обобщенные данные, содержащиеся в переменных отчета, в форме динамической таблицы. Переменные используются для отображения агрегированных данных, таких как суммы, числа, средние значения.

Crosstab Properties

Элемент JRXML используется для вставки кросс-таблицы в отчет.

атрибут

Ниже приведен список атрибутов элемента —

isRepeatColumnHeaders — указывает, следует ли перепечатывать заголовки столбцов после разрыва страницы. Значением по умолчанию является true .

isRepeatRowHeaders — указывает, следует ли перепечатывать заголовки строк после разрыва столбца кросс-таблицы. Значением по умолчанию является true .

columnBreakOffset — Когда происходит разрыв столбца, указывает количество вертикального пространства, измеренное в пикселях, перед тем, как последующий фрагмент кросс-таблицы будет размещен ниже предыдущего на той же странице. Значение по умолчанию 10.

runDirection — указывает, должны ли данные кросс- таблицы заполняться слева направо (LTR) или справа налево (RTL). Значением по умолчанию является LTR.

ignoreWidth — указывает, будет ли кросс- таблица расширяться за пределы начального предела ширины кросс- таблицы , и не будет ли разрывов столбцов. В противном случае он остановит рендеринг столбцов в пределах ширины кросс-таблицы и продолжит работу с оставшимися столбцами только после того, как все строки начнут рендеринг. Значением по умолчанию является false .

isRepeatColumnHeaders — указывает, следует ли перепечатывать заголовки столбцов после разрыва страницы. Значением по умолчанию является true .

isRepeatRowHeaders — указывает, следует ли перепечатывать заголовки строк после разрыва столбца кросс-таблицы. Значением по умолчанию является true .

columnBreakOffset — Когда происходит разрыв столбца, указывает количество вертикального пространства, измеренное в пикселях, перед тем, как последующий фрагмент кросс-таблицы будет размещен ниже предыдущего на той же странице. Значение по умолчанию 10.

runDirection — указывает, должны ли данные кросс- таблицы заполняться слева направо (LTR) или справа налево (RTL). Значением по умолчанию является LTR.

ignoreWidth — указывает, будет ли кросс- таблица расширяться за пределы начального предела ширины кросс- таблицы , и не будет ли разрывов столбцов. В противном случае он остановит рендеринг столбцов в пределах ширины кросс-таблицы и продолжит работу с оставшимися столбцами только после того, как все строки начнут рендеринг. Значением по умолчанию является false .

Подэлементы

Элемент имеет следующие подэлементы —

— этот элемент определяет положение, ширину и высоту кросс-таблицы внутри ее вложения. Атрибуты для этого элемента включают все стандартные атрибуты .

— этот элемент используется для доступа к переменным и параметрам отчета из кросс-таблицы. Атрибуты для этого элемента включают —

Читайте также:  Таблица зрения сколько метров должно быть

name — определяет имя параметра

класс — указывает класс параметров.

— Этот элемент используется для передачи переменной отчета или параметра, содержащего экземпляр java.util.Map , в качестве набора параметров для кросс-таблицы. Этот элемент не содержит атрибутов.

— этот элемент определяет набор данных, который будет использоваться для заполнения кросс-таблицы (подробное объяснение см. в следующем разделе). Атрибуты для этого элемента включают —

isDataPreSorted — указывает, предварительно ли отсортированы данные в наборе данных. Значением по умолчанию является false .

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

— этот элемент определяет группу, используемую для разделения данных на строки. Атрибуты для этого элемента включают —

name — определяет имя группы строк.

ширина — это определяет ширину группы строк.

headerPosition — определяет позицию содержимого заголовка (Top, Middle, Bottom, Stretch).

totalPosition — определяет позицию всего столбца (Start, End, None).

Этот элемент содержит следующие подэлементы —

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

name — определяет имя группы столбцов.

высота — определяет высоту заголовка группы столбцов.

headerPosition — определяет позицию содержимого заголовка ( Right, Left, Center, Stretch ).

totalPosition — определяет позицию всего столбца ( Start, End, None ).

Этот элемент содержит следующие подэлементы —

— этот элемент определяет вычисление, которое будет выполняться по строкам и столбцам. Атрибуты для этого элемента включают —

имя — это определяет имя меры.

класс — указывает класс меры.

вычисление — указывает, какое вычисление должно выполняться между значениями ячейки кросс-таблицы. Его значения могут быть любыми из следующих: Ничего, Счетчик, DistinctCount, Сумма, Среднее, Минимальное, Максимальное, Стандартное отклонение, Дисперсия и Первое . Значением по умолчанию является Ничто .

— этот элемент определяет способ размещения данных в ячейках без заголовка. Атрибуты для этого элемента включают —

columnTotalGroup — указывает группу, используемую для расчета общего количества столбцов.

высота — это определяет высоту ячейки.

rowTotalGroup — указывает группу, используемую для вычисления итоговой суммы строки.

ширина — это определяет ширину ячейки.

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

— этот элемент определяет положение, ширину и высоту кросс-таблицы внутри ее вложения. Атрибуты для этого элемента включают все стандартные атрибуты .

— этот элемент используется для доступа к переменным и параметрам отчета из кросс-таблицы. Атрибуты для этого элемента включают —

name — определяет имя параметра

класс — указывает класс параметров.

— Этот элемент используется для передачи переменной отчета или параметра, содержащего экземпляр java.util.Map , в качестве набора параметров для кросс-таблицы. Этот элемент не содержит атрибутов.

— этот элемент определяет набор данных, который будет использоваться для заполнения кросс-таблицы (подробное объяснение см. в следующем разделе). Атрибуты для этого элемента включают —

isDataPreSorted — указывает, предварительно ли отсортированы данные в наборе данных. Значением по умолчанию является false .

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

— этот элемент определяет группу, используемую для разделения данных на строки. Атрибуты для этого элемента включают —

name — определяет имя группы строк.

ширина — это определяет ширину группы строк.

headerPosition — определяет позицию содержимого заголовка (Top, Middle, Bottom, Stretch).

totalPosition — определяет позицию всего столбца (Start, End, None).

Этот элемент содержит следующие подэлементы —

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

name — определяет имя группы столбцов.

высота — определяет высоту заголовка группы столбцов.

headerPosition — определяет позицию содержимого заголовка ( Right, Left, Center, Stretch ).

Источник

Кросс-таблицы.

date image2015-07-03
views image870

facebook icon vkontakte icon twitter icon odnoklasniki icon

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

Товар Месяц Количество
Компьютеры Январь
Принтеры Январь
Сканеры Январь
Компьютеры Февраль
Принтеры Февраль
Сканеры Февраль

Таблица 29 Данные о продажах

Требуется представить эти данные в виде таблицы, по строкам которой идут наименования товаров, по столбцам — месяцы, а в ячейках содержатся объемы продаж. Это и будет кросс-таблицей:

Таблица 30 Кросс-таблица

Построение кросс-таблицы средствами реляционной алгебры невозможно, т.к. для этого требуется превратить данные в ячейках таблицы в наименования новых столбцов таблицы. Однако, стандартные СУБД типа ACCESS позволяют делать это.

Выводы

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

Теоретико-множественные операторы: объединение, пересечение, вычитание, декартово произведение.

Специальные реляционные операторы: выборка, проекция, соединение.

Для выполнения некоторых реляционных операторов требуется, чтобы отношения были совместимы по типу.

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

Имеется несколько типов запросов, которые нельзя выразить средствами реляционной алгебры. К ним относятся запросы, требующие дать в ответе список атрибутов, удовлетворяющих определенным условиям, построение транзитивного замыкания отношений, построение кросс-таблиц. Для получения ответов на подобные запросы приходится использовать процедурные расширения реляционных языков.

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

· Целостность внешних ключей.

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

Основное назначение баз данных состоит в том, чтобы хранить и предоставлять информацию о реальном мире. Для представления этой информации в базе данных используются привычные для программистов типы данных — строковые, численные, логические и т.п. Однако в реальном мире часто встречается ситуация, когда данные неизвестны или не полны. Например, место жительства или дата рождения человека могут быть неизвестны (база данных разыскиваемых преступников). Если вместо неизвестного адреса уместно было бы вводить пустую строку, то что вводить вместо неизвестной даты? Ответ — пустую дату — не вполне удовлетворителен, т.к. простейший запрос «выдать список людей в порядке возрастания дат рождения» даст заведомо неправильных ответ.

Для того чтобы обойти проблему неполных или неизвестных данных, в базах данных могут использоваться типы данных, пополненные так называемым null-значением. Null-значение — это, собственно, не значение, а некий маркер, показывающий, что значение неизвестно.

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

Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида — например, договориться, что строка «АДРЕС НЕИЗВЕСТЕН» и есть те данные, которые нужно вводить вместо неизвестного адреса. В любом случае на пользователя (или на разработчика) ложится ответственность на правильную трактовку таких данных. В частности, может потребоваться написание специального программного кода, который в нужных случаях «вылавливал» бы такие данные. Проблемы, возникающие при этом очевидны — не все данные становятся равноправны, требуется дополнительный программный код, «отслеживающий» эту неравноправность, в результате чего усложняется разработка и сопровождение приложений.

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

Подробное обсуждение проблем использования null-значений выходит за пределы данной работы. Можно только сказать о том, что этот вопрос в теории реляционных баз данных окончательно не решен. Основоположник реляционного подхода Кодд считал null-значения неотъемлемой частью реляционной модели. К.Дейт, один из крупнейших теоретиков реляционной модели выступает категорически против null-значений (подробное обсуждение проблем, возникающих при использовании null-значений приведено в книге [11].

Практически все реализации современных реляционных СУБД позволяют использовать null-значения, несмотря на их недостаточную теоретическую обоснованность. Такую ситуацию можно сравнить с ситуацией, сложившейся в начале века с теорией множеств. Почти сразу после создания Кантором теории множеств, в ней были обнаружены внутренние противоречия (антиномии). Были разработаны более строгие теории, позволяющие избежать этих противоречий (конструктивная теория множеств). Однако в реальной работе большинство математиков пользуется классической теорией множеств, т.к. более строгие теории более ограничены и негибки в применении именно в силу своей большей строгости.

Читайте также:  Таблица с кодами ошибок приора

Источник

Кросс-продажи

Метод используется в различных сегментах: розничная торговля, салоны сотовой связи, банковские продукты, интернет-магазины и сфера услуг. Основная задача — увеличивать прибыль компании и реализация продуктов, не пользующихся активным спросом потребителя, но составляют большую часть дохода.

Известные примеры кросс-продаж: предложение десерта к основному блюду, аксессуаров к технике, страховки к банковскому продукту.

Виды кросс-продаж

Условно перекрестную реализацию можно разделить на несколько видов:

  • по предлагаемому товару;
    1. добавочный ассортимент — расширение сегмента рынка за счет введения дополнительных ниш; чаще всего используется в оптовых торговлях, но применимо и для ритейла (заправка — еда и предметы для отдыха);
    2. сопутствующие продукты и услуги — предложение сопутствующих товаров, дополняющих основной продукт; широко представлен в розничных магазинах (смартфон — чехол, гарнитура; краски — кисти, лотки);
    3. разноплановый ассортимент — продажа услуг и продуктов из разных ниш для одного клиента; сложный метод, требующий высоких навыков менеджера и подробного исследования целевой аудитории (разработка сайта — копирайтер, таргетолог);
  • по методу сбыта;
    1. классический тип — запланированные пакетные продажи, при которых в матрицу cross селлинга собираются категории сочетаемых продуктов и в таком виде демонстрируются пользователю;
    2. через потребности — основан на активном общении менеджера с покупателем, в ходе чего выясняются потребности и проблемы, интерес и цель покупки, продвигая дополнительные услуги, которые могут заинтересовать человека;
    3. за счет доверия — применимы на основе длительного сотрудничества и выработке «кредита доверия», так новый товар в линейке хорошо продается вместе с уже опробованным ассортиментом;
    4. по минимальному чеку — ограничение на сумму минимальной покупки для совершения сделки или получения бонусов стимулирует добавление в корзину дополнительных продуктов;
    5. акции — скидки позволяют объединить не связанные между собой группы в единое предложение.

Зачем и как использовать кросс-продажи?

Использование техники дополнительного предложения приносит ряд преимуществ:

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

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

Главные свойства качественного кросс-селлинга:

  • релевантность — предложение должно удовлетворять потребности покупателя и сочетаться с основным продуктом;
  • конкретика — не следует добавлять слишком много рекомендаций, чтобы не превратить предложение в информационный шум.
  • своевременность — нужно учитывать настроение покупателя и его готовность тратить деньги. Оптимальное время — при добавлении товара в корзину или оформлении заказа.
  • стоимость — цена добавочных товаров не может быть выше основной покупки (например, вы продаете чехол к телефону, а не телефон к чехлу).

Кому подходят кросс-продажи?

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

Cross selling актуален для ритейла, оптовых закупок, сферы обслуживания и онлайн-магазинов, так как методика применима не только при личных продажах, но и телефонных звонках, e-mail и через приложения.

Как сделать кросс-продажи более эффективными?

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

  • Сделайте анализ аудитории. Выделите востребованные категории, используйте сервисы отслеживания поведения клиента, составьте портрет пользователя.
  • Изучите покупателя. Выявите проблемы, которые решает для него ваш продукт. Это дает возможность выбрать сопутствующий товар, усиливающий полезное действие.
  • Стимулируйте быстрые решения. Сделайте дополнительную покупку удобной и быстрой, не заставляя оформлять кучу документов или долго скроллить сайт.
  • Выстройте грамотный мерчендайзинг. Расположите связанные продукты рядом, чередуя их на витрине или в интернет-магазине.
  • Используйте экспертное мнение и отзывы. Покажите выбор других покупателей или советы производителя, отметьте такие товары специальными ярлыками.
  • Добавьте выгоду. Пользователь охотнее совершит дополнительную покупку, если получит за это скидку, бесплатную доставку или другой бонус.
  • Не переусердствуйте. Исходите из потребностей пользователя, а не желания продать побольше, чтобы не потерять доверие.
  • Составьте матрицу. Сформируйте таблицы, в которых расположены варианты товаров и указаны причины их связи. Составьте популярные, приоритетные, сезонные, тематические, импульсивные подборки.

Источник

Adblock
detector