-
ALM syncing when multiple developments are happening
We have 2 developers working on the same model in different modules.
One has completed his changes but the other is not ready to sync.
Unfortunately you have to sync the whole model, and this means partial changes would then be synced. If the first developers' changes are urgent, waiting for a major change to be finished is unproductive.
Would it be an idea to just sync the changes (by choice), and not the whole model?
-
How does Authentication with CA Certs work?
Why CA Certs?
The purpose of this blog series is to give a deeper look on the use of Certificate Authority (CA) Certificates, especially on how this method of authentication works and how to use them for your different integrations.
A Quick Recap On Anaplan APIs Authentication
We recommend our readers to have some basic knowledge on Anaplan APIs.
In order to be able to trigger Anaplan actions remotely, one will need to get authenticated to the API server. If the authentication process is successful, the user will be granted a token that can be used for a limited period of time to activate Anaplan actions. The biggest challenge is to be able to get that token from the certificate you have.
Why would you use CA Certs instead of the well-known "basic authentication", involving the user email and password?
There are 2 main drawbacks of using basic authentication.
1. Critical information easily accessible
When using basic authentication, one will have to use username and password in the development of the integration process. Very often, this information is in clear text for any person who will have access to the scripts.
2. Regular update of credentials
Anaplan's password policy requires that any credentials must be updated at least every 3 months. The team in charge of integration will then be required to amend the scripts frequently, which increases the maintenance workload.
By using CA certs, we want to address those 2 concerns that are frequently raised by teams in charge of integration.
How does CA Cert based authentication work under the hood?
Sometimes, a schema is a great tool for understanding. So here is one:
Anaplan's cert-based method follows PKI basic principles, especially the rules of asymmetric cryptography.
Out of CA certificate, one will extract a private key and the public certificate. To have a thorough description of the steps needed to achieve this extraction, please use this link with a very instructive and interactive guide.
The private key will be used to "sign" a random string, generated externally for that purpose. Anaplan API server will receive this random string and its signed version. Via a specific calculation, it will validate if those two strings are related to each other using a private key's signature linked to the public certificate. Once the check is validated, the authentication process can be sure that the person who has sent the information is in possession of a valid private key.
So why is that method more secure than using Basic Authentication?
Based on what has been described above, we can state that:
* As you could see in the previous part, certificate information decoding requires a minimum of technicality to be handled correctly.
* No private or confidential information is sent on the web.
* There is also another advantage, quite consequential: The integration based on CA Certs will remain valid until the end of the certificate validity. Hence, there is no need to have a regular maintenance of integration scripts.
Anaplan also adds another level of security: to authorize API actions triggering via certificates, public certificate needs to be registered in the tenant admin.
In the case that we want to deactivate a certificate, you can simply do it via this screen. This will be without any consequence on the actual user linked to the certificate.
What about the private information?
One concern can be made on the use of the private key. Indeed, that piece of information is critical and private. Then, it cannot be handled lightly and should not be easily accessed.
Nevertheless, when analyzing the diagram flow, we can see that no private information is passed through the web. Only the 2 strings and the public certificate are sent through the web.
In your integration, nothing prevents you from reusing this pair of strings and store the private key in a secure location. By doing so, you will be compliant with the necessity to secure sensitive information.
Now, let's compare 2 situations, both involving a person with bad intents.
* Situation 1: Credentials have been retrieved
In this situation, an authorized person, in possession of Anaplan credentials, can log in into Anaplan and have access to sensitive information stored in Anaplan Platform.
* Situation 2: Cert-based information (2 strings + public cert) have been retrieved
In this case, an authorized person can trigger APIs; However, the unauthorized person will have no access to other parts of Anaplan interface and functionality. The access is more limited than with the actual credentials.
Now, you'd also want to ensure that those strings aren't also too easily readable. Please visit to learn how to create the strings securely.
https://community.anaplan.com/discussion/156392/integrating-securely-using-the-anaplan-rest-api-with-certificate-based-authentication
-
Introducing Improved Anaplan DX: a browser extension for Anaplan Modelers
We at valantic are excited to share our latest development: Improved Anaplan DX, a browser extension designed to enhance your modeling experience and increase efficiency. Please see below for more details. The extension is now available in the Chrome Web Store (can be installed on Chrome and Edge):
https://chrome.google.com/webstore/detail/improved-anaplan-dx/fijomfhflcgocncnbncehfckehdbbmnd
For any feedback, suggestions, bugs, or general enquiries, please do not hesitate to contact us at: anaplan-integration@ba.valantic.com.
Here's how the Improved Anaplan DX enhances your model building experience:
1. Keyboard Shortcuts: Say goodbye to the mouse! We've added an extensive set of keyboard shortcuts that cover almost all actions in Anaplan. From navigating modules to editing line items, you'll be amazed at how quickly you can accomplish tasks with just a few keystrokes, without continuously having to swap between mouse and keyboard.
2. Page and Report Analysis: Need to find all pages referencing a particular module? Or want to identify which line items are used as filter variables in your pages and reports? Our extension has you covered! With a keyboard shortcut, you can quickly locate and analyse critical dependencies, enabling you to make informed decisions about your models.
3. AI-powered Formula Assistance: Imagine having an AI-powered assistant right in the formula editor, just like Co-pilot for developers. With our integration of ChatGPT, you'll have access to intelligent suggestions, code snippets, and contextual guidance as you write your Anaplan formulas. This powerful feature will help you become even more efficient and accurate in your modelling.
4. Formula Editor Enhancements: We've supercharged the formula editor to make creating and editing formulas a breeze. Hovering over items or functions now provides helpful tooltips, ensuring you have all the information you need at your fingertips. Additionally, our validation and error highlighting feature help catch potential issues before you even submit your formulas, saving you valuable time and reducing frustrating wait periods.
5. Enhanced Popup Windows: We've taken the annoyance out of popup windows in Anaplan. Our solution makes them focus traversable (you can navigate the window with Tab), allowing for seamless navigation within popups. We have also added styling to these elements, so you always know which one you have currently selected. You can also reach the enter button with tab and confirm your changes in all popups now.
You can customise the extension by turning most features on or off in the extension settings.
Brought to you by
https://www.valantic.com/en/business-analytics/connected-planning-with-anaplan/
-
Issue in LIS where one line item is shown as a parent of another.
Hi,
I have created a LIS from two different modules with a total of 3 line items. The two line items I selected from the first module however are having a parent child relationship when I use the LIS as a dimension in another Module. This should not be the case as all the line items are independent.
Q1.jpg
Q2.jpg
The First Image is the LIS, second image is the module where the LIS is being used as a dimension, in the row.
-
Assigning List item based on Text line items and looking up - COMPLEX
Hi Community,
To give the backstory of this - I have a module, where I first import one data file into, with Loan-Hedge ID List) and line items as the dimensions. The second file I import is a similar one, also with Loan-Hedge ID (List) and line items as the dimensions.
When importing the first file, these Loan-Hedge IDs will have a Stock Symbol assigned to them, and will also show their assigned Hedges, as Loan-Hedge ID, coming in on the Hedged ID column, as text. In the three columns to the left, named Hedge 1, Hedge 2, and Hedge 3, I basically separate them out individually from the Hedged ID column.
Essentially, what I'm trying to do, with a formula, is to populate the hedges with their associated Stock Symbol if the cell is empty.
Below is the end result I'm trying to achieve:
To note: in blue is the dimension of the column, and in yellow is the format of the column.
If needed, more line items can be added to make it easier.
I really hope the community can help me with this!
Thank you!
-
Date Line Item using Min Summary
Hello
I am using line item formatted as date with 6 level hierarchy. I am using summary as Min for the same.
I am facing issues where if there is no date in my list P6, i am getting 12/31/2399 for all NonBlank list members. Please advise best way to handle it without doing any hardcoding.
Regards
MO
-
Email Notification
I created a action - to add list member. Additionally also a notification to notify me via email if there will be a new List member added. But unfortunately it is showing me two different buttons to execute the process. Is there any way i can create in one process the adding of list member followed by Email notification?
Thanks in Advance.
-
Using the Anaplan Certificate with the Anaplan REST API: A Comprehensive Guide
If you're diving into integrating with the Anaplan REST API using an Anaplan Certificate, you'll need to know certain requirements. This post is a step-by-step guide to ensure a seamless connection using Python. If you'd prefer to avoid a programmatic approach to using your certificate, then please check out the CA Certificate Auth Generator.
Requirements for Using Anaplan Certificate with REST API:
* Making a POST Call:
Initiate a POST call to https://auth.anaplan.com/token/authenticate.
* Adding a Header:
The Connection header key should encapsulate the Anaplan public key with the string CACertificate followed by a space and the entire Anaplan public key:
Connection: CACertificate MIIFeDCCBGCgAwIBAgIQCcnAr/+Z3f... (continues)
* Pass a Random String:
Incorporate a 100-byte random string of data within the body of the REST API call. Here is an example of a 100-byte random string:
codeJlkj3$9kds*lKD09jlkjasD9021!lsjd2309sdlsjLJDSJfdi21l3ekds92jLJSFdfDJSld3i0d9flsjd3
* Sign the String and Format the Body:
This random string has to be signed using the certificate's private key. When you're preparing the body of your API call, it should have this structure:
{
"encodedData": "ACTUAL_ENCODED_DATA_VALUE",
"encodedSignedData": "ACTUAL_SIGNED_ENCODED_DATA_VALUE"
}
Note: The placeholders ACTUAL_ENCODED_DATA_VALUE and ACTUAL_SIGNED_ENCODED_DATA_VALUE need to be substituted with the genuine values that you get from encoding and signing your data. The curly braces themselves remain unchanged.
* PEM Format:
Both the Public Certificate and the Private Key must conform to the PEM format. PEM, standing for 'Privacy Enhanced Mail,' is the go-to format for saving and transferring cryptographic keys, certificates, and other forms of data. It's easily recognizable due to its delimiters (-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----) for public certificates and (-----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY-----) for private keys.
A Handy Python Implementation:
To make things more practical, here's a Python script to help generate the mandatory strings for encodedData and encodedSignedData:
from base64 import b64encode
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA512
import json
# Generate the encodedData parameter
def create_encoded_data_string(message_bytes):
# Step #1 - Convert the binary message into Base64 encoding:
# When transmitting binary data, especially in text-based protocols like JSON,
# it's common to encode the data into a format that's safe for transmission.
# Base64 is a popular encoding scheme that transforms binary data into an ASCII string,
# making it safe to embed in JSON, XML, or other text-based formats.
message_bytes_b64e = b64encode(message_bytes)
# Step #2 - Convert the Base64-encoded binary data to an ASCII string:
# After Base64 encoding, the result is still in a binary format.
# By decoding it to ASCII, we get a string representation of the Base64 data,
# which is easily readable and can be transmitted or stored as regular text.
message_str_b64e = message_bytes_b64e.decode('ascii')
return message_str_b64e
# Generate the encodedSignedData parameter
def create_signed_encoded_data_string(message_bytes, key_file, passphrase):
# Step #1 - Open the private key file for reading:
# Private keys are sensitive pieces of data that should be stored securely.
# Here, we're reading the private key file from the disk using Python's file I/O functions.
key_file_content = open(key_file, 'r', encoding='utf-8').read()
# Step #2 - Import the RSA private key:
# The RSA private key is imported from the previously read file content.
# If the key is encrypted, a passphrase will be required to decrypt and access the key.
my_key = RSA.import_key(key_file_content, passphrase=passphrase)
# Step #3 - Prepare the RSA key for signing operations:
# Before we can use the RSA key to sign data, we need to prepare it using
# the PKCS#1 v1.5 standard, a common standard for RSA encryption and signatures.
signer = pkcs1_15.new(my_key)
# Step #4 - Create a SHA-512 hash of the message bytes:
# It's common practice to create a cryptographic hash of the data you want to sign
# instead of signing the data directly. This ensures the integrity of the data.
# Here, we're using the SHA-512 algorithm, which produces a fixed-size 512-bit (64-byte) hash.
message_hash = SHA512.new(message_bytes)
# Step #5 - Sign the hashed message:
# Once the data is hashed, the hash is then signed using the private key.
# This produces a signature that can be verified by others using the associated public key.
message_hash_signed = signer.sign(message_hash)
# Step #6 - Encode the binary signature to Base64 and decode it to an ASCII string:
# Similar to our earlier function, after signing, the signature is in a binary format.
# We convert this to Base64 for safe transmission or storage, and then decode it to a string.
message_str_signed_b64e = b64encode(message_hash_signed).decode('utf-8')
return message_str_signed_b64e
def create_json_body(encoded_data_value, signed_encoded_data_value):
data = {
"encodedData": encoded_data_value,
"encodedSignedData": signed_encoded_data_value
}
return json.dumps(data, indent=4)
# create random 100 byte message
message_bytes = get_random_bytes(100)
# Provide path to the private key in the PEM format
private_key_file = './quin_eddy_private.key'
# Provide the private key passphrase. If there is no passphrase, please insert None
private_key_file_passphrase = None
# Create the encoded data string
message_str_b64e = create_encoded_data_string(message_bytes=message_bytes)
# Create an encoded signed data string
message_str_signed_b64e = create_signed_encoded_data_string(
message_bytes=message_bytes, key_file=private_key_file, passphrase=private_key_file_passphrase)
# Get the formatted body for the Anaplan API token authentication endpoint (https://auth.anaplan.com/token/authenticate) to generate an access_token
certificate_api_body = create_json_body(
encoded_data_value=message_str_b64e, signed_encoded_data_value=message_str_signed_b64e)
print(certificate_api_body)
This script employs the PyCryptodome library for the signing process. If you haven't done so already, make sure to install it:
pip install pycryptodome
That's all there is to it! Adhering to these guidelines and using the shared script, your integration with the Anaplan REST API via an Anaplan Certificate should be a breeze.
It is not hard. Please take a look at this short demonstration using Postman to login to Anaplan using the encoded and signed strings:
Authors: Quin Eddy, @QuinE & Adam Trainer, @AdamT - Operational Excellence Group (OEG)
-
Ability to Apply Filters before downloading Model History
Currently, If I want to check history to view some activity on a specific module or list, but I am not aware of the dates when that change took place, It takes forever for me to extract the history for downloading 'ALL' change history and locate that change. I face issues especially when the changes are too many and file is too huge. It would be best for me if I can filter by module, list and user before downloading.
-
[Part 1] Enhanced Reporting of the Anaplan Audit Log Summary
As organizations continue to embrace Anaplan's powerful platform for connected planning and decision-making, maintaining robust security and compliance measures has become increasingly essential. The Anaplan Audit Log serves as a critical tool in achieving these objectives, providing granular insights into user activities and data changes within the platform. However, unlocking the full potential of the audit log and utilizing it effectively for reporting purposes presents its own set of challenges.
The primary purpose of this article is to explore these challenges and offer practical solutions to help organizations overcome them, thereby enabling them to harness the power of the Anaplan Audit Log for comprehensive reporting and analysis. By addressing the complexities associated with audit log reporting, organizations can strengthen their security posture, improve compliance, and enhance overall operational efficiency.
Efficiently fetching and formatting the audit log data for reporting purposes can be a complex and time-consuming task. In this article, we will explore the Anaplan Audit History Python project available on GitHub that automates the process of fetching Anaplan audit history, transforming it into a meaningful and reportable format, and loading the data into an Anaplan Reporting Model. Data that is captured includes user identification, the timestamp of the activity, the specific event type, and a description of the action taken. This data is recorded in a consistent and structured format, making it easy to filter, sort, and analyze.
By leveraging the power of Python, organizations can save valuable time, enhance reporting capabilities, and uncover valuable insights from their audit log data. The following diagram illustrates the process:
Next, learn how to deploy this solution by reading the second installment of this series: [Part 2] Enhancing Anaplan Audit Log Data Extraction with Streamlined Python Solutions.
Author: Quin Eddy, @QuinE - Director of Data Integration, Operational Excellence Group (OEG)
-
[Part 2] Enhancing Anaplan Audit Log Data Extraction with a Streamlined Python Solution
The Anaplan Audit History project, consisting of several Python modules and a configuration file, works synergistically to streamline the process of fetching, formatting, and loading Anaplan audit log data into a preconfigured Anaplan Model. The project leverages the Anaplan REST API, the Python Pandas library for efficient data conversion from web services JSON format to tabular, and SQLite for advanced data blending and transformation capabilities.
SQLite, a highly versatile and lightweight database engine, offers substantial benefits for transforming and blending various related datasets. Its capacity to execute complex SQL queries and join operations enables users to merge datasets in diverse ways, establishing itself as a powerful tool for data integration and enrichment. Utilizing SQLite's comprehensive set of built-in functions, the project seamlessly combines multiple Anaplan datasets and performs data transformation operations such as filtering, sorting, and reshaping within the SQLite environment. The simplicity of SQLite's file-based storage system facilitates easy deployment and management directly within the Python code, making SQLite an efficient, scalable, and accessible solution for data blending, transformation, and summarization. In context to this project, this SQL code combines various Anaplan metadata, including Users, Workspaces, Models, Actions, Processes, and CloudWorks Integrations via an SQL join with the raw audit data to synthesize audit data in a reportable format.
In order to supply all this Anaplan content, the following Anaplan REST APIs need to be leveraged:
* OAuth Service API - to authenticate and refresh the access_token based on the client_id and refresh_token.
* Authentication API - to authenticate and refresh theaccess_tokenbased on a valid username and password combination or valid certificate in the PEM format.
* Audit API - to fetch the audit records.
* Integration API - to fetch metadata about Anaplan objects such as data sources, Processes, and Actions. Additionally, to refresh content to the target Anaplan Audit Reporting Model, the bulk API is used to upload the report-ready audit data, and the transaction API is leveraged for updating the latest timestamp.
* SCIM API - to fetch Anaplan user metadata.
* CloudWorks API - to fetch CloudWorks integration metadata.
This project exemplifies how Python can effectively integrate and automate Anaplan operations, using modern OAuth services for Anaplan authorization in tandem with the rich capabilities of the Anaplan REST API. Additionally, the project highlights several Python best practices, such as:
* Organizing code into packages and modules: Segmenting the code into multiple modules based on functionality improves maintainability and simplifies the process of locating and resolving future issues.
* Enhancing error handling: Effective error management is vital when working with external APIs. Implement try-except blocks to handle exceptions that may occur during API calls or file I/O operations.
* Utilizing Python's logging module: Opt for the built-in logging module instead of print statements for debugging, providing better control over log verbosity and streamlining log output management.
* Leveraging environment variables or configuration files: Avoid hardcoding sensitive information like API keys or credentials and store this information using environment variables or configuration files instead.
* Adding comments to the code: Include annotations in complex or non-obvious code sections to improve comprehensibility for both yourself and others.
Anaplanners can use this project as a basis for building tailored integrations.
The source code and supplementary details, such as requirements, deployment instructions, and helpful videos, are available on GitHub.
Next, learn how to use this data in an Anaplan Model by reading the third installment of this series: [Part 3] Anaplan Audit History Data in an Anaplan Reporting Model.
Author: Quin Eddy, @QuinE - Director of Data Integration, Operational Excellence Group (OEG)
-
Integrating Securely: Using the Anaplan REST API with Certificate-Based Authentication
In the ever-evolving landscape of technology, secure communication between platforms is paramount. The Anaplan REST API offers a robust way to connect and interact with the Anaplan platform, and one of the most secure methods of authentication is through certificate-based authentication. In this article, we'll delve into the process of using the Anaplan REST API with certificate-based authentication, exploring the concepts and techniques involved.
1. Understanding Certificate-Based Authentication
Certificate-based authentication involves the use of a digital certificate and private key to establish trust between parties. In the context of Anaplan's REST API, this method ensures a secure connection while exchanging data. Learn more about how Authentication with CA Certs work as well as view the Authentication Service API documentation. If you need a certificate, then please check out the CA Certificate Quick Start Guide using Sectigo.
2. PEM Format: The Key to Success
Before we delve into the authentication process, it's essential to ensure that your public certificate and private key are in the PEM (Privacy Enhanced Mail) format. This widely used format ensures compatibility and security during data exchange.
3. Authentication API Request Structure
To generate the authentication token, your API request should have the appropriate header and body components:
Header: Include your public certificate (.pem), encoded in base64.
Body: Comprises a JSON structure containing two strings.
* encoded_string: A randomly generated string of at least 100 bytes, encoded in base64.
* Encoded_signed_string: This string is the "encoded_string" signed by your private key and then base64 encoded.
Here's an example of the JSON structure for the request body:
{
"encodedData": "2wiKPoVqz0ZheVU8T+CqoR82WsVfDIb3bc...",
"encodedSignedData": "hnbAWqqOob5RrAlqMyLbuUvkpK0Bfe9hm3Ml..."
}
4. The Role of Base64
Base64 encoding is crucial in this process, as it converts binary data into a printable text format. This transformation enables the secure transport of data over protocols or mediums that might not handle binary data formats.
5. Ensuring Secure Communication
The combination of base64-encoded data and the certificate-based authentication method guarantees secure communication with the Anaplan platform. This is especially important when dealing with sensitive information.
6. Approach 1: Simple Browser-Based Solution
For an effortless way to generate the required strings, you can use our downloadable RSA Signer in a handy downloadable ZIP file. Once the files have been downloaded and unzipped, open the index.html file. You are then presented with an interface that allows you to paste your public certificate and private key. It then generates the necessary encoded strings, which you can directly use in your API request (i.e. Postman).
RSA Signer.zip
Note: The RSA Signer currently does not support a passphrase on the Private Key.
7. Approach 2: Python Implementation
If you prefer a programmatic approach, here's a link to a comprehensive guide to using the Anaplan Certificate with Python to generate the required strings for your Anaplan API request. This solution is compatible with Python 3.11.1 and later versions.
https://community.anaplan.com/discussion/156606/using-the-anaplan-certificate-with-the-anaplan-rest-api-a-comprehensive-guide
8. Incorporating Certificates with Anaplan: A Productive Endeavor
As organizations strive for tighter security and efficient integration, certificate-based authentication emerges as a dependable solution. By implementing the methods discussed in this article, you'll be better equipped to seamlessly and securely connect your systems with the Anaplan platform.
Incorporating certificates into your Anaplan integration can appear complex, but armed with the knowledge of these two approaches, you're well on your way to a more secure and streamlined integration process. Stay ahead in the world of secure communication and data exchange with Anaplan's REST API and certificate-based authentication.
Authors: Quin Eddy, @QuinE & Adam Trainer, @AdamT - Operational Excellence Group (OEG)
-
[Part 3] Anaplan Audit History Data in an Anaplan Reporting Model
With Anaplan Audit, Enterprise and Professional level Customers can track audit events that occur in their Anaplan tenant.
For the Anaplan Audit History project, we created a simple Anaplan reporting model and app to report on Anaplan Audit events in the Anaplan UX.
Customers may download and use the Anaplan Audit Model & App in their Customer tenant. The standalone Anaplan Audit model consists of a single Anaplan model with a small number of lists, modules, actions, processes, and user experience pages. Customers are able modify and maintain their Audit Model as they see fit.
Once connected to the Python integration described in Part 2, Customers may schedule daily updates from the SQLite tables. The model update process consists of a single Anaplan process that imports new audit data as text into a flat ‘Audit’ module. SUM and COUNT functions sum over audit event frequencies by Audit activity category into an ‘Audit Report’ module. A ‘Refresh Log’ module is dimensionalized with a batch ID dimension that captures timestamps of every model update as well as record counts. These three modules are displayed on UX pages.
The Anaplan model is ~2MB at download, but will grow over time as the number of unique audit records increases based on the volume of activity in a Customer’s tenant. Customers may therefore need to periodically archive older audit data to maintain desired model size.
Audit Logs are available to members of the Tenant Auditor role via either the Administration UI or via the Audit API. The Anaplan Tenant Admin assigns members of the Tenant Auditor Role. Audit logs are available through the Admin console or the REST API for 30 days.
Please reach out to your Anaplan Customer Success Business Partner or Representative to obtain your Model copy. The Anaplan Audit Model is not supported by Anaplan and is used at Customer’s own discretion.
See Part 1 and Part 2 of Anaplan Audit History Data in an Anaplan Reporting Model.
-
Anaplan History Extraction based on Specific Criteria
Hi Anaplan Team,
We now only have one option for extracting history: selecting a date range. It will benefit all model builders and Anaplan workspace admin users who truly take part in model development if we can offer more options, filters, or criteria.
History Extraction Options along with Data Range:
based on a specific user.
based on specific objects like modules, lists, line items, and so on.
-
Event Registration - API Developer Virtual Meetup
Hi All
Our first event for 2023 is right around the corner!
Agenda:
* Welcome and Intro
* Update from the Anaplan team
* Demo
* Q&A
Event times:
* AMER/EMEA: 25th July 09:00-10:00 (PDT)
* APAC/EMEA: 26th July 13:00-14:00 (SGT)
* We will record the sessions for those who cannot make the times listed
Registration Steps:
Register here ⇒ https://calendly.com/adamtrainer
Upon navigating to the above link, you will be directed to a page like the below:
* Select an event coinciding with your timezone
* Select a date from the calendar
* Select a time
* Click "Next"
* Enter your name and email address
* Click "Schedule Event"
* You will be sent a calendar invite with the zoom meeting link attached
If you have any questions, please let me know.
Looking forward to meeting you in the sessions!
Regards
@AdamT
-
Upcoming Event Dates - Demo volunteers
Hi all
We're planning a virtual event for 25th/26th of July (invites to be sent soon).
We're seeking for volunteers that would like to demo a solution they've built that incorporates the Anaplan APIs. The demo should be around 15-20 min.
Please send me a direct message with your interest in presenting your solution to the group.
Cheers
Adam
-
Schedule automated Anaplan notifications
As a Page Builder/Integration Administrator, I'd like to be able to schedule Anaplan native UX notifications. This would allow me to send native (instead of email) notifications to a set of users (hard-coded or lineitem-driven) about a predefined page. I'd like to be able to have different scheduling options, each being at hour and minute of:
* everyday
* every working day
* nth day of every month (with negative values interpreted as last days of month)
* nth day of every week
* nth day of nth week of a month
* nth working day of every month (with negative values interpreted as last days of month)
Native notifications are great, much better than normal emails with links, and implementation of this idea would allow me to:
* notify people at the same time via email, mobile app and web interface, taking an user directly to the right page;
* set predefined schedules aligned with business processes;
* avoid 3rd party software and complicated integrations for simple use cases of time-based workflows.
I think the best way would be to add an extra option in CloudWorks (which is already able to send emails - about status of integration's execution).
-
Boolean with summary : "all", true for parent with no child?
Why is a Boolean line item with summary set to ALL true for Parent even when there are no child items?
I noticed that a boolean line item was true for a parent in the hierarchy automatically if summary was set to ALL even if it had no children. Why is this so? I thought if summary is set to ALL the parent would be true if all the children are true
-
Line Items referenced in Saved Views
Show the list of saved views where the line items are used as filters or are referenced in saved views. This will greatly help in traceability for the model builder.
-
Asana is looking for a Product Owner Planning Systems
Come work for a great Enterprise Technology team, implement and support FP&A, Workforce and Territory & Quota planning. For more information about the role go to:
https://asana.com/jobs/apply/4972731
-
Transactionnal API - Direct Query with JSON Line / Parsing ?!?
Hello,
I am looking currently at the Transactionnal API.
I see great usage associated to Transactionnal API reading function for direct reporting through third party tool (ex : POWERBI), which offer more thank BULK API.
This call help you to direct query a view :
Currently, the documentation show a limitation of cells able to be read :
* This call only supports the retrieval of cells from a view that contains a maximum of 1,000,000 cells. If the specified view contains more than 1,000,000 cells, then the call returns a 400 Bad Request HTTP status, instead of a subset of the cells. Use the quick sum bar in Anaplan to identify the number of cells in a view.
Nevertheless, I saw in the return, the page aspect. That is associated to parsing/ Json Line perspective
Is there any perspective that we see anytime soon, the parsing on those kind of request ? (@christophe_keom 👀)
-
Shortcuts for Anaplan in new user experience
Having in mind recent improvements in the way that anaplan is using new formula formatting and "inteli-sensne" like interface when using bottom formula bar, its so much wast that there is so few shortcuts inside anaplan. Some of them are not working at all with new experience (Ctrl+>, Ctrl+< - working only with anaplan classic, and is useless because <> signs are used only with shift). Can we have more shortctus defined with new user experience. Example: Ctrl + → for next tab, Ctrl + ← for previous tab, Ctrl + arrow down to go to the bottom of the list, Ctrl + up arrow to go to the top of the list. Space to confirm popup screen. etc… just to make interaction with anaplan much more convenient.
-
Help me with this issue.
I have this two modules:
AND
I want to pull the territory ref ID sys/fil07 to the inp/ter01 so it would only show territories available for that employee, i have tried to do loots of formulas but they dont seem to pull it correctly, not sure if because inp/ter01 is made with subsets its messing it up or something is wrong,
I created also the sys/fil07 to try to use it as a filter maybe but when i create a filter on inp/ter01 it doesn´t appear as an option, so not sure what to do here, any ideas?
-
CloudWorks
Hi,
I have just started using CloudWorks, it's a great Anaplan in-built tool for integrations and processes but does anyone have any idea how can we run subsequent process in it. for ex. I have a process A and process B in my model and I want to run in a manner that as soon as process A is complete, Process B should start running? (like a chain of processes)
Thanks,
Anmol Sarna
-
Activity: Import Data into FP&A Model LVL2 Conclusion
I am trying to import the information from the INV05 Module but get items failing.
This is my save view, how do i make for the G3 location list only show me the lowest level of information without the country and region?
Thanks in advance
-
How to know a parent is selected
Greetings,
We have a model where a Employee have territories assigned, each territory have accounts assigned. At the moment if we edit the end date of a territory the end date of the accounts stay the same. So i want to make a formula where if we mark the territory for edition , a boolean on the accounts gets active as well so we could update territories and accounts at the same time. Any ideas how to do this?
TY
-
A doubt in functionality of "ALL" function
Hii Community,
Here, Source module contains Employees Dimension, Department and Country as List formatted Line Items and Bonus as Boolean format Line Item as shown below.
Target module contains Country as Dimension and Employees with Bonus as a Boolean formatted Line Item as shown below.
When I am using "ALL" Function here in Employees with Bonus Line item, it is giving TRUE against India and China even though I haven't used China (Country) in Source module (Country Line Item). Can someone answer this whether my understanding is incorrect or "ALL" Function is not working properly.
Please Let me know if you want further details, Thanks in advance.
With Regards,
Dileep
-
Production Data - Top level Can be Changed?
I have a scenario as follows:
I have a List named "Product L1" which has been marked as production data. While I understand that structural changes can still be made to a list that has been marked as production data, I have noticed that the top level, which cannot be changed if the list has been marked as production data, has been altered.
I have attempted to investigate the issue by checking the history to see if there was any sync from dev, but unfortunately, there has been no sync done. Additionally, I noticed that there is no history trace of model change from deployed to standard. As you know, this change should not be possible in Production for the top level.
The changes made on to the Production list - " Product L1 "is as follows:
Top Level Before the change: All Products
Top Level After the change : No Products
What could be the possibility for this change happened in production?
-
Top 25 Anaplan features released in 2022
Authors: Misbah Ansari (@Misbah), Certified Master Anaplanner and CEO/Founder at Miz Logix and @WajidAli .
Within this fast-pacing world, it is important for technologies to move even faster. Anaplan, being a leader in the Connected Planning world, released a plethora of changes and/or updates in 2022 to almost every aspect of its capabilities which includes modeling, UX, extensibility, collaboration, intelligence, and integration. If you are NOT an Anaplan geek you probably would have missed some of these updates and releases. In this article, we are going to share more about the top 25 features that Anaplan released in 2022. These features are separated into the respective areas of their capabilities so it is easy to understand. Let’s jump in!
Modeling
1. Model object search: This helps you find any artifact of the model including Modules, Saved views, Line items, Line-item Subsets, Lists, List subsets, List properties, Dashboards, etc. Press “CMD+SHIFT+F” in Mac or “CTRL+SHIFT+F” in Windows to pull up the search bar or you could also click on Model Object Search in Task bar of Anaplan.
2. Auto complete: Create formulas faster and more speciously with automatic suggestions for functions and model objects during development. With this feature, you don’t have to open modules or lists to click on line items or list items to complete the formula. Here are two resources if you need additional guidance: Formula Autocomplete and Did You Know.
3. Formula indentation: Anaplan now shows “IF ELSE STATEMENTS” with clear indentation which helps the model builder to read and view the formula better.
4. Tab split view of modules: Formerly known as “Dock” in classic modeling experience. Now model builders can audit their work, compare items and verify results with tab split view.
5. Import Time out for Optimizer: Anaplan has enhanced the Time out feature for Optimizer. It allows planners to access partial results in case of a time out, without having to change optimizer action settings. This will enable users to save time while being able to still review and leverage some of the results as applicable.
6. Improvement to Platform messages: Anaplan improved the way in which messages are displayed to users or model builders, including informative and error messages like access issues and processing messages. Messages that previously appeared in the blue “toaster” now appear as pop-out messages in the top right. System processing messages through long-running actions or blocking actions appear in a new message banner across the top.
7. View modules used on UX pages: Model builders can now use this feature to know which modules have been used to create a UX page. You can click on a source module to open it in a separate tab.
User Experience (UX)
8. Assign action and its enhancements. Two sub-features of Assign function made it to the list:
* Filter list items when using the Assign action: With this feature end users are able to filter the view of available list items to assign using nominated list properties. This makes the assignment process even faster, streamlining the experience for planners.
* Quickly assign list Items by pasting their codes: Planners can assign multiple items by pasting the codes of list items into the assign action interface with just one operation or command.
9. Synchronize scroll: If there are multiple grids published on the UX, it used to be frustrating for end users to scroll grids multiple times to see the relevant and meaningful data. Anaplan released this feature which allows page builders to sync scrolling multiple grids on boards and worksheets, making it a better user experience. Watch this short video for more information.
10. Include List properties in grid exports: End users have now the ability to control what they see in the exports directly from the UX. Gone are the days when in order to export the list properties, model builders alone could include list properties in the export action from the backend. Now, end users don’t need to rely on model builders to include list properties, they too can do so directly from the UX. Note: This feature is available while exporting the grid from UX and regular export (export button) will perform the way it has been built by model builders. This video explains this more.
11. Variance reporting and other management report enhancements. There are a lot of features that were released to management report pages. Quite a few made our list:
* Variance reporting: This enables the face-of-the-report variance calculations without modifying the underlying model.
* Lock cards: You can now lock cards in place such as background images so they no longer get moved by mistake when changing the layout.
* Copy and paste cards: Copy and paste cards across slides on the same report to save time recreating common cards. The cards will paste in the same location as the original on a separate slide.
* Enhance zoom: More granular zoom settings to focus on a particular area of the report.
* Short-cut keys: You can now perform a number of layout option actions using short-cut keys.
* Row and column styling: Change the background, font color, or emphasis a row or column in the presentation table.
* Number scaling: Change the numbers on your report table to display in millions or thousands depending on the most relevant to your audience.
* Number formatting: Update the number formatting to % or apply a suffix or prefix directly on the report depending on your needs.
12. Additional options for run model actions: Anaplan added this feature to UX actions which ensure end users are always prompted before their action runs and always shown a summary of the action, even when it completes successfully. Note that the default behavior of UX is that once the actions are run by end users it straightaway starts processing the action without any prompts and it also doesn’t give you the break-up of status. Watch this video to learn more.
13. Breakback, hold, and release: For customers that use breakback, the ability for their planners to make hold and release adjustments is a critical part of their planning process. To better support this Anaplan has released this feature to hold single and multiple cells in UX grid cards and worksheets where breakback is enabled.
14. Drive the click ability of import actions: Model builders will be able to define whether an end user action button can or cannot be clicked using a boolean line item in their model. This offers maximum flexibility when modeling and can support use cases such as validating required data inputs before running an import, testing completeness of data before actioning a process, and ensuring all inputs meet correct thresholds before allowing others to be alerted with a notification action. Watch this video to learn more.
15. Dynamic text added to Boards and worksheets: Text cards on Boards and worksheets have been updated to allow you to add static text, including rich text formatting capabilities, alongside data from the model.
* Dynamic content: change the numbers or narrative on your page based on the dimensions or time period selected.
* Format your text on the page to emphasize key points or improve the look and feel. Including bold, italic, underline, font sizes, and colors.
Extensibility
16. Anaplan for Microsoft 365: AM365 offers a new way to interact with Microsoft Office tools like Excel, PowerPoint, and Word. Designed to bridge the Anaplan user experience and Microsoft 365 applications, these new extensions enable users to perform fast, flexible ad-hoc analysis and reporting, by leveraging Anaplan UX cards and templates, driving consistency and speed of decision-making while leveraging Anaplan as the single source of planning truth.
17. DocuSign connector enhancements: Anaplan users don’t need to log into Anaplan DocuSign integration to update sent document statuses to their Anaplan models. The automated status refresh will work at scheduled intervals and users will see statuses updated to Anaplan models at regular intervals. This is particularly useful in case the user who initiated the documents for e-signing is not available and other Anaplan model users need to see the updated statuses.
18. Anaplan SSO for Power BI: The Anaplan Connector for Power BI is a user-friendly native connector for Power BI. It allows you to easily connect your Anaplan data and models to Power BI for enhanced data visualization and report creation to align with your specific KPIs and brand. This new version of Anaplan connector for Power BI supports Anaplan OAuth APIs for authenticating with Anaplan. Users will now be able to use either Basic Authentication (User ID, Password) or Anaplan Single Sign On (SSO).
Collaboration
19. In-product notifications for scheduled maintenance: Anaplan has enhanced collaboration capabilities to directly share information about planned events, such as scheduled maintenance windows or releases. With in-product notifications, Anaplan users will be proactively and directly alerted by planned events with a single source of truth. This gives users a simple way to gain greater visibility into upcoming planned downtimes.
20. Comment summary view: Discover all comments on a page and context selection with the new summary view. Easily drill down to an individual comment thread, or keep an eye on the bigger picture and watch conversations update in real-time.
Intelligence
21. MVLR algorithm and explainability added to PLAN IQ:
* Feature importance (explainability): It provides an “impact score” on how each “driver” impacts the forecast results. This measures the relative impact a driver has on the forecast, compared to the other drivers to help you understand forecast results and drive confidence in the forecasts provided.
* MVLR: Multi-Variate Linear Regression is fast, advanced statistical forecasting with feature importance, providing insights on how and which drivers most impact forecast results. Based on the statistical forecasting technique of regression, this new capability enables you to accurately predict a dependent variable based on multiple independent variables.
22. Backtest reimport: PlanIQ backtest import allows planners to evaluate forecast model performance using historical data. PlanIQ now allows the users to re-import the backtest data in case this is needed.
Integration
23. Transactional API updates: Large volume read APIs allow customers to export any-sized data from Anaplan modules and lists. They can effectively replace the current export actions. These large-volume APIs will be ideal for larger data loads and will be eventually supported by a wide range of connectors. Anaplan has released large-volume read APIs that will allow users to:
* Trigger large volume List read
* Monitor large volume List read tasks
* Download pages from large volume List read
* Clear up intermediate space (an explicit Delete call)
24. Download failure log in CloudWorks: Admins can now download failure logs for select CloudWorks integration failures.
25. Anaplan Connect 4.0 OAuth: This enhanced version of Anaplan Connect includes support for Anaplan OAuth APIs, and enables users to authenticate in their Anaplan Connect scripts without using user ID, password, or CA certifications. Some benefits of using OAuth for authentication are:
* Centrally managed Anaplan OAuth credentials. Credentials can be deactivated from Anaplan admin UI if needed.
* No need to save user credentials (user id or password) in integration scripts.
* No need to procure and set up CA certifications in integration scripts.
* Users can continue to be SSO enabled in an Anaplan model while using OAuth for authentication.
Note that this list is not exhaustive and there are many more other features that were released to the platform which did not make it to our top 25. If you wish to know about all of them, check out the new Anaplan Product Releases website.
Let us know in the comment section about your favorite release of 2022!
-
How to Create Connection Between Anaplan and Power BI with API 2.0
Power BI is a popular reporting tool. One of the reasons is that in Power BI you can get data from different sources, and there is an increased interest of our customers and Anaplan builders to be able to import data from Anaplan. In order to make this connection, we developed a solution to set up the integration.
It is possible to have this integration between Anaplan and Power BI using Anaplan Rest APIs. Anaplan released two versions of Rest APIs — 1.3 and 2.0. For version 1.3, the authentication to Anaplan can be done using user and password (basic authentication).
For the Anaplan Rest API version 2.0, the authentication can be done only using a token authenticated, so if version 2.0 will be used, then a token string should be created and should be passed on the actions.
Kindly follow the below process:
In the next instructions, we will see how to create the token from a CA Certificate and authenticate into Anaplan in a single Power BI query. The whole code will be explained in this article.
* Step 1: Let’s start with a Blank query as a source. Right-click over the new query and select Advanced Editor:
* In this first step, we need to create the token. For this, you will need to add your CA Certificate content, the encodedData, and encondedSignedData strings. Please have a look at the below link for more information: Authentication-Strings
Basic authentication can be used for this as well, however, please keep in mind the need to encode it first (password can be easily encrypted via the following link base64encode with the format email: password).
* Click on Done, so the string will be shown that needs to be authenticated :
* Step 2: Come back to the Advanced Editor and send all the previous code into parenthesis to the variable mytoken1. After that the code should be added to run the export action. Replace the workspace, model, and export with your IDs. Use Anaplan Connect or Postman to get them.
* Click on Done and the Export action will be launched. Later, we will come back to this query, as in the next step we will need to download the file.
* Step 3: Now we need the code to download the file. I recommend creating an API with version 1.3. It is only to collect the code because the number of columns and types are different in each file. Add a new Web source -> Advanced
Fill with this information:
* URL parts: https://api.anaplan.com:443/1/3/workspaces/WorkspaceID/models/ModelID/files/FileID/
Add 3 headers:
* Authorization Basic Your_encoded_password
* Content-Type application/csv; charset=UTF-8 --csv or txt depending of your file
* Accept application/octet-stream
* Click OK, and Power BI will download the file. The Query2 is now added:
* Go to Query2->Advanced Editor, copy the whole code:
* Close the editor and come back to the Query1->Advanced Editor.
Paste at the end of the code the Web.Contents, changing the version from 1/3 to 2/0 and the Authorization with the Token variable.
Paste the TransformColumnTypes without changes.
Finally, the response of the code will be #”Changed Type”. This is the content of your file:
As you can see, I added the function InvokeAfter. This is to give time to Anaplan to finish the export, and then we can continue with the download. I set this up with 20 seconds. Adjust this delay time depending on the size of your file.
* Click OK, and the query will launch the three steps and show the exported data.
* Finally, delete the Query2 and rename Query1 to a proper name.
A final recommendation: if you have a large file, it is better to split the Export over multiple actions because a large file can take a long time to be uploaded into Power BI, and use Chunks will create wrong rows in the concatenation of each one.