Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server Analysis Services Azure Analysis Services
Fabric/Power BI Premium
Строки (текстовые значения) хранятся в формате с большим сжатием в табличных моделях. В силу сжатия при извлечении полных или частичных строк можно получить неверные результаты. Кроме того, поскольку языковой стандарт и параметры сортировки строки наследуются в иерархическом порядке у ближайшего родительского объекта, если язык строки не определен явным образом, локаль и параметры сортировки родительского элемента могут повлиять на то, как каждая строка хранится, является строка уникальной или объединена с похожими строками согласно определению параметров сортировки родительского элемента.
В этой статье описывается механизм сжатия и хранения строк, а также приведены примеры влияния параметров сортировки и языка на результаты текстовых формул в табличных моделях.
Память
В табличных моделях все данные сильно сжаты для того, чтобы занимать меньше места в памяти. Как следствие, все строки, которые могут считаться лексически эквивалентными, сохраняются только один раз. Первый экземпляр строки используется в качестве канонического представления, после которой каждая эквивалентная строка индексируется с тем же сжатым значением, что и первый экземпляр.
Ключевой вопрос заключается в том, что такое лексически эквивалентная строка? Две строки считаются лексически эквивалентными, если они могут рассматриваться как одно и то же слово. Например, если искать в словаре русского языка слово скрипка , можно найти запись Скрипка или скрипка, в зависимости от политики редактирования словаря, однако оба слова считаются эквивалентными, и разница заглавной или прописной буквы не учитывается. В табличной модели коэффициент, который определяет, являются ли две строки лексически эквивалентными, не является политикой редактирования или даже предпочтением пользователя, он представляет собой локаль и порядок сортировки, заданные столбцу.
Таким образом, решение о том, является ли верхний и нижний регистр отличием двух слов, зависит от параметров сортировки и локали. Для любого слова локали первый экземпляр слова, находящийся в определенном столбце, служит каноническим представлением слова и строки, которая хранится в несжатом формате. Все остальные строки проходят проверку относительно первого экземпляра, и если они не проходят тест на соответствие, то приписываются к сжатому значению первого экземпляра. В дальнейшем при извлечении сжатых значений они будут представлены с помощью несжатого значения первого экземпляра строки.
Следующий пример позволяет понять, как это работает. Следующий столбец «Классификация ― английский» был взят из таблицы, содержащей сведения о растениях и деревьях. Для каждого растения (имена растений не показаны) столбец классификации показывает общую категорию растения.
Классификация ― английский |
---|
дереВО |
РасТениЕ |
дереВО |
РасТениЕ |
РасТениЕ |
Дерево |
РасТениЕ |
дереВО |
tree |
РасТениЕ |
дереВО |
Возможно, данные были получены из многих различных источников, поэтому регистр и использование диакритических знаков было неверным и реляционная база данных сохранила эти отличия как есть. Однако в целом это либо значения Растение , либо Деревопросто с разным регистром.
Когда эти значения будут загружены в табличную модель, которая использует параметры сортировки по умолчанию для американского английского, регистр не будет важным, поэтому будут сохранены только два значения для всего столбца:
Классификация ― английский |
---|
дереВО |
РасТениЕ |
Если в модели используется столбец Классификация на английском языке, то везде, где вы отображаете классификацию растений, вы увидите не исходные значения с различными вариантами использования верхнего и нижнего регистров, а только первый экземпляр. Причина в том, что все варианты верхнего и нижнего регистров слова дерево считаются эквивалентными при этих параметрах сортировки и локали. Таким образом, была оставлена только одна строка, и только первый экземпляр этой строки, найденный системой, будет сохранен.
Предупреждение
Можно решить, какая строка будет сохранена первой, в соответствии с тем, какая строка признана верной, однако реализовать это будет сложно. Не существует простых путей для определения того, какая строка должна быть обработана ядром первой, если учитывать, что все значения считаются одинаковыми. Вместо этого, если необходимо задать стандартное значение, очистите все строки, прежде чем загружать модель.
Языковой стандарт и порядок параметров сортировки
При сравнении строк (текстовых значений) эквивалентность определяется культурным аспектом интерпретации этих строк. В некоторых странах диакритический знак или верхний регистр символа может полностью изменить значение строки. Поэтому обычно такие отличия учитываются при определении эквивалентности для какого-либо языка или региона.
Обычно компьютер уже настроен и соответствует определенному лингвистическому стилю, поэтому строковые операции, такие как сортировка и сравнение текстовых значений, выполняются в соответствии с ожиданиями. Параметры, определяющие зависящее от языка поведение, определяются в настройках Языки и региональные стандарты в Windows. Приложения считывают эти параметры и изменяют свое поведение соответствующим образом. В некоторых случаях приложение может иметь функцию, которая позволит изменить культурное поведение приложения или способ сравнения строк.
При создании табличных шаблонов баз данных по умолчанию база данных наследует эти культурные и лингвистические параметры в форме языкового идентификатора и параметров сортировки.
Языковой идентификатор определяет набор символов, которые будут использованы для сравнения строк в соответствии с языковой средой.
Параметры сортировки определяют порядок символов и их эквивалентность.
Важно отметить, что идентификатор языка определяет не только язык, но и страну или регион, где используется язык. Каждый языковой идентификатор также имеет определение параметров сортировки по умолчанию. Дополнительные сведения об идентификаторах языков см. в разделе Номера локалей, назначаемые Microsoft. При ручной вставке значения можно использовать столбец LCID Dec для получения нужного идентификатора. Дополнительные сведения о концепции параметров сортировки SQL см. в разделе COLLATE (Transact-SQL). Сведения о конструкторах параметров сортировки и стилях сравнения для имен параметров сортировки Windows см. в разделе Имя параметров сортировки Windows (Transact-SQL). В статье SQL Server Имя параметров сортировки (Transact-SQL) имена параметров сортировки Windows сопоставляется с именами, используемыми для SQL.
После создания табличных шаблонов баз данных все новые объекты в модели унаследуют атрибуты языка и параметры сортировки базы данных. Это верно для всех объектов. Путь наследования начинается от объекта, находит родительский объект для определения наследуемых атрибутов языка и параметры сортировки, если таковые не найдены, продолжает движение вверх и находит атрибуты языка и сортировки на уровне базы данных. Другими словами, если не указать атрибуты языка и параметры сортировки для объекта, то по умолчанию объект унаследует атрибуты своего ближайшего родительского элемента.
Для столбцов атрибуты языка и параметры сортировки наследуются при создании в соответствии со следующими правилами.
Выполняется поиск атрибутов языка и параметров сортировки в родительском объекте измерения. Если существуют оба значения, они копируются в атрибуты столбца. Если существует только одно значение, второе будет вычислено, после чего оба значения будут присвоены. Если оба значения не найдены, выполняется переход к следующему уровню.
Поиск объекта базы данных осуществляется с использованием того же процесса, который был описан в шаге 1 для измерений. Если атрибуты не найдены, выполняется переход к следующему шагу.
Поиск серверного объекта выполняется с помощью того же процесса, который был описан в шаге 1 для измерений. Если атрибуты не найдены, столбец использует языковой идентификатор Windows и получает атрибут параметра сортировки от этого значения.
Важно отметить, что обычно идентификатор языка и порядок сортировки в базе данных-источнике практически не влияет на то, как значения хранятся в столбце табличной модели. Исключение возникает, если база данных-источник преобразует или фильтрует запрошенные значения.