XF OneStream: comment effacer des données en tranches
Beaucoup d’entre nous, ici à Perficient, avons récemment exploré XF OneStream, le nouvel outil de planification et de consolidation financière. Pour moi, il est impossible de ne pas apprécier les nouvelles fonctionnalités offertes par la plate-forme .NET, l’élégance et l’omniprésence des articles d’aide sur la syntaxe VB.NET. Les méthodes et les fonctions internes de OneStream rendent également l’écriture de règles d’entreprise rapide, expressive et amusante. Voici par exemple une fonction personnalisée soignée qui s'attaque aux effacements sélectifs de données dans les cubes OneStream.
SetDataCell vs HS.Clear
Très souvent, il est nécessaire de supprimer un sous-ensemble de données défini de manière générale dans le cube – par exemple, supprimer un compte particulier, ou un département. De retour dans HFM, je pourrais écrire quelque chose comme ceci dans le fichier de règles:
Ce qui précède s’occuperait de toutes les données saisies dans le compte statistique «Effectif». Pour OneStream, il est suggéré d'utiliser la méthode SetDataCell pour effacer les comptes:
Il suffit de passer au-dessus de zéro pour le montant et de Vrai pour isNoData, et d'effacer l'intersection définie dans memberFilter – comme ceci:
La seule L'inconvénient est que la méthode n'accepterait que les POV entièrement résolus, ce qui signifie que vous devez spécifier tous les membres de la dimension personnalisée lorsque vous supprimez des données. Pour clarifier, vous ne pouvez pas simplement dire quelque chose comme api.Data.SetDataCell (“A # Headcount”, 0, True), effectuez la consolidation et attendez-vous à ce que les données chiffrées disparaissent.
Utiliser un tampon de données pour effacer les données
Alors, comment supprimer des données dans l'application si vous voulez vraiment supprimer tout ce qu'il y a pour un filtre de membre spécifique, c'est-à-dire toute la tranche de données? Rechercher les cellules de données existantes dans un tampon de données tout en appliquant ledit filtre de membre au tampon semble être la solution la plus naturelle:
- J’ai passé quelques heures à essayer de comprendre ce qui se passait avec ce paramètre, j’ai donc pensé que c’était intéressant de le partager: il s’agit d’un paramètre booléen appelé changeIdsToCommonIfNotUsingAll. GetDataBuffer est une fonction surchargée. En d'autres termes, elle permet de passer de différents jeux d'arguments lors du tir pour obtenir à peu près le même résultat. J'ai initialement utilisé l'appel qui omet le paramètre changeIdsToCommonIfNotUsingAll. Comme je l'ai appris, la valeur par défaut du paramètre est True. Ce qui s'est passé, c'est que tous les ID de membre pour les dimensions incluses dans le filtre (sourcePOV) ont été définis sur -1, tandis que la propriété name de ces membres a toujours généré «XFCommon». Je suppose que si le mot clé ALL n'est pas utilisé dans le filtre (comme dans «A # ALL», c'est-à-dire lorsque les membres filtrés s'appliquent à toutes les cellules de données du tampon), cette astuce permet d'économiser de la mémoire lorsque vous utilisez des tampons volumineux destinés à l'écriture de données. . Pour pouvoir créer le script de membre, vous devez récupérer le tampon de données avec ce paramètre défini sur False.
- Voici la vitrine des méthodes internes robustes de OneStream: au lieu d’annoncer et de concaténer des noms de membres pour Pour chaque dimension, vous pouvez simplement appeler le générateur de script du membre de la cellule de données pour générer l'ensemble du POV cible (balises de dimension incluses!) en une seule ligne de code.
Une fois que la procédure ci-dessus a été collée dans votre règle de gestion financière, de la même manière. En tant que fonction principale, vous pouvez simplement l'appeler chaque fois que vous souhaitez effacer des données par filtre (ligne 396):
- ScenarioType est l'une des énumérations internes de OneStream – recherchez "énumération" dans le document chm de l'API pour afficher la liste complète des énumérations et rechercher des valeurs.
- Il s'agit d'une fonction personnalisée qui renvoie la valeur True si Time1> Time2. .
- Cette méthode produit la liste des objets MemberInfo correspondant aux critères. Vous pouvez utiliser ici les mêmes filtres que dans le sélecteur de membres (par opposition aux filtres transmis à la méthode GetDataBufferUsingFormula, qui n'accepte pas les clauses WHERE). Le dernier paramètre doit être défini sur True pour filtrer les membres en double de différentes hiérarchies.
Source link