В Excel можна створити моделі даних, які містять мільйони рядків, а потім виконати ефективний аналіз даних на основі цих моделей. Моделі даних можна створювати за допомогою надбудови Power Pivot або без неї, щоб підтримувати будь-яку кількість зведених таблиць, діаграм і візуалізацій Power View в одній книзі.
Хоча ви можете легко створити величезні моделі даних в Excel, є кілька причин цього не робити. По-перше, великі моделі, які містять безліч таблиць і стовпців, перевантажені для більшості аналізів і створюють громіздкий список полів. По-друге, великі моделі використовують цінну пам'ять, негативно впливаючи на інші програми та звіти, які використовують ті самі системні ресурси. Нарешті, у Microsoft 365 у веб-програмі SharePoint Online і веб-програмі Excel Web App розмір файлу Excel можна обмежити до 10 МБ. Для моделей даних книги, які містять мільйони рядків, обмеження в 10 МБ буде досить швидко вичерпано. Див . статтю Специфікація та обмеження моделі даних.
У цій статті ви дізнаєтеся, як створити щільно побудовану модель, з яким легше працювати та використовувати менше пам'яті. Щоб дізнатися про практичні поради з ефективного оформлення моделі, ви зможете погасити дорогу для будь-якої моделі, яку ви створюєте та використовуєте, незалежно від того, яку модель ви переглядаєте в програмі Excel, Microsoft 365 SharePoint Online, на Office Web Apps Server або в SharePoint.
Також рекомендуємо запустити засіб оптимізації розміру книги. Він проаналізує вашу книгу Excel і за можливості стисне її ще більше. Завантажте засіб оптимізації розміру книги.
У цій статті
Коефіцієнти стискання та обробник аналітики в пам'яті
Моделі даних у програмі Excel використовують обробник аналітики в пам'яті для зберігання даних у пам'яті. Обробник впроваджує потужні методи стискання, щоб зменшити вимоги до сховища, скорочуючи набір результатів, доки він не буде дробом його початкового розміру.
В середньому можна очікувати, що модель даних буде в 7-10 разів меншою за ті самі дані в точці її походження. Наприклад, якщо ви імпортуєте 7 МБ даних із бази даних SQL Server, модель даних у програмі Excel може бути не меншою за 1 МБ. Ступінь стискання фактично досягається, перш за все, залежить від кількості унікальних значень у кожному стовпці. Що більше унікальних значень, то більше пам'яті потрібно для їх зберігання.
Чому мова йде про стискання та унікальні значення? Оскільки створюється ефективна модель, яка зменшує використання пам'яті, це все про розгортання стискання, і найпростіший спосіб зробити це – позбутися непотрібних стовпців, особливо якщо ці стовпці містять велику кількість унікальних значень.
Примітка.: Відмінності в вимогах до сховища для окремих стовпців можуть бути величезними. У деяких випадках краще мати кілька стовпців із низькою кількістю унікальних значень, а не одним стовпцем із великою кількістю унікальних значень. У розділі оптимізації дати й часу докладно описано цей метод.
Ніщо не б'є стовпець, який не існує, за брак пам'яті
Найбільш ефективний стовпець пам'яті – це стовпець, який ніколи не імпортувалися в першу чергу. Якщо ви хочете побудувати ефективну модель, погляньте на кожен стовпець і запитайте себе, чи він вносить свій внесок в аналіз, який потрібно виконати. Якщо це не так або ви не впевнені, залиште його. За потреби ви завжди можете додати нові стовпці пізніше.
Два приклади стовпців, які слід завжди виключати
Перший приклад стосується даних, які походять зі сховища даних. У сховищі даних часто зустрічаються артефакти процесів ETL, які завантажуються та оновлюють дані на складі. Стовпці, наприклад "дата створення", "дата оновлення" та "запуск ETL", створюються під час завантаження даних. Жоден із цих стовпців не потрібен у моделі, і його слід скасувати під час імпорту даних.
У другому прикладі потрібно пропустити стовпець первинного ключа під час імпорту таблиці фактів.
Багато таблиць, включно з таблицями фактів, мають первинні ключі. Для більшості таблиць, наприклад тих, які містять дані про клієнта, працівника або дані про збут, потрібно використовувати первинний ключ таблиці, щоб використовувати її для створення зв'язків у моделі.
Таблиці фактів різні. У таблиці фактів первинний ключ використовується для унікальної ідентифікації кожного рядка. Хоча це необхідно для нормалізації, вона менш корисна в моделі даних, де потрібно використовувати лише стовпці для аналізу або встановлення зв'язків між таблицями. Тому під час імпорту з таблиці фактів не включайте первинний ключ. Первинні ключі в таблиці фактів споживають величезну кількість простору в моделі, але не надають ніякої користі, оскільки їх не можна використовувати для створення зв'язків.
Примітка.: У сховищах даних і багатовимірних базах даних великі таблиці, які складаються переважно з числових даних, часто називають "таблицями фактів". Таблиці фактів зазвичай включають дані про ефективність бізнесу або транзакції, наприклад точки збуту та точки даних про витрати, агреговані та узгоджені з організаційними одиницями, продуктами, сегментами ринку, географічними регіонами тощо. Усі стовпці в таблиці фактів, які містять бізнес-дані або які можна використовувати для перехресного посилання на дані, які зберігаються в інших таблицях, мають бути включені в модель для підтримки аналізу даних. Стовпець, який потрібно виключити, – це стовпець первинного ключа таблиці фактів, який складається з унікальних значень, які існують лише в таблиці фактів і більше ніде. Оскільки таблиці фактів настільки величезні, деякі з найбільших успіхів в ефективності моделі походять від виключення рядків або стовпців з таблиць фактів.
Виключення непотрібних стовпців
Ефективні моделі містять лише ті стовпці, які насправді знадобляться в книзі. Щоб керувати тим, які стовпці включено до моделі, потрібно скористатися майстром імпорту таблиць у надбудові Power Pivot, щоб імпортувати дані , а не діалогове вікно "Імпорт даних" у програмі Excel.
Коли ви запускаєте майстер імпорту таблиць, виберіть таблиці, які потрібно імпортувати.
Для кожної таблиці можна натиснути кнопку Попередній перегляд & Фільтр і вибрати потрібні частини таблиці. Радимо спочатку зняти прапорці для всіх стовпців, а потім продовжити перевірку потрібних стовпців, обміркуючи, чи потрібні вони для аналізу.
Як щодо фільтрування лише необхідних рядків?
Багато таблиць у корпоративних базах даних і сховищах даних містять історичні дані, накопичені за тривалий період часу. Крім того, ви можете виявити, що таблиці, які вас цікавлять, містять інформацію для областей компанії, не потрібних для вашого конкретного аналізу.
За допомогою майстра імпорту таблиць можна відфільтрувати історичні або непов'язані дані та, таким чином, заощадити багато місця в моделі. На зображенні нижче фільтр дати використовується для отримання лише рядків, які містять дані за поточний рік, за винятком історичних даних, які не потрібні.
Що робити, якщо нам потрібна колонка; чи можемо ми ще зменшити його витрати на простір?
Є кілька додаткових методів, які можна застосувати, щоб зробити стовпець кращим кандидатом для стискання. Пам'ятайте, що єдиною характеристикою стовпця, який впливає на стискання, є кількість унікальних значень. У цьому розділі ви дізнаєтеся, як можна змінити деякі стовпці, щоб зменшити кількість унікальних значень.
Змінення стовпців дати й часу
У багатьох випадках стовпці Datetime займають багато місця. На щастя, існує кілька способів зменшити вимоги до сховища для цього типу даних. Методи залежать від способу використання стовпця та рівня комфорту в побудові запитів SQL.
Стовпці дати й часу містять частину дати та час. Коли ви запитаєте себе, чи потрібен вам стовпець, поставте те саме запитання кілька разів для стовпця Datetime:
-
Чи потрібна часова частина?
-
Чи потрібна частина часу на рівні годин? Хвилин? Секунд? Мілісекундах?
-
Чи є в мене кілька стовпців Дати й часу, тому що потрібно обчислити різницю між ними або просто агрегувати дані за роком, місяцем, кварталом тощо.
Спосіб відповіді на кожне з цих запитань визначає варіанти роботи зі стовпцем Datetime.
Усі ці рішення потребують змінення запиту SQL. Щоб спростити змінення запиту, слід відфільтрувати принаймні один стовпець у кожній таблиці. Відфільтрувавши стовпець, ви змінюєте побудову запитів із скороченого формату (SELECT *) на інструкцію SELECT, яка містить повні імена стовпців, які значно легше змінити.
Розгляньмо створені запити. У діалоговому вікні Властивості таблиці можна перейти до редактора запитів і переглянути поточний запит SQL для кожної таблиці.
У вікні Властивості таблиці виберіть редактор запитів.
Редактор запитів відображає запит SQL, який використовується для заповнення таблиці. Якщо під час імпорту відфільтровано будь-який стовпець, запит міститиме повні імена стовпців:
На відміну від цього, якщо ви імпортували таблицю в повному обсязі, не знімаючи жодний стовпець і не застосовуючи фільтр, запит відображатиметься як "Вибрати * з", що буде складніше змінити:
|
Змінення запиту SQL
Тепер, коли ви знаєте, як знайти запит, ви можете змінити його, щоб додатково зменшити розмір моделі.
-
Якщо стовпці з грошовими або десятковими даними не потрібні, використовуйте цей синтаксис, щоб позбутися десяткових знаків:
"SELECT ROUND([Decimal_column_name],0)... .”
Якщо вам потрібні центи, але не дроби центів, замініть 0 на 2. Якщо використовуються від'ємні числа, можна округлити до одиниць, десятків, сотень тощо.
-
Якщо у вас є стовпець Datetime з іменем dbo. Великий стіл. [Дата й час] і вам не потрібна частина Time, використовуйте синтаксис, щоб позбутися часу:
"SELECT CAST (dbo. Великий стіл. [Date time] as date) AS [Date time]) "
-
Якщо у вас є стовпець Datetime з іменем dbo. Великий стіл. [Дата й час] і вам потрібні частини Дати й Часу, використовуйте кілька стовпців у запиті SQL замість одного стовпця Datetime:
"SELECT CAST (dbo. Великий стіл. [Дата й час] як дата ) AS [Дата й час],
datepart(hh, dbo. Великий стіл. [Дата й час]) як [Дата й час],
datepart(mi, dbo. Великий стіл. [Дата й час]) як [Дата й час у хвилинах],
datepart(ss, dbo. Великий стіл. [Дата й час]) як [Дата й час у секундах],
datepart(ms, dbo. Великий стіл. [Дата й час]) as [Date Time Milliseconds]"
Використовуйте стільки стовпців, скільки потрібно, щоб зберігати кожну частину в окремих стовпцях.
-
Якщо вам потрібні години та хвилини, а ви віддаєте перевагу їм разом як одному стовпцю часу, можна використовувати синтаксис:
Timefromparts(datepart(hh, dbo. Великий стіл. [Дата_часу]), datepart(mm; dbo. Великий стіл. [Дата й час])) as [Date Time HourMinute]
-
Якщо у вас є два стовпці дати й часу, наприклад [Час початку] та [Час завершення], і вам дійсно потрібна різниця в часі між ними в секундах як стовпець [Тривалість], видаліть обидва стовпці зі списку та додайте:
"datediff(ss;[Дата початку],[Дата завершення]) як [Тривалість]"
Якщо замість ss використовувати ключове слово мс, тривалість відображатиметься в мілісекундах.
Використання обчислюваних мір DAX замість стовпців
Якщо ви раніше працювали з мовою виразів DAX, можливо, ви вже знаєте, що обчислювані стовпці використовуються для отримання нових стовпців на основі іншого стовпця в моделі, тоді як обчислювані показники визначаються один раз у моделі, але оцінюються лише в разі використання у зведеній таблиці або іншому звіті.
Один із методів збереження пам'яті – замінити звичайні або обчислювані стовпці на обчислювані показники. Класичний приклад: "Ціна за одиницю", "Кількість" і "Підсумок". Якщо у вас є всі три, ви можете заощадити місце, зберігши лише два і розрахуючи третій за допомогою DAX.
Які 2 стовпці слід зберегти?
У наведеному вище прикладі залиште значення "Кількість" і "Ціна за одиницю". Ці два значення менші за загальний. Щоб обчислити підсумок, додайте обчислюваний показник, наприклад:
"TotalSales:=sumx('Sales Table','Sales Table'[Ціна за одиницю]*'Таблиця збуту'[Кількість])"
Обчислювані стовпці схожі на звичайні стовпці, які займають місце в моделі. На відміну від цього, обчислювані показники обчислюються на льоту та не займають місця.
Висновки
У цій статті ми розповіли про кілька підходів, які можуть допомогти вам побудувати більш ефективну модель пам'яті. Спосіб зменшити розмір файлу та вимоги до пам'яті моделі даних – зменшити загальну кількість стовпців і рядків, а також кількість унікальних значень, які відображаються в кожному стовпці. Нижче наведено кілька методів, які ми розглянули.
-
Видалення стовпців – це, звичайно, найкращий спосіб заощадити місце. Вирішіть, які стовпці вам потрібні.
-
Іноді можна видалити стовпець і замінити його на обчислюваний показник у таблиці.
-
Можливо, не знадобляться всі рядки таблиці. Ви можете відфільтрувати рядки в майстрі імпорту таблиць.
-
Загалом, розділити один стовпець на кілька окремих частин – це чудовий спосіб зменшити кількість унікальних значень у стовпці. Кожна частина матиме невелику кількість унікальних значень, а сукупний підсумок буде меншим за вихідний об'єднаний стовпець.
-
У багатьох випадках окремі частини також потрібно використовувати як роздільники у звітах. За необхідності можна створювати ієрархії з таких частин, як Години, Хвилини та Секунди.
-
У багатьох разів стовпці містять більше інформації, ніж потрібно. Наприклад, у стовпці зберігаються десяткові знаки, але застосовано форматування, щоб приховати всі десяткові знаки. Округлення може бути дуже ефективним у зниженні розміру числового стовпця.
Тепер, коли ви зробили все можливе, щоб зменшити розмір книги, радимо також запустити засіб оптимізації розміру книги. Він проаналізує вашу книгу Excel і за можливості стисне її ще більше. Завантажте засіб оптимізації розміру книги.
Пов’язані посилання
Специфікація й обмеження моделі даних
Засіб оптимізації розміру книги
Надбудова Power Pivot: ефективний аналіз і моделювання даних у програмі Excel