3

我可以在“预选自”标签中添加什么来获取当月的开始?

在此处输入图像描述

4

2 回答 2

2

还有另一个选项不需要 javascript,而且很可能会活得更久。Range 选择可以使用 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 中有一个很好的日期函数系列,允许导航时间。在我们的示例中, LookupByKeyTodaywithDayOfMonth。就像是

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

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

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

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

在此处输入图像描述

这应该会成功。

于 2017-05-09T10:02:28.940 回答
1

无法使用现有数据选项设置此类预选,但您可以使用Widget 的 JavaScript Hooks实现所需的行为。

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

  • 配置数据选项

例如,就像上面的屏幕截图一样,但没有预选

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

  • 将下面的代码复制到“收到数据”挂钩值:

收到数据(对于 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;
}

PS 检查演示报告以了解它是如何工作的。

于 2017-05-08T09:31:10.057 回答