<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Qlik - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/qlik/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/qlik/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Mon, 14 Feb 2022 07:46:22 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>Qlik - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/qlik/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Урок 1. Регистрация в Qlik Sense Business Cloud. Как начать работать с Qlik в облачном сервисе?</title>
		<link>https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/</link>
					<comments>https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Mon, 12 Oct 2020 20:15:52 +0000</pubDate>
				<category><![CDATA[Уровень 1]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[QlikNews]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[QlikSenseTutorial]]></category>
		<category><![CDATA[QlikTech]]></category>
		<category><![CDATA[QlikВидеоНаРусском]]></category>
		<category><![CDATA[QlikОбучение]]></category>
		<category><![CDATA[QlikУчебник]]></category>
		<category><![CDATA[кликсенс]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=2421</guid>

					<description><![CDATA[<p>Урок 1. Регистрация в Qlik Sense Business Cloud. Как начать работать с Qlik в облачном сервисе? В этом уроке будет описан процесс создания аккаунта в облачном сервисе Qlik Sense Business Cloud. https://t.me/qlik_insight &#8211; telegram канал &#8211; пишу про Qlik Sense как есть на самом деле, что-то критикую, что-то хвалю, делюсь<a class="moretag" href="https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/">Урок 1. Регистрация в Qlik Sense Business Cloud. Как начать работать с Qlik в облачном сервисе?</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Урок 1. Регистрация в Qlik Sense Business Cloud. Как начать работать с Qlik в облачном сервисе?</strong></p>
<p><span dir="auto" class="style-scope yt-formatted-string">В этом уроке будет описан процесс создания аккаунта в облачном сервисе Qlik Sense Business Cloud. </span></p>
<p><span style="color: #339966;"><strong><a href="https://t.me/qlik_insight" style="color: #339966;">https://t.me/qlik_insight</a></strong></span><span dir="auto" class="style-scope yt-formatted-string"> &#8211; telegram канал &#8211; пишу про Qlik Sense как есть на самом деле, что-то критикую, что-то хвалю, делюсь обучающими материалами. </span></p>
<p><iframe width="560" height="315" src="//www.youtube.com/embed/G_rflkDEn_4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/">Урок 1. Регистрация в Qlik Sense Business Cloud. Как начать работать с Qlik в облачном сервисе?</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/registering-with-qlik-sense-business-cloud-how-start-with-qlik/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Руководство разработчика API &#8211; Справочник по Qlik Sense API</title>
		<link>https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/</link>
					<comments>https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Fri, 09 Aug 2019 12:40:45 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[API Qlik Engine]]></category>
		<category><![CDATA[PowerShell & Qlik Sense Engine API]]></category>
		<category><![CDATA[Python Connection Qlik API]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qlik sense api]]></category>
		<category><![CDATA[Qlik Sense API & Python]]></category>
		<category><![CDATA[qlik sense method api]]></category>
		<category><![CDATA[методы api]]></category>
		<category><![CDATA[подключение к qlik sense api]]></category>
		<category><![CDATA[подключение к qlik sense desktop api]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1397</guid>

					<description><![CDATA[<p>Введение в Qlik Sense API. Руководство для разработчика Engine JSON API Qlik Engine JSON API представляет собой протокол WebSocket, который использует JSON для передачи информации между Qlik Sense Engine и клиентами. Qlik Engine JSON API состоит из набора объектов , представляющих приложения, списки и так далее. Эти объекты организованы в<a class="moretag" href="https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/">Руководство разработчика API &#8211; Справочник по Qlik Sense API</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2>Введение в Qlik Sense API. Руководство для разработчика</h2>
<h2>Engine JSON API</h2>
<p><strong>Qlik Engine JSON API</strong> представляет собой протокол WebSocket, который использует JSON для передачи информации между Qlik Sense Engine и клиентами. Qlik Engine JSON API состоит из набора объектов , представляющих приложения, списки и так далее. Эти объекты организованы в иерархическую структуру. Когда вы отправляете запросы в API, вы выполняете действия над этими объектами.</p>
<p><strong>Qlik Engine JSON API может быть использован для:</strong></p>
<ul>
<li>создания приложений и загрузки данных</li>
<li>создания историй (data stories)</li>
<li>получение системной информации</li>
</ul>
<p><strong>Типичные ситуации, в которых вы бы использовали JSON API Qlik Engine:</strong></p>
<ul>
<li>создание специализированного клиента в качестве</li>
<li>автономного или веб-приложения</li>
<li>автоматизация повторяющихся или сложных</li>
<li>обновлений или изменений в приложениях</li>
</ul>
<h2>Extension API</h2>
<p>API расширения (Extension API) состоит из методов и свойств, используемых для создания пользовательских расширений визуализации (custom visualization extensions).</p>
<h2>Backend API</h2>
<p>Backend API состоит из нескольких методов и используется для связи с ассоциативным механизмом Qlik. Он предоставляет вспомогательные функции для вызовов ассоциативного механизма Qlik и доступ к данным ассоциативного механизма Qlik. Вкратце, Backend API &#8211; это оболочка для выбранных методов Qlik Engine JSON API, но с той разницей, что Backend API знает о контексте, то есть текущем соединении WebSocket и приложении Qlik Sense.</p>
<h2>Capability APIs</h2>
<p><strong>API-интерфейсы Capability</strong> представляют собой набор API-интерфейсов JavaScript, которые позволяют легко встраивать контент Qlik Sense в веб-страницу. С помощью всего лишь нескольких строк кода можно создать визуализацию, использующую библиотеку визуализации Qlik Sense.</p>
<p>API-интерфейсы Capability зависят от AngularJS и RequireJS, поэтому вам необходимо принять это во внимание при интеграции API-возможностей Capability в существующий проект, в котором также используются эти библиотеки.</p>
<p><strong>Термин «API-интерфейс Capability»</strong> был введен в Qlik Sense 2.1. Некоторые из API-интерфейсов Capability были доступны до этой версии, опубликованной под названием Mashup API.</p>
<table width="286" style="width: 100%; height: 324px;">
<tbody>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><span style="color: #003300;"><strong>Capability API</strong></span></td>
<td width="171" style="height: 27px;"><span style="color: #003300;"><strong>Namespace</strong></span></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Root API</strong></td>
<td width="171" style="height: 27px;"><em>qlik</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>App API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Bookmark API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app.bookmark</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Field API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app.field</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Selection API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app.selectionState</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Variable API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app.variable</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Visualization API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.app.visualization</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Global API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.global</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Navigation API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.navigation</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Table API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.table</em></td>
</tr>
<tr style="height: 27px;">
<td width="115" style="height: 27px;"><strong>Theme API</strong></td>
<td width="171" style="height: 27px;"><em>qlik.theme</em></td>
</tr>
</tbody>
</table>
<h3>Root API</h3>
<p>Root API является внешним интерфейсом Qlik Sense и доступен в виде пространства имен qlik. Он предоставляет методы открытия приложений, получения ссылки на текущее приложение, установки определенного языка и регистрации обратных вызовов для обработки ошибок. Корневой API также содержит методы для перечисления доступных приложений и расширений, а также для регистрации расширений (extensions), которые вы создаете на лету (используя API визуализации &#8211; Visualization API).</p>
<h3>App API</h3>
<p>Метод qlik.openApp является точкой входа в API приложения и возвращает объекты JavaScript приложения с методами для работы с приложением Qlik Sense, к которому вы подключены.</p>
<h3>Bookmark API</h3>
<p>Bookmark API содержит методы для работы с закладками в приложении Qlik Sense, к которому вы подключены.</p>
<h3>Field API</h3>
<p>Метод qlik.app.field является точкой входа в Field API. Он возвращает объект QField с методами и свойствами, которые можно использовать для управления полем.</p>
<h3>Global API</h3>
<p>Метод qlik.global является точкой входа в Global API. Возвращает объект JavaScript с глобальными методами.</p>
<h3>Navigation API</h3>
<p>Navigation API (API навигации) позволяет вам перемещаться в приложении Qlik Sense и предназначен для использования в виджетах и ​​расширениях визуализации, и не будет работать в сценариях Mashup.</p>
<h3>Selection API</h3>
<p>Selection API является внешним интерфейсом для изменения выборки по модели данных Qlik Sense (фильтрация данных) и позволяет разработчикам работать с ассоциативной моделью.</p>
<h3>Table API</h3>
<p>Table API (API таблиц) позволяет разработчикам работать с табличными данными, возвращаемыми из ассоциативного механизма Qlik, не имея глубоких знаний о внутренних конструкциях, таких как, например, Гиперкуб (Hypercube).</p>
<h3>Theme API</h3>
<p>Theme API &#8211; это внешний интерфейс для тем Qlik Sense. Он позволяет настраивать визуализации, включая расширения и виджеты, вне Qlik Sense.</p>
<h3>Variable API</h3>
<p><span>Variable API &#8211; это внешний интерфейс для управления переменными </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span>.</span></p>
<h3>Visualization API</h3>
<p>Visualization API (API визуализации) &#8211; это внешний интерфейс для визуализаций Qlik Sense. Вы можете создавать новые визуализации на лету на основе объекта сессии. Эти визуализации не сохраняются в приложении. Вы также можете получить уже существующие визуализации из приложения, используя Visualization API.</p>
<h2>Custom Component API</h2>
<p>API для создания пользовательских компонентов (собственных компонентов).</p>
<p><span>Пользовательские компоненты содержат следующие элементы:</span></p>
<ul>
<li><span>Файл определения (QEXT).</span></li>
<li><span>Основной файл JavaScript.</span></li>
<li><span>Дополнительные ресурсы, такие как библиотеки JavaScript, изображения и шрифты.</span></li>
</ul>
<p><span>Пользовательские компоненты &#8211; это в основном директивы AngularJS. </span><span>Цель файла JavaScript &#8211; вернуть подпись директивы AngularJS.</span></p>
<h2>App Integration API<span style="color: #ff6600;"><em><strong></strong></em></span></h2>
<p>Используется для embedded аналитика, позволяет генерировать ссылки url для встраивания в iframe.</p>
<h2>Single Integration API</h2>
<p><span>Single Integration API позволяет создавать URL-адреса, который возвращает полную HTML-страницу, содержащую, например, встроенную визуализацию </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span> . Этот URL-адрес можно встроить в веб-страницу, например, включив его в iframe.</span></p>
<h2>qlik-visual web component</h2>
<p>Qlik-Visual Web Component &#8211; это определение пользовательского элемента &lt;qlik-visual&gt;, которое использует API визуализации и представляет его как веб-компонент. Он позволяет создавать и изменять визуализации на лету, не используя клиент Qlik Sense.</p>
<p><strong>Qlik Visual поддерживает:</strong></p>
<ul>
<li>Отображение существующей визуализации (путем определения видимости элемента) на веб-странице.</li>
<li>Создание визуализаций на лету с использованием существующего приложения путем внедрения их в веб-страницу.</li>
<li>Динамически изменяющие свойства и атрибуты визуализаций.</li>
</ul>
<h2>enigma.js</h2>
<p><strong>Библиотека enigma.js</strong> помогает вам общаться с ассоциативным механизмом Qlik в Qlik Sense и Qlik Sense Desktop. Вы можете использовать его для создания своего собственного клиента или для создания собственного сервиса Node.js. <strong>Примерами использования могут быть создание ваших собственных аналитических инструментов на основе браузера, серверных служб или сценариев командной строки.</strong></p>
<p>Библиотека <strong>enigma.js</strong> может использоваться в качестве SDK или для выполнения операций CRUD (то есть создания, чтения, обновления и удаления) в приложениях и в сущностях приложений.</p>
<p><span><strong>enigma.js</strong> &#8211; это библиотека, предназначенная исключительно для <strong>Engine API (websocket)</strong>. </span><span>Экспорт изображений / PDF-файлов &#8211; это API-интерфейсы REST в Qlik Sense для других служб (отчеты), которые предоставляются через интерфейс capability API:</span></p>
<ul>
<li><a href="https://help.qlik.com/en-US/sense-developer/September2019/Subsystems/APIs/Content/Sense_ClientAPIs/CapabilityAPIs/VisualizationAPI/exportImg-method.htm" target="_blank" rel="noopener noreferrer">https://help.qlik.com/en-US/sense-developer/September2019/Subsystems/APIs/Content/Sense_ClientAPIs/CapabilityAPIs/VisualizationAPI/exportImg-method.htm</a></li>
<li><a href="https://help.qlik.com/en-US/sense-developer/September2019/Subsystems/APIs/Content/Sense_ClientAPIs/CapabilityAPIs/VisualizationAPI/exportPdf-method.htm" target="_blank" rel="noopener noreferrer">https://help.qlik.com/en-US/sense-developer/September2019/Subsystems/APIs/Content/Sense_ClientAPIs/CapabilityAPIs/VisualizationAPI/exportPdf-method.htm</a></li>
</ul>
<p><strong>Официальная документация Enigma.JS:</strong> <a href="https://github.com/qlik-oss/enigma.js" target="_blank" rel="noopener noreferrer">https://github.com/qlik-oss/enigma.js</a></p>
<h2>enigma-go</h2>
<p>Библиотека enigma-go помогает вам общаться с ассоциативным механизмом Qlik в Qlik Sense и Qlik Sense Desktop. Примерами использования могут быть создание ваших собственных аналитических инструментов, серверных служб или других инструментов, взаимодействующих с ассоциативным механизмом Qlik. Библиотека enigma-go может использоваться в качестве SDK или для выполнения операций CRUD (то есть создания, чтения, обновления и удаления) в приложениях и в сущностях приложений.</p>
<h2>leonardo-ui</h2>
<p>leonardo-ui &#8211; это библиотека с открытым исходным кодом, которая используется в Qlik Sense и предоставляет множество графических компонентов пользовательского интерфейса. Разметка этих компонентов может использоваться в расширениях, гибридных приложениях и виджетах. Библиотека поддерживается и поддерживается Qlik. leonardo-ui можно использовать как с Qlik Sense, так и с Qlik Sense Desktop.</p>
<h2>picasso.js</h2>
<p>Библиотека диаграмм picasso.js оптимизирована для создания пользовательских, интерактивных и мощных визуализаций для платформы Qlik Sense Analytics.</p>
<h2><madcap:concept term="Building visualization extensions" xmlns:madcap="http://www.madcapsoftware.com/Schemas/MadCap.xsd"><span class="OpenSourceNebula">nebula.js</span></madcap:concept></h2>
<p><strong><span class="OpenSourceNebula">nebula.js</span></strong><span> &#8211; это библиотека с открытым исходным кодом, разработанная на GitHub. </span><span class="OpenSourceNebula"><span>nebula.js</span></span><span> &#8211; это набор библиотек и API-интерфейсов JavaScript, не <span class="OpenSourceNebula">зависящих</span> от продукта и инфраструктуры, который помогает разработчикам интегрировать визуализации и гибридные приложения поверх </span><span class="CommonComponentsEngineName"><span>ассоциативного механизма </span></span><span></span><span class="CommonComponentsSenseDesktopName"><span>Qlik</span></span><span> в <span class="CommonComponentsSenseDesktopName">Qlik Sense Desktop</span> , </span><span class="CommonComponentsQlik Sense Enterprise for Windows, with Multi-Cloud"><span>Qlik Sense Enterprise для Windows</span></span><span> и </span><span class="CommonComponentsQlikSenseCloudEnvironments"><span>SaaS-версиях Qlik Sense</span></span><span> . Он предлагает разработчикам альтернативу capability APIs, которые исторически использовались для создания гибридных приложений.</span></p>
<p><span>Чтобы использовать </span><span class="OpenSourceNebula"><span>nebula.js</span></span><span> , вы должны быть знакомы с JavaScript, promises, websockets и библиотеками с открытым исходным кодом. Вам понадобится Node.js и доступ к </span><span class="CommonComponentsEngineName"><span>ассоциативному движку Qlik</span></span><span> . Также будет полезно знание таких концепций Qlik, как generic objects и гиперкубы.</span></p>
<h1>Qlik Explorer для разработчиков</h1>
<p><strong>Qlik Explorer для разработчиков</strong> &#8211; это инструмент, созданный для упрощения процесса интеграции функциональности Qlik Sense в другие среды.</p>
<p><strong>Qlik Explorer</strong> для разработчиков обеспечивает быстрый доступ к соответствующей информации из вашей среды Qlik Sense, что, например, позволяет легко интегрировать визуализации Qlik Sense в существующий веб-сайт.</p>
<p><strong>Автоматическое обновление</strong><br />Qlik Explorer для разработчиков автоматически обновляется при появлении новой версии.</p>
<h2>Как подключить Qlik Explorer к Qlik Sense Desktop Hub</h2>
<p>В настройках вбиваете http://localhost:4848/</p>
<p><img fetchpriority="high" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_1.jpg" alt="" width="942" height="658" class="aligncenter wp-image-1429 size-full" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_1.jpg 942w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_1-300x210.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_1-768x536.jpg 768w" sizes="(max-width: 942px) 100vw, 942px" /></p>
<p>После подключения отобразится список приложений со свойствами и методами. <strong>Profit <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p><img decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_2.jpg" alt="" width="1365" height="615" class="aligncenter size-full wp-image-1428" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_2.jpg 1365w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_2-300x135.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_2-768x346.jpg 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_qliksense_api_explorer_developer_2-1024x461.jpg 1024w" sizes="(max-width: 1365px) 100vw, 1365px" /></p>
<h1><span>Engine API Explorer в браузере</span></h1>
<p><span>http://localhost:4848/dev-hub/engine-api-explorer</span></p>
<iframe src="//docs.google.com/viewer?url=https%3A%2F%2Fqliksense.ivan-shamaev.ru%2Fwp-content%2Fuploads%2F2019%2F08%2FQlik_Engine_API_05242016.docx&hl=ru&embedded=true" class="gde-frame" style="width:100%; height:500px; border: none;" scrolling="no"></iframe>
<p class="gde-text"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Qlik_Engine_API_05242016.docx" class="gde-link">Скачать (DOCX, 661KB)</a></p>
<h1>Подключение к API Qlik Engine</h1>
<p><span style="color: #ff6600;"><em><strong>todo</strong></em></span></p>
<h2 _ngcontent-c2="">Подключение к Qlik Sense API с помощью PowerShell</h2>
<p>https://community.qlik.com/t5/Qlik-Sense-Integration/How-to-export-an-app-to-a-folder-using-API-and-Powershell/td-p/1608192</p>
<h2 _ngcontent-c2="" class="gp-title gp-indi-project">Qlik Sense python API client for QPS and QRS interfaces</h2>
<p>https://developer.qlik.com/garden/570e73c36c8c33c066a0f11c</p>
<h2>Пример подключения Python 3 к Qlik Sense Engine API</h2>
<p>Для подключения и работы необходимо установить библиотеки:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">pip3 install asyncio
pip3 install websocket-client
pip3 install requests_ntlm
pip3 install requests
pip3 install json</pre>



<p>Дальше приведен скрипт подключения Python 3 к Qlik Sense Desktop:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">from websocket import create_connection

import json

ws = create_connection("ws://localhost:4848/app/")

data=json.dumps({
    'jsonrpc': '2.0',
    'id': 2,
    'method': 'GetActiveDoc',
    'handle': 1,
    'params': ['C:\\Users\\User\\Documents\\Qlik\\Sense\\Apps\\Анализ продаж - простое приложение.qvf']
})

print("Sending req...")
ws.send(data)

print("Receiving...")
result = ws.recv()

print("Received '%s'" % result)

qclosed = ws.close()
print("Closed '%s'" % qclosed)
</pre>
<p>Результат работы скрипта:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&gt;&gt;&gt; 
 RESTART: D:/QlikProject/Подключаемся к Qlik Sense из Python.py 
Sending req...
Receiving...
Received '{"jsonrpc":"2.0","method":"OnConnected","params":{"qSessionState":"SESSION_CREATED"}}'
Closed 'None'</pre>
<h2>Пример скрипта Python 3 для получения списка документов с hub Qlik Sense Desktop</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="null">from websocket import create_connection

import json

ws = create_connection("ws://localhost:4848/app/")

ws.send(json.dumps({
  "handle": -1,
  "method": "GetDocList",
  "params": [],
  "outKey": -1,
  "id": 1
}))

result = ws.recv()

while result:
    result=ws.recv()
    y = json.loads(result)
    print(y)

ws.close()</pre>
<p><strong>Список классов, свойств и методов</strong> <a href="https://betahelp.qlik.com/en-US/sense-developer/June2019/apis/EngineAPI/index.html" target="_blank" rel="noopener noreferrer">https://betahelp.qlik.com/en-US/sense-developer/June2019/apis/EngineAPI/index.html</a></p>
<p><img decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Qlik_Sense_Request_Response.png" alt="" width="505" height="246" class="aligncenter size-full wp-image-1436" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Qlik_Sense_Request_Response.png 505w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Qlik_Sense_Request_Response-300x146.png 300w" sizes="(max-width: 505px) 100vw, 505px" /></p>
<h2>Подключаемся к Qlik Sense Engine API с помощью Node.JS</h2>
<p>Рассматривается пример подключения к Qlik Sense Desktop</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:4848/app/engineData');

var request = {
    "handle": -1,
    "method": "GetDocList",
    "params": {},
    "outKey": -1,
    "id": 2
}

ws.onopen = function(event){
    ws.send(JSON.stringify(request));
    
    ws.onmessage = function (event) {
        var response = JSON.parse(event.data);

        if(response.method != ' OnConnected'){
            
            var obj = response.result;
            str = JSON.stringify(obj, null, 4);
            console.log(str);

        }
   }
}</pre>
<h2>Получаем перечень приложений Qlik Sense Desktop с помощью Enigma JS</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="js">const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// create a new session:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url =&gt; new WebSocket(url),
});

// bind traffic events to log what is sent and received on the socket:
session.on('traffic:sent', data =&gt; console.log('sent:', data));
session.on('traffic:received', data =&gt; console.log('received:', data));

// open the socket and eventually receive the QIX global API, and then close
// the session:
session.open()
    .then(function(global) {
        global.getDocList().then(function(docList) {
            for (i = 0; i &lt; docList.length; i++) {
                var AppName = docList[i].qDocName;
                console.log('App list:',JSON.stringify(AppName));
            }

            session.close();
        })
    });</pre>
<h2>Получаем свойства документа Qlik Sense с помощью запроса Enigma.JS через QS API Engine</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="null">const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// create a new session:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url =&gt; new WebSocket(url),
});

// bind traffic events to log what is sent and received on the socket:
session.on('traffic:sent', data =&gt; console.log('sent:', data));
session.on('traffic:received', data =&gt; console.log('received:', data));

// open the socket and eventually receive the QIX global API, and then close
// the session:
session.open()
    .then(function(global) {
        global.getDocList().then(docs=&gt;{
            global.openDoc("Анализ продаж - простое приложение.qvf").then(doc=&gt;{
                doc.getAppProperties().then(appProp =&gt; {
                    console.log(doc)
                    console.log(appProp)
                })
            })
        })
    })</pre>
<h2>Пример получения списка полей в Qlik Sense API Engine, с помощью Enigma.JS</h2>
<p>Пример актуален для Qlik Sense Desktop</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// Создаем новую сессию:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url =&gt; new WebSocket(url),
});

// Привязываем traffic events к log (что отправлено и что получено socket)
session.on('traffic:sent', data =&gt; console.log('sent:', data));
session.on('traffic:received', data =&gt; console.log('received:', data));

var config = { 
    schema: schema,
    docId: "Анализ продаж - простое приложение.qvf"
}

// Открываем сессию
session.open()
    .then(function(global) {

        global.openDoc(config.docId).then(function(doc){
            //Создаем SessionObject для FieldList
            doc.createSessionObject( {
                qFieldListDef: {
                    qShowSystem: false,
                    qShowHidden: false,
                    qShowSrcTables: true,
                    qShowSemantic: true,
                    qShowDerivedFields: true
                }, 
                qInfo: {
                    qId: "FieldList",
                    qType: "FieldList"
                }
            } ).then( function(list) {
                return list.getLayout();
                } ).then( function(listLayout) {
                    return listLayout.qFieldList.qItems;
                    } ).then( function(fieldItems) {
                        console.log(fieldItems)
                        } );
        })
    });</pre>
<h2>Пример javascript скрипта выгрузки / экспорта данных из QS, используя Enigma.JS</h2>
<p>В результате выполнения JS-скрипта Вы получите qURL:</p>
<blockquote>
<p class="EnlighterJSRAW" data-enlighter-language="null"><em>qUrl:&#8221;/Exports/1b2f8662-570b-4f77-b37b-94a4a347fe91\FileName(6bb5e11a-427a-4e77-ac30-e49abf602c87).xlsx&#8221;</em></p>
</blockquote>
<p data-enlighter-language="null"><strong>Код запроса exportData Enigma.JS Qlik Sense Table API:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// Создаем новую сессию:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url =&gt; new WebSocket(url),
});

// Привязываем traffic events к log (что отправлено и что получено socket)
session.on('traffic:sent', data =&gt; console.log('sent:', data));
session.on('traffic:received', data =&gt; console.log('received:', data));

var config = { 
    schema: schema,
    docId: "Анализ продаж - простое приложение.qvf"
}

var exportOptions = {
    "qFileType": "OOXML",
    "qPath": "/qHyperCubeDef",
    "qFileName": "FileName",
    "qExportState": 1
}

// Открываем сессию
session.open()
    .then((global) =&gt; {
        console.log('We are connected!')
        global.openDoc(config.docId)
        .then(doc =&gt; {
            doc.getObject('XPbGUe')
            .then((api) =&gt; {
                api.exportData(exportOptions)
                .then((reply) =&gt; {
                    console.log(reply);
                });
            });
        });
    });</pre>
<h2>Пример javascript скрипта выгрузки / экспорта данных из Qlik Sense Enterprise, используя Enigma.JS</h2>
<p>Данные выгружаем из прямой таблицы, в поле <strong>TargetFieldSelect</strong> выбираем значение <strong>NeededValueToSelect</strong>.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">const enigma = require('enigma.js');
const WebSocket = require('ws');
const path = require('path');
const fs = require('fs');
const fetch = require('node-fetch');

const schema = require('enigma.js/schemas/12.20.0.json');
const { Console } = require('console');

// Your Sense Enterprise installation hostname:
const engineHost = 'qlik.company.com';

// Make sure the port below is accessible from the machine where this example
// is executed. If you changed the QIX Engine port in your installation, change this:
const enginePort = 4747;

// 'engineData' is a special "app id" that indicates you only want to use the global
// QIX interface or session apps, change this to an existing app guid if you intend
// to open that app:
const appId = 'engineData';

// The Sense Enterprise-configured user directory for the user you want to identify
// as:
const userDirectory = 'QLIKDEV';

// The user to use when creating the session:
const userId = 'username';

// Path to a local folder containing the Sense Enterprise exported certificates:
const certificatesPath = './';

// Helper function to read the contents of the certificate files:
const readCert = (filename) =&gt; fs.readFileSync(path.resolve(__dirname, certificatesPath, filename));

const session = enigma.create({
  schema,
  url: `wss://${engineHost}:${enginePort}/app/${appId}`,
  // Notice the non-standard second parameter here, this is how you pass in
  // additional configuration to the 'ws' npm library, if you use a different
  // library you may configure this differently:
  createSocket: (url) =&gt; new WebSocket(url, {
    ca: [readCert('root.pem')],
    key: readCert('client_key.pem'),
    cert: readCert('client.pem'),
    headers: {
      'X-Qlik-User': `UserDirectory=${encodeURIComponent(userDirectory)}; UserId=${encodeURIComponent(userId)}`,
    },
  }),
});


// Открываем сессию
session.open()
    .then((global) =&gt; {
        global.openDoc('03h5ed8-5gdfb-40a5-b733-41fc4beb718e')
        .then(doc =&gt; {
            doc.getField("TargetFieldSelect")
            .then((appField) =&gt; {
              appField.select('NeededValueToSelect',false,0)
              .then((selectResult) =&gt; {
                console.log(selectResult);

                doc.getObject('jwAJbyL')
                .then((objectTable) =&gt; {
                  objectTable.getHyperCubeData("/qHyperCubeDef", [{ qTop: 0, qWidth: 10, qLeft: 0, qHeight: 1000 }])
                  .then(function (data) {
                    let dataSTR = JSON.stringify(data[0].qMatrix);
                    fs.writeFileSync('DataOutput.json', dataSTR);

                    session.close();
                  })
                })   

                
              })
            })
            
        })
              
                


    });</pre>
<p>_____</p>



<h1>Описание архитектуры Qlik Engine API</h1>
<h2>Структура объектов</h2>
<p><strong>Схемка сделана &#8220;на глаз&#8221;, но вероятно так и работает.</strong></p>
<p><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_structure_object_api_nodejs_enigmajs.png" alt="" width="417" height="344" class="aligncenter size-full wp-image-1459" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_structure_object_api_nodejs_enigmajs.png 417w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/qlik_sense_structure_object_api_nodejs_enigmajs-300x247.png 300w" sizes="(max-width: 417px) 100vw, 417px" /></p>
<p><strong>API Component Overview</strong></p>
<p><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/API_components_overview.png" alt="" width="1932" height="1016" class="aligncenter wp-image-1460 size-full" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/API_components_overview.png 1932w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/API_components_overview-300x158.png 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/API_components_overview-768x404.png 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/API_components_overview-1024x539.png 1024w" sizes="(max-width: 1932px) 100vw, 1932px" /></p>
<p><strong>MindMap API Integration</strong></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/mindmap_API_Integration_QlikSense_Qlik.png" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/mindmap_API_Integration_QlikSense_Qlik.png" alt="" width="993" height="983" class="aligncenter wp-image-1462 size-full" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/mindmap_API_Integration_QlikSense_Qlik.png 993w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/mindmap_API_Integration_QlikSense_Qlik-300x297.png 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/mindmap_API_Integration_QlikSense_Qlik-768x760.png 768w" sizes="(max-width: 993px) 100vw, 993px" /></a></p>
<p>Схема по-умолчанию для процесса authenticate (default flowchart)</p>
<p><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/default_flowchart_how_to_authenticate.png" alt="" width="952" height="1122" class="aligncenter size-full wp-image-1492" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/default_flowchart_how_to_authenticate.png 952w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/default_flowchart_how_to_authenticate-255x300.png 255w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/default_flowchart_how_to_authenticate-768x905.png 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/default_flowchart_how_to_authenticate-869x1024.png 869w" sizes="(max-width: 952px) 100vw, 952px" /></p>
<p><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/capabilities_API_DIV_tag_Saas_platform_to_proxy.png" alt="" width="904" height="644" class="aligncenter size-full wp-image-1744" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/capabilities_API_DIV_tag_Saas_platform_to_proxy.png 904w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/capabilities_API_DIV_tag_Saas_platform_to_proxy-300x214.png 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/capabilities_API_DIV_tag_Saas_platform_to_proxy-768x547.png 768w" sizes="(max-width: 904px) 100vw, 904px" /></p>
<p>&nbsp;</p>
<h2>YouTube Enigma.JS Qlik Sense API Development</h2>
<p><iframe title="Qlik Sense Development - Enigma.js to RxQ in ONE LINE OF CODE" width="750" height="563" src="https://www.youtube.com/embed/E4x6bMjyn74?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<h2>Youtube Другие видео по Qlik Sense API</h2>
<p><iframe title="Using the Qlik Sense Field API" width="750" height="422" src="https://www.youtube.com/embed/GJ0ImZR2ig0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><iframe title="Using the Qlik Sense Bookmark API" width="750" height="422" src="https://www.youtube.com/embed/OBGJErIwrto?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><iframe title="Qlik Sense API Based Mashups" width="750" height="422" src="https://www.youtube.com/embed/1rOu0sgvwwM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<h2><strong>Полезные ссылки по Enigma.JS и Qlik Sense API</strong></h2>
<ul>
<li><a href="https://dev.to/qlikbranch/getting-started-with-qlik-core-2781" target="_blank" rel="noopener noreferrer">https://dev.to/qlikbranch/getting-started-with-qlik-core-2781</a> &#8211; Getting Started with Qlik Core</li>
<li><a href="https://branch-blog.qlik.com/system-integration-with-qliks-apis-why-and-how-1663025cf54d" target="_blank" rel="noopener noreferrer">https://branch-blog.qlik.com/system-integration-with-qliks-apis-why-and-how-1663025cf54d</a> &#8211; System Integration with Qlik’s APIs — Why and How</li>
<li><a href="https://alcmst.net/2019/03/01/quiz-sense-who-wants-to-be-a-qlikionnaire/" target="_blank" rel="noopener noreferrer">https://alcmst.net/2019/03/01/quiz-sense-who-wants-to-be-a-qlikionnaire/</a> &#8211; Quiz Sense – Who wants to be a Qlikionnaire?</li>
</ul>
<p>_____</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/">Руководство разработчика API &#8211; Справочник по Qlik Sense API</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/api-reference-qlik-sense-qliksense/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Фишки (Tips &#038; Tricks) по Qlik Sense / QlikView. Секретные приемы Qlik</title>
		<link>https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/</link>
					<comments>https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Wed, 07 Aug 2019 11:19:57 +0000</pubDate>
				<category><![CDATA[Уровень 1]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[Фишки по Qlik Sense]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1363</guid>

					<description><![CDATA[<p>Фишки по коду и выражениям (script &#38; expression) Количество выбранных элементов в измерении GetSelectedCount([Товар Название]) Количество возможных элементов в измерении GetPossibleCount([Товар Название]) Получить количество полей из таблицы модели =Count({1&#60;$Table={'Таблица Фактов'}&#62;} $Field) Переменная &#8220;Условие-проверка&#8221;, что приложение Qlik перегрузилось сегодня vAppReload =match(today(0),today(2)) Получить в скрипте текст, заключенный между символами Текст между символами:<a class="moretag" href="https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/">Фишки (Tips &#038; Tricks) по Qlik Sense / QlikView. Секретные приемы Qlik</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><strong>Фишки по коду и выражениям (script &amp; expression)</strong></h2>



<h3><strong>Количество выбранных элементов в измерении</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">GetSelectedCount([Товар Название])</pre>
<h3><strong>Количество возможных элементов в измерении</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">GetPossibleCount([Товар Название])</pre>
<h3><strong>Получить количество полей из таблицы модели</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">=Count({1&lt;$Table={'Таблица Фактов'}&gt;} $Field)</pre>
<h3><strong>Переменная &#8220;Условие-проверка&#8221;, что приложение Qlik перегрузилось сегодня</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">vAppReload
=match(today(0),today(2))</pre>
<h3><strong>Получить в скрипте текст, заключенный между символами</strong></h3>
<p><strong>Текст между символами:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">=TextBetween('lkj dsf 554 [Текст в квадратных скобках]','[',']')</pre>
<h3><strong>Как менять значения переменной по кругу при нажатии на кнопку</strong></h3>
<p><strong>Как менять значения переменной по кругу:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">=pick(match($(пПеременная),1,2,3,4,5,6),2,3,4,5,6,1)</pre>
<h3><strong>Сравнение поля с конкретным временем</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Time(Left([Время обработки],8))&gt;MakeTime(18,30,00)</pre>
<h3><strong>Время обновления файла</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Let vFileDateTimeModified = FileTime('C:\QS_QVD\Чеки.qvd');</pre>
<h3><strong>Выход из скрипта по условию</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Exit Script when a=1;</pre>
<h3><strong>Значение по умолчанию для конструкции Pick(Match())</strong></h3>
<p><strong>Pick &amp; Match &#8211; значение по-умолчанию, если не найдено условие</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Pick(Match(lower([Флаг]),'true','false')+1,'Не определено','Да','Нет') As [Какой-то аналитический признак]</pre>
<h3><strong>Проверка поля на пустоту в скрипте Qlik Sense</strong></h3>
<p><strong>Проверка поля на пустоту (вместо not IsNull and &lt;&gt;&#8221;)</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Len(Trim([Поле справочника]))=0</pre>
<h3><strong>Использование Match при наличии пустых значений в поле</strong></h3>
<p><strong>Наткнулся, что в Match не учитывает пустые значения (null).</strong> Т.е. условие в скрипте</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">UPPER([Ассортимент]) &lt;&gt; 'ВЕЛОСИПЕДЫ'</pre>
<p>не эквивалентно условию</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Match(UPPER([Ассортимент]),'ВЕЛОСИПЕДЫ')=0</pre>
<p>Решилось:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">RangeSum(0,Match(UPPER([Ассортимент]),'ВЕЛОСИПЕДЫ'))=0;</pre>
<p>Аналогично в <strong>WildMatch</strong></p>
<h3><strong>Сбросить фильтры по всем полям какой-то конкретной таблицы</strong></h3>
<p>Если Вам при расчете показателя необходимо сбросить фильтры по всем полям какой-то таблицы, то необходимо в приложении создать переменную пСброситьВыборкиПолейТаблицы:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">$(=CONCAT({1&lt;$Table = {'$1'}&gt;} DISTINCT '['&amp; $Field &amp;']=', ',') )</pre>
<p>Далее в выражении нужно записать следующую формулу (Выражение в таблице для расчета показателя &#8216;Текущий остаток&#8217;):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">sum({&lt;$(пСброситьВыборкиПолейТаблицы(Календарь))&gt;} [Текущий остаток])</pre>



<h2 class="wp-block-heading"><strong>Tips &amp; Tricks по работе с визуализацией</strong></h2>



<p><strong>Редактирование таблицы в Qlik Sense с большим количеством столбцов</strong></p>
<p>В Qlik Sense все изменения производимые в столбцах мгновенно начинают отображаться в таблице (автоматическое применение изменений). Когда столбцов много, то любой update в колонках замедляет разработку фактически в несколько раз. Чтобы этого избежать, можно в условии вычисления всей таблицы поставить ноль, внести изменения и потом условие изменения убрать. Т.е. фактически отрубить автоматический расчет таблицы вручную.</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/">Фишки (Tips &#038; Tricks) по Qlik Sense / QlikView. Секретные приемы Qlik</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/qlik-sense-secret-tips-tricks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Этапы проекта Qlik Sense. Краткий обзор состава работ по проекту</title>
		<link>https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/</link>
					<comments>https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Tue, 18 Jun 2019 20:57:30 +0000</pubDate>
				<category><![CDATA[Уровень 1]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[Qlik Project Steps]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[Состав работ по проекту Qlik]]></category>
		<category><![CDATA[Требования внедрение проект]]></category>
		<category><![CDATA[Этапы проекта Qlik Sense]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1150</guid>

					<description><![CDATA[<p>Введение Qlik Project Steps Qlik Sense &#8211; очень гибкая платформа создания отчетности. В ней нет ограничений на количество приложений, на количество отчетов, количество данных. Вы можете создать 1 большое приложение с множеством различных отчетов, либо создать много приложений, в каждом из которых будет 1-2 сложных по структуре или логике отчета.<a class="moretag" href="https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/">Этапы проекта Qlik Sense. Краткий обзор состава работ по проекту</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Введение Qlik Project Steps</h2>



<p><strong>Qlik Sense</strong> &#8211; очень гибкая платформа создания отчетности. В ней нет ограничений на количество приложений, на количество отчетов, количество данных. Вы можете создать 1 большое приложение с множеством различных отчетов, либо создать много приложений, в каждом из которых будет 1-2 сложных по структуре или логике отчета. Все зависит от Ваших потребностей. Единственно что нужно учитывать &#8211; это затраты на поддержку решений.</p>



<p>Также можно создать приложение Qlik Sense, в котором в библиотеке задать нужные измерения и показатели, а пользователи будут сами создавать простые отчеты, графики, дашборды, аналитические панели.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="657" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Phases_of_Project_Management_Qlik_Sense_Ivan_Shamaev-1024x657.png" alt="" class="wp-image-1588" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Phases_of_Project_Management_Qlik_Sense_Ivan_Shamaev-1024x657.png 1024w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Phases_of_Project_Management_Qlik_Sense_Ivan_Shamaev-300x192.png 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Phases_of_Project_Management_Qlik_Sense_Ivan_Shamaev-768x493.png 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/08/Phases_of_Project_Management_Qlik_Sense_Ivan_Shamaev.png 1278w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Этапы создания модели Qlik Sense</h2>



<p><strong><span style="color:#005104" class="tadv-color">Рассмотрим основные этапы создания модели Qlik Sense:</span></strong></p>



<p>Краткая схема создания приложения выглядит следующим образом:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="2224" height="2240" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL.png" alt="" class="wp-image-2063" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL.png 2224w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL-150x150.png 150w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL-298x300.png 298w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL-768x774.png 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/11/Qlik_Sense_OverView_ETL-1017x1024.png 1017w" sizes="(max-width: 2224px) 100vw, 2224px" /></figure>



<p><strong><span style="background-color: #ffff00;">1.</span> Для того, чтобы создать аналитическую модель (Отчет, дашборд и т.п.) изначально необходимо получить требования от заказчика (выявить основные потребности).</strong> Вы проводите встречу с заказчиком, на которой записываете основные его желания, затем, обрабатывая первичные требования Вы задаете уточняющие вопросы заказчику. <br>Очень часто заказчики опускают нужные подробности, которые могут помочь в решении задачи. Делают они это зачастую не умышленно, а потому что для них это очевидно (каждый день с этим работают).</p>
<p>Иногда заказчик может опираться на вымышленные сущности, которых нет в учетных системах, либо они ведутся там очень и очень криво. Это все может привести к тому, что на пол пути Вы поймете, что разрабатываемый отчет довести до конца не получится. И ладно, если Вы на этот отчет потратили пол дня, а если Вы уже 2 недели что-то делаете и приходите в тупик?</p>
<p>Иногда заказчик хочет получить отчет, который можно получить из учетной системы. Он уже там есть, только заказчик про это не знает.</p>
<p><strong>Еще 1 совет</strong> &#8211; всегда стремитесь избегать в своей работе с данными, которые пользователи ведут в Excel! На этапе выявления требований стремитесь заставить заказчика отказаться от excel, Хотя бы в сторону MS Access. Ну или обязать заказчика разработать жесткую форму для ведения данных с проверками.</p>
<p><strong><span style="background-color: #ffff00;">2.</span> Дальше начинается работа с источниками данных.</strong> В идеале сначала проводится краткий аудит учетных систем на предмет того, как вводятся данные.</p>
<p>На этом этапе необходимо проработать перечень источников из которых Вы будете выгружать данные. Для этих работ целесообразно привлекать системных аналитиков или разработчиков учетных систем, которые знакомы со структурой базы данных, могут помочь написать тот или иной запрос. Иначе Вам придется самостоятельно изучить в лучшем случае документацию, в худшем случае учетную систему (со всеми ее странностями и кастомизациями).</p>
<p>На этом этапе необходимо проверить наличие в справочниках нужных атрибутов (согласно требованиям), наличие фактов, смоделировать (например в Excel) расчеты, которые нужно получить в рамках аналитической модели.<br>Для снижения риска проекта по Qlik Sense рекомендую делать на предварительной стадии прототип модели на очень ограниченном объеме данных, проверить структуру модели, те или иные гипотезы. <strong>Внимание:</strong> самое важное на первом и втором этапах не уйти глубоко в детали и не выдумать из небольшого, быстрого и полезного проекта <strong>ОГРОМНОГО МОНСТРА</strong>.</p>
<p>В ходе второго этапа (при аудите учетных систем) уточняется ТЗ и разрабатывается план проекта.</p>
<p><strong><span style="background-color: #ffff00;">3.</span>Выстраиваем структуру окружения QS Проекта на Windows Сервере. </strong>Если в рамках проекта планируется использовать <strong>Qlik Sense Desktop</strong> &#8211; то требуется одна архитектура организации окружения (с привлечением QlikView Desktop), если <strong>Qlik Sense Enterprice</strong> &#8211; то другая архитектура.</p>
<p>Здесь необходимо создать каталог папок, в которых будут храниться приложения/скрипты .qvs для выгрузки данных (Extractor),&nbsp; приложения/скрипты .qvs для трансформации данных (Transform), приложения/скрипты .qvs для сборки QVD для конечных аналитических приложений.</p>
<p><strong>Возможная структура папок для хранения QVD-файлов:</strong></p>
<ul style="list-style-type: circle;">
<li><span style="background-color: #ebebeb;"><strong>DataSource</strong></span><br>
<ul style="list-style-type: square;">
<li><strong>RawQVD</strong> &#8211; по каждой системе создается отдельная папка в директории RawQVD и в нее выгружаются таблицы.</li>
<li><strong>RawFiles </strong>&#8211; В этой директории хранятся файлы, которыми управляет отдел Qlik Sense. Это могут быть файлы с настройками, временные справочники Excel, специфические меппинги.</li>
<li><strong>DataTier1 </strong>&#8211; в этой директории находятся файлы QVD, которые прошли первичную обработку в процессах обработки данных. На этом этапе в документы добавляются товары, в справочники добавляются различные атрибуты, флаги. Производится расшифровка перечислений (например, для 1С Предприятия) и т.д. Обычно в DataTier1 данные хранятся также по папкам с названиями систем учета.</li>
<li><strong>DataTier2 </strong>&#8211; Агрегированные данные на основе данных DataTier1 из нескольких источников данных. Здесь QVD файлы группируются по тематике, например, продажи, остатки и т.д.</li>
<li><strong>DataTier3 </strong>&#8211;&nbsp;</li>
</ul>
</li>
</ul>
<p><strong><span style="background-color: #ffff00;">4.</span> На четвертом этапе идет основная работа с данными.</strong> Строится процесс выгрузки данных из источников. Это может быть одна база данных или несколько баз данных. При этом в качестве источника данных может выступать облачный сервис (<strong>bitrix24, amocrm, мойсклад</strong> и т.п.).</p>
<p><strong><span style="background-color: #ffff00;">4.1.</span> Разработка Extractor на Qlik</strong><br><strong></strong></p>
<p><strong>Виды Extractor (выгрузки)</strong></p>
<ol>
<li><strong>Выгрузка полной таблицы из базы данных и сохранение в формате QVD.</strong> Подходит для источников данных с небольшим объемом данных (нужно учитывать скорость наполнения базы данных, при этом объем транзакций год из года приростает), справочников из ERP систем. Данные выгружаются 1 в 1 с минимальными преобразованиями форматов, без агрегирования и доп.расчетов.</li>
<li><strong>Инкрементальная выгрузка данных из DataBase учетных систем.</strong> Здесь не всегда так просто. <strong>Во-первых,</strong> в учетной системе должны каким-то образом помечаться измененные записи, а также должна быть дата создания сущности. Для таких целей подойдут поля <em><strong>[Дата создания]</strong></em> и <em><strong>[Дата модификации]</strong></em>. Если нет полей, по которым можно было бы установить список измененных сущностей (документов, проводок), то придется делать инкрементальную загрузку по периодам (т.е. принимать, что данные в старом периоде, например, которые создавались больше года или полугода назад не изменяются). И перегружать только скользящий период год или полгода.<br>Почитать про инкрементальную загрузку можно здесь <a href="https://ivan-shamaev.ru/practical-issues-in-qlikview-part-2/#___Incremental_Load" target="_blank" rel="noopener noreferrer">https://ivan-shamaev.ru/practical-issues-in-qlikview-part-2/#___Incremental_Load</a><br><strong>Во-вторых,</strong> придется всегда иметь возможность выгрузить систему полностью (на случай, если все данные &#8220;испортились&#8221; по каким-то чрезвычайным причинам).<br><strong>В-третьих,</strong> инкрементальная загрузка требует больших трудозатрат в поддержке и разработке (но она дает выигрыш в скорости).</li>
</ol>
<p>Очень часто обычную и инкрементальную выгрузку данных комбинируют. Самые большие данные переводят на инкремент, данные не критичные &#8211; выгружают в полном объеме.</p>
<p><strong><span style="background-color: #ffff00;">4.2.</span> </strong>Итак, после того, как Вы выгрузили данные из базы данных или облачного сервиса в QVD файлы, затем необходимо эти данные обработать (очистить, рассчитать показатели, агрегировать, обогатить дополнительными атрибутами, разметить флагами и т.д.) и положить обработанные данные в отдельный слой (например, <strong>DataTier1</strong>). Эти трансформированные данные Вы загружайте непосредственно в саму модель Qlik Sense или создаете ещё один дополнительный слой данных со сложными расчетами для конкретной модели данных.</p>
<p>Самое главное &#8211; не дублировать одинаковые данные в слоях. При повышении уровня слоя данные должны агрегироваться (группироваться). Нижние слои являются более общими, верхние слои &#8211; конкретно для каждой модели данных (или по направлениям анализа).</p>
<p><strong><span style="background-color: #ffff00;">5.</span> Проектируем слои приложения.</strong> Вот пример структуры аналитического приложения Qlik Sense:</p>
<ul>
<li>Дашборд (KPI, тренды, сигналы)</li>
<li>Слой-аналитика (графики, диаграммы, пузырьки и т.п.)</li>
<li>Слой-гибкий анализ / конструктор отчетов (Ad-hoc анализ)</li>
<li>Слой детальные данные (Таблицы и сводные таблицы, подсвечиваемые поля, статические отчеты)</li>
</ul>
<p><strong>Лайфхак для прототипирования в небольших проектах:</strong> В качестве инструмента прототипирования для визуализации можно использовать сам Qlik Sense. При этом сложные вычисления Вы не прописываете, а заменяете константами. При этом Ваш прототип будет максимально приближен к функциональности конечного продукта <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><strong>Пример прототипа на Qlik Sense:</strong></p>
<p><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/06/prototip_qliksense_project.jpg" alt="" width="1365" height="603" class="aligncenter size-full wp-image-1317" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/06/prototip_qliksense_project.jpg 1365w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/06/prototip_qliksense_project-300x133.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/06/prototip_qliksense_project-768x339.jpg 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/06/prototip_qliksense_project-1024x452.jpg 1024w" sizes="(max-width: 1365px) 100vw, 1365px" /></p>
<p><strong><span style="background-color: #ffff00;">6.</span> Успешность проекта</strong> зависит от правильности организации по нескольким направлениям -данные, скрипты (написание, комментарии и т.д.), организация ETL, методологии расчетов:</p>
<ul>
<li><strong>Качество данных</strong> &#8211; качество любого аналитического приложения в первую очередь зависит от того, насколько хорошо выстроены процессы фиксирования данных в учетных системах. Если в системах много дублей, много криво заполненных справочников, есть пустые документы, не проставлены те или иные атрибуты в справочниках, то очень много усилий придется потратить на то, чтобы собрать полноценную аналитическую модель с минимальными погрешностями в расчетах.</li>
<li><strong>Качество методологий учета, расчетов</strong> &#8211; прежде чем разрабатывать сложную модель для анализа или исследования данных, необходимо (хотя бы кратко) описать методологию расчетов. Можно все расчеты спроектировать в Excel и отдать его разработчику (иногда это самый подходящий и быстрый вариант). <br><strong>Что такое методология расчета?</strong> В первую очередь под этим я понимаю описание расчета того или иного показателя. Как в процессе расчета осуществляются группировки, как обрабатываем нули, как округлять данные, как обрабатывать деление на ноль и т.п. вопросы.<br>В случае расчета <strong>суммы продаж</strong> методология расчета не требуется, а вот в случае <strong>расчета сопоставимых продаж за период (Like-For-Like)</strong> &#8211; требуется, т.к. возникает очень много вопросов. Или например как посчитать <strong>ROI по мероприятию или по акции</strong>. Самым лучшим решением &#8211; это когда бизнес-пользователь проделывает в Excel расчеты руками на одном клиенте, 1 акции (т.е. берет ограниченный объем данных и на нем строит модель, корректирует методику, делает проверку, утверждает ее со своим руководством или владельцем бизнеса и только потом отдает на автоматизацию расчетов). Но этот идеальный случай встречается редко и зависит от вменяемости бизнес-пользователя.</li>
<li><strong>Качество окружения QS (скрипты, изменения, аудит изменений, анализ загрузки ресурсов и т.д.)</strong> &#8211; от того, насколько правильно структурировано пространство QS, зависят накладные расходы на поддержку решения Qlik Sense. Очень важно оставлять комментарии в скриптах, создать инструмент для отслеживания процессов загрузки данных. Если сразу придерживаться строгих правил порядка, то потом при быстром масштабировании Вам будет легче управлять всей инфраструктурой.</li>
</ul>



<h2 class="wp-block-heading">Qlik Deployment Framework</h2>



<div class="wp-block-file"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/07/Qlik_Deployment_Framework_QlikView_Development_Guide.pdf">Qlik Deployment Framework QlikView Development Guide </a><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/07/Qlik_Deployment_Framework_QlikView_Development_Guide.pdf" class="wp-block-file__button" download>Скачать</a></div>



<h2 class="wp-block-heading">Размышления консультанта &#8220;ВСЛУХ&#8221;</h2>



<p><em>Возможно кому-то мои рассуждения покажутся &#8220;водой&#8221;, возможно кто-то сделает заметку, кто-то пройдет мимо, кто-то добавит в комментариях свои мысли. Главное &#8211; это просто мысли, мои заметки, которыми я хочу поделиться.</em></p>
<h3>Об отчетах</h3>
<p>В компании может быть все плохо, но отчеты об этом могут не говорить. Истинные проблемы начинают всплывать, когда компания начинает генерировать убытки.</p>
<p>В компании может быть 1-3 отчета и из них может быть многое понятно о текущих делах. А может быть десятки отчетов, из которых ничего не понятно (куда смотреть, с чем нужно работать, куда прикладывать усилия). Для работы с отчетами в таких случаях требуется штат аналитиков, которые будут сидеть и обрабатывать автоматически рассылаемые отчеты.</p>
<p>Направление аналитики должно спускаться сверху, причем именно верхнеуровневые показатели должны показываться руководству с графическими представлениями. Руководитель должен открыть дашборд или отчет и дать указание подчиненным руководителям или линейным сотрудникам, что необходимо улучшить в компании. Или какой фронт работы выполнить.</p>
<h3>Качество приложения Qlik Sense</h3>
<p><strong>Качество приложения Qlik Sense</strong> зависит напрямую от качества ваших учетных данных. Очень хорошие данные (структурированные, без мусора, без дублирования, без двоякости и т.п.) = <strong>ОТЛИЧНОЕ ПРИЛОЖЕНИЕ QLIK SENSE.</strong></p>
<p>Очень плохое качество данных (пропуски, дублирование, кривая инфа, несоответствия, пустоты, кривые справочники, кривые документы, 100500 способов представления одних и тех же отчетов, но с разными значениями) &#8211; <strong>ужасная аналитика, ужасный ETL, ужасное приложение, ужасный ROI от бизнес-аналитики?</strong></p>
<h3>Куча рассылаемых отчетов Excel &#8211; интерес руководителей, но не владельцев компании</h3>
<p><span style="font-size: inherit;">Согласитесь, что подделать сложный / запутанный отчет гораздо проще, чем манипулировать данными аналитических панелей. Любая прозрачность данных &#8220;больного бизнеса&#8221; &#8211; это риск для среднего и высшего руководства компании. Они понимают, что владельцы сразу же придут к ним, если у владельца будет под рукой удобный аналитический инструмент. </span></p>
<p>Исходя из этих предпосылок, можно предположить, что руководство (не владельцы) никогда не будут заинтересованы в разработке прозрачных дашбордов, с понятными и простыми сигналами &#8220;что не так&#8221; и &#8220;что нужно делать&#8221;. Они будут заинтересованы только в том, чтобы максимально неудобно представить данные, из которых сложно сделать &#8220;нужные выводы&#8221;.</p>
<p>Скорей всего это связано с тем, что люди, которые ставят ТЗ на разработку отчетов не имеют премий от прибыли компании, или от снижения издержек. Самая главная их задача &#8211; на совещаниях с умными лицами презентовать очередную порцию &#8220;умных отчетов&#8221;, чтобы их ценили за объемы аналитической работы.</p>
<p>Запомните &#8211; владельцам бизнеса нужен сигнал (светофор), чтобы понять, нужно ли кого-то пнуть, чтобы красный свет загорелся хотя бы на желтый, а в лучшем случае на зеленый.</p>
<p>Построить такой отчет очень сложно, т.к. нужно думать, гораздо проще придумать мудренную Excel с кучей столбцов и строк, которые зачастую между собой никак не коррелируют.</p>
<h3>Создавайте базу знаний о бизнес-процессах в компании, делайте внутреннюю wiki</h3>
<p>Очень часто и в разных компаниях видел ТЗ, в которых присутствует огромная куча различной терминологии, сокращений, формул, которые никак не расшифровываются и не поясняются развернуто.</p>
<p>Плюс очень часто в компании тот или иной бизнес-процесс может быть запутанным и нигде не описанным. Начиная разработку специалист шерстит всевозможные документы, письма, опрашивает коллег по тому или иному термину.</p>
<p>Приходит новый специалист и &#8220;исследовательская&#8221; работа повторяется снова.</p>
<p>Выход &#8211; создать внутреннюю базу знаний о бизнес-процессах в компании. Не называя имен компаний, я назову позитивные фишки, с которыми я встречался при устройстве в ту или иную компанию (ну или мои предположения, как это может выглядеть иначе в других компаниях):</p>
<ol>
<li>При выходе на работу Вам приходит ссылка на обзорный курс про особенности бизнеса (компании), особенности рынка. Описываются основные бизнес-процессы (укрупненным планом). Описываются основные бизнес-термины. После прохождения курса можно пройти более углубленный курс, например, по расчетам тех или иных показателей бизнеса.</li>
<li>Возможность поработать 1 день на передовой бизнеса (фронт-офис) или посетить демо фронт-офис, в котором &#8220;как в жизни&#8221; можно понять что и как происходит.</li>
<li>При выходе на работу в первый день Вам приходит ссылка на страницу в wiki, где в неформальном виде описана вся движуха в компании, отделы и т.п. Неформальный стиль изложения &#8211; легкость восприятия информации.</li>
<li>Схемы, блок-схемы, потоки данных &#8211; иными словами наглядность информации, что происходит в компании.</li>
<li>Наличии системы управления требованиями, культура написания ТЗ. Когда Вам приходится искать то или иное требование в почте &#8211; это самое плохое, что только можно представить. А еще хуже, когда часть находится в почте, часть в мессенджере, часть в системе управления проектами и т.д.</li>
<li>База знаний запросов к системам. Один раз написали запрос &#8211; сохранили в базу с осмысленным заголовком и описанием, дальше другой сотрудник может этим запросом воспользоваться (если у него есть доступ к БД).</li>
</ol>
<h3><span>Здравый смысл</span></h3>
<p>Оценивайте полученные результаты, показатели, отчеты на здравый смысл. Если Вы получили ROI = 500%, то очень вероятно стоит перепроверить (и желательно 2 раза) методику расчета показателя. Если показатель дает очень расплывчатый результат, то стоит ли этот показатель считать? Это как по популяции кроликов в южном округе оценивать спрос на мясо кроликов по стране. Проще потратить силы на отчет P&amp;L, и понять откуда приходят деньги и куда уходят, чем заниматься пространственной аналитикой.</p>
<p><strong>Методология расчета и реальная жизнь</strong></p>
<p>Просите методолога/заказчика на основе его алгоритма сделать предварительный расчет в Excel. Так Вы сможете оценить жизнеспособность методологии расчета.<br />Разработка отчета в Qlik = 60 часов (например), предварительный расчет в Excel = 4-8 часов (со сбором данных)</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/">Этапы проекта Qlik Sense. Краткий обзор состава работ по проекту</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/etapi-proekta-qlik-sense-sostav-rabot-vnedrenie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Сравнение двух периодов в Qlik Sense &#038; Date Picker</title>
		<link>https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/</link>
					<comments>https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Sun, 07 Apr 2019 08:49:29 +0000</pubDate>
				<category><![CDATA[Qlik Sense Блог]]></category>
		<category><![CDATA[date picker]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[set analysys]]></category>
		<category><![CDATA[Альтернативные состояния]]></category>
		<category><![CDATA[сравнение двух периодов]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=920</guid>

					<description><![CDATA[<p>В этой статье будет разобран подход для сравнения продаж по двум периодам. В примере будут использованы: Set Analysis, Альтернативные состояния, Расширение Date Picker и Qlik Sense (версия Feb 2019). Генерация данных Qlik Sense Для начала сгенирируем данные для модели. Используем календарь Qlik Sense и генерацию элементов справочников в цикле: Загружаем<a class="moretag" href="https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/">Сравнение двух периодов в Qlik Sense &#038; Date Picker</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>В этой статье будет разобран подход для сравнения продаж по двум периодам. В примере будут использованы: Set Analysis, Альтернативные состояния, Расширение Date Picker и Qlik Sense (версия Feb 2019).</p>



<h2 class="wp-block-heading">Генерация данных Qlik Sense</h2>



<p>Для начала сгенирируем данные для модели. Используем календарь Qlik Sense и генерацию элементов справочников в цикле:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SET ThousandSep=' ';
SET DecimalSep=',';
SET MoneyThousandSep=' ';
SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 ₽;-# ##0,00 ₽';
SET TimeFormat='h:mm:ss';
SET DateFormat='DD.MM.YYYY';
SET TimestampFormat='DD.MM.YYYY h:mm:ss[.fff]';
SET FirstWeekDay=0;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='ru-RU';
SET CreateSearchIndexOnReload=1;
SET MonthNames='янв;фев;мар;апр;май;июн;июл;авг;сент;окт;ноя;дек';
SET LongMonthNames='январь;февраль;март;апрель;май;июнь;июль;август;сентябрь;октябрь;ноябрь;декабрь';
SET DayNames='пн;вт;ср;чт;пт;сб;вс';
SET LongDayNames='понедельник;вторник;среда;четверг;пятница;суббота;воскресенье';
SET NumericalAbbreviation='3:тыс.;6:млн.;9:млрд.;12:трлн.;15:P;18:E;21:Z;24:Y;-3:m;-6:μ;-9:n;-12:p;-15:f;-18:a;-21:z;-24:y';

//Формирование календаря
QuartersMap:  
MAPPING
LOAD rowno() as Month,  
     'Кв.' &amp; Ceil (rowno()/3) as Quarter  
AUTOGENERATE (12);

Let varMinDate 	= Num(MakeDate(2017,1,1));
Let varMaxDate 	= Num(Today());
      
TempCalendar:  
LOAD $(varMinDate) + Iterno()-1 As Num,  
     Date($(varMinDate) + IterNo() - 1) as TempDate
AutoGenerate 1
While $(varMinDate) + IterNo() -1 &lt;= $(varMaxDate);  
      
Календарь:  
Load 
     Date(TempDate) 															As Дата,
     week(TempDate) 															As Неделя,
     Month(TempDate) 															As Месяц,
     Text(SubField(Date(TempDate,'DD MMMM YYYY'),' ',2))						As МесяцПолный,
     ApplyMap('QuartersMap', month(TempDate), Null()) 							As Квартал,
     Year(TempDate) 															As Год,
     Day(TempDate) 																As НомерДень,
     Week(weekstart(TempDate)) &amp; '-' &amp; WeekYear(TempDate) 						As НеделяГод,
     Month(TempDate) &amp; '-' &amp; Year(TempDate) 									As МесяцГод,
     ApplyMap('QuartersMap', month(TempDate), Null()) &amp; '-' &amp; Year(TempDate) 	As КварталГод,
     WeekDay(TempDate)													 		As ДеньНедели
Resident TempCalendar  
Order By TempDate ASC;

Drop Table TempCalendar;

// Генерация справочников
For i=1 to 15
  Контрагенты:
  Load
       $(i)	As [Контрагент ID],
       'Контрагент $(i)' As [Контрагент Наименование]
  AutoGenerate 1;
Next i

For i=1 to 20
  Товары:
  Load
       $(i)	As [Товар ID],
       'Товар $(i)' As [Товар Наименование]
  AutoGenerate 1;
Next i

GenerateFact:
LOAD [Контрагент ID]
Resident Контрагенты;

JOIN (GenerateFact)
LOAD [Товар ID]
Resident Товары;

JOIN (GenerateFact)
LOAD Дата
Resident Календарь;

NoConcatenate
Fact:
LOAD 
     [Контрагент ID], 
     [Товар ID], 
     Дата,
     Rand()*(Rand() + Rand()*Rand())*(4000-4000*Rand()) + Rand()*100 - Rand()*50 as Продажи
Resident GenerateFact;

DROP Table GenerateFact;</pre>



<p>Загружаем данные, получится такая вот модель Qlik Sense:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="632" height="541" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_two_period_sales.jpg" alt="" class="wp-image-923" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_two_period_sales.jpg 632w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_two_period_sales-300x257.jpg 300w" sizes="(max-width: 632px) 100vw, 632px" /></figure>



<h2 class="wp-block-heading">Создаем панель сравнения продаж по двум периодам</h2>



<p>Первым шагом необходимо создать 2 состояния в режиме правки листа (Основные элементы -&gt; Другие состояния):</p>



<ul class="wp-block-list"><li><em>ВыборкаДаты1</em></li><li><em>ВыборкаДаты2</em></li></ul>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="308" height="393" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_alternativnie_sostoyaniya_compare.jpg" alt="" class="wp-image-925" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_alternativnie_sostoyaniya_compare.jpg 308w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_alternativnie_sostoyaniya_compare-235x300.jpg 235w" sizes="(max-width: 308px) 100vw, 308px" /></figure>



<p>Затем используем элемент Qlik Dashboard bundle -&gt; Date Picker (выбираем дату и в свойствах &#8220;Другие состояния&#8221; выбираем ВыборкаДаты1). Создаем два элемента Date Picker (второй настраиваем с состоянием ВыборкаДаты2):</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="718" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_date_picker-1024x718.jpg" alt="" class="wp-image-927" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_date_picker-1024x718.jpg 1024w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_date_picker-300x210.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_date_picker-768x538.jpg 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_date_picker.jpg 1037w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Затем формируем таблицу: в измерении Контрагент, в мерах создаем следующие выражения:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="616" height="555" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_table_settings.jpg" alt="" class="wp-image-928" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_table_settings.jpg 616w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qlik_sense_table_settings-300x270.jpg 300w" sizes="(max-width: 616px) 100vw, 616px" /></figure>



<p><strong>Выражение 1:</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="389" height="79" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_expression_1.jpg" alt="" class="wp-image-929" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_expression_1.jpg 389w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_expression_1-300x61.jpg 300w" sizes="(max-width: 389px) 100vw, 389px" /></figure>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sum({&lt;Дата=[ВыборкаДаты1]::Дата>} [Продажи])</pre>



<p><strong>Метка для выражения 1:</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="573" height="82" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_label_1.jpg" alt="" class="wp-image-930" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_label_1.jpg 573w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_compare_label_1-300x43.jpg 300w" sizes="(max-width: 573px) 100vw, 573px" /></figure>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">='Продажи '&amp;min({[ВыборкаДаты1]} Дата)&amp;' - '&amp;max({[ВыборкаДаты1]} Дата)</pre>



<p>Для выражения 2 делаем все по аналогии, только используем состояние <strong>[ВыборкаДаты2]</strong>.</p>



<h2 class="wp-block-heading">Скачать пример Qlik Sense со сравнением двух периодов</h2>



<div class="wp-block-file"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Сравнение-двух-периодов-в-Qlik-Sense.zip">Сравнение двух периодов в Qlik Sense </a><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Сравнение-двух-периодов-в-Qlik-Sense.zip" class="wp-block-file__button" download>Скачать</a></div>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/">Сравнение двух периодов в Qlik Sense &#038; Date Picker</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/comparing-two-periods-date-picker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>String/Text To Number (строка в число) Qlik Sense</title>
		<link>https://qliksense.ivan-shamaev.ru/string-text-to-number-qliksense-qlik-sense/</link>
					<comments>https://qliksense.ivan-shamaev.ru/string-text-to-number-qliksense-qlik-sense/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Sat, 06 Apr 2019 18:56:07 +0000</pubDate>
				<category><![CDATA[Qlik Sense Блог]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[string to number]]></category>
		<category><![CDATA[строка в число]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=843</guid>

					<description><![CDATA[<p>Для перевода строки в число, необходимо использовать Num#. Пример вычислений:</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/string-text-to-number-qliksense-qlik-sense/">String/Text To Number (строка в число) Qlik Sense</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Для перевода строки в число, необходимо использовать Num#.</p>



<p><strong>Пример вычислений:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">text(100.15481818184)+1 = 
Num(text(100.15481818184))+1 = 
Num#(text(100.15481818184))+1 = 101,15481818184
Num#(text(-100.15481818184))+1 = -99,15481818184</pre>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/string-text-to-number-qliksense-qlik-sense/">String/Text To Number (строка в число) Qlik Sense</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/string-text-to-number-qliksense-qlik-sense/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Qlik Sense Search-Parsing Template String или Поиск по шаблону</title>
		<link>https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/</link>
					<comments>https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Thu, 04 Apr 2019 02:33:59 +0000</pubDate>
				<category><![CDATA[Qlik Sense Блог]]></category>
		<category><![CDATA[parsing file]]></category>
		<category><![CDATA[parsing string]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qlik парсинг]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[search string]]></category>
		<category><![CDATA[парсинг]]></category>
		<category><![CDATA[поиск по шаблону]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=908</guid>

					<description><![CDATA[<p>Сегодня приведу микро пример, как вычленить строку из текстового файла по заданному шаблону. Например, у нас есть файл, в котором перемешаны время, даты, данные. Нам нужно вычленить время в формате &#8216;??:??&#8217; и оставить только даты и данные (для дальнейшего парсинга). Итак, код для Qlik Sense Script: А вот и результат<a class="moretag" href="https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/">Qlik Sense Search-Parsing Template String или Поиск по шаблону</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Сегодня приведу микро пример, как вычленить строку из текстового файла по заданному шаблону. Например, у нас есть файл, в котором перемешаны время, даты, данные. Нам нужно вычленить время в формате <strong>&#8216;??:??&#8217;</strong> и оставить только даты и данные (для дальнейшего парсинга).</p>



<p><strong>Итак, код для Qlik Sense Script:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">LOAD
    text([@1:n]) as строка,
    rowno() as rownum,
    if(text([@1:n]) like '??:??',1,0) as [время флаг]
FROM [lib://source/расходы.txt]
(fix, utf8, no labels)
where text([@1:n])&lt;>''
;</pre>



<p><strong>А вот и результат парсинга:</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="469" height="267" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_qlik_sense_result_parsing_string_template.jpg" alt="" class="wp-image-910" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_qlik_sense_result_parsing_string_template.jpg 469w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/qliksense_qlik_sense_result_parsing_string_template-300x171.jpg 300w" sizes="(max-width: 469px) 100vw, 469px" /><figcaption>Красным цветом помечены флаги, которые можно фильтровать на уровне скрипта</figcaption></figure>



<p>Т.е. теперь с помощью знака вопроса <strong>&#8216;?&#8217;</strong> Вы можете задавать шаблон строки, размещая нужные знаки в порядке, который Вам нужен. Например, Вы знаете, что номера заказов заданы в формате &#8216;???-???-?????&#8217;, вбиваете этот шаблон в скрипт и начинаете парсить. Опять же, этот подход нужен для парсинга тестовых файлов, отрытых источников данных, где нет структуры данных. </p>



<p>И немного про парсинг:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Парсинг</strong> &#8211; это вычленение данных из неструктурированных источников данных (txt, комментарии документов, Html, информация из социальных сетей, api) и запись данных в структурированном и форматированном виде (текст, дата, число, деньги и т.п.)</p></blockquote>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/">Qlik Sense Search-Parsing Template String или Поиск по шаблону</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/qlik-sense-search-parsing-template-string/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как создать фильтр по выражению таблицы Qlik Sense</title>
		<link>https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/</link>
					<comments>https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Tue, 02 Apr 2019 04:02:48 +0000</pubDate>
				<category><![CDATA[Qlik Sense Блог]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qlik sense вопросы и ответы]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[вопросы и ответы]]></category>
		<category><![CDATA[фильтр для выражения таблицы]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=899</guid>

					<description><![CDATA[<p>В таблице Qlik Sense отсутствует возможность фильтрации данных по значению выражения. Для того, чтобы отфильтровать нужные значения по выражению по маске, воспользуемся следующим приемом. Вводные данные: у нас есть таблица с полями Наименование и Артикул, выражение остатки. Выражение средней сложности (показываются остатки, которые больше 20): Создадим фильтр с выражением: Результат<a class="moretag" href="https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/">Как создать фильтр по выражению таблицы Qlik Sense</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>В таблице Qlik Sense отсутствует возможность фильтрации данных по значению выражения. Для того, чтобы отфильтровать нужные значения по выражению по маске, воспользуемся следующим приемом.</p>



<p>Вводные данные: у нас есть таблица с полями Наименование и Артикул, выражение остатки.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="716" height="272" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense.jpg" alt="" class="wp-image-900" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense.jpg 716w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense-300x114.jpg 300w" sizes="(max-width: 716px) 100vw, 716px" /></figure>



<p>Выражение средней сложности (показываются остатки, которые больше 20):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if(Sum([Остаток товара])>20,Sum([Остаток товара]), null())</pre>



<p><strong>Создадим фильтр с выражением:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">=Aggr(if(Sum([Остаток товара])>20,Sum([Остаток товара]), null()),[Наименование],Артикул)</pre>



<p><strong>Результат &#8220;До применения выборки&#8221;</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="894" height="265" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/expression_filter_for_table_qliksense.jpg" alt="" class="wp-image-901" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/expression_filter_for_table_qliksense.jpg 894w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/expression_filter_for_table_qliksense-300x89.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/expression_filter_for_table_qliksense-768x228.jpg 768w" sizes="(max-width: 894px) 100vw, 894px" /><figcaption>Фильтр для выражения таблицы в Qlik Sense</figcaption></figure>



<p><strong>Результат &#8220;После применения выборки&#8221;</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="911" height="141" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense_selection.jpg" alt="" class="wp-image-902" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense_selection.jpg 911w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense_selection-300x46.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Filter_expression_qliksense_qlik_sense_selection-768x119.jpg 768w" sizes="(max-width: 911px) 100vw, 911px" /><figcaption>Работа фильтра по выражению в таблице Qlik Sense</figcaption></figure>



<h2 class="wp-block-heading">Скачать пример</h2>



<div class="wp-block-file"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Как-фильтровать-таблицу-по-выражению.zip">&#8220;Как фильтровать таблицу по выражению в Qlik Sense?&#8221; </a><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/Как-фильтровать-таблицу-по-выражению.zip" class="wp-block-file__button" download>Скачать</a></div>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/">Как создать фильтр по выражению таблицы Qlik Sense</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/kak-sozdat-filtr-po-vyrazheniyu-tablicy-qlik-sense/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Qlik Sense: Основы работы с датами. Обзор Топ 16 функций</title>
		<link>https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/</link>
					<comments>https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Fri, 15 Mar 2019 04:06:21 +0000</pubDate>
				<category><![CDATA[Уровень 1]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qlik sense даты]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[кликсенс]]></category>
		<category><![CDATA[основы работы с датами]]></category>
		<category><![CDATA[работа с датами]]></category>
		<category><![CDATA[функции для работы с датами]]></category>
		<category><![CDATA[хранение дат в Qlik Sense]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=835</guid>

					<description><![CDATA[<p>Вводное слово: Дата, Время, Timestamp Пару слов о Timestamp &#8211; Это число с дробной частью, которое соответствует какой-то дате со временем. Т.е. это число можно представить в нужном формате Дата-Время. Дата &#8211; это целая часть числа с дробной частью (про даты речь пойдет дальше). Время &#8211; это дробная часть числа<a class="moretag" href="https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/">Qlik Sense: Основы работы с датами. Обзор Топ 16 функций</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Вводное слово: Дата, Время, Timestamp</h2>



<p>Пару слов о <strong>Timestamp </strong>&#8211; Это число с дробной частью, которое соответствует какой-то дате со временем. Т.е. это число можно представить в нужном формате Дата-Время.</p>



<p><strong>Дата </strong>&#8211; это целая часть числа с дробной частью (про даты речь пойдет дальше). <strong>Время </strong>&#8211; это дробная часть числа (все, что после разделителя).</p>



<p><strong>1 секунда</strong> ~ 0,0000115740740740740<br><strong>23 часа 59 минут 59 секунд</strong> = 0,99998842592593</p>



<h2 class="wp-block-heading">Шаг 1. Учимся понимать даты. Как хранятся даты в Qlik Sense </h2>



<p>Для того, чтобы научиться работать с датами в Qlik Sense, необходимо понять исходный формат хранения дат.</p>



<p><strong>Дата в Qlik</strong> &#8211; это целое число, которое может быть загружено в модель в формате даты, например, <strong>20/03/2019</strong> или <strong>20.03.2019</strong>, или <strong>20-03-2019</strong>, или <strong>20+03+2019</strong> (все зависит от Ваших потребностей и фантазии). Если данные с датами загружаются из файла, где формат даты уже задан, то этот формат будет загружен в модель. Если данные загружаются не из QVD файлов, а из сторонних файлов/систем/баз данных, то рекомендуется делать преобразование:<br><strong>Формат даты источника данных</strong> =&gt; <strong>Число</strong> =&gt; <strong>Формат даты Qlik Sense</strong>.</p>



<p>Если избегать преобразования даты в число, а затем в дату, то можно наткнуться на следующие проблемы:</p>



<ul class="wp-block-list"><li>Загрузка в модель даты в исходном формате хранения (целое число);</li><li>Загрузка даты как текстового поля.</li></ul>



<p>Что такое исходный формат хранения даты? <strong>Дата в Qlik Sense</strong> &#8211; это целое число. Проверить это можно с помощью формул в Qlik Sense приложении (например вбить в текстовом объекте листа формулу <strong>=Date(3000)</strong>).</p>



<p>Исходный формат даты в Qlik &#8211; целое число:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="269" height="337" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/qlik_sense_qliksense_date.jpg" alt="" class="wp-image-860" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/qlik_sense_qliksense_date.jpg 269w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/qlik_sense_qliksense_date-239x300.jpg 239w" sizes="(max-width: 269px) 100vw, 269px" /></figure></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Date(-693959) = 01.01.0000
Date(-100000) = 16.03.1626
Date(-10000)  = 13.08.1872
Date(-5000)   = 22.04.1886
Date(-1000)   = 04.04.1897
Date(-2)      = 28.12.1899
Date(-1)      = 29.12.1899
Date(0)       = 30.12.1899
Date(1)       = 31.12.1899
Date(2)       = 01.01.1900
Date(43500)   = 04.02.2019</pre>



<h2 class="wp-block-heading">Шаг 2. Формат даты. Настройка формата даты по умолчанию</h2>



<h3 class="wp-block-heading">Настройка системной переменной &#8220;Формат даты по-умолчанию&#8221;</h3>



<p>Формат даты по умолчанию в рамках 1 приложения настраивается с помощью переменной на вкладке MAIN в скрипте:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1024" height="383" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/Default_date_Format_qliksense_qlik_sense-1024x383.jpg" alt="" class="wp-image-861" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/Default_date_Format_qliksense_qlik_sense-1024x383.jpg 1024w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/Default_date_Format_qliksense_qlik_sense-300x112.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/Default_date_Format_qliksense_qlik_sense-768x287.jpg 768w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/Default_date_Format_qliksense_qlik_sense.jpg 1116w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Настройка форматы даты по-умолчанию в рамках 1 приложения Qlik Sense</figcaption></figure></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SET DateFormat='DD.MM.YYYY';</pre>



<p>К этой настройке относитесь очень внимательно, т.к. функции дат, например <strong>Date()</strong>, без обозначения формата даты используют формат даты по-умолчанию.</p>



<h3 class="wp-block-heading">Формат даты. Примеры</h3>



<p>Рассмотрим примеры записи форматов даты:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Date(43500,'DD.MM.YYYY') = 04.02.2019
Date(43500,'DD.MM.YY')   = 04.02.19
Date(43500,'DDMMYYYY')   = 04022019
Date(43500,'DD/MM/YYYY') = 04/02/2019
Date(43500,'DD+MM+YYYY') = 04+02+2019
Date(43500,'DD|MM|YYYY') = 04|02|2019
Date(43500,'DD MM YYYY') = 04 02 2019

Date(43500,'DD.MMM.YYYY') = 04.февр..2019
Date(43500,'DD MMM YYYY') = 04 февр. 2019
Date(43500,'DD/MMM/YYYY') = 04/февр./2019
Date(43500,'D/MMM/YYYY')  = 4/февр./2019
Date(43500,'D MMMM YYYY') = 4 февраль 2019
Date(43500,'D MMMM YY')   = 4 февраль 19

Date(43500,'YYYY.MM.DD') = 2019.02.04
Date(43500,'YYYYMMDD')   = 20190204
Date(43500,'YYYY-MM')    = 2019-02
Date(43500,'YYYY-DD-MM') = 2019-04-02</pre>



<h2 class="wp-block-heading">Шаг 3. Топ 16 функций для Script (ETL &#8211; выгрузки, преобразования данных и загрузки в модель)</h2>



<p>В рамках краткого обзора функций для преобразования дат, я рассмотрю наиболее часто используемые на практике функции. На самом деле, таких функции очень много. Полный список можно посмотреть в официальном <a rel="noreferrer noopener" aria-label="Qlik Sense HELP (откроется в новой вкладке)" href="https://help.qlik.com/ru-RU/sense/November2018/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/date-time-functions.htm" target="_blank">Qlik Sense HELP</a>.</p>



<p>Понимание основ работы с данными и знание нескольких функций закроет на первое время все потребности при разработке скриптов загрузки данных.</p>



<h2 class="wp-block-heading">Обзор функций трансформации дат</h2>



<p>Функции нужны для преобразования дат, форматов, вычленения из даты года, месяца, дня, номера недели. К дате можно прибавить заданное количество дней, месяцев или лет. Для начала я кратко опишу каждую функцию и приведу примеры использования этих функций. Затем я рассмотрю несколько кейсов работы с датами в нестандартных случаях. </p>



<p><strong>Мой топ функций для работы с датами:</strong></p>



<ol class="wp-block-list"><li><strong>Floor()</strong> &#8211; из числа с дробной частью (дата и время) оставляет только целую часть, что соответствует дате. Иногда требуется в скриптах, если нет уверенности, что поле в источнике содержит &#8220;чистую&#8221; дату, без составляющей времени. Или если из формата даты и время требуется получить дату.</li><li><strong>Date#()</strong> &#8211; читает/парсит строку в заданном формате и преобразует в понятный формат даты Qlik Sense (т.е. текстовая строка будет загружена как дата, а храниться будет как строка). Например, <strong><em>Date#(&#8216;2019-01-21&#8242;,&#8217;YYYY-MM-DD&#8217;)</em></strong> будет загружено в Qlik Sense не как текстовая строка, а как дата <strong><em>2019-01-21</em></strong> (в скобках указано правило, по которому Qlik Sense интерпретирует строку в дату);</li><li><strong>Date()</strong> &#8211; задает нужный формат для поля типа &#8220;Дата&#8221; (т.е. значение хранится как число в заданном формате, а функция Date() изменяет формат, если это необходимо, либо присваивает формат по-умолчанию). Пример использования  <br><strong><em>Date(Date#(&#8216;2019-01-21&#8242;,&#8217;YYYY-MM-DD&#8217;),&#8217;DD/MM/YYYY&#8217;) = 21/01/2019</em></strong>   <br>или<br><strong><em>Date(Date#(&#8216;2019-01-21&#8242;,&#8217;YYYY-MM-DD&#8217;)) = 21.01.2019 </em></strong>(если в приложении дата по-умолчанию задана в формате DD.MM.YYYY);</li><li><strong>MakeDate()</strong> &#8211; с помощью этой функции можно сделать дату из года, месяца и дня. Например:<ul><li><em><strong>MakeDate(2019)</strong> = 01.01.2019</em></li><li><em><strong>MakeDate(2019,2)</strong> = 01.02.2019</em></li><li><em><strong>MakeDate(2019,3,24)</strong> = 24.03.2019</em></li></ul></li><li><strong>Today()</strong> &#8211; функция возвращает текущую дату. Функцию можно использовать как в скрипте, так в выражениях диаграммы. У функции есть параметр <strong>timer_mode</strong>, полный синтаксис функции <strong>Today<em>(<span style="color:#0f9600" class="tadv-color">timer_mode</span>)</em></strong>. Time_mode может принимать 3 значения:<ul><li><strong><span style="background-color:#E5E5E5" class="tadv-background-color">0 (день последней завершенной загрузки данных).</span> </strong>Today(0) Возвращает день последней завершенной загрузки данных.</li><li><strong><span style="background-color:#E5E5E5" class="tadv-background-color">1 (день вызова функции).</span></strong> При использовании в выражении диаграммы будет возвращен день вызова функции. При использовании в скрипте загрузки будет возвращен день начала текущей загрузки данных.</li><li><strong><span style="background-color:#E5E5E5" class="tadv-background-color">2 (день открытия документа).</span></strong> Возвращает день открытия документа.</li><li><strong><span style="color:#0f9600" class="tadv-color">По-умолчанию time_mode = 1</span></strong>, т.е. <strong>Today() = Today(1)</strong></li></ul></li><li>Комбинации <strong>Left()/Right()</strong>/<strong>Mid()</strong> и <strong>Date#()</strong> &amp; <strong>Date()</strong> &#8211; если дата представлена как текстовая строка, но помимо даты в строке содержится другая информация, то вычленить дату из строки можно следующим способом. <ol><li>Сначала получаем подстроку с помощью функций Left()/Right()/Mid(). Например:<ul><li><strong>Left(&#8216;20190105 YhfIY17 0038473&#8217;,8)</strong> = 20190105</li><li><strong>Right(&#8216;YhfIY17 0038473 2019-01-05&#8217;,10)</strong> = 2019-01-05</li><li><strong>Mid(&#8216;YhfIY17 2019-01-07 0038473&#8217;,index(&#8216;YhfIY17 2019-01-07 0038473&#8242;,&#8217; &#8216;)+1,10)</strong> = 2019-01-07</li></ul></li><li>Затем строка преобразуется (считывается) в дату с помощью функции <strong>Date#()</strong> и устанавливается новый формат отображения даты с помощью функции <strong>Date()</strong><ul><li><strong>Date#(Right(&#8216;YhfIY17 0038473 2019-01-05&#8242;,10),&#8217;YYYY-MM-DD&#8217;)</strong> = 2019-01-05</li><li><strong>Date(Date#(Right(&#8216;YhfIY17 0038473 2019-01-05&#8242;,10),&#8217;YYYY-MM-DD&#8217;),&#8217;YYYY/MM/DD&#8217;)</strong> = 2019/01/05</li></ul></li></ol></li><li><strong>AddMonths()</strong> &#8211; с помощью этой функции можно добавить или вычесть заданное число месяцев к дате. Например, <ul><li><em><strong>AddMonths(</strong>MakeDate(2018,5,31)<strong>,-3)</strong> = 28.02.2018 </em></li><li><em><strong>AddMonths(</strong>MakeDate(2018,5,31)<strong>,-1)</strong> = 30.04.2018 </em></li><li><em><strong>AddMonths(</strong>MakeDate(2018,5,31)<strong>,0)</strong> = 31.05.2018 </em></li><li><em><strong>AddMonths(</strong>MakeDate(2018,5,31)<strong>,3)</strong> = 31.08.2018 </em></li><li><em><strong>AddMonths(</strong>MakeDate(2018,5,31)<strong>,4)</strong> = 30.09.2018</em></li></ul></li><li><strong>AddYears()</strong> &#8211; добавляет или вычитает заданное количество лет к дате. Например, <em><strong>AddYears(</strong>MakeDate(2018,5,31)<strong>,1)</strong> = 31.05.2019</em></li><li><strong>Month()</strong> &#8211; с помощью этой функции можно получить название месяца (берется из системной переменной MonthNames, которая задается в скрипте). <ul><li><strong>Month(MakeDate(2018,5,31))</strong> = май </li><li><strong>Num(Month(MakeDate(2018,5,31)))</strong> = 5</li></ul></li><li><strong>MonthName()</strong> &#8211; функция возвращает месяц и год.<ul><li><strong>MonthName(MakeDate(2018,5,31))</strong> = май 2018</li></ul></li><li><strong>MonthStart()</strong> &#8211; возвращает первый день месяца<ul><li><strong>MonthStart(MakeDate(2018,5,31))</strong> = 01.05.2018</li></ul></li><li><strong>MonthEnd()</strong> &#8211; возвращает последний день месяца<ul><li><strong>MonthEnd(MakeDate(2018,5,31))</strong> = 31.05.2018</li></ul></li><li><strong>Year(</strong>) &#8211; возвращает год<ul><li><strong>Year(MakeDate(2018,5,31)) </strong>= 2018</li></ul></li><li><strong>Week()</strong> &#8211; возвращает номер недели<ul><li><strong>Week(MakeDate(2018,5,31))</strong> = 22</li></ul></li><li><strong>WeekDay()</strong> &#8211; возвращает день недели из системной переменной <strong>DayNames</strong> (см. скрипт)<ul><li><strong>WeekDay(MakeDate(2018,5,31))</strong> = чт</li></ul></li><li><strong>Day()</strong> &#8211; возвращает день из даты<ul><li><strong>Day(MakeDate(2018,5,31))</strong> = 31</li></ul></li></ol>



<h3 class="wp-block-heading">Подробнее про Date# и Date с примером</h3>



<p><strong>Date#()</strong> используется для интерпретации данных. Например</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Date#('2018_24_10','YYYY_DD_MM')</pre>



<p>говорит о том, что первые четыре цифры &#8211; это год, цифры между двумя &#8216;_ &#8211; это дата, а последние две &#8211; месяц. Причем, функция <strong>Date#</strong> не меняет формат даты, т.е. дата просто будет переведена из текста в число по правилу <strong>&#8216;YYYY_DD_MM&#8217;</strong></p>



<p><strong>Date()</strong> используется, чтобы сказать, как показать данные. Например:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Date(Today(),'YYYY^DD^MM') возвращает 2019^08^05
Date(Today(),'MM/DD/YY') возвращает 05/08/19</pre>



<p><strong>Сочетание обеих функций:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Date(Date#('2018_24_10','YYYY_DD_MM'),'MM/DD/YYYY') возвращает 10/24/2018</pre>



<h3 class="wp-block-heading">Длинное название месяца</h3>



<p>Для того, чтобы получить длинное название месяца, необходимо применить следующий код (длинное название месяца берется из системной переменной <strong><em>LongMonthNames</em></strong>):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Text(Date(MakeDate(2018,9,21),'MMMM YYYY'))</pre>



<p>Это выражение вернет &#8216;сентябрь 2018&#8217;. Обязательно оборачивайте в Text, иначе будет ошибка. Объясняю почему:</p>



<p>Date(MakeDate(2018,9,21),&#8217;MMMM YYYY&#8217;) тоже вернет &#8216;сентябрь 2018&#8242;, но храниться будет как дата 21.09.2018. И если Вы сравните две даты &#8217;22 сентября 2018&#8242; и &#8217;21 сентября 2018&#8217;, то в формате &#8216;MMMM YYYY&#8217; они будут не равны.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if(
    Date(MakeDate(2018,9,21),'MMMM YYYY')=Date(MakeDate(2018,9,22),'MMMM YYYY'),
    1,
    0
)</pre>



<p><strong>Результат:</strong> 0, т.е. ложь.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if(
    Text(Date(MakeDate(2018,9,21),'MMMM YYYY'))=Text(Date(MakeDate(2018,9,22),'MMMM YYYY')),
    1,
    0
)</pre>



<p><strong>Результат:</strong> 1</p>



<h3 class="wp-block-heading">Вывод &#8220;Месяц Год&#8221; и &#8220;Неделя Год&#8221; в числовом формате</h3>



<p><strong>Пример 1:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Num#(Date(MakeDate(2019,4,19),'MMYYYY')) //Вернет 042019</pre>



<p><strong>Пример 2:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Num#(Week(MakeDate(2019,4,19))&amp;Year(MakeDate(2019,4,19))) //Вернет 162019</pre>



<h3 class="wp-block-heading">Определить максимальную и минимальную даты периода отчета. Вывод в переменную</h3>



<p>Иногда требуется в отчете вывести период, за который он был сформирован. Например, отчет за предыдущую неделю.</p>



<p>В скрипте определяем переменную Прошлая Неделя:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">LET vReportWeekPeriod = Num#((Week(Today())-1)&amp;Year(Today()));</pre>



<p>В календаре есть поле НеделяГод, с помощью этого поля определяем минимальную и максимальную даты (функция <strong>Date</strong> используется для форматирования даты в нужном виде, т.е. <strong><em>&#8216;DD.MM.YY&#8217;</em></strong>):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">='Отчет. Период '&amp;
Date(min({&lt;НеделяГод={'$(vReportWeekPeriod)'}>} Дата),'DD.MM.YY')
&amp;'-'&amp;
Date(max({&lt;НеделяГод={'$(vReportWeekPeriod)'}>} Дата),'DD.MM.YY')</pre>



<h3 class="wp-block-heading">Пример использования агрегации данных по неделям (advanced scripting)</h3>



<p>Если нужно упорядочивать записи по неделям, то рекомендую использовать формат ГодНеделя, причем неделя должна быть записана как 201901 и 201911 (т.е. два знака). В скрипте этот прием использован:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[TEMP Кол-во отгрузок По неделям]:
LOAD 
    [Клиент ID], 
    Неделя, 
    [КлиентНеделяID],
    count(DISTINCT [Документ ID]) As [Количество Отгрузок Неделя]
Group By [Клиент ID], Неделя, [КлиентНеделяID];
LOAD 
    Distinct
    [КлиентНеделяID],
    [Клиент ID],
    Num#(Year(Дата)&amp;if(Len(Week(Дата))=1,'0'&amp;Week(Дата),Week(Дата)))	As Неделя,
    [Документ ID]
Resident [Факты];

NoConcatenate
[Номер отгрузки по неделям]:
LOAD
    if([Клиент ID]=Previous([Клиент ID]),
    RangeSum(Peek('Номер отгрузки по неделям'), 1),
    1
    )										As [Номер отгрузки по неделям],
    [КлиентНеделяID]
Resident [TEMP Кол-во отгрузок По неделям]
Order By [Клиент ID], Неделя
;

DROP Table [TEMP Кол-во отгрузок По неделям];</pre>



<h3 class="wp-block-heading">Создание переменных с датами</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">//Переменная Скрипта Qlik Sense - вчерашняя дата
LET vTodayReport_Date = Date(Today()-1);

//Переменная Скрипта Qlik Sense - дата "неделя назад"
LET v7DaysAgoReport_Date = Date(Today()-7);

//Переменная Скрипта Qlik Sense - дата "45 дней назад"
LET v45DaysAgoReport_Date = Date(Today()-45);

//Переменная Скрипта Qlik Sense - дата "месяц назад"
LET v1MonthAgoReport_Date = AddMonths(Today(),-1);

//Переменная Скрипта Qlik Sense - дата "3 месяца назад"
LET v3MonthsAgoReport_Date = AddMonths(Today(),-3);

//Переменная Скрипта Qlik Sense - дата "год назад"
LET v1YearAgoReport_Date = AddYears(Today(),-1);</pre>



<h3 class="wp-block-heading">Добавить в формат даты неделю. Длинный формат месяца в дате Qlik Sense</h3>



<p>Формат длинных названий месяцев задается на вкладке Main с помощью системных переменных. <strong>Значения этих переменных задается по-умолчанию при создании приложения:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SET MonthNames='янв.;февр.;мар.;апр.;мая;июн.;июл.;авг.;сент.;окт.;нояб.;дек.';
SET LongMonthNames='январь;февраль;март;апрель;май;июнь;июль;август;сентябрь;октябрь;ноябрь;декабрь';</pre>



<p>Рекомендую заменить их на следующие значения <strong>(точки будут портить вид при формате DD.MMM.YYYY):</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SET MonthNames='янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек';
SET LongMonthNames='января;февраля;марта;апреля;мая;июня;июля;августа;сентября;октября;ноября;декабря';</pre>



<p><strong>Формат даты с названием дня недели:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">//Формат даты "11 июн 2019 (вт)"
Date(Today(),'DD MMM YYYY (WWW)')

//Формат даты "11 июн 2019 (вторник)"
Date(Today(),'DD MMM YYYY (WWWW)')

//Формат даты "11 июня 2019 (вторник)"
Date(Today(),'DD MMMM YYYY (WWWW)')</pre>



<h3 class="wp-block-heading">Манипуляции над датами в скрипте через переменные</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">LET пГодУстановка = 2017;                               // 2017
LET пФильтрДата = MakeDate(пГодУстановка);              // 01.01.2017
LET пФильтрДатаПрошлыйГод = MakeDate(пГодУстановка-1);  // 01.01.2016</pre>



<h2 class="wp-block-heading">Шаг 4. Использование функций в выражениях (визуализации)</h2>



<p>todo</p>



<h2 class="wp-block-heading">Шаг 5. Кейсы/примеры работы с датами в Qlik Sense</h2>



<h3 class="wp-block-heading">Кейс 1. Обработка дат с английскими названиями месяцев</h3>



<p>Данные хранятся в датах англоязычного календаря. Нужно произвести преобразование в русский формат даты:</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/03/english_format_date.jpg.png" alt="" class="wp-image-915" width="115" height="197"/><figcaption>Необходимо дату 23 June 2018 преобразовать в 23 июня 2018<br></figcaption></figure></div>



<p>Для преобразования используем следующий скрипт (с меппингом):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[MAP Месяц в число]:
Mapping
LOAD * Inline [
	Месяц, Месяц номер
	january, 1
	february, 2
	march, 3
	april, 4
	june, 6
	july, 7
	august, 8
	september, 9
	october, 10
	november, 11
	december, 12
];

Данные:
LOAD 
     Дата                            As [Дата исходная], 
     SubField(Дата,' ',1)            As День,
     lower(SubField(Дата,' ',2))     As Месяц,
     ApplyMap('MAP Месяц в число',lower(SubField(Дата,' ',2)),'#Не определено#')                        As МесяцНомер,
     SubField(Дата,' ',3)            As Год,
     Date(
     	MakeDate(
            	SubField(Дата,' ',3),
                ApplyMap('MAP Месяц в число',lower(SubField(Дата,' ',2))),
                SubField(Дата,' ',1)
                )
          	,'DD.MM.YYYY'
          ) 			As Дата
FROM [lib://excel_date/TB01_20190404_054148.xlsx]
(ooxml, embedded labels, table is [Sheet1 (2)]);</pre>



<p><strong>Получаем вот такой результат:</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="933" height="542" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/english_date_qlik_sense_qliksense_russian_date.jpg" alt="" class="wp-image-917" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/english_date_qlik_sense_qliksense_russian_date.jpg 933w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/english_date_qlik_sense_qliksense_russian_date-300x174.jpg 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/04/english_date_qlik_sense_qliksense_russian_date-768x446.jpg 768w" sizes="(max-width: 933px) 100vw, 933px" /></figure>



<h2 class="wp-block-heading">Шаг 6. Best Practice &#8211; Рекомендации по работе с датами в QS/QlikSense/Qlik Sense/Клик Сенс </h2>



<ol class="wp-block-list"><li>В выражениях диаграмм (в том числе в Set Analysis) стремитесь использовать переменные с датами. Это позволит минимизировать издержки на поддержку отчетов в Qlik Sense.</li><li>&#8230;</li></ol>



<h2 class="wp-block-heading">Инструкции по работе с датами в QlikView и Qlik Sense</h2>



<div class="wp-block-file"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/05/Date_Fields_TechBrief.pdf">Date Fields TechBrief </a><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/05/Date_Fields_TechBrief.pdf" class="wp-block-file__button" download>Скачать</a></div>



<div class="wp-block-file"><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/05/Design_Date_Fields.pdf">Design Date Fields </a><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/05/Design_Date_Fields.pdf" class="wp-block-file__button" download>Скачать</a></div>


<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/">Qlik Sense: Основы работы с датами. Обзор Топ 16 функций</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/qlik-sense-osnovy-raboty-datami-obzor-top-funkcij/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Обучение по Qlik Sense, курс начинающего аналитика Клик Сенс</title>
		<link>https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/</link>
					<comments>https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Wed, 03 Oct 2018 21:16:15 +0000</pubDate>
				<category><![CDATA[Youtube подборки видео по тематикам Qlik Sense]]></category>
		<category><![CDATA[Qlik]]></category>
		<category><![CDATA[qlik sense]]></category>
		<category><![CDATA[qlik sense youtube]]></category>
		<category><![CDATA[Qlik Sense Для Начинающего]]></category>
		<category><![CDATA[Qlik Sense для чайников]]></category>
		<category><![CDATA[qliksense]]></category>
		<category><![CDATA[qliksense youtube]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[Уроки Qlik Sense]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=343</guid>

					<description><![CDATA[<p>Канал на youtube (источник BI Consult): https://www.youtube.com/playlist?list=PLgG9iJlSBmTfHmr_2eVmnWCh4HbkDWnGy Qlik Sense #1 обучение, что такое, клик сенс, источники данных Qlik Sense #2 диаграммы объекты, как сделать первое приложение, как загрузить данные Qlik Sense #3 где лежат приложения Qlik Sense, где файлы Qlik Sense Qlik Sense #3 5 чарты объекты диаграммы Qlik Sense<a class="moretag" href="https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/">Обучение по Qlik Sense, курс начинающего аналитика Клик Сенс</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Канал на youtube (источник BI Consult):</strong> <a href="https://www.youtube.com/playlist?list=PLgG9iJlSBmTfHmr_2eVmnWCh4HbkDWnGy" target="_blank" rel="noopener">https://www.youtube.com/playlist?list=PLgG9iJlSBmTfHmr_2eVmnWCh4HbkDWnGy</a></p>
<h2><strong>Qlik Sense #1 обучение, что такое, клик сенс, источники данных</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/2un1CdRqbx0?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #2 диаграммы объекты, как сделать первое приложение, как загрузить данные</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/oHstPJwe-BM?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #3 где лежат приложения Qlik Sense, где файлы Qlik Sense</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/dy43sSWaFNg" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #3 5 чарты объекты диаграммы Qlik Sense как настроить</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/_hgnjWbz614?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #4 Создание собственных мер измерений Qlik Sense, вычисления в приложении Qlik Sense</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/zfwwhqbmyOU" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #5 Вычисления в скрипте загрузки данных</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/4J0_ZqXXxpE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #6 Ключевые поля Qlik Sense Как связать разные таблицы Qlik Sense</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/6wfY6B1hMgs?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<h2><strong>Qlik Sense #7 Как работать с датами и временными отрезками в Qlik Sense Главный календарь Master Cal</strong></h2>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/lbM6Avbxevw?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/">Обучение по Qlik Sense, курс начинающего аналитика Клик Сенс</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/obuchenie-po-qlik-sense-kurs-nachinayushchego-analitika-klik-sens/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
