2016-08-11 5 views
1

В диаграмме Google Treemap каждый узел должен иметь уникальный идентификатор, но два узла могут иметь одинаковое имя (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 заявление в TreeMap работ, до тех пор, как имена узлов являются уникальными:

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'} 
+0

как вы можете добавить строку? – ic3

+0

Я добавил эту строку в таблицу в схеме и снова загрузил схему. – UlrichWuenstel

+0

Если я понимаю, что Treemap не имеет ничего общего с проблемой. Я потерял то, что/где на самом деле проблема? – ic3

ответ

2

в качестве временного решения можно использовать тыс e следующий код, который изменяет обработку GviTable для виджета дерева Google. Проверьте пример здесь: 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

Это ограничение диаграммы Google TreeMap, который использует тот же столбец для идентификатора и метки. Помимо изменения имен, чтобы убедиться, что они уникальны (например, добавление родителя), я не вижу обходного пути.

Опция будет использовать другую карту Treemap (например, одну из D3), которая не имеет этого ограничения.

--- icCube Схема ---

Схема работает (просто использовать, вместо того, чтобы, как разделитель) enter image description here

--- --- icCube Отчетный

Этот вопрос используя TreeMap, что у вас есть две строки с одинаковым идентификатором (Германия), fiddle

This fiddle is a running example of treemap 
+0

Я отредактировал ваш пример и добавил строку «[{v: '7', f: 'Germany'}, 'America', 11, 10], ". Теперь Германия находится под Америкой и под Европой. Оба показаны без проблем. Поэтому я не ограничиваю диаграмму Google Treemap – UlrichWuenstel

+0

Также из D3 в среде отчетности отображается только маркерная диаграмма. Поэтому для использования карты treemap мне, вероятно, нужно реализовать что-то еще, не так ли? – UlrichWuenstel

+0

Для d3 да, для вашего примера, можете ли вы поделиться нерабочим примером в скрипке? – ic3