Форматирование дат и чисел

MDX (Multidimensional Expressions) в контексте JavaScript используется для построения и обработки многомерных аналитических запросов, особенно в средах OLAP (Online Analytical Processing). Работа с датами и числами является одной из ключевых задач при анализе данных, поскольку корректное представление этих значений напрямую влияет на точность интерпретации результатов.


Форматирование чисел

MDX предоставляет возможность настраивать отображение числовых данных через форматные строки и специальные функции.

1. Форматные строки

Форматная строка позволяет задать шаблон отображения числа:

WITH MEMBER [Measures].[Formatted Sales] AS
    [Measures].[Sales],
    FORMAT_STRING = "#,##0.00"
SEL ECT 
    [Measures].[Formatted Sales] ON COLUMNS,
    [Date].[Calendar].[Month].MEMBERS ON ROWS
FR OM [Sales]
  • #,##0.00 — стандартный шаблон: запятая отделяет тысячи, .00 фиксирует два знака после запятой.
  • Можно использовать символы валют ($#,##0.00) или процент (0.00%).

2. Локализованное форматирование

MDX позволяет учитывать региональные настройки для корректного разделителя тысяч и десятичных:

WITH MEMBER [Measures].[Localized Sales] AS
    [Measures].[Sales],
    FORMAT_STRING = "Currency"
SEL ECT 
    [Measures].[Localized Sales] ON COLUMNS
FR OM [Sales]
  • "Currency" автоматически применяет валютный символ и формат в соответствии с локалью сервера OLAP.

3. Специальные форматы

MDX поддерживает научную нотацию, отрицательные числа в скобках и другие расширенные шаблоны:

  • 0.00E+00 — научная нотация.
  • (#,##0.00);(#,##0.00) — отрицательные числа в скобках.

Форматирование дат

Работа с датами в MDX осуществляется через функции, позволяющие преобразовать дату в строку, выделить компоненты или использовать специализированные форматы.

1. Функции извлечения компонентов даты

[Date].[Calendar].CurrentMember.MEMBER_VALUE
  • Возвращает значение текущей ячейки даты.
  • Для получения года, месяца или дня используют функции Year(), Month(), Day() в MDX-средах, поддерживающих их, либо соответствующие свойства иерархий.

2. Преобразование даты в строку

MDX позволяет использовать форматирование для вывода дат в удобном виде:

WITH MEMBER [Measures].[Formatted Date] AS
    VBA!Format([Date].[Calendar].CurrentMember.MemberValue, "dd MMM yyyy")
SEL ECT 
    [Measures].[Formatted Date] ON COLUMNS,
    [Date].[Calendar].[Month].MEMBERS ON ROWS
FR OM [Sales]
  • VBA!Format — встроенная функция для работы с датами.
  • "dd MMM yyyy" выводит день, сокращённое название месяца и год, например: 23 Mar 2026.

3. Форматы ISO и пользовательские

Можно задавать строгие ISO-форматы:

  • "yyyy-MM-dd" — стандарт ISO 8601.
  • "MMMM yyyy" — полный месяц и год (March 2026).

4. Учет локализации дат

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

VBA!Format([Date].[Calendar].CurrentMember.MemberValue, "dddd, dd MMMM yyyy")
  • "dddd" — день недели полностью.
  • "MMMM" — полный месяц.
  • "yyyy" — год.

Комбинированное форматирование

MDX позволяет одновременно форматировать числовые значения и даты в едином запросе, что особенно полезно для финансовых отчетов или KPI-панелей.

WITH 
MEMBER [Measures].[Sales Info] AS
    [Measures].[Sales] & " USD as of " & 
    VBA!Format([Date].[Calendar].CurrentMember.MemberValue, "dd MMM yyyy"),
    FORMAT_STRING = ""
SEL ECT 
    [Measures].[Sales Info] ON COLUMNS,
    [Date].[Calendar].[Month].MEMBERS ON ROWS
FR OM [Sales]
  • Конкатенация числа и даты позволяет получить читаемое представление без необходимости обработки на стороне клиентского кода.
  • FORMAT_STRING оставлен пустым, так как форматирование чисел осуществляется вручную через конкатенацию.

Практические рекомендации

  • Всегда проверять поддержку функций VBA!Format или аналогичных функций в конкретной реализации MDX. Некоторые серверы OLAP могут иметь собственные расширения.
  • Для сложных форматов чисел рекомендуется использовать шаблоны форматирования, чтобы избежать ошибок округления и некорректного отображения отрицательных значений.
  • Локализация крайне важна для корпоративных отчетов: учитывать разделители тысяч, десятичные разделители и языковые особенности.

Форматирование дат и чисел в MDX — это мощный инструмент для подготовки готовых к употреблению аналитических данных, позволяющий создавать отчеты, которые легко читаются и интерпретируются без дополнительной обработки на стороне клиента.