Leer en inglés

Compartir a través de


Almacenamiento e intercalación de cadenas en modelos tabulares

Se aplica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Las cadenas (valores de texto) se almacenan en los modelos tabulares utilizando un formato muy comprimido; debido a esta compresión, puede obtener resultados inesperados al recuperar cadenas completas o parciales. Además, dado que la configuración regional y las intercalaciones de las cadenas se heredan jerárquicamente del objeto primario más próximo, si no se define explícitamente el idioma de las cadenas, la configuración regional y la intercalación del elemento primario pueden afectar a la forma de almacenamiento de cada una de las cadenas y determinar si la cadena es única o se combina con cadenas similares tal como se define en la intercalación primaria.

En este artículo se describe el mecanismo por el que se comprimen y almacenan las cadenas, y se proporcionan ejemplos de cómo la intercalación y el lenguaje afectan a los resultados de las fórmulas de texto en modelos tabulares.

Storage

En los modelos tabulares, todos los datos están muy comprimidos para que puedan almacenarse sin problemas en la memoria. En consecuencia, todas las cadenas consideradas léxicamente equivalentes se almacenan solo una vez. La primera instancia de la cadena se utiliza como la representación canónica y a partir de este momento cada cadena equivalente se indiza al mismo valor comprimido que la primera repetición.

La pregunta clave es: ¿qué constituye una cadena léxicamente equivalente? Dos cadenas se consideran léxicamente equivalentes si se pueden considerar como la misma palabra. Por ejemplo, cuando busca la palabra violin en inglés en un diccionario, puede encontrar la entrada Violin o violin, dependiendo de la directiva editorial del diccionario, pero generalmente considerará ambas palabras equivalentes, y no tendrá en cuenta la diferencia en el uso de mayúsculas. En un modelo tabular, el factor que determina si dos cadenas son léxicamente equivalentes no es la directiva editorial ni las preferencias del usuario, sino la configuración regional y la intercalación asignadas a la columna.

Por lo tanto, la decisión de si las letras mayúsculas y minúsculas se deben considerar iguales o diferentes dependerá de la intercalación y de la configuración regional. De esta manera, para cualquier palabra concreta incluida en esa configuración regional, la primera repetición que se encuentre dentro una determinada columna actuará como la representación canónica de dicha palabra, y la cadena se almacenará en un formato sin comprimir. Todas las demás cadenas se compararán con la primera repetición y, si pasan la prueba de equivalencia, se asignarán al valor comprimido de dicha repetición. Más adelante, cuando se recuperen los valores comprimidos, se representarán mediante el valor sin comprimir de la primera repetición de la cadena.

Un ejemplo ayudará a clarificar su funcionamiento. La columna siguiente, "Classification - English", se ha extraído de una tabla que contiene información sobre plantas y árboles. La columna de clasificación muestra la categoría general para cada planta (los nombres de las plantas no se muestran aquí).

Classification - English
trEE
PlAnT
trEE
PlAnT
Plant
Árbol
PlAnT
trEE
tree
PlAnT
trEE

Es posible que los datos procediesen de varios orígenes diferentes, y por lo tanto el estilo de mayúsculas y minúsculas y el uso de los acentos fuese incoherente, y la base de datos relacional almacenase estas diferencias tal cual. Pero, en general, los valores son Plant o Tree, solo que con estilos distintos de mayúscula y minúscula.

Cuando se cargan estos valores en un modelo tabular que utiliza la intercalación y la forma de ordenación predeterminados para el inglés estadounidense, el uso de mayúsculas o minúsculas no es importante, por lo que solo se almacenarán dos valores para toda la columna:

Classification - English
trEE
PlAnT

Si usa la columna Clasificación : inglés, en el modelo, donde muestre la clasificación de plantas, no verá los valores originales, con sus distintos usos de mayúsculas y minúsculas, sino solo la primera instancia. El motivo es que todas las variantes de mayúsculas y minúsculas de tree se consideran equivalentes en esta intercalación y configuración regional; por lo tanto, solo se conservó una cadena y la primera instancia de esta que encuentre el sistema será la que se guarde.

Advertencia

Quizá decida que desea definir la cadena que se almacenará en primer lugar, de acuerdo con lo que considera correcto, pero esto puede resultar muy difícil. No es fácil determinar con antelación qué fila debe procesar el motor en primer lugar, dado que todos los valores se consideran iguales. En lugar de ello, si necesita establecer el valor estándar, deberá limpiar todas las cadenas antes de cargar el modelo.

Orden de configuración regional e intercalación

Cuando se comparan cadenas (valores de texto), lo que define la equivalencia es normalmente el aspecto cultural de cómo se interpretan dichas cadenas. En algunas referencias culturales, el acento o el uso de mayúsculas en un carácter puede cambiar completamente el significado de la cadena; por lo tanto, normalmente están diferencias se tienen en consideración a la hora de determinar la equivalencia para un idioma o una región concretos.

Generalmente, cuando utiliza su equipo, este ya está configurado para que reconozca sus propias expectativas culturales y comportamientos lingüísticos, y las operaciones de cadena como la ordenación y la comparación de valores de texto se comportan de la forma esperada. La configuración que controla el comportamiento específico del idioma se define con los valores de Configuración regional de Windows. Las aplicaciones leen estos valores y cambian su comportamiento en consecuencia. En algunos casos, una aplicación puede incluir una característica que le permita cambiar su comportamiento cultural o la manera en que se comparan las cadenas.

Cuando se crea una base de datos de modelos tabulares, esta hereda de forma predeterminada estos valores culturales y lingüísticos en forma de un identificador de idioma y una intercalación.

  • El identificador de idioma define el juego de caracteres que se desea utilizar para las cadenas en función de las referencias culturales.

  • La intercalación define el orden de los caracteres y su equivalencia.

Es importante tener en cuenta que un identificador de idioma no solo identifica un idioma, sino también el país o región donde se usa el idioma. Cada identificador de idioma también tiene una especificación de intercalación predeterminada. Para obtener más información acerca de los identificadores de idioma, vea Id. de configuración regional asignados por Microsoft. Puede utilizar la columna LCID Dec para obtener el identificador correcto al insertar manualmente un valor. Para obtener más información sobre el concepto de SQL de intercalaciones, vea COLLATE (Transact-SQL). Para obtener información sobre los designadores de intercalación y los estilos de comparación de los nombres de intercalación de Windows, vea Nombre de intercalación de Windows (Transact-SQL). En el artículo, SQL Server nombre de intercalación (Transact-SQL), se asignan los nombres de intercalación de Windows a los nombres usados para SQL.

Una vez creada la base de datos de modelos tabulares, todos los objetos nuevos del modelo heredarán los atributos de idioma y de intercalación de los atributos de base de datos. Esto es válido para todos los objetos. La ruta de herencia comienza en el objeto, examina el elemento primario para comprobar si se debe heredar algún atributo de idioma y de intercalación y, si no encuentra ninguno, continúa hacia la parte superior y busca los atributos de idioma e intercalación en el nivel de base de datos. En otras palabras, si no se especifican los atributos de idioma y de intercalación para un objeto, este hereda de forma predeterminada los atributos de su elemento primario más próximo.

En las columnas, los atributos de idioma y de intercalación se heredan en el momento de su creación, según las reglas siguientes:

  • Los atributos de idioma y de intercalación se buscan en el objeto de dimensión primario. Si existen ambos valores, estos se copian a los atributos de la columna; si solo existe uno de ellos, el otro se deduce de este y se asignan ambos; si no existe ninguno, ir al paso siguiente.

  • Los atributos se buscan en el objeto de base de datos utilizando el mismo proceso descrito en el paso 1 para las dimensiones; si no se encuentra ninguno, ir al paso siguiente.

  • Los atributos se buscan en el objeto de servidor utilizando el mismo proceso descrito en el paso 1 para las dimensiones; si no se encuentra ninguno, la columna utiliza el identificador de idioma de Windows y deduce el atributo de intercalación de ese valor.

Es importante tener en cuenta que normalmente el identificador de idioma y el orden de intercalación de la base de datos de origen no tiene ningún efecto sobre cómo se almacenan los valores en la columna del modelo tabular. La excepción es cuando la base de datos de origen transforma o filtra los valores solicitados.