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 值:
应该就可以了。
我可以在 '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 值:
应该就可以了。