(function(bannerClassName) { const sendEvent = (token, action) => { const value = 'Branding ' + token + ' – ' + action; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } else { console.log('GA send: ' + value); } }; const oneBeforePageChange = (callback) => { if (typeof Air === 'object') { const ajaxify = Air.import('module.ajaxify'); ajaxify.one('Before page changed', () => { try { if (callback) { callback(); } } catch (error) { console.log(error); } }); } }; const onLinkClick = (e) => { const link = e.target; const href = link.getAttribute('href'); sendEvent(href, 'Click'); link.removeEventListener('click', onLinkClick); }; const branding = document.querySelector(bannerClassName); if (!branding) { return; } const links = branding.querySelectorAll('a'); for (let i = 0; i < links.length; i += 1) { const isVisible = getComputedStyle(links[i]).display !== 'none'; const href = links[i].getAttribute('href'); if (isVisible) { sendEvent(href, 'Show'); } links[i].addEventListener('click', onLinkClick); } oneBeforePageChange(() => { for (let i = 0; i < links.length; i += 1) { links[i].removeEventListener('click', onLinkClick); } }); })('.entry-native-branding');

Почему вам придется настраивать инкрементальное(добавочное) обновление отчета в Power BI

Время чтения — 2-3 минуты

Это будет просто неизбежно при двух условиях:

1. Если вы будете работать над отчетом сколько-нибудь длительное время, используя источники данных содержащие миллионы строк.

2. Если вы будете делиться отчетом с коллегами в Power BI Service (Cloud)

Хотя второй пункт тоже будет скорее всего неизбежным, если вы делаете отчет не для своих личных нужд.

Как было у меня на одном из проектов:

Сначала отчет обновляли выгружая данные из БД в csv файлики. На них натравливали Power BI Desktop. Обновляли отчет локально. Загружали отчет в Power BI Service. Весил он примерно 500 Мб

Затем мы решили все автоматизировать и натравливать отчет напрямую в БД (точнее в зеркало БД). Все работало замечательно и автоматически до тех пор пока мы не прошли порог в 1 Гб.

Оказалось, что нельзя залить отчет весом более 1 Гб в облако. Например, вы вносите изменения в отчет, обновляется его, отчет весит 900 Мб — вы его легко загружаете в Power BI Service и продолжаете его обновлять там. Проходит пару недель. За это время данных в отчете ставновится, скажем 1100 Мб. Никаких проблем нет, отчет самостоятельно живет в облаке. Проблема появляется в тот момент, когда вы хотите внести еще несколько изменений. Вы обновляете отчет, нажимаете волшебную кнопку «Опубликовать» и получаете:

Здесь должен был быть скриншот с ошибкой «Отчет имеет объем более 1 Гб», но прошу простить автора за отсутствие возможности воспроизвести эту ситуацию

В общем, опубликовать отчет не получится.

Что остается сделать:

1. Надо настроить инкрементальное обновление.

2. Обновить отчет на фрагменте данных (скажем 1-2% от всех данных) в Power BI Desktop

3. Загрузить отчет в облако.

4. Обновить отчет в облаке и радоваться жизни)

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

Спасибо, что дочитали до конца.

В следущей статье расскажу о технических нюансах настройки инкрементального обновления.

(function(bannerClassName) { const sendEvent = (token, action) => { const value = 'Branding ' + token + ' – ' + action; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } else { console.log('GA send: ' + value); } }; const oneBeforePageChange = (callback) => { if (typeof Air === 'object') { const ajaxify = Air.import('module.ajaxify'); ajaxify.one('Before page changed', () => { try { if (callback) { callback(); } } catch (error) { console.log(error); } }); } }; const onLinkClick = (e) => { const link = e.target; const href = link.getAttribute('href'); sendEvent(href, 'Click'); link.removeEventListener('click', onLinkClick); }; const branding = document.querySelector(bannerClassName); if (!branding) { return; } const links = branding.querySelectorAll('a'); for (let i = 0; i < links.length; i += 1) { const isVisible = getComputedStyle(links[i]).display !== 'none'; const href = links[i].getAttribute('href'); if (isVisible) { sendEvent(href, 'Show'); } links[i].addEventListener('click', onLinkClick); } oneBeforePageChange(() => { for (let i = 0; i < links.length; i += 1) { links[i].removeEventListener('click', onLinkClick); } }); })('.entry-article-footer');
0
Комментарии
0 комментариев
null