Індексування даних у Vertipaq: зберігання рядків і стовпців

У цьому підручнику ми розглянемо різницю в тому, як працює індексування даних у реляційній базі даних і у Vertipaq.

Реляційні бази даних зберігають дані рядок за рядком. З іншого боку, Vertipaq робить це колонка за колонкою.

Давайте подивимося, як ці два способи зберігання та індексування даних можуть вплинути на процес розробки звіту, особливо під час виконання ваших запитів.

Зміст

Індексація даних на рядок

Зберігання даних рядок за рядком є ​​традиційним способом зберігання даних. Однак цей процес займає більше часу, що вплине на продуктивність вашого запиту.

Скажімо, у нас є таблиця, яка містить бренд, колір, стать, кількість і чисту ціну.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Якщо ми збережемо все в цій таблиці в базі даних, то вона зберігатиме дані в рядку за рядком. Ось чому традиційну структуру зберігання даних також називають сховищем рядків.

По-перше, у тому самому рядку він зберігатиме заголовки стовпців, знайдені в першому рядку — бренд, колір, стать, кількість і чиста ціна. Потім він переходить до наступного рядка, щоб зберегти перші елементи під кожним стовпцем — A. Datum, Azure, пробіл, 1 і 103.2. Це продовжується ряд за рядом.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Отже, як ми будемо обчислювати длякількості за допомогою цього методу індексації даних?

По-перше, він починається з першого рядка, який містить заголовки стовпців. Потім він переходить до наступного рядка та пропускає інші фрагменти даних, доки не дійде до першої кількості, яку бачить, тобто 1. Потім він переходить від рядка до рядка, пробігаючи всі дані, які містить кожен рядок, і збирає всі кількості знахідок.

Коли він відкладає всі кількості з кожного рядка, це єдиний раз, коли обчислення завершено.

Ви, напевно, можете собі уявити, наскільки це виснажливий процес, якщо ви готуєте звіт LuckyTemplates, який використовує підключення DirectQuery до джерела даних SQL. У цьому випадку служби аналізу збираються перетворити код DAX на мову SQL, а потім почнуть переглядати структуру даних рядок за рядком.

Індексація даних за стовпцем

Щоб уникнути тривалого процесу, у вас є можливість зберігати дані по стовпцях за допомогою Vertipaq, коли ви вибираєте режим імпорту.

Якщо ви використовуєте зберігання в стовпцях замість зберігання в рядках, бренд, колір, стать, кількість і чиста ціна зберігатимуться в різних структурах даних.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Припустімо, ми хочемо отримати СУМУ значень у стовпці «Кількість». Не потрібно буде пропускати дані про бренд, колір та інші елементи за межами стовпця "Кількість". За одне сканування він зчитує весь стовпець кількості зверху вниз і підсумовує всі значення.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Через це запити виконуватимуться швидше порівняно з виконанням зліва направо.

Порівняння часу виконання в простих запитах

Щоб справді побачити величезну різницю між сховищем рядків і стовпців, давайте зробимо кілька тестових запитів як у SQL, так і в Vertipaq. Час виконання повинен сказати нам, наскільки швидкий один процес порівняно з іншим.

Почнемо з простого запиту в SQL. Ми збираємося обчислити СУМУ стовпця «Кількість» у таблиці «Продажі».

Індексування даних у Vertipaq: зберігання рядків і стовпців

Як бачите, загальний час виконання становить 2,2 секунди.

Тепер перейдемо до DAX Studio та використаємо функцію EVALUATE , щоб виконати той самий запит. Нам потрібно ввімкнути таймінг сервера та дочекатися завершення трасування.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Нам також потрібно переконатися, що під час виконання запиту вибрано параметр «Очистити кеш, а потім запустити».

Індексування даних у Vertipaq: зберігання рядків і стовпців

Після виконання запиту ви побачите, що для виконання того самого запиту, який ми робили раніше в SQL, потрібно лише 3 мілісекунди.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Набір результатів також має збігатися для SQL і DAX Studio. Якщо ми розмістимо їх поруч, ви побачите, що ми повертаємо те саме значення.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Ви можете спробувати запустити запит ще кілька разів, щоб побачити, наскільки послідовним є час виконання.

Порівняння часу виконання в більш складних запитах

Цього разу давайте порівняємо час виконання, коли ми запускаємо складніші запити.

Припустімо, ми хочемо визначити СУМУ обсягу продажів для кожного бренду. Для цього ми можемо використовуватипобренду кожного продукту. У нижньому контексті ми також створимо нову таблицю під назвою Загальна кількість, куди ми збираємосяна СУМУ кількості продажів.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Якщо ми запустимо цей код, ви побачите, що загальний час виконання становить 7 мілісекунд.

Індексування даних у Vertipaq: зберігання рядків і стовпців

У фоновому режимі цей код фактично виконує два запити. Перший бере стовпець Brand із таблиці Products, а потім виконує a ЗОВНІШНЄ ПРИЄДНАННЯ в стовпцях «Ключ продукту» зі стовпців «Продажі» та «Продукція».

Індексування даних у Vertipaq: зберігання рядків і стовпців

Другий запит просто отримує стовпець Brand із таблиці Products.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Якщо я перейду на екран результатів, ви побачите, що вимірювання загальної кількості було розділено на основі кожної марки.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Тепер давайте підемо на сервер SQL і напишемо той самий запит.

Ми перемістимо таблицю DaxStudio Sales до наступного рядка, посилаючись на таблицю Sales AS S. Потім ми також виконаємо LEFT JOIN у таблиці DaxStudio Products, на яку посилається AS P, з ключем S.Product, що дорівнює P. Ключ продукту. Ми також будемо використовувати P.Brand із SUM кількості та загальної кількості в операторі SELECT . Нарешті, ми збираємося використовуватидля P.brand.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Щойно ми запустимо цей код, ми отримаємо таблицю, яка містить загальну кількість, розділену за кожною маркою, що є тим самим, що ми раніше отримували у Vertipaq.

Індексування даних у Vertipaq: зберігання рядків і стовпців

Що стосується загального часу виконання, то він залишається набагато повільнішим і становить 2,5 секунди.

Індексування даних у Vertipaq: зберігання рядків і стовпців




Висновок

Очевидно, наскільки швидким насправді є зберігання стовпців через Vertipaq порівняно зі збереженням рядків у базі даних SQL. Це показує важливість справжнього ознайомлення з тим, як працює індексація даних на різних платформах.

Спочатку це може здатися невеликою жертвою, якщо ви все ж вирішите використовувати 2,5 секунди, на які сховище рядків виконує ваш запит, порівняно з 7 мілісекундами. Але всі ми виконуємо кілька запитів, коли створюємо наші звіти, і весь цей час виконання додасться, що вплине на продуктивність і взаємодію з користувачем у довгостроковій перспективі.


Змінні та вирази в редакторі Power Query

Змінні та вирази в редакторі Power Query

У цьому посібнику обговорюватимуться змінні та вирази в редакторі Power Query. Ви навчитеся правильно їх писати та будувати.

Як створити теплову карту LuckyTemplates

Як створити теплову карту LuckyTemplates

Теплова карта LuckyTemplates — це тип візуалізації, який використовується для відображення щільності даних на карті. У цьому підручнику я розповім, як ми можемо створити один – не пропустіть!

Створення діаграми Парето в LuckyTemplates – Advanced DAX

Створення діаграми Парето в LuckyTemplates – Advanced DAX

Я збираюся навчити вас справді цікавому прикладу принципу Парето та тому, як створити діаграму Парето за допомогою важливих формул DAX.

Власна гістограма в LuckyTemplates: різновиди та модифікація

Власна гістограма в LuckyTemplates: різновиди та модифікація

Дізнайтеся, як користувацьку гістограму на ринку можна використовувати для порівняння даних і як ви можете створити їх за допомогою прикладів у LuckyTemplates.

Статичні результати Power Automate: огляд

Статичні результати Power Automate: огляд

Дізнайтеся, як працює функція Power Automate Static Results і чому її корисно додати до найкращих методів створення блок-схем.

Підручник LuckyTemplates Python: як перекладати тексти

Підручник LuckyTemplates Python: як перекладати тексти

eDNA демонструє, як виконувати переклад мови або тексту за допомогою Python і передавати це в LuckyTemplates. Підручник LuckyTemplates Python.

Створіть діаграму Ганта в конструкторі звітів LuckyTemplates

Створіть діаграму Ганта в конструкторі звітів LuckyTemplates

У цьому підручнику ви дізнаєтеся, як використовувати Gauge Bullet Graph для створення діаграми Ганта в LuckyTemplates Report Builder.

Створіть тривимірну точкову діаграму за допомогою Python у LuckyTemplates

Створіть тривимірну точкову діаграму за допомогою Python у LuckyTemplates

У цьому підручнику ви дізнаєтесь, як створити тривимірну (3D) точкову діаграму за допомогою Python у LuckyTemplates.

Ефективне звітування LuckyTemplates – огляд сеансу та завантаження ресурсу

Ефективне звітування LuckyTemplates – огляд сеансу та завантаження ресурсу

Ефективне звітування LuckyTemplates – огляд сеансу та завантаження ресурсу

Аналіз нових клієнтів за допомогою LuckyTemplates – наступна подія лише для учасників

Аналіз нових клієнтів за допомогою LuckyTemplates – наступна подія лише для учасників

Аналіз нових клієнтів за допомогою LuckyTemplates – наступна подія лише для учасників