Stockage de chaîne et classement dans les modèles tabulairesString Storage and Collation in Tabular Models

Les chaînes (valeurs texte) sont stockées dans un format fortement compressé dans les modèles tabulaires ; en raison de cette compression, vous pouvez obtenir des résultats inattendus lorsque vous récupérez des chaînes entières ou partielles.Strings (text values) are stored in a highly compressed format in tabular models; because of this compression, you can get unexpected results when you retrieve entire or partial strings. En outre, comme les paramètres régionaux et les classements de chaîne sont hérités hiérarchiquement de l'objet parent le plus proche, si le langage de chaîne n'est pas défini explicitement, les paramètres régionaux et le classement du parent peuvent affecter la façon dont chaque chaîne est stockée et si la chaîne doit être unique ou combinée avec des chaînes semblables tel que le défini le classement parent.Also, because string locale and collations are inherited hierarchically from the closest parent object, if the string language is not explicitly defined, the locale and collation of the parent can affect how each string is stored and whether the string is unique or conflated with similar strings as defined by the parent collation.

Cette rubrique décrit le mécanisme par lequel les chaînes sont compressées et stockées, et fournit des exemples d'utilisation du classement et du langage qui affectent les résultats des formules de texte dans les modèles tabulaires.This topic describes the mechanism by which strings are compressed and stored, and provides examples of how collation and language affect the results of text formulas in tabular models.

StockageStorage

Dans les modèles tabulaires toutes les données sont fortement compressées de façon à ce qu'elles tiennent en mémoire.In tabular models all data is highly compressed to better fit in memory. Par conséquent, toutes les chaînes qui peuvent être considérées comme des chaînes lexicales équivalentes sont stockées une seule fois.As a consequence, all strings that can be considered lexically equivalent are stored only once. La première instance de la chaîne est utilisée comme la représentation canonique et par la suite chaque chaîne équivalente est indexée à la même valeur compressée que la première occurrence.The first instance of the string is used as the canonical representation and thereafter each equivalent string is indexed to the same compressed value as the first occurrence.

La question clé est la suivante : qu'est-ce qui constitue une chaîne lexicale équivalente ?The key question is: what constitutes a lexically equivalent string? Deux chaînes sont considérées comme des chaînes lexicales équivalentes si elles peuvent être considérées comme même mot.Two strings are considered lexically equivalent if they can be considered as the same word. Par exemple, lorsque vous recherchez le mot violon dans un dictionnaire, vous pouvez trouver l'entrée Violon ou violon, en fonction de la stratégie éditoriale du dictionnaire, mais en général vous considérez les deux mots comme équivalents, et vous ignorez la mise en majuscules.For example, in English when you search for the word violin in a dictionary, you might find the entry Violin or violin, depending on the editorial policy of the dictionary, but generally you consider both words equivalent, and disregard the difference in capitalization. Dans un modèle tabulaire, le facteur qui détermine si deux chaînes sont des chaînes lexicales équivalentes n'est pas une stratégie éditoriale ou une préférence de l'utilisateur, mais les paramètres régionaux et l'ordre de classement affectés à la colonne.In a tabular model, the factor that determines whether two strings are lexically equivalent is not editorial policy or even user preference, but the locale and collation order assigned to the column.

Par conséquent, le choix en faveur de la gestion des majuscules et des minuscules de la même façon ou non dépend du classement et des paramètres régionaux.Therefore, the decision of whether uppercase and lowercase letters should be handled as the same or different depends on the collation and locale. Pour tout mot particulier dans ces paramètres régionaux, la première occurrence du mot trouvée dans une colonne particulière sert par conséquent de représentation canonique de ce mot et cette chaîne est stockée au format non compressé.For any particular word within that locale, the first occurrence of the word that is found within a particular column therefore serves as the canonical representation of that word and that string is stored in uncompressed format. Toutes les autres chaînes sont testées sur la première occurrence, et si elles correspondent au test d'équivalence, elles sont affectées à la valeur compressée de la première occurrence.All other strings are tested against the first occurrence, and if they match the equivalence test, they are assigned to the compressed value of the first occurrence. Ultérieurement, lorsque les valeurs compressées sont récupérées, elles sont représentées à l'aide de la valeur non compressée de la première occurrence de la chaîne.Later, when the compressed values are retrieved they are represented using the uncompressed value of the first occurrence of the string.

Un exemple permettra de mieux comprendre le fonctionnement.An example will help to clarify how this works. La colonne suivante « Classification - anglais » a été extraite d'une table qui contient des informations sur les plantes et les arbres.The following column "Classification - English" was extracted from a table that contains information about plants and trees. Pour chaque plante (les noms des plantes ne sont pas affichés ici) la colonne de classification affiche la catégorie générale de la plante.For each plant (the names of the plants are not shown here) the classification column shows the general category of plant.

Classification - anglaisClassification - English
trEEtrEE
PlAnTPlAnT
trEETREE
PlAnTPLANT
PlAnTPlant
trEETree
PlAnTplant
trEEtReE
trEEtree
PlAnTpLaNt
trEEtREE

Les données peuvent être issues de nombreuses sources, et par conséquent la casse et l'utilisation des accents sont incohérentes, et la base de données relationnelle a stocké ces différences en l'état.Perhaps the data came from many different sources, and so the casing and use of accents was inconsistent, and the relational database stored those differences as is. Mais en général les valeurs sont Plant ou Tree, uniquement avec une casse différente.But in general the values are either Plant or Tree, just with different casing.

Lorsque ces valeurs sont chargées dans un modèle tabulaire qui utilise le classement et l'ordre de tri par défaut pour l'anglais américain, la casse n'est pas importante, seules deux valeurs sont stockées pour la colonne entière :When these values are loaded into a tabular model that uses the default collation and sorting order for American English, case is not important, so only two values would be stored for the entire column:

Classification - anglaisClassification - English
trEEtrEE
PlAnTPlAnT

Si vous utilisez la colonne, Classification - anglais, dans votre modèle, si vous affichez la classification des plantes vous ne verrez pas les valeurs d'origine, avec leurs différentes utilisations de majuscules et minuscules, mais uniquement la première instance.If you use the column, Classification – English, in your model, wherever you display plant classification you will see not the original values, with their various uses of upper and lower case, but only the first instance. En effet, toutes les variantes de majuscules et minuscules de tree sont considérées comme équivalentes dans ce classement et ces paramètres régionaux ; par conséquent, une seule chaîne a été conservée et la première instance de cette chaîne qui est rencontrée par le système est celle qui est enregistrée.The reason is that all the uppercase and lowercase variants of tree are considered equivalent in this collation and locale; therefore, only one string was preserved and the first instance of that string that is encountered by the system is the one that is saved.

Avertissement

Vous pouvez décider de définir la première chaîne à stocker, en fonction de ce que vous considérez correct, mais cette opération peut être très difficile à effectuer.You might decide that you want to define which string will be the first to store, according to what you consider correct, but this could be very hard to so. Il n'existe aucun moyen simple de déterminer à l'avance quelle ligne doit être traitée en premier par le moteur, étant donné que toutes les valeurs sont considérées comme identiques.There is no simple way to determine in advance which row should be processed first by the engine, given that all values are considered to be the same. Au lieu de cela, si vous devez définir la valeur standard, vous devez nettoyer toutes vos chaînes avant de charger le modèle.Instead, if you need to set the standard value, you should cleanse all your strings before loading the model.

Ordre des paramètres régionaux et de classementLocale and Collation Order

Lors de la comparaison de chaînes (valeurs texte), ce qui définit l'équivalence est normalement l'aspect culturel de la façon dont ces chaînes sont interprétées.When comparing strings (text values), what defines equivalence is normally the cultural aspect of how such strings are interpreted. Dans certaines cultures un accent ou la mise en majuscules d'un caractère peut changer complètement la signification de la chaîne ; par conséquent, généralement ces différences sont prises en compte pour déterminer l'équivalence dans n'importe quelle langue ou région spécifique.In some cultures an accent or the capitalization of a character can completely change the meaning of the string; therefore, typically such differences are considered when determining equivalency for any particular language or region.

Généralement, lorsque vous utilisez votre ordinateur elle est déjà configurée pour correspondre à vos propres attentes culturelles et comportement linguistique, et les opérations de chaîne, telles que le tri et la comparaison des valeurs texte se comportent de la façon attendue.Usually, when you use your computer it is already configured to match your own cultural expectations and linguistic behavior, and string operations such as sorting and comparing text values behaves as you would expect. Les paramètres qui contrôlent le comportement spécifique à une langue sont définis par les paramètres régionaux dans Windows.The settings that control language-specific behavior are defined through the Locale and Regional settings in Windows. Les applications lisent ces paramètres et modifient leur comportement en conséquence.Applications read those settings and change their behavior accordingly. Dans certains cas, une application peut avoir une fonctionnalité qui vous permet de modifier le comportement culturel de l'application ou la façon dont les chaînes sont comparées.In some cases, an application might have a feature that allows you to change the cultural behavior of the application or the way in which strings are compared.

Lorsque vous créez une base de données model tabulaire, par défaut la base de données hérite ces paramètres culturels et linguistiques sous la forme d'un identificateur de langue et d'un classement.When you are creating a tabular model database, by default the database inherits these cultural and linguistic settings in the form of a language identifier and collation.

  • L'identificateur de langue définit le jeu de caractères que vous voulez utiliser pour vos chaînes en fonction de la culture.The language identifier defines the character set you want to use for your strings according to your culture.

  • Le classement définit l'ordre des caractères et leur équivalence.The collation defines the ordering of the characters and their equivalence.

    Il est important de noter qu'un identificateur de langue identifie non seulement une langue mais, également le pays ou la zone où la langue est utilisée.It is important to note that a language identifier not only identifies a language but, also the country or region where the language is used. Chaque identificateur de langue a également une spécification de classement par défaut.Each language identifier also has a default collation specification. Pour plus d'informations sur les identificateurs de langue, consultez ID de paramètres régionaux assignés par Microsoft.For more information about language identifiers, see Locale IDs Assigned by Microsoft. Vous pouvez utiliser la colonne LCID Dec pour obtenir l'ID correct en insérant manuellement une valeur.You can use the LCID Dec column to get the correct ID when manually inserting a value. Pour plus d’informations sur le concept SQL des classements, consultez COLLATE (Transact-SQL).For more information about the SQL concept of collations, see COLLATE (Transact-SQL). Pour plus d’informations sur les indicateurs de classement et les styles de comparaison pour les noms de classements Windows, consultez Nom de classement Windows (Transact-SQL).For information about the collation designators and the comparison styles for Windows collation names, see Windows Collation Name (Transact-SQL). La rubrique Nom du classement SQL Server (Transact-SQL) mappe les noms de classements Windows aux noms utilisés pour SQL.The topic, SQL Server Collation Name (Transact-SQL), maps the Windows collation names to the names used for SQL.

    Une fois que votre base de données model tabulaire a été créée, tous les nouveaux objets du modèle héritent des attributs de langue et de classement des attributs de la base de données.Once your tabular model database has been created, all new objects in the model will inherit the language and collation attributes from the database attributes. Cela est vrai pour tous les objets.This is true for all objects. Le chemin d'accès d'héritage commence à l'objet, examine le parent pour trouver tous les attributs de langue et de classement à hériter, et si aucun attribut n'est trouvé, continue vers le haut et recherche les attributs de langue et de classement au niveau de la base de données.The inheritance path begins at the object, looks at the parent for any language and collation attributes to inherit, and if none are found, continues to the top and finds the language and collation attributes at the database level. En d'autres termes, si vous ne spécifiez pas les attributs de langue et de classement pour un objet, par défaut, l'objet hérite les attributs de son parent plus proche.In other words, if you do not specify the language and collation attributes for an object, by default, the object inherits the attributes of its closest parent.

    Pour les colonnes, les attributs de langue et de classement sont hérités au moment de la création, selon les règles suivantes :For columns, the language and collation attributes are inherited at creation, according to the following rules:

  1. L'objet dimension parente fait l'objet de recherches pour trouver les attributs de langue et de classement.The parent dimension object is searched for language and collation attributes. Si les deux valeurs existent, elles sont copiées dans les attributs de colonne ; si une seule valeur existe, l'autre est déduite de la valeur existante et les deux sont affectées ; si aucune valeur n'existe, passez à l'étape suivante.If both values exist, they are copied to the column attributes; if only one exists, the other is inferred from the existing one and both are assigned; if none exist, move to next step.

  2. L'objet base de données fait l'objet de recherche à l'aide du processus décrit à l'étape 1 pour les dimensions ; si aucun attribut n'est trouvé, passez à l'étape suivante.The database object is searched using the same process described in Step 1 for dimensions; if no attributes are found, move to the next step.

  3. L'objet serveur fait l'objet de recherche à l'aide du processus décrit à l'étape 1 pour les dimensions ; si aucun attribut n'est trouvé, la colonne utilise l'identificateur de langue Windows et déduit l'attribut de classement de cette valeur.The server object is searched using the same process described in Step 1 for dimensions; if no attributes are found, the column uses the Windows language identifier and infers the collation attribute from that value.

    Il est important de noter qu'en général l'identificateur de langue et l'ordre de classement dans la base de données source ont peu d'effet, si ce n'est aucun, sur la façon dont les valeurs sont stockées dans la colonne du modèle tabulaire.It is important to note that typically the language identifier and collation order in the source database has little to no effect on how values are stored in the tabular model column. L'exception indique si la base de données source transforme ou filtre les valeurs demandées.The exception is if the source database transforms or filters the requested values.