IcCube 在日期切片器中报告预选日期

IcCube reporting preselected dates in date slicer

我可以在 'Preselection from' 标签中输入什么来获取当月的月初?

无法使用现有数据选项设置此类预选,但您可以使用 Widget 的 JavaScript Hooks.

实现所需的行为

为了将预选设置为一个月的第一天:

  • 配置数据选项

例如如上图所示,但没有预选

  • 转到小部件选项的挂钩类别

  • 复制下面的代码到"On Data Received"钩子值:

收到数据时(对于 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;
}
  • 像这样配置事件部分:

范围预选更新

为了应用范围预选,将 On Data Received 挂钩的 JavaScript 主体更改为:

 /**
 * 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。检查 Demo Report 以了解其工作原理。

还有一个选项不需要 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,Today and withDayOfMonth。像

[Time].[Calendar].[Day].lookupByKey( Today()->withDayOfMonth(1) )

可以将其转换为可重复使用的函数:

 Function  myDatesStartOfCurrentMonth() as [Time].[Calendar].[Day].lookupByKey(Today()->withDayOfMonth(1) )

最终您必须更改过滤器以使用 MDX 值:

应该就可以了。