Би стар: Главная — Автосервис Бистар

Содержание

Бистар. Сахалин.Бизнес Справочник

+

Автосервис, автотовары (1132)

Автоаксессуары (59)

Автоателье (4)

Автозаправочные станции (44)

Автозапчасти (311)

Автомойки (59)

Авторемонт (317)

Автостоянки (27)

Безопасность, автозвук (22)

Продажа автомобилей (74)

Технический осмотр (10)

Техобслуживание (125)

Тюнинг автомобилей (38)

Шиномонтаж (42)

+

Бытовое обслуживание (636)

Ателье, ремонт одежды (49)

Бани, сауны (64)

Дезинфекция, дератизация, дезинсекция (13)

Изготовление ключей (14)

Клининговые компании (52)

Парикмахерские (191)

Ремонт бытовой техники (31)

Ремонт обуви (8)

Ремонт часов (7)

Ритуальные услуги (46)

Свадьбы, организация торжеств (78)

Фотоуслуги (47)

Химчистки, прачечные (25)

Ювелирные, граверные мастерские (11)

+

Государство (718)

Администрация города Южно-Сахалинска (42)

Архивы, статистика (6)

ГИБДД (6)

ГО и ЧС, военные учреждения (54)

Другие государственные службы (153)

ЖКХ, управляющие компании (148)

ЗАГСы (2)

Инспекции (11)

Налоговые органы (2)

Пожарная охрана (31)

Полиция, УВД (54)

Правительство Сахалинской области (56)

Прокуратуры и суды (64)

Социальная защита (29)

Таможенные услуги (11)

УИН, экспертизы (16)

Федеральные службы (33)

Для дома и офиса

Бытовая техника (30)

Бытовая химия (75)

Инженерные системы (143)

Клининговые компании (52)

Книги и канцелярские товары (47)

Охранные агентства (91)

Предметы интерьера (77)

Радио и телевидение (30)

Системы безопасности (125)

Шторы, жалюзи (47)

+

Животные, питомцы (94)

Ветеринарные клиники, аптеки (25)

Зоомагазины (42)

Зоосалоны (11)

Клубы любителей животных (8)

Приюты, зоогостиницы (8)

+

Компьютеры, интернет (331)

Видео, музыка, игры (34)

Интернет провайдеры (15)

Интернет услуги (31)

Интернет-кафе, компьютерные клубы (10)

Компьютеры и оргтехника (47)

Обслуживание компьютеров и оргтехники (118)

Правовые базы данных (7)

Программное обеспечение (69)

+

Красота, здоровье (823)

Бани, сауны (64)

Косметика, парфюмерия (120)

Ногтевые студии (96)

Оптика (8)

Парикмахерские (191)

Салоны красоты (167)

Санаторно-курортные учреждения (10)

Спортивные клубы, бассейны (167)

+

Культура, искусство (211)

Библиотеки (93)

Выставки и музеи (27)

Культурные центры (78)

Театры и кино (13)

+

Мебель (345)

Корпусная мебель (111)

Кухни (68)

Мебель — производство (88)

Мебельная фурнитура (4)

Мягкая мебель (55)

Офисная мебель (19)

+

Медицина (383)

Аптеки (58)

Больницы и поликлиники (41)

Ветеринарные клиники, аптеки (25)

Дезинфекция, дератизация, дезинсекция (13)

Детские больницы и поликлиники (4)

Медицинские центры (84)

Медицинское оборудование (33)

Оптика (8)

Психологическая помощь (30)

Санаторно-курортные учреждения (10)

Стоматологические клиники (61)

УИН, экспертизы (16)

+

Наука, образование, работа (911)

Автошколы (12)

Библиотеки (93)

Высшее образование (14)

Детские сады (200)

Дополнительное образование (143)

Дошкольное образование (22)

Кадровые, рекрутинговые агентства (43)

Курсы повышения квалификации (31)

Научные организации (17)

Переводческие услуги (11)

Профессиональное образование (26)

Репетиторство, помощь в обучении (13)

Спортивные школы (30)

Учебные центры, курсы (96)

Школы (160)

+

Недвижимость (668)

Агентства недвижимости (96)

Аренда складов, производственных помещений (71)

Бизнес-центры, аренда офисов (78)

Жилищное строительство (33)

ЖКХ, управляющие компании (148)

Оценка собственности (21)

Торговые центры (85)

Юридические услуги (136)

+

Нефть, газ (428)

Автозаправочные станции (44)

Нефтепродукты — торговля (36)

Нефть, газ — добыча, обслуживание (97)

Промышленное обеспечение (223)

Экология и охрана труда (28)

+

Общество (118)

Общественные организации (91)

Политические организации (8)

Религиозные организации (19)

+

Одежда, обувь, аксессуары (509)

Нижнее белье (33)

Обувь (93)

Одежда (270)

Свадебные салоны (7)

Сумки, аксессуары (76)

Ювелирные изделия (30)

+

Отдых, развлечения, кафе (883)

Аттракционы (20)

Базы отдыха (32)

Бани, сауны (64)

Бары (43)

Боулинг, бильярд (4)

Видео, музыка, игры (34)

Выставки и музеи (27)

Детские клубы (68)

Интернет-кафе, компьютерные клубы (10)

Караоке (17)

Кафе (316)

Кофейни (59)

Культурные центры (78)

Мастер-классы (27)

Ночные клубы (10)

Рестораны (61)

Театры и кино (13)

+

Право (336)

Адвокатские услуги (73)

Нотариальные услуги (35)

Правовые базы данных (7)

Прокуратуры и суды (64)

Удостоверяющие центры (21)

Юридические услуги (136)

+

Продукты питания (1286)

Доставка еды (174)

Кафе (316)

Мини-маркеты (33)

Напитки (95)

Продуктовые магазины (557)

Рестораны (61)

Супермаркеты (50)

+

Промышленность (983)

Добыча и переработка рыбы (212)

Легкая промышленность (9)

Лесная промышленность (32)

Мебель — производство (88)

Обращение с отходами (24)

Пищевая промышленность (102)

Промышленное обеспечение (223)

Сельское хозяйство (64)

Спецодежда (23)

Стройматериалы — производство (120)

Угольная промышленность (20)

Экология и охрана труда (28)

Энергетика (38)

+

Реклама, полиграфия (213)

Издательства, полиграфия (70)

Наружная реклама (53)

Печати, штампы (14)

Рекламные агентства (76)

+

Рыбная отрасль (538)

Добыча и переработка рыбы (212)

Охрана и воспроизводство морских биоресурсов (7)

Промышленное обеспечение (223)

Реализация рыбной продукции (64)

Рыбная промышленность (32)

+

Связь (154)

Интернет провайдеры (15)

Почтовая связь (60)

Связь — оборудование (27)

Связь — ремонт (25)

Сотовая связь (20)

Телефонная связь (7)

+

Семья, дети (856)

Аттракционы (20)

Детские дома, интернаты (9)

Детские клубы (68)

Детские сады (200)

Детские товары (82)

Дошкольное образование (22)

Интернет-кафе, компьютерные клубы (10)

Психологическая помощь (30)

Санаторно-курортные учреждения (10)

Свадьбы, организация торжеств (78)

Спортивные клубы, бассейны (167)

Школы (160)

+

СМИ (133)

Издательства, полиграфия (70)

Информационные агентства (9)

Печатные издания (24)

Радио и телевидение (30)

+

Строительство, ремонт (2482)

Архитектура, проектирование (96)

Вентиляция, кондиционирование (49)

Ворота, заборы (39)

Геодезия, изыскания (60)

Дизайн интерьера (35)

ЖБИ, бетон (47)

Жилищное строительство (33)

Инженерные системы (143)

Инструменты (61)

Металлоизделия, металлопрокат (90)

Метизы, крепеж (27)

Окна, двери (100)

Отопление, водоснабжение (70)

Потолки (50)

Ремонт квартир и офисов (55)

Ремонтно-строительные организации (634)

Сантехника (47)

Строительные и отделочные материалы (254)

Строительная техника (144)

Строительное оборудование (26)

Строительство и ремонт автодорог (59)

Стройматериалы — производство (120)

Шторы, жалюзи (47)

Электромонтажные работы (154)

Электротовары (42)

+

Торговля (914)

Оборудование (170)

Оптовая торговля (259)

Промышленные товары (191)

Садовый и хоз. инвентарь (39)

Сувениры, подарки (105)

Торговые центры (85)

Цветы (65)

+

Транспорт, перевозки (1054)

Авиакомпании (6)

Авиаперевозки (37)

Грузовики, спецтехника (535)

Железнодорожный транспорт (24)

Железнодорожные перевозки (53)

Курьерские службы (29)

Морские перевозки (77)

Пассажирские перевозки (56)

Прокат автомобилей (22)

Системы мониторинга транспорта (16)

Судовое обслуживание (7)

Такси (55)

Таможенные услуги (11)

Транспортные компании (126)

+

Туризм, спорт (570)

Авиабилеты (34)

Базы отдыха (32)

Визы, представительства, консульства (11)

Гостиницы (110)

Охота и рыбалка (65)

Спортивные товары (45)

Спортивные клубы, бассейны (167)

Туристические фирмы (91)

Туристические клубы (15)

+

Финансы (262)

Аудиторские услуги (14)

Банки (25)

Бухгалтерские услуги (76)

Валюта, пункты обмена (9)

Инвестирование, кредитование (5)

Консалтинг (48)

Лизинг (6)

Микрозаймы (24)

Налоговые органы (2)

Оценка собственности (21)

Страхование (32)

+

Экстренные службы (58)

Аварийно-ремонтные службы (16)

Специальные службы (15)

Справочные службы (6)

Телефоны доверия (16)

Экстренные телефоны (5)

ООО ЭЙ-БИ-СТАР, Москва (ИНН 7702269573), реквизиты, выписка из ЕГРЮЛ, адрес, почта, сайт, телефон, финансовые показатели

Обновить браузер

Обновить браузер

Возможности

Интеграция

О системе

Статистика

Контакты

CfDJ8No4r7_PxytLmCxRl2AprPrdvr6LO37DMXEq-mDLO8-P94adalOnpYtl5QIVYBkEUBCaZ1sQXyKPyI7Q3HI_h3uSNb5bK7IP5AnkRCDRLjO5tDm5N67PnNvuhg1dWuCltCJbR3T81VWW1kl_gvmFvsA

Описание поисковой системы

энциклопедия поиска

ИНН

ОГРН

Санкционные списки

Поиск компаний

Руководитель организации

Судебные дела

Проверка аффилированности

Исполнительные производства

Реквизиты организации

Сведения о бенефициарах

Расчетный счет организации

Оценка кредитных рисков

Проверка блокировки расчетного счета

Численность сотрудников

Уставной капитал организации

Проверка на банкротство

Дата регистрации

Проверка контрагента по ИНН

КПП

ОКПО

Тендеры и госзакупки

Юридический адрес

Анализ финансового состояния

Учредители организации

Бухгалтерская отчетность

ОКТМО

ОКВЭД

Сравнение компаний

Проверка лицензии

Выписка из ЕГРЮЛ

Анализ конкурентов

Сайт организации

ОКОПФ

Сведения о регистрации

ОКФС

Филиалы и представительства

ОКОГУ

ОКАТО

Реестр недобросовестных поставщиков

Рейтинг компании

Проверь себя и контрагента

Должная осмотрительность

Банковские лицензии

Скоринг контрагентов

Лицензии на алкоголь

Мониторинг СМИ

Признаки хозяйственной деятельности

Репутационные риски

Комплаенс

Компания ООО ЭЙ-БИ-СТАР, адрес: г. Москва, проспект Мира, д. 58 к. 1 зарегистрирована 09.10.2002. Организации присвоены ИНН 7702269573, ОГРН 1027700297118, КПП 770201001. Основным видом деятельности является деятельность ресторанов и услуги по доставке продуктов питания, всего зарегистрировано 11 видов деятельности по ОКВЭД. Связи с другими компаниями отсутствуют.

Количество совладельцев (по данным ЕГРЮЛ): 2, генеральный директор — Саблин Олег Николаевич. Размер уставного капитала 10 000₽.
Компания ООО ЭЙ-БИ-СТАР не принимала участие в тендерах. В отношении компании было возбуждено 6 исполнительных производств. ООО ЭЙ-БИ-СТАР участвовало в 6 арбитражных делах: в 6 в качестве ответчика.
Реквизиты ООО ЭЙ-БИ-СТАР, юридический адрес, официальный сайт и выписка ЕГРЮЛ доступны в системе СПАРК (демо-доступ бесплатно).

Полная проверка контрагентов в СПАРКе

  • Неоплаченные долги
  • Арбитражные дела
  • Связи
  • Реорганизации и банкротства
  • Прочие факторы риска

Полная информация о компании ООО ЭЙ-БИ-СТАР

299₽

  • Регистрационные данные компании
  • Руководитель и основные владельцы
  • Контактная информация
  • Факторы риска
  • Признаки хозяйственной деятельности
  • Ключевые финансовые показатели в динамике
  • Проверка по реестрам ФНС

Купить Пример

999₽

Включен мониторинг изменений на год

  • Регистрационные данные компании
  • История изменения руководителей, наименования, адреса
  • Полный список адресов, телефонов, сайтов
  • Данные о совладельцах из различных источников
  • Связанные компании
  • Сведения о деятельности
  • Финансовая отчетность за несколько лет
  • Оценка финансового состояния

Купить Пример

Бесплатно

  • Отчет с полной информацией — СПАРК-ПРОФИЛЬ
  • Добавление контактных данных: телефон, сайт, почта
  • Добавление описания деятельности компании
  • Загрузка логотипа
  • Загрузка документов

Редактировать данные

СПАРК-Риски для 1С

Оценка надежности и мониторинг контрагентов

Узнать подробности

Заявка на демо-доступ

Заявки с указанием корпоративных email рассматриваются быстрее.

Вход в систему будет возможен только с IP-адреса, с которого подали заявку.

Компания

Телефон

Вышлем код подтверждения

Эл. почта

Вышлем ссылку для входа

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

Понимание звездообразной схемы и ее важности для Power BI — Power BI

  • Статья
  • 18 минут на чтение

Эта статья предназначена для разработчиков моделей данных Power BI Desktop. В нем описывается структура схемы «звезда» и ее значение для разработки моделей данных Power BI, оптимизированных для повышения производительности и удобства использования.

Эта статья не предназначена для полного обсуждения дизайна звездообразной схемы. Для получения более подробной информации обратитесь непосредственно к опубликованным материалам, например The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3-е издание, 2013 г.) Ralph Kimball et al.

Обзор схемы «звезда»

Схема «звезда» — это зрелый подход к моделированию, широко применяемый в реляционных хранилищах данных. Это требует, чтобы разработчики моделей классифицировали свои таблицы моделей как измерений или факт .

Таблицы измерений описывают бизнес-объекты — вещей, которые вы моделируете. Сущности могут включать продукты, людей, места и понятия, включая само время. Наиболее согласованная таблица, которую вы найдете в звездообразной схеме, — это таблица измерения даты. Таблица измерений содержит ключевой столбец (или столбцы), который действует как уникальный идентификатор, и описательные столбцы.

Таблицы фактов хранят наблюдения или события и могут быть заказами на продажу, остатками запасов, обменными курсами, температурами и т. д. Таблица фактов содержит ключевые столбцы измерений, которые относятся к таблицам измерений, и столбцы числовых показателей. Ключевые столбцы измерения определяют размерность таблицы фактов, в то время как значения ключа измерения определяют степень детализации таблицы фактов. Например, рассмотрим таблицу фактов, предназначенную для хранения целей продаж, которая имеет два ключевых столбца измерений Дата и ProductKey . Легко понять, что таблица имеет два измерения. Однако степень детализации невозможно определить без учета ключевых значений измерения. В этом примере учтите, что значения, хранящиеся в Date 9Столбец 0018 — это первый день каждого месяца. В этом случае степень детализации находится на уровне месячного продукта.

Как правило, таблицы измерений содержат относительно небольшое количество строк. С другой стороны, таблицы фактов могут содержать очень большое количество строк и со временем увеличиваться.

Нормализация и денормализация

Чтобы понять некоторые концепции звездообразной схемы, описанные в этой статье, важно знать два термина: нормализация и денормализация.

Нормализация — это термин, используемый для описания данных, которые хранятся таким образом, чтобы уменьшить количество повторяющихся данных. Рассмотрим таблицу продуктов, в которой есть уникальный столбец значения ключа, такой как ключ продукта, и дополнительные столбцы, описывающие характеристики продукта, включая название продукта, категорию, цвет и размер. Таблица продаж считается нормализованной, если в ней хранятся только ключи, например ключ продукта. Обратите внимание, что на следующем изображении продукт записан только в столбце ProductKey .

Если, однако, таблица продаж хранит сведения о продукте помимо ключа, она считается денормализованной . На следующем изображении обратите внимание, что ProductKey и другие столбцы, связанные с продуктом, записывают продукт.

При получении данных из файла экспорта или извлечения данных вполне вероятно, что они представляют собой денормализованный набор данных. В этом случае используйте Power Query для преобразования и формирования исходных данных в виде нескольких нормализованных таблиц.

Как описано в этой статье, вы должны стремиться разрабатывать оптимизированные модели данных Power BI с таблицами, представляющими нормализованные данные фактов и измерений. Однако есть одно исключение, когда размер снежинки должен быть денормализован для получения одной таблицы модели.

Релевантность схемы «звезда» для моделей Power BI

Структура схемы «звезда» и многие связанные концепции, представленные в этой статье, очень важны для разработки моделей Power BI, оптимизированных для повышения производительности и удобства использования.

Учтите, что каждый визуальный элемент отчета Power BI создает запрос, который отправляется в модель Power BI (которую служба Power BI называет набором данных). Эти запросы используются для фильтрации, группировки и суммирования данных модели. Таким образом, хорошо спроектированная модель предоставляет таблицы для фильтрации и группировки, а также таблицы для суммирования. Этот дизайн хорошо соответствует принципам звездообразной схемы:

  • Таблицы измерений поддерживают фильтрацию и группировку
  • Таблицы фактов поддерживают обобщение

Нет свойства таблицы, которое разработчики моделей задали бы для настройки типа таблицы как измерения или факта. На самом деле это определяется модельными отношениями. Отношение модели устанавливает путь распространения фильтра между двумя таблицами, а свойство

Cardinality отношения определяет тип таблицы. Общая кардинальность отношения равна один-ко-многим или обратному ей многие-к-одному . Сторона «один» всегда является таблицей измерения, тогда как сторона «многие» всегда является таблицей типа фактов. Дополнительные сведения об отношениях см. в разделе Связи моделей в Power BI Desktop.

Хорошо структурированный проект модели должен включать таблицы, которые являются либо таблицами измерений, либо таблицами фактов. Избегайте смешивания двух типов вместе для одной таблицы. Мы также рекомендуем вам стремиться предоставить нужное количество таблиц с правильными связями. Также важно, чтобы таблицы фактического типа всегда загружали данные с постоянной степенью зернистости.

Наконец, важно понимать, что проектирование оптимальной модели — это и наука, и искусство. Иногда вы можете отказаться от хорошего руководства, когда это имеет смысл.

Существует множество дополнительных концепций, связанных с дизайном схемы «звезда», которые можно применить к модели Power BI. Эти понятия включают:

  • Меры
  • Суррогатные ключи
  • Размеры снежинки
  • Ролевые измерения
  • Медленно меняющиеся размеры
  • Нежелательные размеры
  • Вырожденные размеры
  • Таблицы фактов без фактов

Меры

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

В модели Power BI мера имеет другое, но похожее определение. Это формула, написанная в выражениях анализа данных (DAX), которая обеспечивает суммирование. Выражения меры часто используют функции агрегации DAX, такие как SUM, MIN, MAX, AVERAGE и т. д., для получения результата скалярного значения во время запроса (значения никогда не сохраняются в модели). Выражение меры может варьироваться от простых агрегаций столбцов до более сложных формул, переопределяющих контекст фильтра и/или распространение отношений. Дополнительные сведения см. в статье Основы DAX в Power BI Desktop.

Важно понимать, что модели Power BI поддерживают второй метод суммирования. Любой столбец — и обычно числовые столбцы — можно обобщить с помощью визуального элемента отчета или вопросов и ответов. Эти столбцы называются неявными мерами . Они удобны для вас как разработчика модели, поскольку во многих случаях вам не нужно создавать меры. Например, столбец Продажи торговых посредников Adventure Works Сумма продаж можно резюмировать различными способами (сумма, количество, среднее, медиана, минимум, максимум и т. д.) без необходимости создавать меру для каждого возможного типа агрегирования.

Однако есть три веские причины для создания показателей даже для простых суммирования на уровне столбцов:

  • явные меры . Явные меры определяются с помощью DAX. Этот подход к проектированию очень актуален, когда набор данных Power BI запрашивается с помощью многомерных выражений, поскольку многомерные выражения не могут обеспечить суммирование значений столбцов. В частности, многомерные выражения будут использоваться при выполнении анализа в Excel, поскольку сводные таблицы выдают запросы многомерных выражений.
  • Если вы знаете, что авторы отчетов будут создавать отчеты Power BI с разбивкой на страницы с помощью конструктора запросов MDX, модель должна включать явные меры. Только конструктор запросов MDX поддерживает серверные агрегаты. Таким образом, если авторам отчетов необходимо, чтобы показатели оценивались с помощью Power BI (а не с помощью механизма отчетов с разбивкой на страницы), они должны использовать конструктор запросов MDX.
  • Когда вам нужно убедиться, что авторы вашего отчета могут обобщать столбцы только определенным образом. Например, реселлерские продажи Столбец Цена за единицу (который представляет цену за единицу) можно суммировать, но только с помощью специальных функций агрегирования. Ее никогда не следует суммировать, но уместно суммировать с помощью других функций агрегации, таких как минимальная, максимальная, средняя и т. д. В этом случае разработчик модели может скрыть столбец Цена за единицу и создать меры для всех соответствующих функций агрегации.

Этот подход к разработке хорошо подходит для отчетов, созданных в службе Power BI, и для вопросов и ответов. Однако живые подключения Power BI Desktop позволяют авторам отчетов отображать скрытые поля в Поля , что может привести к обходу этого подхода к проектированию.

Суррогатные ключи

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

Связи модели Power BI основаны на одном уникальном столбце в одной таблице, который распространяет фильтры на один столбец в другой таблице. Если таблица типа измерения в вашей модели не содержит ни одного уникального столбца, вы должны добавить уникальный идентификатор, чтобы стать «одной» стороной отношения. В Power BI Desktop это требование можно легко выполнить, создав индексный столбец Power Query.

Вы должны объединить этот запрос с запросом на стороне «многих», чтобы вы могли также добавить к нему индексный столбец. Когда вы загружаете эти запросы в модель, вы можете создать связь «один ко многим» между таблицами модели.

Измерения снежинок

Измерение снежинок представляет собой набор нормализованных таблиц для одного бизнес-объекта. Например, Adventure Works классифицирует товары по категориям и подкатегориям. Продукты назначаются подкатегориям, а подкатегории, в свою очередь, назначаются категориям. В реляционном хранилище данных Adventure Works измерение продукта нормализовано и хранится в трех связанных таблицах: DimProductCategory , DimProductSubcategory и DimProduct .

Если вы включите свое воображение, вы можете представить нормализованные таблицы, расположенные снаружи от таблицы фактов, образующие рисунок снежинки.

В Power BI Desktop вы можете имитировать дизайн измерения в виде снежинки (возможно, потому, что ваши исходные данные таковы) или интегрировать (денормализировать) исходные таблицы в единую таблицу модели. Как правило, преимущества одной таблицы моделей перевешивают преимущества нескольких таблиц моделей. Наиболее оптимальное решение может зависеть от объемов данных и требований к удобству использования модели.

Если вы решили имитировать дизайн измерения в виде снежинки:

  • Power BI загружает больше таблиц, что менее эффективно с точки зрения хранения и производительности. Эти таблицы должны включать столбцы для поддержки отношений модели, и это может привести к увеличению размера модели.
  • Потребуется прохождение более длинных цепочек распространения фильтра взаимосвязей, что, вероятно, будет менее эффективным, чем фильтры, применяемые к одной таблице.
  • На панели Поля представлено больше таблиц моделей для авторов отчетов, что может привести к менее интуитивному интерфейсу, особенно когда таблицы измерений-снежинок содержат только один или два столбца.
  • Невозможно создать иерархию, охватывающую таблицы.

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

Медленно изменяющиеся измерения

Медленно изменяющееся измерение (SCD) — это измерение, которое надлежащим образом управляет изменением элементов измерения с течением времени. Он применяется, когда значения бизнес-объектов изменяются с течением времени и случайным образом. Хороший пример медленно изменяющееся измерение — это измерение клиента, в частности его столбцы с контактными данными, такие как адрес электронной почты и номер телефона. Напротив, некоторые измерения считаются быстро меняющимися, если атрибут измерения изменяется часто, например, рыночная цена акции. Обычный подход к проектированию в этих случаях заключается в сохранении быстро меняющихся значений атрибутов в мере таблицы фактов.

Теория проектирования схемы «звезда» относится к двум распространенным типам SCD: типу 1 и типу 2. Таблица типа измерения может быть типа 1 или типа 2 или поддерживать оба типа одновременно для разных столбцов.

Тип 1 SCD

A Тип 1 SCD всегда отображает самые последние значения, и при обнаружении изменений в исходных данных данные таблицы измерений перезаписываются. Такой подход к проектированию распространен для столбцов, в которых хранятся дополнительные значения, такие как адрес электронной почты или номер телефона клиента. При изменении адреса электронной почты или номера телефона клиента таблица измерений обновляет строку клиента новыми значениями. Как будто у клиента всегда была эта контактная информация.

Неинкрементное обновление таблицы типов измерений модели Power BI приводит к результату SCD типа 1. Он обновляет данные таблицы, чтобы обеспечить загрузку последних значений.

Тип 2 SCD

A Тип 2 SCD поддерживает управление версиями элементов измерения. Если исходная система не хранит версии, то обычно процесс загрузки хранилища данных обнаруживает изменения и соответствующим образом управляет изменением в таблице измерений. В этом случае таблица измерений должна использовать суррогатный ключ, чтобы обеспечить уникальную ссылку на версия элемента измерения. Он также включает столбцы, определяющие срок действия версии в диапазоне дат (например, StartDate и EndDate ) и, возможно, столбец флагов (например, IsCurrent ) для удобной фильтрации по текущим элементам измерения.

Например, Adventure Works назначает продавцов в регион продаж. Когда продавец перемещает регион, необходимо создать новую версию продавца, чтобы исторические факты оставались связанными с прежним регионом. Для поддержки точного исторического анализа продаж по продавцам в таблице измерений должны храниться версии продавцов и связанных с ними регионов. Таблица также должна включать значения дат начала и окончания, чтобы определить действительность времени. Текущие версии могут определять пустую дату окончания (или 31.12.9).999), что указывает на то, что строка является текущей версией. В таблице также должен быть определен суррогатный ключ, поскольку бизнес-ключ (в данном случае идентификатор сотрудника) не будет уникальным.

Важно понимать, что если исходные данные не хранят версии, вы должны использовать промежуточную систему (например, хранилище данных) для обнаружения и сохранения изменений. Процесс загрузки таблицы должен сохранять существующие данные и обнаруживать изменения. При обнаружении изменения процесс загрузки таблицы должен истечь для текущей версии. Он записывает эти изменения, обновляя EndDate и вставка новой версии со значением StartDate , начиная с предыдущего значения EndDate . Кроме того, связанные факты должны использовать поиск на основе времени для получения значения ключа измерения, относящегося к дате факта. Модель Power BI, использующая Power Query, не может дать такой результат. Однако он может загружать данные из предварительно загруженной таблицы измерений SCD типа 2.

Модель Power BI должна поддерживать запрос исторических данных для члена, независимо от изменений, и для версии члена, которая представляет определенное состояние члена во времени. В контексте Adventure Works этот дизайн позволяет запрашивать продавца независимо от назначенного региона продаж или для конкретной версии продавца.

Для выполнения этого требования таблица типа измерения модели Power BI должна включать столбец для фильтрации продавца и другой столбец для фильтрации конкретной версии продавца. Важно, чтобы столбец версии содержал однозначное описание, например «Майкл Блайт (15.12.2008–26.06.2019)» или «Майкл Блайт (текущий)». Также важно информировать авторов отчетов и потребителей об основах SCD типа 2 и о том, как добиться надлежащего дизайна отчета, применяя правильные фильтры.

Также хорошей практикой проектирования является включение иерархии, позволяющей детализировать визуальные элементы до уровня версии.

Измерения ролевой игры

Измерение ролевой игры — это измерение, которое может по-разному фильтровать связанные факты. Например, в Adventure Works таблица измерений дат имеет три отношения к фактам продаж посредников. Эту же таблицу измерений можно использовать для фильтрации фактов по дате заказа, дате отгрузки или дате доставки.

В хранилище данных общепринятым подходом к проектированию является определение одной таблицы измерения даты. Во время запроса «роль» измерения даты определяется тем, какой столбец фактов вы используете для объединения таблиц. Например, при анализе продаж по дате заказа объединение таблиц относится к столбцу даты заказа на продажу торгового посредника.

В модели Power BI этот дизайн можно имитировать, создав несколько связей между двумя таблицами. В примере Adventure Works таблицы даты и продаж посредников будут иметь три отношения. Хотя такая схема возможна, важно понимать, что между двумя таблицами модели Power BI может быть только одна активная связь. Все остальные отношения должны быть установлены как неактивные. Наличие одной активной связи означает, что фильтр по умолчанию распространяется от даты до продаж через посредников. В этом случае активная связь устанавливается на наиболее распространенный фильтр, который используется в отчетах, которым в Adventure Works является связь даты заказа.

Единственный способ использовать неактивную связь — определить выражение DAX, использующее функцию USERELATIONSHIP. В нашем примере разработчик модели должен создать показатели, позволяющие анализировать продажи торговых посредников по дате отгрузки и дате доставки. Эта работа может быть утомительной, особенно если таблица торговых посредников определяет множество показателей. Это также создает полей беспорядка на панели с переизбытком мер. Имеются и другие ограничения:

  • Когда авторы отчетов полагаются на итоговые столбцы, а не на определение мер, они не могут выполнить суммирование для неактивных отношений, не написав меру на уровне отчета. Показатели уровня отчета можно определить только при создании отчетов в Power BI Desktop.
  • При наличии только одного активного пути связи между датой и продажами посредников невозможно одновременно фильтровать продажи посредников по разным типам дат. Например, вы не можете создать визуализацию, отображающую продажи на дату заказа по отгруженным продажам.

Чтобы преодолеть эти ограничения, распространенным методом моделирования Power BI является создание таблицы типа измерения для каждого ролевого экземпляра. Обычно вы создаете дополнительные таблицы измерений как вычисляемые таблицы с помощью DAX. Используя расчетные таблицы, модель может содержать 9Таблица 0017 Дата , таблица Дата отгрузки и таблица Дата доставки , каждая из которых имеет одно активное отношение к соответствующим столбцам таблицы продаж посредников.

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

Соблюдайте следующие рекомендации по проектированию при создании таблиц типа измерения модели для каждой роли:

  • Убедитесь, что имена столбцов являются самоописываемыми. Хотя во всех таблицах дат может быть столбец Year (имена столбцов уникальны в пределах своей таблицы), по умолчанию визуальные заголовки не дают самоописания. Рассмотрите возможность переименования столбцов в каждой таблице ролей измерений, чтобы в таблице Дата отгрузки был столбец года с именем Год отгрузки и т. д.
  • При необходимости убедитесь, что описания таблиц предоставляют авторам отчетов отзывы (через Поля всплывающие подсказки на панели) о том, как настроено распространение фильтра. Эта ясность важна, когда модель содержит таблицу с общим именем, например Date , которая используется для фильтрации многих таблиц типов фактов. В случае, если эта таблица имеет, например, активную связь со столбцом даты заказа на продажу через посредников, рассмотрите возможность предоставления описания таблицы, например «Фильтровать продажи через посредников по дате заказа».

Дополнительные сведения см. в разделе Руководство по активным и неактивным связям.

Ненужные измерения

Ненужное измерение полезно, когда имеется много измерений, особенно состоящих из нескольких атрибутов (возможно, одного), и когда эти атрибуты имеют мало значений. Хорошие кандидаты включают столбцы статуса заказа или столбцы демографических данных клиентов (пол, возрастная группа и т. д.).

Целью разработки ненужного измерения является объединение многих «маленьких» измерений в одно измерение, чтобы уменьшить размер хранилища модели, а также уменьшить Поля Панели загромождаются за счет отображения меньшего количества таблиц моделей.

Ненужная таблица измерения обычно представляет собой декартово произведение всех членов атрибутов измерения с суррогатным ключевым столбцом. Суррогатный ключ обеспечивает уникальную ссылку на каждую строку в таблице. Вы можете создать измерение в хранилище данных или с помощью Power Query создать запрос, который выполняет полные соединения внешних запросов, а затем добавляет суррогатный ключ (столбец индекса).

Этот запрос загружается в модель как таблица размерного типа. Вам также необходимо объединить этот запрос с запросом фактов, чтобы столбец индекса загружался в модель для поддержки создания отношения модели «один ко многим».

Вырожденные измерения

Вырожденное измерение относится к атрибуту таблицы фактов, который требуется для фильтрации. В Adventure Works хорошим примером является номер заказа торгового посредника. В этом случае не имеет смысла создавать независимую таблицу, состоящую только из одного столбца, поскольку это увеличит размер хранилища модели и приведет к полям беспорядка на панели.

В модели Power BI может быть целесообразно добавить столбец с номером заказа на продажу в таблицу типов фактов, чтобы разрешить фильтрацию или группировку по номеру заказа на продажу. Это исключение из введенного ранее правила, согласно которому вы не должны смешивать типы таблиц (как правило, таблицы моделей должны относиться либо к типу измерений, либо к типу фактов).

Однако, если в таблице продаж торговых посредников Adventure Works есть столбцы с номером заказа и номером строки заказа , и они необходимы для фильтрации, хорошей схемой будет таблица вырожденных измерений. Дополнительные сведения см. в разделе Руководство по отношениям «один к одному» (вырожденные измерения).

Таблицы фактов без фактов

Таблица фактов без фактов не содержит столбцов показателей. Он содержит только ключи размеров.

Таблица фактов без фактов может хранить наблюдения, определяемые ключами измерения. Например, в определенную дату и время конкретный клиент зашел на ваш веб-сайт. Вы можете определить меру для подсчета строк таблицы фактов без фактов, чтобы выполнить анализ того, когда и сколько клиентов вошли в систему.

Более привлекательным вариантом использования таблицы фактов без фактов является хранение отношений между измерениями, и именно в подходе к проектированию модели Power BI мы рекомендуем определять отношения «многие ко многим измерениям». В дизайне отношений измерений «многие ко многим» таблица фактов без фактов называется связующей таблицей .

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

Этот подход к проектированию «многие ко многим» хорошо задокументирован, и его можно реализовать без связующей таблицы. Однако подход с использованием связующей таблицы считается лучшей практикой при сопоставлении двух измерений. Дополнительные сведения см. в разделе Руководство по отношениям «многие ко многим» (связывание таблиц двух типов измерений).

Следующие шаги

Дополнительные сведения о проектировании звездообразной схемы или модели Power BI см. в следующих статьях:

  • Многомерное моделирование, статья Википедии
  • Создание отношений и управление ими в Power BI Desktop
  • Руководство по отношениям один на один
  • Руководство по связи «многие ко многим»
  • Руководство по двунаправленным отношениям
  • Руководство по активным и неактивным отношениям
  • Вопросы? Попробуйте запросить у сообщества Power BI
  • .
  • предложения? Предлагайте идеи по улучшению Power BI

Power BI — схема «звезда» или отдельная таблица

В основе любого решения для бизнес-аналитики лежит его модель данных. Power BI не является исключением: качественная модель данных позволяет создавать надежные и мощные решения, которые будут работать без сбоев в течение многих лет. Плохая модель данных часто может быть причиной провала всего проекта. Скорость, надежность и мощность решения имеют один и тот же источник: хорошая модель данных. Смеем добавить: если проект обречен на провал, лучше, чтобы он провалился как можно раньше. Проект, разработанный годами и основанный на неправильной модели, упадет с большей высоты и нанесет только больший ущерб.

Модель данных — это первый выбор, который вы должны сделать как разработчик бизнес-аналитики, и вы должны сделать правильный выбор. Из-за важности модели данных за последние несколько лет разработчики BI потратили много сил на разработку шаблонов и методов, гарантирующих прочную основу для проекта. Плодом этого огромного начинания стало определение звездных схем. Если вы спросите опытного BI-разработчика, как построить правильную модель данных, вы всегда получите один и тот же ответ: построить звездообразную схему. В SQLBI мы не исключение. Схемы «звезда» лежат в основе учебных курсов по моделированию данных, которые мы разработали и проводим.

Причина, по которой опытные специалисты по бизнес-аналитике всегда выбирают звездообразную схему, заключается в том, что они несколько раз терпели неудачу с другими моделями. Все это время решением их проблем было построение звездной схемы. Вы можете сделать одну, две, десять ошибок. После этого вы научитесь доверять звездным схемам. Вот как вы становитесь экспертом: после множества ошибок вы, наконец, научитесь их избегать.

Иногда человек, ответственный за принятие такого важного решения, не ошибается достаточное количество раз и поддается искушению попробовать другую модель. Среди многих различных склонностей, которые они могут иметь, одно действительно заманчиво: единственный большой стол. Внутренний монолог обычно выглядит примерно так:

Почему я должен иметь продукты, продажи, дату и клиентов в виде отдельных таблиц? Не лучше ли хранить все в одной таблице с именем Sales, содержащей всю информацию? В конце концов, каждый запрос, который я когда-либо выполнял, всегда будет начинаться с Sales. Сохраняя все в одной таблице, я не расплачиваюсь отношениями во время запроса, поэтому моя модель будет работать быстрее.

Существует множество причин, по которым одна большая таблица не лучше схемы «звезда». Здесь в любом случае основное внимание уделяется производительности. Правда ли, что одна таблица быстрее, чем схема «звезда»? Ведь все мы знаем, что объединение двух таблиц — затратная операция. Поэтому кажется разумным думать, что устранение проблемы соединений приведет к тому, что модель станет быстрее. Кроме того, с появлением NOSQL и больших данных появилось так много так называемых озер данных, содержащих информацию в одной единственной таблице… Разве не заманчиво использовать эти источники данных без какого-либо преобразования?

Я хотел дать рациональный ответ на вопрос — ответ, основанный исключительно на цифрах.

Осторожно: оставшаяся часть статьи посвящена довольно высокому уровню технических деталей. Если вы хотите просто прочитать выводы, вы можете перейти к концу статьи. Тем не менее, есть смысл взглянуть на цифры, если вы хотите лучше следовать моим рассуждениям.

Тестовая установка

Мы построили две модели. Один использует обычную звездную схему с четырьмя измерениями вокруг одной таблицы фактов.

Другая модель содержит ту же информацию, но размеры отсутствуют. Все столбцы из измерений были денормализованы в таблицу фактов.

Поскольку денормализованная модель основана на «большой толстой таблице», мы называем модели «толстой» и «тонкой». Кроме того, чтобы сделать видимыми различия между различными измерениями, мы использовали довольно большую модель, поскольку основная таблица фактов содержит 4 миллиарда строк. Таким образом, время, необходимое для сканирования таблицы, достаточно велико, чтобы можно было легко обнаружить различия между двумя моделями.

Все тесты выполняются на мощной машине. Он использует AMD Ryzen Threadripper 3970X с 32 физическими ядрами и 64 виртуальными ядрами. Размер таблицы и количество ядер означает, что степень параллелизма, получаемая подсистемой хранения, огромна. По этой причине нас в основном интересуют значения ЦП механизма хранения, чтобы получить четкое представление о мощности ЦП, необходимой для ответа на запросы. Действительно, может не быть видимых различий между запросом, который выполняется за 100 миллисекунд или за 10 миллисекунд. Однако, когда вы умножаете это число на количество используемых ядер, разница определенно становится значимой! Значение ЦП механизма хранения (SE) измеряет общую мощность ЦП, необходимую для выполнения запроса, и это основной показатель, который мы используем в статье. Мы использовали локальный экземпляр Analysis Services 2019.выполнить все тесты.

Размер базы данных

Первое важное различие между двумя моделями — это их размер. Тонкая модель использует 16,80 ГБ ОЗУ, а толстая модель использует 44,51 ГБ ОЗУ. Полная модель в 2,65 раза больше стройной модели. Обе модели были обработаны с конфигурацией служб Analysis Services по умолчанию.

Почему модели такие разные по размеру? Потому что в толстой модели огромное количество столбцов! В тонкой модели самый большой столбец — это ключ времени (ID_Time). Столбец такой большой, потому что есть значение для каждой секунды во времени.

Если вы сравните ID_Time с ID_Date, вы увидите лучшую картину: несмотря на одинаковую кардинальность, дата меняется очень медленно по сравнению со временем. Таким образом, алгоритм кодирования длин серий (RLE) VertiPaq обеспечивает гораздо лучшее сжатие для даты, чем когда-либо для времени. Это особенность VertiPaq: столбцы, которые часто меняются, становятся больше, а значит, медленнее.

В звездообразной схеме ID_Time является ключом, связывающим таблицу фактов с измерением времени. В толстой модели нет измерения времени: все столбцы времени денормализованы в таблице фактов. Поэтому каждый из этих столбцов имеет очень большой размер, зависящий от того, как часто меняются значения внутри.

Несмотря на то, что она больше, мы ожидаем, что толстая модель будет работать лучше на определенных запросах. В самом деле, представьте себе запрос, который нужно сгруппировать по Period05Minutes и получить сумму столбца. В тонкой модели VertiPaq необходимо пройти связь, которая использует столбец ID_Time. Он должен сканировать 6,5 ГБ данных. Тот же запрос в полной модели сканирует столбец Period05Minutes в таблице фактов, размер которого составляет всего 4,6 ГБ. Разница заключается не только в наличии отношения, но, что более важно, в размере столбцов, задействованных в запросе. Преимущество толстой модели зависит от того, насколько велики столбцы, используемые для агрегирования.

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

Простая сумма, группировка по маленькому столбцу

Первый запрос группирует по столбцу AgeRange, который является атрибутом Individuals. AgeRange содержит только 96 различных значений, но принадлежит измерению со 144 тыс. строк. При денормализации в толстой модели столбец AgeRange использует только 42 МБ данных. Ключ отношения, с другой стороны, использует 2,5 ГБ. Следовательно, тонкая модель учитывает время, необходимое для прохождения связи, а также увеличение размера задействованных столбцов:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Люди[Возрастной диапазон],
    "Вес", SUM ( Аудитория[Вес] )
)
 

Ниже вы найдете тайминги сервера для тонкой модели.

Запрос использовал около 11 секунд ЦП, и вы можете ясно видеть JOIN, выполняемый подсистемой хранения. Тот же запрос, выполненный на толстой модели, выполняется намного быстрее. Вот запрос:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Аудитория[Возрастной диапазон],
    "Вес", SUM ( Аудитория[Вес] )
)
 

А ниже результат исполнения.

Шесть с половиной секунд по сравнению с одиннадцатью секундами в тонкой модели. Как и ожидалось, толстая модель намного быстрее для этого конкретного запроса.

Простая сумма, группировка по большому столбцу

Второй тест аналогичен первому, только на этот раз мы используем столбец Period05Minutes, который намного больше, чем AgeRange. Толстая модель еще быстрее; тем не менее, размер столбца теперь начинает иметь значение, что значительно снижает преимущество толстой модели.

Вот второй запрос по тонкой модели:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Время[Период05Минут],
    "Вес", SUM ( Аудитория[Вес] )
)
 

Время выполнения больше, чем раньше, из-за размера отношения.

Как и раньше, вы видите, что есть одно СОЕДИНЕНИЕ с измерением, используемым в запросе. Запрос выполняется с высокой степенью параллелизма: общее время выполнения составляет всего полсекунды, а общее время процессора SE увеличилось до 28 секунд.

Запрос для толстой модели идентичен, за исключением используемой таблицы:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Аудитория[Период05Минуты],
    "Вес", SUM ( Аудитория[Вес] )
)
 

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

Пока оба результата соответствуют ожиданиям. Толстая модель быстрее. Важная деталь здесь: «Насколько быстрее?» Если вы сосредоточитесь только на первом запросе, он будет выполняться в два раза быстрее. Но на самом деле, как только запрос усложняется или размер используемых столбцов увеличивается, разница становится меньше.

Простая сумма, группировка по нескольким столбцам

В первых двух тестах для группировки использовался только один столбец. Что, если мы увеличим количество столбцов? Я ожидал, что польза от толстой модели уменьшится из-за большего размера задействованных столбцов. Вместо этого, как ни странно, соотношение между двумя моделями осталось почти одинаковым.

Вот запрос по тонкой модели. Он использует три столбца из одного измерения:

.
ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Время [Период 60 минут],
    Время[Период10Минут],
    Время[Период05Минут],
    "Вес", SUM ( Аудитория[Вес] )
)
 

А вот и результат исполнения.

Это заняло 64 секунды процессорного времени, что более чем вдвое превышает время, необходимое для группировки только по одному столбцу. Это весьма удивительно, поскольку мощность сканирования такая же, как и мощность предыдущего запроса, в котором использовался только столбец Period05Minutes. Действительно, максимальная детализация по-прежнему составляет 5 минут: мы всего лишь добавили к результату два дополнительных столбца.

В полной модели единственным изменением является имя таблицы столбцов, используемых в части groupby:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Аудитория [Период 60 минут],
     Аудитория [Период 10 минут],
     Аудитория [Period05Minutes],
    "Вес", SUM ( Аудитория[Вес] )
)
 

Результат на толстой модели не сильно отличается от предыдущего теста.

Этот результат не является неожиданным: поскольку количество больших столбцов больше, вполне ожидаемо, что запрос будет медленнее, чем запрос с одним столбцом. В процентном отношении он сохранил свое преимущество перед тонкой моделью.

Должен сказать, что этот результат меня удивил. Я ожидал, что тонкая модель будет работать намного лучше. Теперь я знаю, что мне нужно больше изучить поведение пакета VertiPaq с несколькими столбцами в звездообразной схеме. Я обновлю статью (или опубликую новую), как только пойму, почему тонкая модель так плохо себя показала.

Отдельный подсчет медленно меняющихся измерений

До сих пор мы вычисляли значения, используя простую СУММУ. Интересный вопрос заключается в том, можем ли мы сохранить ту же самую разницу с помощью более сложных вычислений, например, с помощью подсчета различий. Есть два интересных столбца, которые можно использовать для отдельного подсчета: ключ лица (ID_Individual) и код лица (COD_Individual). Поскольку индивидуальность — это медленно меняющееся измерение, мы можем ожидать существенной разницы между двумя моделями. Действительно, в толстой модели оба подсчета отдельных элементов могут быть выполнены путем сканирования одной таблицы, в то время как в тонкой модели требуется объединение при вычислении подсчета различных элементов COD_Individual. Это связано с тем, что этот столбец хранится в разделе «Люди», а не в таблице фактов.

Давайте начнем с суррогатного ключа, где и толстая, и тонкая модель должны запрашивать только таблицу фактов:

ОЦЕНИВАТЬ
ОБЪЕДИНЕНИЕ КОЛОНН(
    Время[Период05Минут],
    "Тест", DISTINCTCOUNT ( Audience[ID_Individual] )
)
 

Вот подсчет тонкой модели.

Как вы видите, процессорное время подсистемы хранения увеличилось на много, потому что подсчет отдельных элементов гораздо сложнее вычислить, чем сумму. Как видно из запроса xmSQL, существует взаимосвязь.

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

ОЦЕНИВАТЬ
ОБЪЕДИНЕНИЕ КОЛОНН(
    Аудитория[Период05Минуты],
    "Тест", DISTINCTCOUNT ( Audience[ID_Individual] )
)
 

Результат очень похож на тонкую модель, как мы и ожидали.

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

Запрос DAX, который вычисляет количество различных COD_Individual в толстой модели, очень похож на предыдущий запрос. Действительно, оба столбца хранятся в таблице фактов:

.
ОБЪЕДИНЕНИЕ КОЛОНН(
    Аудитория[Период05Минуты],
    "Вес", DISTINCTCOUNT ( Audience[COD_Individual] )
)
 

Поскольку COD_Individual имеет меньше уникальных значений, чем ID_Individual, мы ожидаем более высокой производительности.

Как видите, поскольку число уникальных значений меньше, этот запрос выполняется более чем в два раза быстрее, чем предыдущий. Это вполне ожидаемо: количество уникальных значений сильно зависит от количества различных значений, которое определяет размер внутренних структур, используемых для выполнения подсчета.

Для тонкой модели запрос должен быть другим. Нам нужно обобщить таблицу фактов по столбцу в измерении — таким образом, задействовав взаимосвязь, — а затем подсчитать количество значений в измерении, отфильтрованных таблицей фактов:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Время[Период05Минут],
    "Вес", СЧЕТЧИКИ ( СУММАРИЗАЦИЯ ( Аудитория, Индивидуальные [COD_Individual] ) )
)
 

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

В тонкой модели DAX необходимо пройти два отношения: одно для группировки и одно для подсчета. Несмотря на сложность запроса, оптимизатор нашел оптимальный путь. Как и ожидалось, толстая модель все еще немного быстрее, но ненамного.

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

Группировка подсчета различных по нескольким столбцам

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

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

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    «Дата» [Год],
    «Дата» [номер месяца],
    Время[Период05Минут],
    "Вес", СЧЕТЧИКИ ( СУММАРИЗАЦИЯ ( Аудитория, Индивидуальные [Cod_Individual] ) )
)
 

Как и ожидалось, время выполнения больше.

На этот раз с тремя взаимосвязями и большим количеством ячеек для вычислений ЦП подсистемы хранения увеличился до более чем одного миллиона миллисекунд.

Толстая модель не требует никаких отношений, но должна сканировать несколько больших столбцов. Вот запрос:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    Аудитория[Период05Минуты],
    "Вес", DISTINCTCOUNT ( Audience[Cod_Individual] )
)
 

Здесь имеет значение размер столбца, как видно из результатов.

Как ясно видно из запроса xmSQL, отношения не задействованы. Тем не менее, размер столбцов и сложность вычислений также замедляли этот запрос. Мы видим время выполнения, очень похожее на время выполнения тонкой модели.

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

Вычисления с начала года

Все расчеты, которые мы показали до сих пор, представляли собой просто SUM или DISTINCTCOUNT, которые можно было решить с помощью одного запроса xmSQL. Эти запросы подходили для измерения исходной производительности ядра VertiPaq. Однако типичный запрос включает работу как в механизме формул (FE), так и в механизме хранения (SE).

В качестве примера мы используем простой расчет с начала года (с начала года). Даже там интересно исследовать не только грубую мощность движка, но и сложность кода. Действительно, используя тонкую модель с соответствующей звездообразной схемой, расчет с начала года может быть выражен с использованием функций анализа времени DAX:

Вес с начала года =
    ВЫЧИСЛИТЬ (
        СУММ (Аудитория[Вес]),
        DATESYTD ('Дата'[Дата]),
        ВСЕ («Дата»)
    )
 

Тот же код не будет работать с толстой моделью, в которой нет измерения даты. В толстой модели текущий год необходимо записывать с помощью пользовательского кода DAX, что подразумевает более подробный и подверженный ошибкам код. При этом мы хотели обсудить здесь производительность, а не простоту кода DAX. Таким образом, мы использовали один и тот же сложный расчет в обоих сценариях. Что верно, так это то, что правильная звездообразная схема значительно упрощает написание кода DAX.

Вот код, который мы использовали для запроса YTD на тонкой модели:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    «Дата» [Год],
    «Дата» [номер месяца],
    Время[Период05Минут],
    "Масса",
        VAR Начало года =
            ДАТА(МАКС('Дата'[Год]), 1, 1)
        ТЕКУЩАЯДАТА ВАР =
            МАКС ('Дата'[Дата])
        Результат ВАР =
        ВЫЧИСЛИТЬ (
            СУММ (Аудитория[Вес]),
            'Дата'[Дата] >= YearStart && 'Дата'[Дата] <= ТекущаяДата,
            ВСЕ («Дата»)
        )
        ВОЗВРАТ Результат
)
 

А вот и результат исполнения. Как видите, теперь есть несколько запросов к движку хранения, и механизм формул начинает играть свою роль.

Основной запрос xmSQL довольно быстрый. Он извлекает наиболее детализированные данные, которые затем агрегируются обработчиком формул по обычному шаблону с начала года. Важно отметить, что фильтр запроса xmSQL включает только дату. Количество столбцов в фильтре определяет размер внутренних структур, используемых для фильтрации, и поэтому определяет скорость выполнения запроса. Как вы увидите в следующем запросе, с толстой моделью запрос xmSQL более сложен. Это приводит к снижению производительности.

Вот код, выполняемый на толстом столе. Как видите, разница только в используемых столбцах:

ОЦЕНИВАТЬ
СУММАРИЗОВАТЬ КОЛОННЫ (
    «Аудитория» [Год],
    «Аудитория» [номер месяца],
    «Аудитория» [Period05Minutes],
    "Масса",
        VAR Начало года =
            ДАТА ( MAX ("Аудитория" [Год]), 1, 1)
        ТЕКУЩАЯДАТА ВАР =
            МАКС («Аудитория» [Дата])
        Результат ВАР =
            ВЫЧИСЛИТЬ (
                СУММ (Аудитория[Вес]),
                Audience[Date] >= YearStart && 'Аудитория'[Дата] <= ТекущаяДата,
                ВСЕ (Аудитория[НомерМесяца]),
                ВСЕ ( Аудитория [Год] )
            )
        ВОЗВРАЩАТЬСЯ
            Результат
)
 

Это небольшое отличие — используемые столбцы — оказывается очень важным для плана запроса. Поскольку теперь все столбцы берутся из одной таблицы, срабатывает автосуществование, и движок вынужден работать с наборами произвольной формы. Следовательно, фильтр становится более сложным.

Теперь, как вы видите, фильтр содержит не только дату, но и Period05Minutes. Количество возвращаемых строк такое же, но фильтр намного больше, потому что DAX использовал наборы произвольной формы во время оценки. Чистый эффект от этой маленькой детали заключается в том, что время теперь более чем в два раза больше, чем у тонкой модели.

Причина не только в том, как VertiPaq сканировал данные. Причина в том, что DAX разработан и оптимизирован для работы со звездообразными схемами. Он предполагает, что модель напоминает звездообразную схему, и использует определенные оптимизации, которые эффективны для звездообразных схем и плохо работают на плоских моделях.

Значения столбца

Последний тест, который мы хотим выполнить, чрезвычайно прост, но очень важен. В типичном отчете пользователи размещают срезы и фильтры. Каждый слайсер должен получить значения столбца для отображения в списке. Результирующий запрос является самым простым, который вы можете себе представить: он просто запрашивает ЗНАЧЕНИЯ столбца.

По такому простому запросу разница между стройной и толстой моделью становится огромной. Действительно, тонкая модель может извлекать значения столбца из измерения, размер которого крошечный по сравнению с таблицей фактов. С другой стороны, толстая модель всегда должна сканировать таблицу фактов, потому что в ней хранятся все столбцы. Например, чтобы получить десять значений для столбца Year, толстая модель сканирует четыре миллиарда строк!

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

Давайте рассмотрим две версии VALUES: одну без фильтра и одну с фильтром. Опять же, причина в том, что слайсеры и таблицы могут подвергаться перекрестной фильтрации. Если вы поместите один срез для страны клиента и один срез для периода времени, они перекрестно фильтруют друг друга, поскольку принадлежат к одной и той же таблице.

Вот первый запрос:

ОЦЕНИВАТЬ
    ЗНАЧЕНИЯ ( Аудитория[Period05Minutes] )
 

Как видите, результат — невероятные пять секунд процессорного времени. Из-за высокого уровня параллелизма время выполнения очень быстрое. Тем не менее, процессор был загружен очень сильно.

Наличие перекрестного фильтра еще больше усугубляет ситуацию. Вот отфильтрованный запрос VALUES для толстой модели:

ОЦЕНИВАТЬ
    РАСЧЕТНАЯ ТАБЛИЦА(
        ЗНАЧЕНИЯ ( Аудитория[Period05Minutes] ),
        Аудитория[Возраст] > 0
    )
 

Наличие фильтра привело к тому, что простой запрос VALUES выполнялся в четыре раза медленнее.

Этот последний тест чрезвычайно важен: в толстой модели любой фильтр любого столбца приводит к фильтру таблицы фактов. Таким образом, вы получаете хороший эффект перекрестной фильтрации. Удобно для пользователей, но по-прежнему сильно загружает процессор.

Те же самые запросы, выполняемые на тонкой модели, приводят к нулю или 1 миллисекунде времени выполнения. Это связано с тем, что тонкой модели необходимо сканировать измерение, а не таблицу фактов. Каждое измерение содержит несколько тысяч строк, что ничто по сравнению с миллиардами, представленными в таблице фактов.

Выводы

Мы провели несколько интересных тестов на тонкой модели по сравнению с толстой моделью. Результаты синтезированы в отчете Excel ниже.

Как видно из результатов, толстая модель действительно быстрее с очень простыми запросами. Как только запрос усложняется, преимущества толстой модели очень быстро исчезают. Если запрос не является чистым SE-запросом, тонкая модель работает намного лучше. Когда дело доходит до извлечения значений для столбцов в слайсерах, толстая модель работает очень медленно. Важным выводом здесь является следующее: когда толстая модель лучше, она не намного лучше. Когда хуже, то намного хуже!

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

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

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

В следующий раз, когда ревностный консультант предложит вам построить единую толстую таблицу для вашей модели данных, вы знаете, что делать: измерить производительность и оценить дополнительные затраты — или просто указать на эту статью, чтобы начать обсуждение с подтверждающих цифр!

СУММ

Складывает все числа в столбце.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *