Труба в R: підключення функцій за допомогою Dplyr
У цьому підручнику ви дізнаєтесь, як об’єднати функції разом за допомогою оператора каналу dplyr мовою програмування R.
Сьогодні я хочу поговорити про концепцію моделювання даних під назвою «вимір сміття» . З його назви можна подумати, що це принизлива техніка, якої варто уникати, але насправді це корисний підхід.
Насправді я працював над запитанням із , і сміттєвий вимір був ідеальним рішенням для нього. Як тільки ви побачите та зрозумієте це, ви знайдете для нього багато застосувань у власній роботі. Ви можете переглянути повне відео цього підручника внизу цього блогу.
Зміст
Що таке розміри сміття?
Кімбол і Росс The Data Warehouse Toolkit , одна з біблій розмірного моделювання, визначають його як групування прапорів і індикаторів типово низької потужності . Низька потужність означає невелику кількість унікальних спостережень у певному полі.
У нашому прикладі ми маємо модель даних для нашого бізнесу зі створення персональних ПК. Модель даних стосується замовлень і рахунків-фактур. У нас також є ряд прапорів, за якими ми можемо зафіксувати тип процесора , тип конфігурації башти (компактний або повний) і призначення (ігровий або робоча станція).
Визначення розмірів сміття за допомогою аналогії ящика для кухонного сміття
Якщо ви подивіться на кожне з цих полів, то в кожному полі є лише два унікальні спостереження. Це те, що Кімбол назвав би прапором низької кардинальності . Він каже, що, створюючи абстрактний вимір, ми видаляємо прапори з таблиці фактів, одночасно розміщуючи їх у корисній структурі вимірів.
Аналогія кухонного ящика для сміття для розміру сміття є хорошою. У кожного є шухляда, наповнена гумками, скобами, батарейками, свічками до дня народження тощо. Для будь-якої з цих речей не важливо мати окрему шухляду, але вам потрібно мати місце, де їх поставити.
Зберігання їх може призвести до збільшення розміру таблиці фактів. Скажімо, у нас є таблиця фактів із мільйоном записів. Ми створили багато комп’ютерів, і для кожного комп’ютера, який ми створюємо, ми маємо позначити процесор, башту та призначення. Це означає, що для одного мільйона рядків ПК, які були замовлені, ми також маємо 3 мільйони позначок у таблиці фактів.
Зменшення розміру таблиці фактів
Ми могли б перемістити їх до таблиці розмірів і зв’язати лише з ідентифікатором моделі, щоб видалити 3 мільйони позначок із таблиці фактів. Для цього ми можемо створити окрему таблицю для кожного з цих прапорів, і це буде працювати. Але цей процес ускладнить модель даних, де зазвичай потрібно уникати таблиць з одним стовпцем.
Ідеальним рішенням є використання сміттєвого виміру , де у вас є купа позначок низької потужності, пов’язаних загальним чином. Усе це пов’язано з атрибутами комп’ютерів, які ми створюємо, але не дуже прямо, як зазвичай для конкретної таблиці розмірів.
Перегляд проблеми учасника форуму
Давайте подивимося на конкретну програму, яка була розміщена на форумі. Учасник хотів створити два різних поля, одне для Stalled і одне для Active . Якщо клієнт здійснив транзакцію протягом останніх 45 днів, вона позначається як активна; інакше він буде позначений як зупинений.
Учасник також хотів іншу таблицю розмірів для типу клієнта, яка є або багатопорядковою, або єдиною. Якщо в обліковому записі було дві або більше транзакцій у будь-який момент історії з використанням одного номера рахунку, це вважатиметься клієнтом із кількома замовленнями. І якби у них було лише одне замовлення для даного номера рахунку, це був би клієнт з єдиним замовленням.
Отже, це два прапори, які ми хочемо розробити. Давайте перейдемо до LuckyTemplates і з’ясуємо, як це зробити.
Моделювання даних для вимірювання сміття
Давайте поглянемо на модель даних. Це дуже проста модель даних. Ми маємо свій розширенийі Таблиця транзакцій .
Наша таблиця транзакцій містить лише три поля: номер рахунку , дату рахунка-фактури та кількість продажу .
Загалом, якщо ми зможемо підштовхнути трансформацію ближче до джерела, ми це зробимо. Це не динамічно протягом сеансу звітування, тому нам не потрібно робити це в .
Ми повинні робити це або в Power Query, або в сховищі даних/SQL, якщо у нас є така можливість. Але наразі припустімо, що ні, і що ми просто робимо це.
Визначення типу клієнта для виміру сміття
Перше, що ми зробимо, це визначити тип клієнта, чи це транзакція з одним замовленням чи з кількома замовленнями. Ми будемо використовувати Group By , Count і Count Rows .
Потім додайте всі дані та зробіть операцію «Усі рядки» , щоб ми повертали не зведену таблицю, а початкову таблицю з кількістю рядків у кожному рядку.
Давайте подивимося на результат і розширимо його.
Ми можемо додати спеціальний стовпець і назвати його Тип клієнта , а потім створити оператор IF. Твердження: якщо Count дорівнює 1, то це єдине замовлення; інакше це багатопорядковий.
Ми просто змінимо тип стовпця на текстовий. Тепер ми маємо один із наших двох вимірів у таблиці фактів.
Давайте зробимо таблицю другого розміру. Для цього, якщо до останнього замовлення минуло 45 днів або менше від сьогоднішньої дати, клієнт вважається активним. Якщо протягом 45 днів із сьогоднішнього дня немає замовлення, то клієнт неактивний.
Ми додамо спеціальний стовпець і назвемо стовпець Today . Потім додайте DateTime.LocalNow , щоб отримати поточну дату й час, а потім Date.From , щоб отримати лише частину дати.
Давайте просто змінимо це на тип даних дати, а потім перемістимо стовпець на передній план.
Є простий спосіб створити віднімання між двома стовпцями дат. Просто виділіть ці дві дати, натисніть «Дати» на стрічці, а потім натисніть «Відняти дні» .
Це дасть вам різницю між цими двома датами з точки зору кількості днів. Давайте назвемо цей новий стовпець Дні до сьогодні.
Наступним кроком є визначення мінімальної кількості днів до сьогоднішнього дня, що означає останнє замовлення для кожного номера рахунку. Якщо це число менше або дорівнює 45, воно активне.
Давайте зробимо ще групу за , потім розширені , а потім номер облікового запису .
Знову ж таки, ми використаємо Усі дані для нового імені стовпця та Усі рядки для роботи.
Цього разу ми додамо «Мінімальна кількість днів між» із «Мінімум» як операцію та стовпець « Дні до сьогоднішнього дня» . Це дасть нам останнє замовлення.
Потім ми розгортаємо всі дані та видаляємо номер рахунку .
Коли ми розширимо це, ми матимемо мінімальну кількість днів між номерами рахунків.
Нарешті, ми додамо ще один спеціальний стовпець і назвемо його «Час клієнта» . Ми додамо параметр «що-якщо», де якщо наш Min Days Between менше або дорівнює 45, це означає, що він активний або зупинений .
Видалення непотрібних стовпців
Оскільки тепер у нас багато допоміжних стовпців, давайте клацнемо «Вибрати стовпці» та вилучимо ті, які нам не потрібні.
Ми видалимо стовпці «Кількість» , «Сьогодні », «Дні до сьогодні » та «Мінімальна кількість днів між» . Тепер ми маємо лише вихідну таблицю фактів, а також стовпці «Тип клієнта» та «Час клієнта» .
Замість того, щоб зберігати їх у таблиці фактів, давайте продублюємо цю таблицю.
Ми назвемо повторювану таблицю Account Flags .
Давайте повернемося до таблиці Transactions і вилучимо поля Client Type і Client Timing .
Тепер у нас є вихідна таблиця фактів і таблиця прапорів облікового запису.
Для таблиці «Прапорці облікового запису» нам не потрібні поля «Тип клієнта» та «Час клієнта» , тому ми вилучаємо їх. Ми просто виділяємо всі ці поля, видаляємо рядки та видаляємо дублікати.
Тепер у нас є наша таблиця розмірів сміття. Все, що залишилося, це натиснути «Закрити та застосувати» . Наступним кроком буде зв’язати номер рахунку з нашої таблиці прапорів облікового запису з номером рахунку в нашій таблиці транзакцій .
У нас є зв’язок «один-до-багатьох» між таблицею Transactions (це наша таблиця фактів) і таблицею Account Flags (яка є нашою таблицею вимірювань небажаних).
Висновок
Давайте перенесемо параметри Client Timing і Client Type на наше полотно та перетворимо їх на слайсери. Тепер ми можемо робити саме те, що учасник хотів зробити спочатку, тобто розрізати на основі цих атрибутів.
Якщо ми натиснемо Multi-Order, ми залишимо лише ті, які мають кілька замовлень, а якщо ми перейдемо до Single-Order, ми залишимо ті, які мають одну покупку.
Підводячи підсумок, це в основному те, що таке вимір сміття, і як ви можете його створити. Це дуже корисний прийом, якщо у вас є купа різноманітних позначок низької потужності, які ви хочете ефективно включити у свою модель даних.
Техніка групування за всіма рядками є надзвичайно корисною для створення цих непотрібних розмірів. Сподіваюся, ви знайшли це корисним і як завжди.
У цьому підручнику ви дізнаєтесь, як об’єднати функції разом за допомогою оператора каналу dplyr мовою програмування R.
RANKX від LuckyTemplates дозволяє повернути рейтинг певного числа в кожному рядку таблиці, який є частиною списку чисел.
Дізнайтеся, як розібрати файл PBIX, щоб витягти теми та зображення LuckyTemplates із фону та використовувати їх для створення звіту!
Шпаргалка формул Excel: Посібник середнього рівня
Календарна таблиця LuckyTemplates: що це таке та як ним користуватися
Дізнайтеся, як інсталювати мову програмування Python у LuckyTemplates і як використовувати її інструменти для написання кодів і відображення візуальних елементів.
Дізнайтеся, як обчислювати динамічну маржу прибутку за допомогою LuckyTemplates і як ви можете отримати більше інформації, глибше досліджуючи результати.
Дізнайтеся, як правильно сортувати поля зі стовпців розширеної таблиці дат. Це хороша стратегія для складних полів.
У цій статті я поясню, як знайти найпопулярніші продукти для регіону за допомогою обчислень DAX у LuckyTemplates, включаючи функції TOPN і CALCULATE.
Дізнайтеся, як використовувати вимірювання сміття для позначок низької потужності, які ви хочете ефективно включити у свою модель даних.