что я могу поместить в метку «Предварительный выбор», чтобы получить начало текущего месяца?
IcCube сообщает о предварительно выбранных датах в слайсере дат
Ответы:
Есть еще вариант, который не требует javascript и, скорее всего, проживет дольше. Выбор диапазона может использовать значения из MDX, поэтому мы можем изменить запрос, чтобы получить то, что мы ищем:
WITH
SET [dates] as [Time].[Calendar].[Day].allmembers
Function ic3Min() as Head([dates])
Function ic3Max() as Tail([dates])
Function ic3DefFrom() as Tail([dates]).dtWithDayOfMonth(1) // first day of month , not the same as withDayOfMonth
Function ic3DefTo() as Tail([dates])
SELECT
{ic3Min(),ic3Max(),ic3DefFrom(),ic3DefTo()} on 0
FROM [Sales]
CELL PROPERTIES CELL_ORDINAL
У вас есть хорошее семейство функций даты в MDX, которые позволяют перемещаться по времени. В нашем примере LookupByKey,Сегодня и сДнемМесяца. Что-то вроде
[Time].[Calendar].[Day].lookupByKey( Today()->withDayOfMonth(1) )
Это может быть преобразовано в функцию для повторного использования:
Function myDatesStartOfCurrentMonth() as [Time].[Calendar].[Day].lookupByKey(Today()->withDayOfMonth(1) )
В конце концов вам придется изменить фильтр, чтобы использовать значения MDX:
И это должно получиться.
Нет возможности установить такой предварительный выбор с существующими параметрами данных, но вы можете добиться необходимого поведения с помощью ловушек JavaScript виджета.
Чтобы установить предварительный выбор на первый день месяца:
- Настроить параметры данных
например Как на скриншоте выше, но без предварительного выбора
Перейти к категории крючков параметров виджета
Скопируйте приведенный ниже код в значение хука "При получении данных":
При получении данных (для icCube 6.1):
/**
* Return data object
*/
function(context, data, $box) {
context.fireEvent('initDate', {caption_: moment().set('date', 1).format('YYYY-MM-DD')})
return data;
}
При получении данных (для более ранних версий):
/**
* Return data object
*/
function(context, data, $box) {
context.eventMgr().fireEvent('initDate', {caption_: moment().set('date', 1).format('YYYY-MM-DD')})
return data;
}
- Настройте раздел событий следующим образом:
Обновление для предварительного выбора диапазона
Чтобы применить предварительный выбор диапазона, измените тело JavaScript хука On Data Received на:
/**
* Return data object
*/
function(context, data, $box) {
let event = new viz.event.RangeSelectionEvent([
{name: moment().set('date', 1).format('YYYY-MM-DD')},
{name: moment().set('date', 2).format('YYYY-MM-DD')}
]);
context.fireEvent('initDate2', event)
return data;
}
P.S. Проверьте Демонстрационный отчет чтобы увидеть, как это работает.