【问题标题】:IcCube - Treemap Chart with duplicate namesIcCube - 重复名称的树形图
【发布时间】:2016-08-11 10:30:37
【问题描述】:

在 Google 树形图中,每个节点都必须有一个唯一的 ID,但两个节点可以有相同的名称 (https://groups.google.com/d/msg/google-visualization-api/UDLD-a-0PCM/IwVCGzsWOg8J)。

我使用了父/子演示中的架构 (http://www.iccube.com/support/documentation/user_guide/schemas_cubes/dim_parentchild.php)

只要节点的名称是唯一的,在树形图中使用以下 MDX 语句即可:

WITH
  MEMBER [parent_name] as IIF( [dim (ALL)].[Hierarchy].currentmember 
  is  [dim (ALL)].[Hierarchy].[ALL],'',
  [dim (ALL)]. [Hierarchy].currentmember.parent.name )
SELECT
  {[parent_name],[Measures].[value]} on 0,
  non empty [dim (ALL)].[Hierarchy].members on 1
FROM
  [Cube]  

如果我将该行添加到 icCube 架构中的内存表中:

7,4,Spain, 2, 32 

但是在渲染 Treemap 时西班牙的名称是双倍的。为了支持名称,GVI 表中的子定义应该是这样的:

{v:'uniqueID-Spain', f:'Spain'}

【问题讨论】:

  • 如何添加一行?
  • 我将此行添加到架构中的表中并再次加载架构。
  • 如果我理解 Treemap 与问题无关。我迷路了,实际上问题出在哪里/在哪里?
  • 内存表使用逗号分隔字段,而不是点逗号
  • 我把整个表格中的逗号换成了分号,试着把这行写成原来的样子。

标签: google-visualization treemap iccube-reporting


【解决方案1】:

作为一种解决方法,您可以使用以下代码修改 Google 树小部件的 GviTable 处理。在此处查看示例: https://drive.google.com/file/d/0B3kSph_LgXizSVhvSm15Q1hIdW8/view?usp=sharing

报告 JavaScript:

function consumeEvent( context, event ) {
    if (event.name == 'ic3-report-init') {
        if(!_.isFunction(ic3.originalProcessGviTable)) {
            ic3.originalProcessGviTable = viz.charts.GenericGoogleWidget.prototype.processGviTable
        }

        viz.charts.GenericGoogleWidget.prototype.processGviTable = function(gviTable){
            if(this.props.ic3chartType === "TreeMap") {
                gviTable = gviTable || this.gviTable();
                var underlying = _.cloneDeep(gviTable.getUnderlyingGviTable());
                _.each(underlying.rows, function(row){
                    // Replace id with parent prefixed
                    if(_.isObject(row.c[0]) && !_.isString(row.c[0].f)) {
                        row.c[0].f = row.c[0].v;
                        if(_.isObject(row.c[0].p) && _.isString(row.c[0].p.mun)) {
                            row.c[0].v = row.c[0].p.mun;
                        }
                    }
                });
                gviTable = viz.GviTable.fromSnapshot(underlying);
                this.startColumnSelection = gviTable.getNumberOfHeaderColumns() - 1;
                return viz.charts.toGoogleDataTableOneRowHeader(gviTable);
            } else {
                return ic3.originalProcessGviTable.apply(this, gviTable);
            }
        }
    }
}

对于这样的查询:

WITH
  MEMBER [parent_name] as 
    IIF( [dim (ALL)].[Hierarchy].currentmember.isAll(),
        '', 
        ([dim (ALL)].[Hierarchy].currentmember.parent.uniqueName) 
    )
SELECT
  {[parent_name],[Measures].[value]} on 0,
  non empty [dim (ALL)].[Hierarchy].members on 1
FROM 
  [Cube]

【讨论】:

  • 像魅力一样工作:)
【解决方案2】:

这是对 ID 和标签使用同一列的 Google Treemap 图表的限制。除了更改名称以确保它们是唯一的(例如添加父级)之外,我没有看到解决方法。

一个选项是使用另一个没有此限制的 Treemap 图表(例如 D3 中的一个)。

--- icCube 架构 ---

架构正在运行(只需使用 , 而不是 ; 作为分隔符)

--- icCube 报告 ---

使用 Treemap 的问题是您有两行具有相同 id(德国)fiddle

This fiddle is a running example of treemap

【讨论】:

  • 我编辑了您的示例并添加了行“ [{v:'7', f:'Germany'}, 'America', 11, 10], "。现在德国既在美国之下,也在欧洲之下。两者都显示没有问题。所以它不是谷歌树形图的限制
  • 同样从 D3 开始,报表环境中仅显示子弹图。所以为了使用树形图,我可能需要实现更多的东西,不是吗?
  • 对于 d3 是的,对于你的例子,你能在小提琴中分享一个不工作的例子吗?
  • 可能有误会。我可以向您展示一个工作示例,其中两个节点具有相同的名称(德国):jsfiddle.net/UlrichWuenstel/t8w2446g。我的问题是,我无法通过 icCube 将此数据库提供给图表。
  • 我知道架构按原样工作。只有当我想把这个数据放到树形图上时,双重名称才有这个问题。这就是为什么我问,是否可以在 IcCube 中将数据放入树形图中,就像我在 jsfiddle 中展示的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2023-04-10
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多