我可以在“预选自”标签中添加什么来获取当月的开始?
问问题
90 次
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 中有一个很好的日期函数系列,允许导航时间。在我们的示例中, LookupByKey、Today和withDayOfMonth。就像是
[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 回答