Articles Tagués ‘SSAS’

Tabulaire versus Multidimensionnel

19 octobre 2011

imageDans ma série “je dépile mes posts du PASS Summit”, je vais vous parler de la session de Marco Russo à laquelle j’ai assisté.

Le sujet est la modélisation décisionnelle en OLAP ou Vertipaq et la façon de le présenter très pragmatique.
Marco Russo a simplement pris des scénarios décisionnels usuels et les a modélisé en multidimensionnel et en tabulaire.

Evidemment, une introduction claire a été faite rappelant les différences entre les 2 modèles (requêtage, modélisation, exécution, etc.).
J’ai retenu (entre autres) cette phrase de Marco :

Both Data Modeling will live side by side a long time

Je vous renvoie vers mes précédents articles sur le BISM pour plus d’infos.

 

Les exemples de modélisation présentés :

  • calcul de stock
  • nouveaux clients
  • matrice de transition (exploitation des changements d’une SCD)
  • classification ABC

Je ne vais pas vous refaire les démonstrations dans ce post mais il est apparu assez évidemment que Vertipaq, Tabular et DAX forme un trio simplifiant grandement la modélisation.

Certes, les scénarios ont été choisis en conséquence car la conclusion n’est pas de dire que le modèle tabulaire est meilleur. Il est différent et apporte de grandes simplifications dans de nombreux cas d’analyse. (je vous renvoie vers le blog de Marco).

 

J’ai aimé :

  • la simplicité intellectuelle de la modélisation Tabulaire (on réfléchit comme un utilisateur d’Excel)
  • Approche “Think as entities
  • les raccourcis du langage DAX qui réduit la taille du code des mesures calculées

 

Pour aller plus loin

Je vous invite à vous inscrire aux Journées SQL Server à Paris les 12 et 13 décembre. 2 sessions seront consacrées à la modélisation de solutions décisionnelles.

La première par François Jehl qui reprend le sujet de Marco Russo sur les différences entre Tabulaire et Multidimensionnel

S122 – Décider entre Tabular ou Multidimensional pour un projet Analysis Services

La seconde par Florian Eiden (je l’assisterai comme co-speaker sur le sujet) sur la modélisation dimensionnelle de façon plus générale.

S221 – Modélisation dimensionnelle : le fondement du DataWarehouse

 

See you in Paris.

Session : Delivering KPIs

17 octobre 2011

Speaker : Peter Myers

 

imageLa session parle des indicateurs de performances, les KPI. Dit comme cela, le sujet est simple mais la description m’a plutôt intéressé car elle décline le sujet sur les différents produits de la stack BI : SSAS, Excel, SSRS, PPS (PerformancePoint) et il y a même un peu de Data Mining.

Bon, pour être honnête, c’est le mot-clé MDX qui m’a décidé Sourire.

La session a été très claire et très didactite. Le speaker a pris le sujet à la base et a déroulé les implémentations, les façons de faire, les questions à se poser.

Même si je connaissais suffisamment le sujet pour ne pas le découvrir en séance, c’est bon de voir tout repris dans l’ordre et redémontré (surtout le Data Mining qui n’est pas ma tasse de thé et le Write-Back).

J’ai aimé :

  • Le rappel de l’importance de l’alignement à la stratégie métier (Balanced Scorecard – Norton/Kaplan)
  • Le rappel qu’un tableau de bord est un ensemble de KPI corrélées ensemble (encore une fois la méthodologie de Norton/Kaplan est en sur le devant de la scène)
  • Une super démo de Data Mining (algorithme Time Series)
  • La saisie des valeurs depuis Excel 2010 en utilisant le Write-Back
  • L’ensemble des métadonnées à mettre sur une KPI
  • La création d’un tableau de bord de KPI en provenance d’un cube dans Excel 2010 en mode Free-Form

 

Je pense que ça mérite un article sur le sujet alors je mets ça dans la pile.

Session avec SQLCAT – SSAS et Big Data

14 octobre 2011

imageHier, je suis allé à une session présentée par l’équipe SQLCAT (Customer Advisory Team) sur le cube Analysis Services  de Yahoo! qui ne fait pas moins de 24To.

SQLCAT est une équipe dédiée à l’architecture et la mise en œuvre de SQL Server sur des (très) gros environnements. On leur doit presque tous les livres blancs sur les performances SQL Server.
Ce sont aussi eux qui ont battu le record de chargement de données avec 1To en 30 minutes avec SSIS.

La session était très complexe, les speakers survoltés (et donc parlant très vite avec tout un tas de traits humoristiques que j’avais du mal à suivre). Je ne vais donc pas en faire un compte-rendu détaillé.

Ce que je veux partager avec vous, c’est la philosophie qu’il y a derrière une solution de cette taille (on parle de milliers de milliards de lignes).

Vous aurez peut-être deviné, il y a de l’Hadoop et du HiveQL dans la solution pour extraire et traiter les logs depuis les systèmes de fichiers de Yahoo!.

Ce n’est que pure spéculation, mais j’ai bien l’impression que ce projet a été très impliqué dans les phases de développement du driver Hadoop de SQL Server 2012

Revenons à la BI. Derrière, il y a bien un cube SSAS ; et pas d’Hadoop de ce côté là.

La clé est le partitionnement.

C’est la solution pour intégrer 135Go de données par jour et pour les processer (les traiter – pardon pour l’anglicisme).
Les partitions sont très petites ; les 135Go sont eux mêmes partitionnés pour avoir du quasi temps réel (near-time). Et régulièrement, les partitions sont fusionnées (commande XMLA MergePartitions).

L’autre point important est une modélisation simple et relativement rigide. On le comprend aisément, si les dimensions changent tous les 4 matins, on a un risque de devoir reprocesser l’ensemble des 24To. On est donc dans du pur ProcessAdd (si je parle en XMLA).

Bref, de beaux challenges à résoudre et j’adorerais passer un jour dans l’équipe pour aborder tout cela avec eux.

 

Pour le fun, voici quelques notes sur les éléments physiques de la solution :

  • 128 Cores
  • 2TB RAM
  • SAN : 400TB
  • 1M IOPS
  • 36Go/s en lecture depuis le DWH

 

Le conseil du jour de la part de Denny Lee :

Créez une nouvelle partition dans SSAS dès que la taille de la partition atteint 4Go

Nouveautés Analysis Services 2012

13 octobre 2011

Speakers : John Hancock & Ashivini Sharma (Lead Program Managers)

J’ai choisi de zapper une session level 300 sur le design de cube pour aller voir la présentation des nouveautés par les PM en personne.

Pour résumer, les points suivants ont été abordés (je rentre dans le détail par la suite) :

  • PowerPivot v2
  • BISM
  • Evolutions du moteur multidimensionnel (les 5 minutes de la fin)

 

BISM : one model for all End User experiences

La présentation de BISM m’a fait penser à la devise du seigneur des anneaux : un modèle pour les gouverner tous (et dans les ténèbres les lier). Retour sur la session.

 

Après une démo sur PowerPivot v2 (les nouveautés avaient été présentées dans ce précédent post), le modèle est sauvegardé sur Sharepoint.

A ce stade, vous avez une solution décisionnelle disponible et vous pouvez directement faire un rapport Crescent Power View.

Mais comment manager cela quand la source est un fichier Excel qui prend ses données d’un rapport qui prend sa source dans un flux OData ? (là je pousse le bouchon mais admettons…)

L’objectif est de pouvoir promouvoir un modèle créé par l’utilisateur dans un vrai cadre Analysis Services. Pour cela, on peut réimporter  notre classeur PowerPivot.

image

Vous noterez qu’il nous faut un Analysis Services en mode Vertipaq (tabulaire) mais ça reste une base de données SSAS gérée sur un serveur SSAS et attaquable depuis les outils classiques (Excel, PowerPivot, Power View, SSRS, etc.).

 

Revenons sur le BISM. J’avais déjà parlé du sujet (le post ici) mais je vais faire une piqure de rappel. BISM est un super-modèle, il ne remplace rien. Les sous-ensemble sont :

  • le très connu UDM (SSAS 2005-2008R2)
  • le nouveau modèle tabulaire qui a démarré avec PowerPivot

Ces 2 modèles ont chacun leurs outils, langages et une conception différente.
BISM les réunit afin d’offrir aux outils de restitution de données un modèle commun (en programmation objet, on dirait une abstraction).

Evidemment, quand j’évoque les différences, elles vont s’effacer par la suite car elles sont déjà quasiment iso-fonctionnelles (là j’exagère un peu mais l’idée est là). On peut déjà tout faire dans Visual Studio par exemple.

Mais alors que doit-on choisir ?

La question est difficile à répondre aujourd’hui donc on se contentera de celle du consultant : ça dépend Sourire.

Ma vision est que le modèle tabulaire est pour l’instant plutôt orienté pour les POC, les développements rapides ou la réalisation de modèle décisionnel par les utilisateurs eux même (et c’est ce dernier point qui est le point important).
Si vous êtes développeur (T-SQL, DWH, MDX, Visual Studio, etc.), restez sur le modèle UDM, mais commencez à y jeter un œil.

De toute façon, tabulaire, étoile, flocon, etc., au final, on a bien des tables et des relations entre elles. Qu’importe la modélisation suivie (Kimbal, Inmon, Tabular, etc.), on a bien des données tabulaires.

C’est pour cela que le BISM est le modèle commun !

Et ma conclusion sera (attention, je polémique) :

BISM peut être vu comme un revamping de l’UDM.

Soit dit en passant, UDM n’a jamais vraiment pris. Je n’ai jamais entendu une seule fois chez un client “nous avons un modèle UDM…”

Pendant les Journées SQL Server en décembre à Paris, nous reviendrons sur la modélisation avec François Jehl donc si la polémique le débat vous intéresse, venez nous y écouter.

 

Petite remarque : vous serez obligé de faire du tabulaire pour utiliser Power View dans la RTM (ça c’est important et pourtant c’est juste une phrase perdue après la conclusion).

 

Quelques autres notes de la session :

J’ai aimé :

  • le mode avancé de PowerPivot qui permet aux utilisateurs Business de ne pas être perturbé par des options trop compliquées dès l’ouverture tout en offrant de la richesse pour les développeurs
  • la réimportation d’un modèle PowerPivot dans SSAS
  • la sécurité des modèles tabulaires. Du Role Based comme avant mais plus simple à construire (surtout pour le niveau cellule). Je n’ai pas retrouvé l’écran présenté donc ce sera plus tard pour un screenshot.

Je n’ai pas aimé :

  • Crescent over Multidimensionnal (ie. faire un rapport Crescent sur un cube classique) n’est pas encore possible et ça arrivera avec la prochaine update.

 

Et les évolutions SSAS Multidimensionnel ?

Comme je le disais, les 5 minutes de la fin (la salle était pleine et il y a eu de nombreuses questions) ont été consacrées à un slide sur les nouveautés de SSAS en mode multidimensionnel.

Je n’ai pas tout noté mais ce sont principalement des limitations repoussées ou supprimées et des améliorations des performances. On peut noter par exemple le support du DISTINCT COUNT sur ROLAP.

Je me rattraperai dans un prochain post dès que les slides seront en ligne.

SSAS Tabular mode

24 juillet 2011

On le sait depuis un moment, le décisionnel Microsoft s’oriente vers le BISM (Business Intelligence Semantic Model) en fusionnant le modèle de PowerPivot et celui plus classique de Analysis Services (UDM).

Je vous renvoie à un de mes précédent post : Un peu plus sur le BISM

Avec la CTP3, on en découvre plus puisqu’on peut jouer avec.

 

Le premier effet se voit dès l’installation de SQL Server puisque dans la configuration de votre instance SSAS, on a le choix entre 2 modes de fonctionnement.

  • Multidimensional : Analysis Services classique avec un modèle UDM
  • Tabular Mode : modèle BISM (à-la PowerPivot) et moteur Vertipaq

Installation tabular mode

Notez que si vous voulez les 2 modes, il vous faudra installer 2 instances.

 

Le second effet se voit au démarrage de BIDS avec un nouveau type de projet. Ce type de projet est simple, il représente exactement ce que vous faites dans PowerPivot sauf que vous êtes dans Visual Studio (avec donc un accès à TFS pour le Source Control).

Analysis Services Tabular Project

L’interface principale ressemble à la PowerPivot Window de la version Excel

Analysis Services Tabular mode

On importe les “tables”, on crée les relations entre elles, on crée ses formules en DAX et on envoie le tout dans Excel pour tester.

La plus grande nouveauté reste une vue Diagramme, bien plus pratique pour réaliser votre modèle d’analyse.

Analysis Services Tabular project - vue diagramme

Vous noterez au passage que les projets BISM tabulaire ont maintenant la notion de hiérarchie.

Dans un prochain post, je parlerai des autres nouvelles options de Power Pivot (et donc des projets SSAS tabulaires).

 

PS : Notez le code couleur avec les icônes entre les modes tabulaires et multidimensionnels.

image

Jeu de rôles avec Analysis Services

5 juin 2011

Sans faire tout un article sur la sécurité dans Analysis Services, je vais traiter d’un point de détail suite à la question d’un client.

imageLa problématique (simplifiée) est la suivante : sur un  cube avec un nombre important d’utilisateurs, presque chacun doit seulement avoir accès un une partie des données.

La répartition des droits se fait simplement en sliçant (aucun rapport avec le tennis Sourire) sur les valeurs d’une dimension.
Prenons comme exemple la dimension produit du cube Adventure Works. Imaginons que chaque utilisateur doit voir SA catégorie (et uniquement celle-là).

 

Comment implémenter la sécurité ?

Déjà, restons sur du natif en nous appuyant sur la sécurité SSAS à savoir les rôles. Deux approches viennent à l’esprit.

  • créer un Role par utilisateur – et affecter les bons membres de la dimension
  • créer un Role par catégorie – et affecter les utilisateurs

La difficulté est que la cardinalité de la dimension et le nombre d’utilisateurs sont équivalents, ce qui ne milite ni pour l’un ni pour l’autre des choix.

Pourtant, connaitre comment Analysis Services résout les permissions va nous orienter vers une solution.
Que se passe t-il quand un utilisateur est dans plusieurs Roles ?

  • son contexte de sécurité contient les différents rôles
  • la requête est exécutée pour les différents rôles du contexte d’exécution
  • les différents résultats sont fusionnés

Attention, la fusion des résultats est vraiment une UNION et ne tient pas compte des DENY qu’il pourrait y avoir, contrairement au SQL. Ce point nous montre que dans le cas de rôles par catégorie, l’implémentation d’exceptions sera difficile (et on se doute bien qu’il y en aura Clignement d'œil).

Toutefois, ce n’est pas ce point précis qui me fait choisir la première solution. Lorsqu’un utilisateur est dans plusieurs rôles, la requête est “exécutée” pour chaque rôle et la fusion des CellSet se fait après. Ces opérations sont plus couteuses que de connaitre dès le départ les droits et interdiction de l’utilisateur courant.

Je créerai donc un Role par utilisateur.

Evidemment, j’ai dit qu’il y avait un grand nombre d’utilisateurs (2000 dans mon cas), ce qui entraîne une maintenance complexe.

Je vous rassure tout de suite, pour maintenir tout cela, la configuration des rôles passera par du code .NET (ou Powershell) afin de donner aux administrateurs une interface plus ergonomique (moins vrai en Powershell Tire la langue).

 

using Microsoft.AnalysisServices;
/* ... */
Server s = new Server();
s.Connect("data source=caolila;integrated security=SSPI");
Database d = s.Databases["AW"];

Role r = d.Roles.Add("Cat_User1234");
r.Members.Add(new RoleMember("CAOLILA\\User1234"));

CubePermission cubePermission = d.Cubes["Sales"].CubePermissions.Add(r.ID);
cubePermission.Read = ReadAccess.Allowed;
Dimension dim = d.Dimensions.GetByName("Product");
DimensionAttribute attribute = dim.Attributes.GetByName("Category");
CubeDimensionPermission cubedimPermission = cubePermission.DimensionPermissions.Add(dim.ID);
cubedimPermission.Read = ReadAccess.Allowed;
AttributePermission attributePermission = cubedimPermission.AttributePermissions.Add(attribute.ID);
attributePermission.AllowedSet = "{[Product].[Category].&[1]}";
cubePermission.Update();

 

PS : comme d’habitude en matière de sécurité, la complexité n’est pas la solution technique mais les processus d’attribution des droits que l’on met en place dans les applicatifs.
Simplifier les règles peut souvent éviter de monter des usines à gaz. Je recommande souvent de calquer sur des modèles de la vie réelle, même si nos systèmes d’information n’ont souvent pas de limite. (tips : appuyez vous sur les UO ou les groupes de l’Active Directory)

UPDATE: Benny Austin vient juste de publier un article bourré de code AMO pour piloter la sécurité SSAS. C’est ici : ssas-using-amo-to-secure-analysis-service-cube

Un peu plus sur le BISM

21 mai 2011

Pour commencer, rappelons que BISM est l’acronyme de Business Intelligence Semantic Model. J’en ai parlé dans un précédent article sur Denali.
Le TechEd 2011 aux U.S. vient de se terminer et on en sait un peu plus (pas beaucoup mais suffisamment pour livrer des news dans un post).

Ma description du BISM reste juste ; il vient bien en complément de l’UDM. L’objectif de Microsoft est effectivement de fusionner totalement UDM et BISM à terme.

Pour nos projets décisionnels, on aura donc un modèle commun appelé BISM.

  • On l’implémentera de façon traditionnelle (Kimball) ou sous une forme plus “relationnelle” à la PowerPivot.
  • Ce modèle supportera les langages de requêtage  MDX et DAX (même si évidemment, je doute d’une totale bijectivité).
  • Analysis Services fera tourner tout cela en MOLAP ou en Vertipaq (en fonction de l’implémentation)
  • L’ensemble des outils amont (ETL) et aval (SSRS, Crescent, Excel, etc.) supporteront les 2 implémentations (de façon transparente – espérons-le)

BISM

Donc 2 chemins, 2 implémentations pour une même résultat ? Comment faire le choix ?

Je le rappelle, les 2 ne sont pas incompatibles et des voies de migration existe(ront). Il a été annoncé que les cubes SSAS 2008 deviendront de facto un BI Semantic Model ; aussi, on pourra importer un modèle PowerPivot dans SSAS.

Et pour un nouveau projet ? C’est là qu’il faut attendre d’avoir un peu de recul sur les spécificités de chaque modélisation car on sait bien que la vraie vie d’un projet est remplie de contraintes.

Quoiqu’il en soit, les outils, les couches d’accès aux données, la philosophie même, seront indépendants de ce choix puisque c’est BISM qui fera l’abstraction (même si la prochaine CTP annoncée fera la séparation).
Evidemment, dans quelques années, on ne se posera plus la question Clignement d'œil

La stack BI de Microsoft reste donc cohérente et nous promet de répondre à tous les besoins décisionnels de tous les utilisateurs au final.

Plusieurs membres par défaut

16 avril 2011

Si vous cherchiez à utiliser un Set (ensemble de membres) comme sélection par défaut dans une dimension, autant vous le dire tout de suite, ce n’est pas possible.
Vous noterez que DefaultMember (membre par défaut) est au singulier Clignement d'œil.

image

Donc comment faire pour avoir plusieurs membres (pas de mauvais jeu de mots…) ?

La solution passe par la hiérarchisation de votre dimension. Mettre une hiérarchie permet d’ajouter des nœuds intermédiaires regroupants plusieurs membres enfants.

Ex : vous avez une dimension [Catégorie] et vous voulez avoir comme membre par défaut les catégories [Catégorie].[Vente Produits] et [Catégorie].[Divers]. Il faut donc utiliser par exemple [Catégorie].[Hiérarchie].[Ventes] qui contiendra nos 2 catégories visées.

Et en utilisant un Named Set dans les calculs du cube ? On peut être tenté d’en créer un et de l’utiliser.

CREATE STATIC HIDDEN SET CURRENTCUBE.[DefaultCat] AS {[Catégorie].[Vente Produits] , [Catégorie].[Divers]} 

Sauf qu’un Named Set est par définition un Set et non un membre. En plus le Named Set se trouve sur le cube et pas sur la dimension. Même avec un ALTER CUBE, vous aurez une erreur (La fonction  attend une expression de hiérarchie pour l’argument. Une expression d’ensemble de tuples a été utilisée).

ALTER CUBE Vente  UPDATE DIMENSION [Catégorie].[Catégorie], DEFAULT_MEMBER = [MonNamedSet] 

Proratisation des objectifs dans le temps dans Analysis Services : utilisation de SCOPE

12 mars 2011

Rappel sur la notion d’objectifs

Quand on crée des KPI, on a besoin de travailler les objectifs des indicateurs.

On peut écrire les objectifs en dur dans les KPI (dans Analysis Services via Visual Studio ou dans un outil plus adapté comme le Dashboard Designer de Performance Point). Mais bien évidemment, ce n’est pas la “bonne pratique” recommandée.

La première étape est de créer une table d’objectifs. Vu du cube, c’est une simple table de faits, ventilée sur les dimensions adéquates. Cependant, il est rare que les objectifs soient connus (et encore moins saisis) à une granularité très fine.

Problématique

Prenons l’exemple d’une mesure chiffre d’affaire. En phase de planning budgétaire, on va déterminer les objectifs de CA par mois par exemple. Il y a rarement de linéarité sur cette mesure mais il est rare qu’on descende à la journée. Smile

Admettons qu’on veuille avoir un indicateur au jour le jour car on intègre des factures quotidennement. On va avoir un problème sur notre KPI car en début de mois, nous serons loin de l’objectif et nous ne pourrons savoir si on est “dans les clous” qu’une fois le mois quasiment terminé car le seul chiffre que l’on ait est celui du mois. Difficile de piloter de cette façon.

Solution(s)

L’idée est donc de proratiser notre objectif sur la dimension temps pour obtenir l’objectif sur la granularité voulue (dans notre exemple la jour). Je vous propose donc 3 solutions dans cet article :

Remplir la table de faits à la bonne granularité

La première solution est la plus simple car il suffit de remplir directement notre table d’objectifs à la bonne granularité et donc avoir un objectif quotidien.

Le problème de cette solution est qu’il faut modifier beaucoup de lignes si je devais revoir l’objectif d’un mois par exemple. Nous avons donc un problème de praticité même si évidemment, on ne remplit la table qu’une fois et on la modifie rarement.

Ventiler les objectifs dans le DSV

Le modèle d’Analysis Services permet d’avoir une abstraction sur le DatawareHouse via le DSV (Data Source View). Cette abstraction permet d’interférer sur le modèle de données via du code T-SQL.

La seconde solution utilise cette possibilité pour changer la granularité de la table d’origine. En T-SQL, on démultiplie les lignes afin d’en obtenir une par jour et on divise l’objectif selon le nombre de jours. Je vous passe le script car je ne souhaite pas focaliser sur cette méthode.

Ventiler les objectifs dans le cube

La troisième solution est d’opérer la ventilation non pas en T-SQL mais dans le cube, en MDX.

Pour cela, il suffit tout simplement de surcharger le calcul des cellules du cube et le langage MDX nous permet de le faire simplement. On utilise l’instruction SCOPE et on redéfinit le contenu de la cellule. Cela se fait dans l’onglet Calculations d’un cube dans Visual Studio.

Scope
  ( { [Temps].[Calendrier].[Date] }, { [Measures].[Budget] } );

This =
  ([Temps].[Calendrier].Parent)
  /
  [Temps].[Calendrier].CurrentMember.Siblings.Count;

End Scope;

La première partie du script définit la portée du calcul. Jusqu’à l’instruction End Scope, on est donc borné à la mesure Budget au niveau Date, plus rien d’autre n’existe.

This= redéfinit les cellules de la portée avec un nouveau calcul. Ici, je prends le tuple parent (donc le budget du niveau mois, qui, lui, est défini) et je le divise par le nombre de dates en dessous (ie. le nombre de jours dans le mois).

J’obtiens donc une proratisation du budget mensuel par jour.

A noter qu’avec le scope, je ne perturbe pas le niveau mois car ce script passe après le calcul initial des cellules (CALCULATIONPASS, mais ça c’est une autre histoire Smile with tongue out).

Conclusion

Je n’ai pas de préférence pour l’une ou l’autre de ses méthodes. La plus technique est sans aucun celle en MDX. Toutefois, utiliser un script T-SQL dans le DSV est pragmatique car on s’appuie ensuite sur la simplicité de l’aggrégation du cube.

D’un point de vue performances, je n’ai jamais fait de tests. Je le mets dans ma TODO-List et ce sera l’occasion d’un nouvel article.

Format Currency pour un membre calculé

26 février 2011

Je reviens sur un post qui date de plus de 2 ans : http://blog.djeepy1.net/2008/08/31/analysis-services-support-du-format-monetaire-dans-excel/

J’expliquais la gestion du formattage d’une mesure dans Analysis Services. J’ai été très précis la dernière fois et pour ce rapel, je vais juste faire un petit reminder sous la forme d’une FAQ.

Q : J’ai un membre calculé dont j’ai précisé le format à Currency et pourtant, il apparaît comme un simple nombre dans Excel, que dois-je faire ?

R : Pour un membre calculé, il faut préciser le langage en plus du format 
FORMAT_STRING = "Currency", LANGUAGE = 1036,


Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 203 followers