【问题标题】:IcCube reporting preselected dates in date slicerIcCube 在日期切片器中报告预选日期
【发布时间】:2017-10-05 11:32:30
【问题描述】:

我可以在“Preselection from”标签中添加什么来获取当月的月初?

【问题讨论】:

    标签: iccube iccube-reporting


    【解决方案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;
    }
    

    附注检查Demo Report 看看它是如何工作的。

    【讨论】:

    • 感谢您的回答,非常有帮助。如果我想从 Widget 的 JavaScript Hooks 中进行预选和预选,那么触发事件的正确语法是什么?
    • @ItayRegev 答案扩展了范围大小写。希望对您有所帮助!
    【解决方案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 值:

    应该会成功的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多