BI Consult Desktop Logo BI Consult Mobile Logo
  • Перейти на КликСенс
  • Перейти на КликВью
  • Перейти на 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
    • Power BI Report Server Management Tool
      • Power BI Report Server Monitoring
      • Power BI Report Server vs SQL Server Reporting Services
      • Автоматизация отчетов в Power BI Report Server
  • Учебный курс по Microsoft Power BI
  • Alteryx
    • Alteryx Designer
    • Инструменты Alteryx Designer
    • Alteryx Server
    • Alteryx Analytics Gallery
    • Alteryx. Создание приложения, workflow, ETL
  • Data Engeneering
    • Создание Data Lake
    • Создание Data Warehouse
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы » Учебный курс по NPrinting

Библиотеки диаграмм JS с NPrinting

Вы когда-нибудь хотели создать отчет в NPrinting на основе HTML с красивыми, «адаптивными» диаграммами? Я это сделал, и был очень воодушевлен тем, как мне это удалось. В зависимости от выбранной вами библиотеки диаграмм (D3.js, TOAST UI, Chart.js или многие другие…) ваш результат может немного отличаться от моего. Я собираюсь использовать в этом примере диаграммы Google и, очевидно, NPrinting. Важно: вы должны подумать, с какой библиотекой вы хотите работать. Некоторые из них требуют лицензионного ключа, а у других – открытый исходный код.

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

Это я сделал этот скетч

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

Карта с использованием GeoChart: (ссылка на исходный код)

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {
        'packages':['geochart'],
        // Примечание: вам нужно будет получить mapsApiKey для этого проекта.
        // См: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
        'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'
      });
      google.charts.setOnLoadCallback(drawRegionsMap);
      function drawRegionsMap() {
        var data = google.visualization.arrayToDataTable([
          ['Country', 'Popularity'],
          ['Germany', 200],
          ['United States', 300],
          ['Brazil', 400],
          ['Canada', 500],
          ['France', 600],
          ['RU', 700]
        ]);
        var options = {};
        var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="regions_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>

 

Посмотрев на представленный выше код, вы увидите, что данные, которые нам нужно будет заполнять динамически, находятся в массивах [‘Country’, ‘Popularity’]. Для простоты мы будем придерживаться основных настроек карты.

Таблица с использованием табличной диаграммы: (ссылка на исходный код)

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['table']});
      google.charts.setOnLoadCallback(drawTable);
      function drawTable() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Name');
        data.addColumn('number', 'Salary');
        data.addColumn('boolean', 'Full Time Employee');
        data.addRows([
          ['Mike',  {v: 10000, f: '$10,000'}, true],
          ['Jim',   {v:8000,   f: '$8,000'},  false],
          ['Alice', {v: 12500, f: '$12,500'}, true],
          ['Bob',   {v: 7000,  f: '$7,000'},  true]
        ]);
        var table = new google.visualization.Table(document.getElementById('table_div'));
        table.draw(data, {showRowNumber: true, width: '100%', height: '100%'});
      }
    </script>
  </head>
  <body>
    <div id="table_div"></div>
  </body>
</html>

 

То же самое относится и к примеру таблицы, где мы будем в основном сосредоточены нестандартных на настройках, а динамическая часть будет представлять собой только массив с такими данными, как: ['Mike', {v: 10000, f: '$ 10,000'}, true] и имена столбцов, объявленные как параметры, например: data.addColumn ('string', 'Name');

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

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

Макет моего отчета Qlik Sense

 

Объект Qlik Sense с выражениями, которые создают необходимые массивы данных

Для карты, таблицы и гистограммы с накоплением я использовал одну таблицу Qlik Sense с измерением и показателями страны: меры Sum(Population), Sum({<Gender={Male}>}Population) и Sum({<Gender={Female}>}Population). А вот массивы для HTML-диаграмм:

Карта:

'['&CHR(39)&Only(Country)&CHR(39)&','&sum(Population)&']'

 

Таблица:

 ='['&CHR(39)&Country&CHR(39)&',{v: '&sum(Population)&', f: '&CHR(39)&num(sum(Population),'#,##0')&CHR(39)&'},{v: '&sum({<Gender={Male}>}Population)&', f: '&CHR(39)&num(sum({<Gender={Male}>}Population),'#,##0')&CHR(39)&'},{v: '&sum({<Gender={Female}>}Population)&', f: '&CHR(39)&num(sum({<Gender={Female}>}Population),'#,##0')&CHR(39)&'}]'

 

Столбчатая диаграмма:

='['&CHR(39)&Country&CHR(39)&','&sum({}Population)&','&CHR(39)&'Male: '  &num(sum({}Population))&' ('&num(sum({}Population)/sum(Population),'#,##0.0%')&')'&CHR(39)&',' &sum({}Population)&','&CHR(39)&'Female: '&num(sum({}Population))&' ('&num(sum({}Population)/sum(Population),'#,##0.0%')&')'&CHR(39)&']'

 

Круговая диаграмма – требует разной степени детализации (только гендерное измерение), поэтому ее поддерживает отдельный объект:

'['&CHR(39)&Only(Gender)&CHR(39)&','&sum(Population)&']'

 

Все вышеупомянутые выражения созданы как основные меры для упрощения работы с NPrinting в дальнейшем. Теперь я могу перейти к NPrinting, создать соединение с приложением Qlik Sense, перезагрузить метаданные, создать новый отчет HTML и отредактировать шаблон. В NPrinting мы нет много можем сделать. Сначала мы должны ввести наши 2 таблицы как уровни, а также как таблицы. На следующем шаге нам нужно скопировать/вставить скрипты из библиотеки диаграмм и вставить их в нужные места в HTML. Ниже представлен весь сценарий, который я использовал. Я также выведу его как изображение, чтобы объяснить каждый раздел отдельно.

<html>
    <head>
        <style>
            html, body {
                height: 100%;
                margin: 0;
            }
            .grid2x2 {
                min-height: 100%;
                display: flex;
                flex-wrap: wrap;
                flex-direction: row;
            }
            .grid2x2 > div {
                display: flex;
                flex-basis: calc(50% - 40px); 
                justify-content: center;
                flex-direction: column;
            }
            .grid2x2 > div > div {
                display: flex;
                justify-content: center;
                flex-direction: row;
            }
            .box { margin: 10px; }
            .box1 { background-color: white; }
            .box2 { background-color: white; }
            .box3 { background-color: white; }
            .box4 { background-color: white; }
        </style>
   
        <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
        <script type="text/javascript">
        google.charts.load('current', {'packages':['table']});
        google.charts.load('current', {'packages':['geochart'],'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'});
        google.charts.load('current', {'packages':['corechart']});
       
        google.charts.setOnLoadCallback(drawStackedChart);
        google.charts.setOnLoadCallback(drawPieChart);
        google.charts.setOnLoadCallback(drawRegionsMap);  
        google.charts.setOnLoadCallback(drawTable);
     
        function drawRegionsMap()
            {
                var data = google.visualization.arrayToDataTable([
                    ['Country', 'Popultion']
                    %%273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%   ,%%YRMNe_1%%
                    %%/273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%
                ]);
                var options = {
                    title: 'Population by Country',
                    colorAxis: {colors: ['#3D5AA7','#88C2EC','#EAF2FB','#F39C67','#B2213F']},
                    backgroundColor: '#FFFFFF',
                    datalessRegionColor: '#E8EAED',
                    defaultColor: '#f5f5f5',
                    keepAspectRatio: 'false',
                    weight: '100%',              
                    height: '400'
                };  
                var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
                chart.draw(data, options);
            }
     
        function drawTable()
            {
                var data = new google.visualization.DataTable();
                    data.addColumn('string', 'Country');
                    data.addColumn('number', 'Total Population');
                    data.addColumn('number', 'Male');
                    data.addColumn('number', 'Female');
                    data.addRows([
                    %%273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%   %%FvRkbM_1%%,
                    %%/273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%
                ]);
                var options = {
                    page: 'enable',
                    pageSize: 18,
                    weight: '550',
                    showRowNumber: true
                    }                
                var table = new google.visualization.Table(document.getElementById('table_div'));
                table.draw(data, options);
            }
     
        function drawPieChart()
            {
                var data = google.visualization.arrayToDataTable([
                    ['Gender', 'Popultion']
                    %%e064296a-2c40-4edd-ace7-859da3589b80_Level%%,%%Gbqphrd_1%%         
                    %%/e064296a-2c40-4edd-ace7-859da3589b80_Level%%
                ]);
                var options = {
                    title: 'Population by gender',
                    height: '400'
                };  
                var chart = new google.visualization.PieChart(document.getElementById('piechart')); 
                chart.draw(data, options);
            }
     
        function drawStackedChart()
            {
                var data = google.visualization.arrayToDataTable([
                ['Country', 'Male',{ role: 'tooltip' }, 'Female',{ role: 'tooltip' } ]
                %%273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%   ,%%tuxXKmw_1%%
                %%/273b292c-dda7-477c-9bc9-669706e2b1fb_Level%%
                ]);
                var options = {
                    title: 'Population by country & gender',
                    legend: { position: 'top', maxLines: 3 },
                    bar: { groupWidth: '75%' },
                    isStacked: true,
                    height: '400'
                };
                var chart = new google.visualization.ColumnChart(document.getElementById('columnchart_values')); 
                chart.draw(data, options);
            }
     
    </script>
    </head>
    <body>        
        <div class="grid2x2">
            <div class="box box1"><div id="regions_div" style="border: 1px solid #ccc"></div></div>
            <div class="box box2"><div id="table_div" style="border: 1px solid #ccc"></div></div>
            <div class="box box3"><div id="piechart" style="border: 1px solid #ccc"></div></div>
            <div class="box box4"><div id="columnchart_values" style="border: 1px solid #ccc"></div></div>
        </div>     
    </body>
</html>

 

 

  1. В этом разделе есть несколько стилей, которые я использовал в своем HTML.
  2. Раздел 2 содержит js-скрипты из библиотек. Ниже описаны динамические компоненты 4-7.
  3. Основная часть HTML, относящаяся к каждому компоненту диаграммы.
  4. Динамический раздел образующийся из уровня и таблицы (раздел круговой диаграммы)
  5. 5-7 Динамические разделы, относящиеся к столбцам уровня и таблицы.

Для всех объектов NPrinting мы должны отключить “Keep source format”, а для объектов таблицы мы должны отключить “HTML Encode”. Я также использую “Show Header”=”Hide”, поскольку мне не нужны заголовки.

 

Компоненты, которые являются динамическими в шаблоне NPrinting

Как видите, в фактическом шаблоне NPrinting требуется не так много. Вся тяжелая работа выполняется в Qlik Sense, а NPrinting просто создает почву для JS, чтобы сотворить настоящее чудо. Вот как выглядит итоговый отчет:

 

Готовый HTML-отчет

Резюме:

  • Было ли это интересно строить? ДА!
  • Вы бы использовали это в своей работе? Возможно
  • Можете ли вы отправить этот отчет в теле письма? Нет, нельзя, т.к. JS не поддерживается в почтовых клиентах.
  • Можете ли вы использовать его в автономном режиме? Я так не думаю, вам нужен будет доступ к любой JS-библиотеке, на которую указывает ваш скрипт.
  • Я не веб-разработчик, и мои навыки HTML/JS ограничены, поэтому я, вероятно, допустил в этом коде массу ошибок.
  • Пример приложения QS здесь: ссылка

 

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

Решения

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

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

Клиенты

  • InterZet

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

  • Concept Club
    Детализированный план-фактный анализ продаж и прибыли в разрезах магазинов/регионов/брендов/номенклатурных групп/коллекций/SKU с детализацией до дня
    Сравнительный Like-for-like анализ продаж по показателям товарооборот, прибыль, средний чек, проходимость, конверсия и т.д. в разрезах (Факт/Факт и План/Факт)
    Факторный анализ продаж, расходов, себестоимости, маржинальности
    Отчет по контролю корректности расчетов по поконтрольным значениям
    Построение трендов продаж для оценки адекватности планирования
    Отчет P&L консолидированный и по регионам/бизнес-юнитам/брендам/юр.лицам
    Прогноз P&L на текущий месяц с индикацией по контрольным значениям с возможносью создания версий и внесения корректировок 
    Отчет "Cash-Flow" консолидированный и по юр.лицам
    Отчет "Баланс" консолидированный и по юр.лицам
    Совмещенное товарное планирование ("пилы/кривулины"): реализация интерактивной модели товародвижения в разрезах, анализ жизненного цикла товаров, планирование уценок (скрытых/открытых)
    Совмещенный анализ оборачиваемости и среднего товарного запаса в разрезах.
  • Лицензии Qlik Sense, администрирование и поддержка сервера Qlik Sense, обучение специалистов Qlik Sense

  • Внедрение QlikView в fashion retail, готовое отраслевое решение для fashion retail по аналитике

    Внедрение/кастомизация решения BusinessQlik for Fashion Retail c решением задач: DashBoard, Жизнь Артикула, Отчет Сводный, Отчет Реализация 8 недель, Конструктор

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Банки
    • Страхование
    • Фармацевтика
    • Лизинг
    • Логистика
    • Медицина
    • Нефтегазовый сектор
    • Сеть ресторанов
  • 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
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.