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:
but when I de-select 2008, this happens:
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": []
}
}
}
}
}
}
Having read that there is no answer, yet. I have created the following work-around:
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:
Hope it might be of help to others.