2016-08-11 32 views
1

在Google樹形圖中,每個節點都必須具有唯一的ID,但兩個節點可以具有相同的名稱(https://groups.google.com/d/msg/google-visualization-api/UDLD-a-0PCM/IwVCGzsWOg8J)。IcCube - 具有重複名稱的樹形圖表

我使用的模式從父/子演示(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 

但渲染樹形圖時名西班牙加倍。爲了支持名字在GVI表中的兒童的定義應該是這樣的:

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

你怎麼能添加一條線嗎? – ic3

+0

我將此行添加到架構中的表中並再次加載架構。 – UlrichWuenstel

+0

如果我瞭解Treemap與問題無關。我失去了什麼/哪裏是真正的問題? – ic3

回答

2

您也可以使用第一種解決方法e遵循修改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] 
+0

工程就像一個魅力:) – UlrichWuenstel

0

這是使用相同的列id和標籤谷歌樹形圖圖表的限制。除了更改名稱以確保它們是唯一的(例如,添加父項)之外,我沒有看到解決此問題的方法。

一個選項將使用另一個沒有此限制的Treemap圖表(例如D3中的一個)。

--- icCube模式---

架構是工作(只是用,而不是;作爲分隔符) enter image description here

--- icCube報告---

問題用樹形圖的是你已經兩行用相同的ID(德國),fiddle

This fiddle is a running example of treemap 
+0

我編輯了你的例子,並添加了「[{v:'7',f:'Germany'},'America',11,10], 」。現在德國在美國和歐洲之下。兩者都顯示沒有問題。所以它不是Google Treemap圖表的限制 – UlrichWuenstel

+0

同樣來自D3,報表環境中只顯示了子彈圖。因此,對於使用樹圖圖表,我可能需要實施更多的東西,不是嗎? – UlrichWuenstel

+0

對於d3是的,對於您的示例,您是否可以在小提琴中共享非工作示例? – ic3