BI Consult
  • Перейти на КликСенс
  • Перейти на КликВью
  • Перейти на Tableau
  • Перейти на Power BI
  • российские bi dwh dl
  • Главная
  • Продукты Business-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • Энергетика
    • Фрод-менеджмент
    • E-Commerce
    • Фармацевтика
    • Построение хранилища данных
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • Process Mining
    • Сквозная аналитика
  • Платформы
    • Qlik Sense
    • QlikView
    • Tableau
    • Microsoft Power BI
    • Геоаналитика Qlik GeoAnalytics
    • Qlik NPrinting - рассылка отчетности QlikView/Qlik Sense
    • KliqPlanning Suite - бюджетирование в QlikView
    • ATK BiView-1C Коннектор (для Qlik/Tableau/PowerBI)
    • QlikView/Qlik Sense SAP Коннектор
    • QlikView R-Коннектор
    • Qlik Web Connectors - коннектор Google, Facebook, Twitter
    • Vizlib Qlik Sense extentions (библиотека экстеншнов)
    • Библиотека extention для Qlik
    • Qlik Alerting
    • Qlik Data Integration Platform - создание Data Lake
    • Qlik Data Catalog решение для Data Governance
    • ATK BiView документация
  • Услуги
    • Консалтинг
    • Пилотный проект
    • План обучения и сертификации
    • Подготовка специалистов по Qlik
    • Бесплатное обучение Qlik
    • Сертификация Qlik
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • Аудит приложений Qlik и Tableau
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс по Qlik Sense
    • Учебный курс по Tableau
    • Учебный курс по Microsoft Power BI
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс для бизнес-аналитиков
    • Учебный курс по NPrinting
    • Учебный курс по BigQuery
    • Учебный курс по Azure Databricks
    • Учебный курс по DWH
    • Учебный курс по Data Governance
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс администратора Qlik Sense
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

QlikView / Qlik Sense

  • Qlik Sense
    • Возможности Qlik Sense
    • Qlik Sense Enterprise
    • Qlik Sense Desktop
    • Qlik Sense Saas облачная инфраструктура для компаний
    • Источники данных и хранение данных
    • Безопасность и разграничение прав доступа
    • Масштабируемость
    • Политика лицензирования Qlik Sense
    • Qlik Sense November 2021: новые возможности
    • Географические карты в Qlik Sense
    • Qlik Sense Cloud / Qlik Sense в облаке
    • Учебное пособие по Qlik Sense
  • QlikView
    • Архитектура
    • Отличия QlikView от традиционных BI-систем
    • Политика лицензирования QlikView
    • Системные требования и сайзинг
    • Отличие от OLAP-систем
    • QlikView on Mobile
    • Qlik и Big Data
    • Демонстрационные примеры
    • QlikView в "облаке" (Amazon) / QlikView in the cloud
    • Интеграция QlikView с Microsoft SharePoint
    • Учебное пособие по QlikView
    • Что такое QlikView Publisher
    • QlikView Extranet Server и дистрибуция отчетности внешним пользователям
  • Qlik Data Catalog
  • Qlik Alerting
  • Qlik Data Integration Platform
  • Add-ons для QlikView
    • Vizlib Qlik Sense extentions (библиотека экстеншнов)
    • QlikView/Qlik Sense ATK BiView-1C Коннектор
    • Документация ATK BiView
    • Qlik NPrinting
    • Геоаналитика Qlik GeoAnalytics
    • GeoQlik
    • KliqPlanning Suite
    • QlikView/Qlik Sense SAP Коннектор
    • QlikView R-Коннектор
    • Qlik Web Connectors
    • QlikView Cognos TM1 Коннектор
    • Визуализация графов в Qlik Sense с помощью Ogma / Linkurious
  • Учебный курс по Qlik Sense

Tableau

  • Tableau
    • Tableau Desktop
    • Tableau Server
    • Tableau Prep
    • Технологии
    • Источники данных Tableau
    • Безопасность в Tableau
    • Политика лицензирования
    • Tableau 2021: новые возможности
    • Сравнение продуктов Tableau (Desktop, Server, Online, Public)
    • Демонстрационные примеры
    • Учебный портал Tableau
    • Коробочное решение "Мониторинг Tableau Server"
    • Чем отличаются Tableau Reader и Viewer?
  • Учебный курс по Tableau

Другое

  • Microsoft Power BI
    • Power BI Desktop
    • Power BI Report Server
    • Отраслевые решения Microsoft Power BI
    • Политика лицензирования Microsoft Power BI
    • Power BI Mobile
    • Учебные курсы Microsoft Power BI
    • Архитектура Power BI
    • Обработка данных в Power BI
    • Аудит системы Power BI
  • Учебный курс по Microsoft Power BI
  • Alteryx
    • Alteryx Designer
    • Инструменты Alteryx Designer
    • Alteryx Server
    • Alteryx Analytics Gallery
    • Alteryx. Создание приложения, workflow, ETL
  • Data Engeneering
    • Создание Data Lake
    • Создание Data Warehouse
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы » Учебный курс по NPrinting

Как создать сводную таблицу HTML в NPrinting

Темы сводных таблиц в NPrinting часто вызывают вопросы. И в том, как их использовать, что поддерживается/не поддерживается, как они работают, как их можно использовать в шаблонах NPrinitng и, в конечном итоге, какие обходные пути существуют для создания сводных таблиц в различных шаблонах есть много путаницы.

Некоторое время назад я наткнулся на этот пост в сообществе и подумал, что возьму на себя задачу найти решение, как создать сводную таблицу в шаблоне HTML и встроить ее в тело письма. То, что кажется легкой задачей во вселенной HTML, уже не такое простое при использовании при почтовой рассылке. Почтовый клиент не поддерживает теги <script> по очевидным причинам безопасности. Большинство существующих решений для построения сводных таблиц в HTML основаны на некоторых скриптах (независимо от того, что они на самом деле делают). Мое предположение было очень простым: я не могу использовать теги <script>, а сводная таблица должна отображаться в почтовом клиенте (или, по крайней мере, в большинстве популярных почтовых клиентов). Чтобы добиться этого, я решил построить свое решение на теге html <table> и встроенном форматировании css.

Проблемы:

  • нет возможности использовать тег <script>
  • необходимо работать в почтовом клиенте
  • метки динамических столбцов
  • динамическое количество столбцов
  • объединить ячейки таблицы, чтобы создать сводную таблицу
  • формат ячеек и форматирование значений (цвета фона, числовые форматы)
  • итоговая строка/столбец

Самый простой способ извлечь данные из сводной таблицы QlikView/Qlik Sense в шаблон HTML NPrinting – это перетащить весь тег объекта в шаблон. Это дает нам правильные данные, но не дает возможностей оформить все как следует, только очень простое форматирование, и не сохраняет размерные группировки, которые больше всего необходимы при просмотре сводных таблиц.

Второй подход, который вы, возможно, захотите рассмотреть – это использование изображения и его вывод. Проблемой стало отсутствие контроля над фактическими компонентами диаграммы. Возможности управления размером диаграммы и разрешением визуализации ограничены, что позволяет изменять размер пространства, в котором создается диаграмма, и это в свою очередь позволяет отображать на ней больше информации. Это важно для всех диаграмм Qlik Sense, так как адаптивный дизайн будет случайным образом скрывать метки, значения в точках данных, заголовки, легенды и т. д. Поэтому в целом возможности с изображениями очень ограничены, и они просто не выглядят хорошо в конечном счете.

Возможно, есть другие способы создания сводной таблицы в HTML, но я не смог найти такого, поэтому я подумал о том, как можно имитировать сводную таблицу с помощью обычной таблицы. Я немного покопался в HTML, узнал об атрибутах col-span и row-span и о том, как их использовать. Я немного подумал и решил, что этого можно добиться, немного поработав в Qlik Sense или QlikView. Итак, что нужно сделать?

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

В этом примере я использовал Qlik Sense, но решение QlikView будет работать так же.

Сначала я построил сводную таблицу, чтобы увидеть, чего я хочу добиться. В моем примере есть измерения Year, Dim1, Dim2 и Month. У него также есть 1 показатель: сумма (Выражение1).

Сводная таблица, которую я воспроизведу в отчете NPrinting HTML

Я предполагал, что в моей сводной таблице будет ограниченное количество столбцов. Я не ограничиваю ее каким-либо конкретным числом, но, учитывая, что следующий шаг требует от меня создания меры в X столбцах, мне было необходимо это предположение. Итак, следующий шаг – построить прямую таблицу. Я использую те же измерения: Year, Dim1, Dim2, но вместо того, чтобы использовать Month в качестве измерения, я должен создать отдельные выражения для каждого месяца. Для этого мне нужно изменить исходное выражение:

  • sum(Expression1) – оригинал
  • sum({<Month*={'$(=FieldValue('Month',1))'}>}Expression1) – за первый месяц
    • Label: =FieldValue('Month',1)
  • sum({<Month*={'$(=FieldValue('Month',2))'}>}Expression1) – за второй месяц
    • Label: =FieldValue('Month',2)
  • sum({<Month*={'$(=FieldValue('Month',3))'}>}Expression1) – за третий месяц
    • Label: =FieldValue('Month',3)
  • sum({<Month*={'$(=FieldValue('Month',4))'}>}Expression1) – за четвертый месяц
    • Label: =FieldValue('Month',4)
  • sum({<Month*={'$(=FieldValue('Month',5))'}>}Expression1) – за пятый месяц
    • Label: =FieldValue('Month',5)
  • и т. д. до 12, так как мое измерение будет иметь только 12 значений. Если вам нужны более или менее столбчатые значения, вам нужно создать больше или меньше таких показателей/столбцов.
  • sum({<Month*={"*"}>}Expression1) – это для столбца «Итого»
    • Label: TotalMonth

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

Сводная таблица (вверху) в сравнении с обычной таблицей (внизу)

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

  • Count(DISTINCT Total <Year> Dim2)
    • Label: RS_1
  • Count(DISTINCT Total <Dim1> Dim2)
    • Label: RS_2

Приведенные выше выражения возвращают количество строк, которые мне нужно сгруппировать для каждого измерения.

6 строк необходимо объединить для столбца Year и 2 строки должны быть объединены для столбца Dim1 – это количество может меняться в зависимости от выбора

На следующем этапе я создаю еще 2 выражения. Первое – создать конкатенированное выражение, которое будет возвращать теги html <td> на основе существующих значений в измерениях таблицы. Оно также будет учитывать любой выбор в вашей модели данных. Для этого я использую функцию IF, которая предполагает, что я знаю, какими будут имена столбцов, и использую ссылку на имя столбца, чтобы упростить его. В то же время я мог бы использовать вместо этого функцию Column().

If(sum(Total {<Month*={'$(=FieldValue('Month',1))'}>}Expression1)<>0,'<td align="right">'&Jan&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',2))'}>}Expression1)<>0,'<td align="right">'&Feb&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',3))'}>}Expression1)<>0,'<td align="right">'&Mar&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',4))'}>}Expression1)<>0,'<td align="right">'&Apr&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',5))'}>}Expression1)<>0,'<td align="right">'&May&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',6))'}>}Expression1)<>0,'<td align="right">'&Jun&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',7))'}>}Expression1)<>0,'<td align="right">'&Jul&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',8))'}>}Expression1)<>0,'<td align="right">'&Aug&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',9))'}>}Expression1)<>0,'<td align="right">'&Sep&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',10))'}>}Expression1)<>0,'<td align="right">'&Oct&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',11))'}>}Expression1)<>0,'<td align="right">'&Nov&'</td>')
&If(sum(Total {<Month*={'$(=FieldValue('Month',12))'}>}Expression1)<>0,'<td align="right">'&Dec&'</td>')
&If(sum(Expression1)<>0,'<td>'&TotalMonth&'</td>')

 

Второе и в то же время самое важное выражение – это выражение, которое будет создавать комбинированный HTML-код для измерений и показателей. Здесь используется row-span для объединения ячеек для Year и Dim 1 на основе вычисленных значений RS_1 и RS_2.

If(Year<>Above(Total Year),
                  '<td  align="left" rowspan="'&RS_1&'">'&Concat(DISTINCT Year)&'</td>'
                  &If(Dim1<>Above(Total Dim1),'<td align="left" rowspan="'&RS_2&'">'&Concat(DISTINCT Dim1)&'</td>'
                                    &'<td align="left">'&Dim2&'</td>'
                                    &Column(1),
                                    '<td align="left">'&Dim2&'</td>'
                                    &Column(1)),
                  If(Dim1<>Above(Total Dim1),'<td  align="left" rowspan="'&RS_2&'">'&Concat(DISTINCT Dim1)&'</td>'
                                    &'<td align="left">'&Dim2&'</td>'
                                    &Column(1),
                                    '<td align="left">'&Dim2&'</td>'
                                    &Column(1)))

 

Для этого я также должен создать правильный заголовок, чтобы заголовки сводной таблицы создавались правильно. Статические заголовки: Год Year, Dimension 1, Dimension 2 и Total. Между Dimension 2 и Total есть заголовки переменных, которые будут создавать метки для месяцев на основе выбора.

'<th align="left">Year</th><th align="left">Dimension 1</th><th align="left">Dimension 2</th>'&Concat(DISTINCT '<th align="right">'&Month&'</th>','',num(Month))&'<th align="right">Total</th>'

 

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

Теперь, когда у нас есть последнее выражение, все, что нам нужно сделать, это использовать его в шаблоне NPrinting. В NPrinting создайте отчет HTML и отредактируйте его в NPrinting Designer. Внесите в таблицу объект, над которым мы работали. Вот ключевые шаги, которые вам необходимо сделать:

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

 

Не стесняйтесь копировать и вставлять приведенный ниже код, чтобы получить простую версию таблицы. Вы можете захотеть отформатировать свой стиль CSS по собственному усмотрению – я оставляю вам такую возможность. Я не обращал внимания на ширину столбца или цвет фона. Я также не проверял совместимость CSS со всеми браузерами и почтовыми клиентами. Ниже вы заметите, что общий столбец отображается по-разному в веб-браузере и в MsOutlook. Я просто хотел показать вам саму концепцию. Также посмотрите на скриншот ниже, на котором показано, как это будет выглядеть после того, как вы начнете фильтровать свои данные.

<html>
<body>
  <style>     
    th { 
       display: table-cell;
       padding: 5px;
       background-color: #EEEEE2; 
       }
      
    /* make the last cell of every row italic */
   
    tr td:LAST-CHILD{
       font-weight:bold;
       background-color: #EEEEE2;
       text-align: right;
    }
      
    td {
       display: table-cell;
       padding: 5px;
       }
   
  
       
    table         { margin-left:auto; margin-right:auto;}
    table caption {font-weight:bold;}   
  </style>                      
        
         <table border ='2' cellspacing=0 style="border-collapse:collapse;" >
         <tr>
          %%=$(vDetail)%%
         </tr>                     
         </table>
</body>
</html>

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

 

Предварительный просмотр в веб-браузере

 

 

Предварительный просмотр в Outlook

 

 

Отфильтрованная сводная таблица HTML, содержащая только данные за 2020 год

Надеюсь, вы сочтете этот пост полезным. Прикрепленное приложение Qlik Sense здесь

Удачи вам!

 

 

 

Узнать стоимость решенияЗапросить видео презентацию

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

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

До 2023 года компания BI Consult обладала официальным партнерским статусом Qlik в России. В настоящий момент деятельность QlikTech на территории России прекращена, BI Consult не имеет партнерских отношений и никаким иным образом более не связана с QlikTech и не предлагает к продаже системы бизнес-анализа QlikView, Qlik Sense и иные продукты бренда Qlik. Все материалы о продукции бренда Qlik на сайте приведены исключительно в описательных целях и для информирования пользователей о существующих в мире системах бизнес-анализа. Для приобретения продукции Qlik необходимо обратиться к правообладателю программного обеспечения QlikTech или дистрибьюторам.

Клиенты

  • Консалтинг по Qlik Sense для ЗАО "ПИЛОН", система бизнес-анализа для строительной отрасли на базе Qlik Sense

    Поставка лицензий Qlik Sense, настройка и администрирование сервера Qlik Sense, обучение на курсах на базе собственного учебного центра по Qlik Sense сотрудников компании.

    Помощь и консалтинг в разработке финансового решения (план-факт, БДР, P&L)

  • АДМ

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

  • Деньга
    Разработка концепции для консолидация финансовой отчетности по филиалам компании;
    Разработка концепции создания матрицы данных для отслежевания поведения клиентов, вплоть до уровня транзакций
    Написание технической документации;
    Поддержка пользователей.
  • InterZet

    Анализ деятельности отдела маркетинга; сегментация клиентских баз; расчет специфичных показателей эффективности деятельности компании сегмента telecom

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Банки
    • Страхование
    • Фармацевтика
    • Лизинг
    • Логистика
    • Медицина
    • Нефтегазовый сектор
    • Сеть ресторанов
  • BI платформы
    • Qlik Sense
    • QlikView
    • Tableau
    • Microsoft Power BI
    • ATK BiView-1C Коннектор (для Qlik/Tableau/PowerBI)
    • Vizlib Qlik Sense extentions (библиотека экстеншнов)
    • NPrinting
    • Геоаналитика Qlik GeoAnalytics
    • KliqPlanning Suite
    • Qlik WebConnectors
    • QlikView R Коннектор
    • QlikView/Qlik Sense SAP Коннектор
    • Alteryx
    • Qlik Data Catalog
    • Документация ATK BiView
  • Услуги
    • Консалтинг
    • Пилотный проект
    • Поддержка
    • План обучения и сертификации Qlik
    • Бесплатное обучение
    • Учебные курсы
    • Сертификация Qlik
    • Аудит приложений
  • Курсы
    • Учебный курс по Qlik Sense
    • Учебный курс по Tableau
    • Учебный курс по Microsoft Power BI
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс по NPrinting
    • Учебный курс по Azure Databricks
    • Учебный курс по Google BigQuery
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
  • Функциональные решения
    • Продажи
    • Финансы
    • Склад
    • HR
    • S&OP и прогнозная аналитика
    • Внутренний аудит
    • Геоаналитика
    • Категорийный менеджмент
    • Построение хранилища данных
    • Система управления KPI и BSC
    • Управление цепочками поставок
    • Маркетинг
    • Цифровая трансформация
    • Сквозная аналитика
    • Process Mining
LinkedInYouTubeVkontakteFacebook
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru