Подскажите, можно ли копировать или клонировать кубы?

У нас идентичная структура БД, но разбита по клиентам.
Соответственно настроив один куб, я бы хотел в идеале продублировать его, поменять источник данных и пользоваться им. Но таких кнопок в действиях с кубом не вижу.

Да, возможность переносить или копировать кубы есть, это можно сделать двумя способами:

Способ 1

Так как любой куб это плоская таблица, в ее основе лежит SQL-запрос. Просмотреть его можно как в режиме Self-Service, открыв раздел Источники Данных → Кубы (в v8 этот раздел доступен только в административном интерфейсе). Нажав на иконку “Редактировать” рядом с нужным кубом вы можете просмотреть его SQL запрос. Вы можете скопировать его и вставить в соответствующее поле при создании нового куба. При необходимости вы можете внести изменения в запрос.

Способ 2 (для глобальных кубов)

  1. Определиться с кубом, который копируем и заменяем в условии where 'luxmsbi.custom_report' на латинское имя куба на WHERE id='luxmsbi.custom_report'

  2. Определиться с именем куба для копии и заменить строки ниже в обоих скриптах на придуманное имя: 'Моя копия куба' 'my_copy_cube'

  3. Если имя источника поменялось, то заменяем строку ниже в обоих скриптах на придуманное имя: 'my_copy_source'

  4. Прежде, чем выполнять скрипт, необходимо, чтобы источник был создан, название которого поменяли. Если всё хорошо, то выполняем следующий скрипт.

INSERT INTO koob.cubes
(id, source_ident, "name", title, sql_query, config)
SELECT replace(source_ident, source_ident, 'my_copy_source') || '.' || REPLACE("name","name", 'my_copy_cube') AS id,
replace(source_ident, source_ident, 'my_copy_source') AS source_ident,
REPLACE("name","name", 'my_copy_cube') AS "name", 
replace(title,title, 'Моя копия куба') AS title ,
sql_query, config
FROM koob.cubes
WHERE id='luxmsbi.custom_report';

.5. Выполнить скрипт ниже, заменив по аналогии

INSERT INTO koob.dimensions
(id, source_ident, cube_name, "name", "type", title, sql_query, config)
SELECT replace(source_ident, source_ident, 'my_copy_source') || '.' || REPLACE(cube_name,cube_name, 'my_copy_cube') || '.' ||  "name" AS id,
replace(source_ident, source_ident, 'my_copy_source') AS source_ident,
REPLACE(cube_name,cube_name, 'my_copy_cube') AS cube_name,
"name", "type", title, sql_query, config
FROM koob.dimensions
WHERE id LIKE 'luxmsbi.custom_report%';

Второй способ (для локальных кубов)

  1. Определиться с кубом, который копируем и заменяем в условии where 'luxmsbi.custom_report' на латинское имя куба
    WHERE id='luxmsbi.custom_report'
    WHERE id LIKE 'luxmsbi.custom_report%';

  2. Определиться с именем куба для копии и заменить строки ниже в обоих скриптах на придуманное имя:
    'Моя копия куба'
    'my_copy_cube'

  3. Если имя источника поменялось, то заменяем строку ниже в обоих скриптах на придуманное имя:
    'my_copy_source'

  4. Прежде, чем выполнять нижепредложенный скрипт, необходимо, чтобы источник был создан в имя_атласа._data_sources, название которого поменяли. Если всё хорошо, то выполняем скрипт ниже.

INSERT INTO имя_атласа."_cubes"
(id, atlas_source_ident, "name", title, sql_query, config)
SELECT replace(atlas_source_ident, atlas_source_ident, 'my_copy_source') || '.' || REPLACE("name","name", 'my_copy_cube') AS id,
replace(atlas_source_ident, atlas_source_ident, 'my_copy_source') AS atlas_source_ident, 
REPLACE("name","name", 'my_copy_cube') AS "name",
replace(title, title, 'Моя копия куба') AS title ,
sql_query, config
FROM имя_атласа."_cubes"
WHERE id='luxmsbi.custom_report';

.5. Выполнить скрипт ниже, заменив по аналогии

INSERT INTO имя_атласа."_dimensions"
(id, "name", "type", title, sql_query, config, atlas_cube_id)
SELECT 
REPLACE(split_part(id, '.', 1), split_part(id, '.', 1), 'my_copy_source') || '.' || 
REPLACE(split_part(id, '.', 2), split_part(id, '.', 2), 'my_copy_cube') || '.' || split_part(id, '.', 3) AS id,
"name", 
"type", 
title, 
sql_query, 
config,
REPLACE(split_part(atlas_cube_id, '.', 1), split_part(atlas_cube_id, '.', 1), 'my_copy_source') || '.' || 
REPLACE(split_part(atlas_cube_id, '.', 2), split_part(atlas_cube_id, '.', 2), 'my_copy_cube') as atlas_cube_id
FROM имя_атласа."_dimensions"
WHERE atlas_cube_id LIKE 'luxmsbi.custom_report%';