Excel DAX — Работа с текстом и датами

When I write PowerShell scripts, I have often found that I need to reference the date. For example, I have occasionally written scripts that pull Windows event logs from a particular date or scripts that archive aging data based on the date when a file was created. Those are just a couple of examples of how the date may need to be referenced within a PowerShell script. In this article, I want to show you a few tricks for working with dates in PowerShell.

Как минусовать день в Powershell Get-Date

Получим свойства и методы этого объекта:

Все методы — это то что мы можем сделать с датой. Для примера получим дату минус один день от сегодняшнего числа:

Или прибавить дни через AddDays:

Как минусовать день в Powershell Get-Date

Если мы прибавим, допустим, часы больше чем в сутках, то у нас изменится и день:

Таким же образом мы можем добавлять и убирать такие элементы дат:

  • AddDays — дни
  • AddHours — часы
  • AddMilliseconds — миллисекунды
  • AddMinutes — минуты
  • AddMonths — месяца
  • AddSeconds — секунды
  • AddYears — года

Шаблон форматирования

Строка, переданная в качестве паттерна, используется как шаблон при выводе информации. MM заменяется на номер месяца, dd — на день месяца, yy на номер года. Регистр букв имеет значение.

Полная таблица преобразования времени выглядит так:

Буква Обозначение
y Год (Year)
M Месяц (Month)
d День (day)
H Часы (Hours)
m Минуты (Minutes)
s Секунды (Seconds)
S Тысячные доли секунды
n Наносекунды.

В принципе запомнить не сложно.

А почему тогда в шаблоне из примера буквы MM, dd и yy были написаны по два раза? А вот тут уже становится интереснее.

Читайте также:  Какие службы в Windows нужны, а какие можно отключить.

Общая идея

Количество букв влияет на длину текста. Чем большое букв, тем длиннее будет текст.

Если буква H указывается один раз, то 9 часов будут отображаться как 9, а если буква H указывается два раза подряд, то 9 часов будут отображаться как 09.

Если буква y указывается 2 раза подряд, то год пишется 2 цифрами, если 4 раза подряд — 4-мя цифрами.

Если буква M указывается 2 раза подряд, то пишется номер месяца, если 3 раза подряд, то название месяца (3 первых буквы), если 4 раза подряд, то полное название месяца.

Пример:

Код Вывод на экран

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(«MMMM-dd-yyyy»); String text = dtf.format( () ); (text);

February-22-2019

Изменение типов данных выходов формулы DAX

В формулах DAX тип данных для вывода определяется столбцами источника, и вы не можете явно указать тип данных результата. Это потому, что оптимальный тип данных определяется Power Pivot. Однако вы можете использовать неявные преобразования типов данных, выполняемые Power Pivot, для управления типом выходных данных. В противном случае вы можете использовать определенные функции DAX для преобразования типа выходных данных.

Использование неявных преобразований типов данных

  • Чтобы преобразовать дату или числовую строку в число, умножьте на 1,0. Например, = (СЕГОДНЯ () + 5) * 1.0. Эта формула вычисляет текущую дату плюс 5 дней и преобразует результат в целочисленное значение.

    • Чтобы преобразовать дату, число или значение валюты в строку, объедините значение с пустой строкой. Например, = Сегодня () & «»

Чтобы преобразовать дату или числовую строку в число, умножьте на 1,0. Например, = (СЕГОДНЯ () + 5) * 1.0. Эта формула вычисляет текущую дату плюс 5 дней и преобразует результат в целочисленное значение.

Чтобы преобразовать дату, число или значение валюты в строку, объедините значение с пустой строкой. Например, = Сегодня () & «»

Использование функций DAX для преобразования типов данных

Вы можете использовать функции DAX для следующих целей:

  • Преобразование действительных чисел в целые числа.
  • Преобразование действительных чисел, целых чисел или дат в строки.
  • Преобразование строк в реальные числа или даты.

Вы узнаете это в следующих разделах.

Преобразование вещественных чисел в целые

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

ROUND (<число>, <num_digits>) — округляет число до указанного числа цифр и возвращает десятичное число.

CEILING (<число>, <значимость>) — округляет число до ближайшего целого или кратного значению и возвращает десятичное число.

FLOOR (<число>, <значимость>) — округляет число вниз до нуля, до ближайшего кратного значения и возвращает десятичное число.

Преобразование действительных чисел, целых чисел или дат в строки

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

ИСПРАВЛЕНО (<number>, [<decimals>], [<no_comma>]) — округляет число и возвращает результат в виде текста. Количество цифр справа от десятичной точки равно 2 или указанному количеству десятичных знаков. Результат с запятыми или опционально без запятых.

FORMAT (<value>, <format_string>) — преобразует значение в текст в соответствии с указанным форматом.

Вы уже узнали об использовании функции Format для преобразования дат в строки.

Преобразование строк в реальные числа или даты

Вы можете использовать следующие функции DAX для преобразования строк в реальные числа или даты:

VALUE (<текст>) — преобразует текстовую строку, представляющую число, в число.

DATEVALUE (date_text) — преобразует дату в виде текста в дату в формате datetime.

TIMEVALUE (time_text) — преобразует время в текстовом формате во время в формате datetime.

Спарсить произвольный timestamp в ISO с минимумом подключаемых библиотек

У Python ограниченная поддержка анализа временных меток ISO 8601. Для того, чтобы использовать strptime — вам нужно точно знать его формат. Сложность в том, что в datetime с временной меткой ISO 8601 есть 6-разрядная дробь:

str((2016, 7, 22, 9, 25, 59, 555555))# ‘2016-07-22 09:25:’

Если дробная часть равна 0, то она не выводится:

str((2016, 7, 22, 9, 25, 59, 0))# ‘2016-07-22 09:25:59’

Но для этих двух вариантов используется другой формат для strptime . Кроме того, strptime не поддерживает ни минуты, ни обозначения часовых поясов с минутами. Например, 2016-07-22 09: 25: 59 + 0300 проанализируется, а стандартный формат вида 2016-07-22 09:25:59 +03: 00 нет.

Существует библиотека из одного файла — iso8601, которая правильно анализирует только временные метки ISO 8601.

Он поддерживает дроби, часовые пояса и T разделитель внутри единственной функции:

import _date(‘2016-07-22 09:25:59’)# (2016, 7, 22, 9, 25, 59, tzinfo=<>)_date(‘2016-07-22 09:25:59+03:00’)# (2016, 7, 22, 9, 25, 59, tzinfo=<FixedOffset ‘+03:00’ …>)_date(‘2016-07-22 09:25:59Z’)# (2016, 7, 22, 9, 25, 59, tzinfo=<>)_date(‘2016-07-22T09:25:+03:00’)# (2016, 7, 22, 9, 25, 59, 111, tzinfo=<FixedOffset ‘+03:00’ …>)

Если часовой пояс не установлен, значение _date соответствует UTC. Зона по умолчанию может быть изменена с помощью ключевого слова default_zone. Если вместо значения по умолчанию передаётся None, то тогда те значения даты и времени, у которых нет определенного часового значения, устанавливаются вместо простых значений даты и времени:

_date(‘2016-07-22T09:25:59’, default_timezone=None)# (2016, 7, 22, 9, 25, 59)_date(‘2016-07-22T09:25:59Z’, default_timezone=None)# (2016, 7, 22, 9, 25, 59, tzinfo=<>)