<?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 Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D0%B4%D0%B0%D1%82%D0%B0%D0%BC%D0%B8/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/основы-работы-с-датами/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Thu, 27 Jun 2019 10:48:53 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>основы работы с датами - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/основы-работы-с-датами/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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 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 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>
	</channel>
</rss>
