Search code examples
amchartsiccubeiccube-reporting

icCube - set serie color for 2 dimensions in the columns in a amCharts combo chart


I have got the following dynamic chart (see attached picture). For the sake of reproducability I have created a very simple chart based on the standard icCube's sales model.

The idea is to have two facts on the column axes with the data for the selected years. To distinguish between the facts I want to assign a color to the facts that fades over the years. When you add years, the new year will get the color that belongs to the fact, but a little bit lighter. The screenprints below will clarify.

My question is: is there a way to do this with amCharts/combo in relation with the MDX/setting of icCube?

In the attachments you see two graphs: this is what I intend

but when I de-select 2008, this happens: this happens/ the issue

I have included the JSON so you can reproduce this in the Sales demo on a plain vanilla icCUbe 5.1.2 installation.

    {
    "classID": "ic3.ReportGuts",
    "guts_": {
        "ic3Version": 12,
        "schemaName": "Sales",
        "cubeName": "Sales",
        "layout": {
            "classID": "ic3.FixedLayout",
            "guts_": {
                "ic3Version": 12,
                "grid": 10,
                "boxes": [
                    {
                        "classID": "ic3.FixedLayoutBox",
                        "guts_": {
                            "ic3Version": 12,
                            "header": "chart with color serie that should match the selected fact (orange = Amount, blue = Amount_2)",
                            "behaviour": "Fixed Box",
                            "noPrint": false,
                            "position": {
                                "top": 100,
                                "left": 0,
                                "width": 1021,
                                "height": 421
                            },
                            "widgetAdapterUid": "w12",
                            "zIndex": 2008
                        }
                    },
                    {
                        "classID": "ic3.FixedLayoutBox",
                        "guts_": {
                            "ic3Version": 12,
                            "header": "select years",
                            "behaviour": "Fixed Box",
                            "noPrint": false,
                            "position": {
                                "top": 0,
                                "left": 60,
                                "width": 630,
                                "height": 80
                            },
                            "widgetAdapterUid": "w14",
                            "zIndex": 2009
                        }
                    }
                ],
                "theme": "Classic",
                "sizeIndicator": {
                    "width": 1024,
                    "height": 708
                }
            }
        },
        "widgetMgr": {
            "classID": "ic3.WidgetAdapterContainerMgr",
            "guts_": {
                "ic3Version": 12,
                "items": [
                    {
                        "classID": "ic3.AmchartsComboAdapter",
                        "guts_": {
                            "ic3Version": 12,
                            "navigationGuts": {
                                "classID": "ic3.AmChartsNavigationStrategy",
                                "guts_": {
                                    "ic3Version": 12,
                                    "menuVisibility": {
                                        "back": true,
                                        "axisXChange": "All",
                                        "axisYChange": "All",
                                        "filter": "All",
                                        "reset": true,
                                        "widget": true,
                                        "others": "All"
                                    },
                                    "maxAxisMemberCount": 10,
                                    "selectionMode": "disabled",
                                    "drillDownStrategy": {
                                        "type": "mdxExpression",
                                        "options": {
                                            "drd_mdx": "order(nonempty($member.children, @{selMeasure}), @{selMeasure}, BDESC)"
                                        }
                                    }
                                }
                            },
                            "ic3_name": "widget-1",
                            "ic3_uid": "w12",
                            "ic3_eventMapper": {
                                "classID": "ic3.EventWidgetMapper",
                                "guts_": {
                                    "__ic3_widgetEventsDescription": {},
                                    "fireOnRefresh": {
                                        "name": "All Events (default)",
                                        "uniqueName": "all",
                                        "parentRowId": -1,
                                        "type": "OT"
                                    },
                                    "ic3queryRefresh": "selDimensie"
                                }
                            },
                            "ic3_mdxBuilderUid": "m6",
                            "__ic3_widgetTypeName": "amCharts/Combo",
                            "ic3extraOptions": ":{  \"categoryAxis\": {\n    \"gridPosition\": \"middle\",\n    \"gridAlpha\": 0,\n    \"labelFunction\": function(valueText, serialDataItem, categoryAxis) {\n        return valueText.substr(0,10).replace(/\\s+/g, '<br>');\n    }\n  }\n\n }",
                            "graphs": [
                                {
                                    "lineThickness": 3,
                                    "balloonText": "[[category]]<br>[[title]]: <b>[[fValue]]</b>"
                                }
                            ],
                            "ic3ChartType": [
                                "column",
                                "column"
                            ],
                            "legendPosition": "bottom"
                        }
                    },
                    {
                        "classID": "ic3.QueryFilterButtonListAdapter",
                        "guts_": {
                            "ic3Version": 12,
                            "ic3_name": "widget-0",
                            "ic3_uid": "w14",
                            "ic3_eventMapper": {
                                "classID": "ic3.EventWidgetMapper",
                                "guts_": {
                                    "ic3selection": "selYear",
                                    "__ic3_widgetEventsDescription": {}
                                }
                            },
                            "ic3_mdxBuilderUid": "m1",
                            "__ic3_widgetTypeName": "icCube/Buttons",
                            "selectionMode": "multi",
                            "layout": "horizontal"
                        }
                    }
                ]
            }
        },
        "constantMgr": {
            "classID": "ic3.ConstantsMgr",
            "guts_": {
                "constant": []
            }
        },
        "cssMgr": {
            "classID": "ic3.CssMgr",
            "guts_": {}
        },
        "javascriptMgr": {
            "classID": "ic3.ReportJavascriptMgr",
            "guts_": {
                "ic3Version": 12,
                "js": "/**                                                                      \n * A function called each time an event is generated.                    \n *                                                                       \n * @param context the same object is passed between consumeEvent calls.  \n *                Can be used to store information.                      \n *        {                                                              \n *          $report   : jQuery context of the report container           \n *          fireEvent : a function( name, value ) triggering an event    \n *        }                                                              \n *                                                                       \n * @param event the event information                                    \n *                                                                       \n          {                                                              \n *          name  : as specified in the 'Events' tab                     \n *          value : (optional) actual event value                        \n *          type  : (optional) e.g., ic3selection                        \n *        }                                                              \n *                                                                       \n * Check the 'Report Event Names' menu for the list of available events. \n */                                                                      \n/*                                                                       \nfunction consumeEvent( context, event ) {                                \n  if (event.name == 'ic3-report-init') {                                 \n    // add your code here                                                \n  }                                                                      \n}                                                                        \n*/                                                                       \n"
            }
        },
        "calcMeasureMgr": {
            "classID": "ic3.CalcMeasureMgr",
            "guts_": {
                "measures": [
                    {
                        "name": "Amount2",
                        "expression": "1.1*[amount]",
                        "properties": null
                    }
                ]
            }
        },
        "mdxQueriesMgr": {
            "classID": "ic3.MdxQueriesContainerMgr",
            "guts_": {
                "mdxQueries": {
                    "classID": "ic3.BaseContainerMgr",
                    "guts_": {
                        "ic3Version": 12,
                        "items": [
                            {
                                "classID": "ic3.QueryBuilderWidget",
                                "guts_": {
                                    "mdxWizard": {
                                        "classID": "ic3.QueryBuilderWizardForm",
                                        "guts_": {
                                            "rows": [
                                                {
                                                    "classID": "ic3.QueryBuilderHierarchyForm",
                                                    "guts_": {
                                                        "hierarchy": {
                                                            "name": "Product",
                                                            "uniqueName": "[Product].[Product]"
                                                        },
                                                        "type": "membersOfLevel",
                                                        "membersOfLevel": "[Product].[Product].[Article]"
                                                    }
                                                }
                                            ],
                                            "cols": [
                                                {
                                                    "classID": "ic3.QueryBuilderMeasuresFormBase",
                                                    "guts_": {
                                                        "measures": [
                                                            {
                                                                "name": "Amount",
                                                                "uniqueName": "[Measures].[Amount]",
                                                                "type": "ME"
                                                            },
                                                            {
                                                                "name": "Amount2",
                                                                "uniqueName": "[Measures].[Amount2]",
                                                                "type": "RCME"
                                                            }
                                                        ]
                                                    }
                                                },
                                                {
                                                    "classID": "ic3.QueryBuilderEventsFilter",
                                                    "guts_": {
                                                        "mdxStatement": "@{selYear}"
                                                    }
                                                }
                                            ],
                                            "filters": [],
                                            "nonEmptyOnRows": false,
                                            "nonEmptyOnColumns": false
                                        }
                                    },
                                    "mdxFlat": {
                                        "classID": "ic3.QueryBuilderFlatMdxForm",
                                        "guts_": {
                                            "useMdxStatement": false
                                        }
                                    },
                                    "ic3_name": "mdx Query-0",
                                    "ic3_uid": "m6"
                                }
                            }
                        ]
                    }
                },
                "mdxFilter": {
                    "classID": "ic3.BaseContainerMgr",
                    "guts_": {
                        "ic3Version": 12,
                        "items": [
                            {
                                "classID": "ic3.NewFilterQueryBuilderForm",
                                "guts_": {
                                    "hierarchy": {
                                        "name": "Year",
                                        "uniqueName": "[Time].[Year]"
                                    },
                                    "type": "membersOfLevel",
                                    "membersOfLevel": "[Time].[Year].[Year]",
                                    "defaultsMdx": "2008,2009,2010",
                                    "addDefaultMember": false,
                                    "useAllMember": false,
                                    "useDefaultMemberIfEmpty": false,
                                    "ic3_name": "mdx Filter-0",
                                    "ic3_uid": "m1"
                                }
                            }
                        ]
                    }
                },
                "actionBuilders": {
                    "classID": "ic3.BaseContainerMgr",
                    "guts_": {
                        "ic3Version": 12,
                        "items": []
                    }
                }
            }
        }
    }
}

Solution

  • Having read that there is no answer, yet. I have created the following work-around:

    • I fix the total years displayed to 4 years in total
    • In the MDX statement I

    This is the MDX statement I use:

     WITH
     MEMBER [Time].[Year].[All-M].[_1] as null
     MEMBER [Time].[Year].[All-M].[_2] as null
     MEMBER [Time].[Year].[All-M].[_3] as null
     MEMBER [Measures].[Amount2] AS 1.1*[amount]
     SET [selection] as  order( @{selYear},[Time].[Year].currentmember.key, bdesc) +
         [Time].[Year].[All-M].[_1] + [Time].[Year].[All-M].[_2] + [Time].[Year].[All-M].[_3] 
     SELECT {[measures].[Amount]} *  [Time].[Year].[All-M].[_1]
    + item( ({[measures].[Amount]} *  {[selection]}),3) 
    + item( ({[measures].[Amount]} *  {[selection]}),2) 
    + item( ({[measures].[Amount]} *  {[selection]}),1) 
    + item( ({[measures].[Amount]} *  {[selection]}),0)
    + item( ({[measures].[Amount2]} *  {[selection]}),3) 
    + item( ({[measures].[Amount2]} *  {[selection]}),2) 
    + item( ({[measures].[Amount2]} *  {[selection]}),1) 
    + item( ({[measures].[Amount2]} *  {[selection]}),0)
     ON COLUMNS,
    { [Product].[Product].[Article].allmembers } ON ROWS
     FROM [Sales]
    

    I do not know why I have to select the 1st tuple (amount * _1), but if I do not select it I get a MDX error.

    Nevertheless, I now obtain a perfectly tuned chart: 4 years selected 2 years selected

    Hope it might be of help to others.