Форматирование виджета "Фильтр"
Форматирование может применяться в поле Форматирование текста раздела Фильтр (активируется галочкой Включить форматирование):
При форматировании используются следующие зарезервированные команды:
@value - значение фильтра на уровне
@path - массив всех родительских уровней
@path[0]
самый первый родитель
@path[@level-1]
ближайший родитель
@level - уровень вложенности
Примеры форматирования
Добавление текста к заголовкам в зависимости от уровня
Вы можете добавить пояснительный текст к отображаемым в виджете значениям. В нашем примере мы добавим к числовому обозначению года слово год (нулевой уровень вложенности) и к остальным значениям - слово неделя. Для этого мы введем следующую команду в поле Форматирование текста раздела Фильтр:
@level == 0 ? @value + ' год' : @value + ' неделя'
Где @level == 0
– уровень вложенности (в нашем примере это 0
);@value + ' год'
, @value + ' неделя'
– текст, добавляемый к значениям.
Форматирование подписей значения фильтра в виде периода дней относительно недели в году
Для корректной работы, в иерархии измерений должны быть выбраны следующие атрибуты измерения:
Год для недели
Номер недели
Данный тип форматирования производится с помощью следующего скрипта:
@level === 0 ? @value : ((year, weekNo) => {
var d1 = new Date();
d1.setFullYear(year);
var numOfdaysPastSinceLastMonday = (d1.getDay() - 1);
d1.setDate(d1.getDate() - numOfdaysPastSinceLastMonday);
var weekNoToday = (dt => {
var target = new Date(dt.valueOf());
var dayNr = (dt.getDay() + 6) % 7;
target.setDate(target.getDate() - dayNr + 3);
var firstThursday = target.valueOf();
target.setMonth(0, 1);
if (target.getDay() != 4) {
target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7)
}
return 1 + Math.ceil((firstThursday - target) / 604800000)
})(d1);
var weeksInTheFuture = (weekNo - weekNoToday);
d1.setDate(d1.getDate() + (7 * weeksInTheFuture));
var rangeIsFrom = weekNo + " неделя " + d1.getDate() + "." + (d1.getMonth() + 1);
d1.setDate(d1.getDate() + 6);
var rangeIsTo = d1.getDate() + "." + (d1.getMonth() + 1);
return rangeIsFrom + " - " + rangeIsTo
})(@path[0], @path[1])
Инвертирование формата даты с YYYY-MM-DD на DD-MM-YYYY
Для инвертирования формата даты необходимо выполнить следующую команду:
@value.split('-').reverse().join('-')
Результат применения команды показан ниже: