New Community Challenge – share your fun Anaplan builds and collect a badge!
We're thrilled to announce a brand new Community Challenge kicking off this month — the Builder Challenge! This is an opportunity to showcase your creativity and share the fun and innovative Anaplan model builds you've created. As a bonus, we will select participants to present their model builds in a special Community event next month!
What is the Builder Challenge?
The Builder Challenge is all about celebrating the imaginative and practical ways you use Anaplan. Whether you've developed a health tracker, a popular game, or any other unique models, we want to see it! This Challenge is designed to bring together our incredible Community to share ideas, inspire one another, and have a great time learning from each other.
How to participate
- The Challenge will start today, August 6, 2024, and will conclude on August 23, 2024.
- Share a fun and interesting Anaplan model build you've created or an idea you would like to build! Include a description of what it is, how it works, and if you used any feature or formula in Anaplan in a new or interesting way! It could be something you've already built or a new project you want to showcase.
- Feel free to include screenshots, images, or even a short video walk through if you’d like!
- Check out other members' submissions, leave comments, ask questions, and get inspired by the incredible work of your peers in Community!
What’s in it for you?
- Recognition: Your unique Anaplan build will be featured in the Challenge post comments, giving you and your creative work the spotlight. You may also be selected to share your build in a Community event in September, recapping this month’s Challenge!
- Learning: Discover new ideas by exploring other members' submissions.
- Badge: Earn a special Builder Challenge badge which will display on your profile once the Challenge is over.
- Fun: Most importantly, have a blast seeing the creative ways others use Anaplan and sharing your own innovative builds!
Get inspired!
Looking for some inspiration of what fun models others have built? Check out how others have developed creative builds in our "How I Built It" video series. From optimizing work and play to popular word games and even a fantasy football draft, these articles showcase the innovative builds other Community members developed:
- How I Built It: Optimizer for Work and Play
- How I Built It: Popular Word Game
- How I Built It: Fantasy Football Draft
- How I Built It: Solving world’s hardest Sudoku with Anaplan Optimizer
Lend your creativity to the Builder Challenge today!
We can't wait to see the amazing builds you'll share. This is a fantastic opportunity to learn from each other and push the boundaries of what Anaplan can do. Participate in the Challenge by commenting below in this post. Engage by commenting and liking your favorite builds. We look forward to seeing your submissions!
Next month, we’ll have an event in Community recapping August’s Builder Challenge. We will host a build-along with models shared from this month’s Challenge. Stay tuned for more details about this event!
Comments
-
I also once built an Anaplan model for a particular "popular word game", but recently I was trying to figure out the easiest way to generate a random (or at least "quasi-random" sequence that starts from a seed value) in Anaplan - once I did that I was inspired to use it to shuffle a deck of cards and play black jack!!
I also wanted to try to figure out how to make the game as "quick" as possible to play. I didn't want to have to run an action for each time I "played a card". So I made heavy use of DCA to make "one directional data editing", i.e. once a box is checked it cannot be unchecked. Once you check "Next turn", that turn is "done" and cannot be undone, and the next turn is immediately shown. Some of the methods might come in handy in my next build for data entry flow!
It's not particularly pretty looking, just a single table, but it doesn't take long at all to play a round.
Once you stay, then you can reveal the dealers cards until a winner of the round is chosen! The "Next round" clears all the inputs and "re-shuffles" the deck.
If I had more time I'd like to add a wager system, or at the very least a "high score" of hands won in a row.
12 -
The only really fun non-work model I've built is a March Madness predictor! It combines my two true loves - college basketball and Anaplan 😂
The idea originated as an Excel sheet many years ago, before I used Anaplan. Every year I added on to the Excel sheet. It never got too burdensome, but I had the bright idea this past year to leverage Anaplan instead of Excel to make it easier to iterate upon as well as build in more accuracy analysis/easier data uploads.
Not to get too into the details, but the basic functionality of the model is:
- Load in team-based data: This includes mostly statistical data. I utilize a couple different sources which evaluate all teams in college basketball (as of this last year, it was 362 teams) on a variety of stats, from simple statistics such as 3 Point % to advanced stats such as True Shooting %. I load all of these into custom-built data flats and also load in any conference changes as I have calculations based on whether teams are Power 5 (4 now), if they are a tournament team, if they are a conference champion, etc.
- Inputs: There are a couple of manual inputs that I still put in. The most time-consuming one is my Last 10 Game adjustment - essentially I look at each tournament team's previous 10 games and assign them a number of points based off of total wins, games vs. ranked opponents, conference champions, etc. I haven't found a great data source to pull this from, but let me know if you have any ideas 😅 I also may manually adjust a team up or down a point or two, based off of off-the-court things such as coach changes, recent player injuries, scandals, etc. I try to keep these rare and only use them when I feel strongly that something will affect a team that is not already included in the stats
- Calculations: The main purpose of the model. I use a number of ways to essentially assign each team a "point" value for each of the stats I utilize (there are 15 in total that I currently use). I start with a Multiplier, which I'll adjust year-to-year based off of Accuracy Analysis that I perform within the model after the fact. If one stat seemed to be a better predictor for which teams would do well, then I increase its multiplier. If a particular stat seemed to have a poor correlation with team success, then I decrease the multiplier. I then multiply by a point value determined by a tiering system - so putting that Level 3 Model Builder training to good use 💪 Essentially I rank all the teams, then determine a Top X % to determine various tiers, then give a certain amount of points for teams that fall into each tier. I utilize RANK, MAX, MIN, AVERAGE, and also have created my own formula to replicate the AVEDEV formula I utilized in my Excel model to determine deviations from the mean. This is where I do the most tweaking year-to-year, to try to figure out which statistics are meaningful and to try to get them to assign a properly significant amount of "points" to the teams.
- Output: The final output is just a score, adding up all of the points which have been assigned to each team. It's pretty simple - the team with the most points is who I will be picking to win my bracket. I still need to build out the actual bracket functionality so that it can automatically populate the entire thing for me - instead, I just look at whichever two teams are playing and look up their point value and write in the higher value of the 2 on my bracket. It doesn't take too long, but there's some opportunity to increase efficiency!
- Accuracy Analysis: The work isn't done when the bracket is fully written in 😉 Once all of the games have been played, I look back to see how I performed. I still need to flesh out this section, but what I'm essentially doing is ranking a team's performance by which round they made it to vs. what the model predicted. A team gets a "grade" for the variance, or lack thereof, between the two. From there I end up with a final accuracy %. The hope is to increase this accuracy % year-over-year. The model still isn't where I'd like it to be, but did improve last year. I think if I can get up to somewhere around 75% then I will be happy - and rich enough to retire early! 😜
7 -
Anaplan Champions and @becky.leung what a treat to see all these amazing, creative, applications. It goes to show Anaplan modeling is truly an academic exercise. We all know it works, so all that's left is creativity.
For me, the most fun application I built was the "Anaplanwich". As a way to demonstrate product lifecycle management, or PLM, I built a deli sandwich which can be built dynamically, including the toothpick to hold the sandwich together. Watch the Bill of Material, or BOM, get built dynamically. Check it out.
Here's the model schema as well.
11 -
Uploading transactional rows file in Anaplan
It seems a very straightforward request, but I found it quite challenging to arrive at the right solution to solve all the below requirements/constraints:
- The file has no clear primary key and the file structure could not be changed.
- The primary key was possible only if considered also some long text columns (like Transaction Description)
- After data was uploaded in Anaplan, every row was needed to be manually mapped to a Transaction Type.
- The transactions file can contain hundreds of rows every day and the file can contain multiple days.
- The file always contains, for one Date(day), the latest data that needs to be considered for a particular Company (deletion criteria: Company-Date combination)
- One Day(Date) transactions can be uploaded multiple times for the same Company, but only the latest uploaded rows must be considered.
- The previously mapped rows should be maintained and only the new rows should be shown to be manually mapped for Transaction Type.
- I was also required to trace the user that uploaded the latest data for a particular Day-Company combination.
In Anaplan was set the below :
1. Creating 2 numbered lists with the Transaction file structure:
a. #DL01a Transaction File – LastFile : used to delete and upload only the Last file
b. #DL01b Transaction File – All Rows : used to merge all the files and all the rows
i. Contains all the Transaction columns
ii. LastFile Flag: not blank for all the rows of the last uploaded file populated from a column that is always populated (like Company or Transaction Date)
iii. UserLoad: text to save the user that uploaded the LastFile. It was used to maintain the values when the Users will be setup with "No access" on the model.
iv. Boolean “Consider Row?”: if true, the row will be considered in calculations
2. Created a process that launches these actions
a. Delete ALL rows from list #DL01a Transaction File – LastFile
b. Import from CSV file into list #DL01a Transaction File – LastFile using the unique properties combinations
c. Import action to populate the Company List (if new Companies are updated)
d. Import action to clear “LastFile Flag” in the list #DL01b Transaction File – All Rows for all the rows that have “LastFile Flag” not blank.
e. Import action to put FALSE in “Consider Row?” in the list #DL01b Transaction File – All Rows for all the rows that have the same Company-Transaction Date combinations imported in the list #DL01a Transaction File – LastFile
f. Import action to import from #DL01a Transaction File – LastFile into #DL01b Transaction File – All Rows using the same unique properties combinations as import from CSV file action, adding values for “LastFile Flag” and TRUE for the “Consider Row?”
§ Create a module MAP01 Company-Day that has TRUE for the existing combinations in the list #DL01a Transaction File – LastFile
§ Boolean “Filter clear LastFile Data” in a module with #DL01b Transaction File – All Rows that takes from MAP01 the Company-Day combinations present in #DL01a Transaction File – LastFile and used as filter to the import action.
g. Import action to update the Current User in the list #DL01b Transaction File – All Rows filtering the rows where “LastFile Flag” is not blank
§ Create a module with Users and #DL01b Transaction File – All Rows with property Show ALL users = OFF and filter with “LastFile Flag” is not blank for the import action.
§ If in the model exists the line-item “Current Date” that it is periodically updated, it can be traced also the Upload Date.
In the downstream calculations modules were considered only the Transaction rows with the “Consider Row?” = TRUE and the other rows were ignored.
To maintain the model clean, a periodical launch to delete the rows “Consider Row?” = FALSE can be launched.
I hope it helps if someone has similar requirements 😊
Regards,
Alex
6 -
Hi, You may want to calculate the working days, excluding weekends, Bank holidays, annual leave, and sick leave. This will provide the calculation ground for the payroll, billing, and project progress.
This calendar comes from the input modules for bank holidays, annual and sick leaves.
7 -
Project Calendar Creator with Dynamic What-If Scenario Modeling
I collaborated with a private label organization to design a robust 17-scenario Project Calendar Creator, capable of dynamically updating the duration days of over 30 milestones based on selected project attributes. This tool leverages historical benchmarks to automatically calculate the optimal duration for each project stage based on attributes like project type, complexity, and resources.
Once the project attributes are selected, the tool instantly generates a tailored project calendar, reflecting the benchmarked duration for each milestone. The calendar also enables real-time tracking of the project’s progress, allowing stakeholders to monitor whether the project is on schedule or facing delays.
In case of delays or other issues, the system supports immediate adjustments, empowering project managers to swiftly reallocate resources or alter timelines to keep the project on track. Furthermore, the tool continuously evolves by incorporating data from completed projects, refining its benchmarks and scenarios, and thus enhancing future project planning accuracy.
This dynamic and iterative approach ensures that each project benefits from the latest insights, fostering an environment of continuous improvement in project management practices.
Best,
Arjun Gandhi
CTO, Master Anaplanner & Certified Trainer
5 -
‘Cows and Bulls’ Game App with Anaplan
Good day Anaplanners!
I am pleased to share with you one of my fun Anaplan project, the ‘Cows and Bulls’ game app with Anaplan. The ‘Cows and Bulls’ game is an old code-breaking game, people have created many versions of it in all programming languages. In this Anaplan version, the game simultaneously allows the player to guess its code and also plays against the player, trying to guess the player’s code. There is also an option for a single player game, so only you guess the Anaplan's code.Below is the link to my article "How to Build the ‘Cows and Bulls’ Game App with Anaplan".
Also, I recorded a video of a game I played against Anaplan and posted it on YouTube. I actually recorded a few games, in this one I was able to beat Anaplan :)
Below is a screenshot from the game.
Thanks for reading and thanks to @becky.leung for this opportunity to share our fun Anaplan builds!!
Murat Akkas
Anaplan Solution Architect
7 -
Rock - Paper - Scissors Game
I built a rock-paper-scissors game where you play against Anaplan. You choose your option, Anaplan chooses its option, and the result is shown as a GIF animation.
Attached is a 20-second recording of me playing the game:
If you’re interested in the back-end details, feel free to send a message.9 -
Thanks for organizing this interesting challenge. I love 'fun building'.
I made a simple '15 puzzle' for this challenge! Please take a look at the video.The 'Action Driver' is a very nice feature, although I have to wait a bit for it to import.
All of your challenges are also very inspiring and encouraging!
Taichi7 -
Hi everyone !
What an interesting challenge, hats off to everyone that posted on this challenge and put the time and effort to go well beyond their working hours.
Since I joined the wonderful world of Anaplan I have always been overworked and I have to say time managementhas always been the biggest challenge. So this thread is very impressive.
For a number of reasons I don’t really have a finished project to showcase, instead I am going to describe/draw a couple of relevant and slightly unusual applications where I used Anaplan, hoping it could spark ideas !
1 – Tracker for the Anaplan call or POC tracker
This is something I created when I was working at a previous customer for a couple of use cases. While I do not have any screenshots I can draw a simple mock-up.
• For whom ? Anaplan CoE leaders or for some POC trackers
• Why ? Do you find yourself dealing with the Anaplan Customer Success Business Partner and having to navigate with many different topics, issues, tickets ? The CSBP manage their own agenda using a standard template, which in most cases is great. But did you ever feel you needed to take more of a lead/ownership ?
•Solution: I created an app that served as a tracker to lead the agenda or the monthly/quarterly call with Anaplan for open tickets, Anaplan issues, features and POC deliverables.
I provided access to this app tothe Anaplan Customer Success Business Partner, internal colleagues and used it to track and prioritise all of the above.
At that time we were receiving special help and Support for Anaplan as we were assessing whether it was the right time to migrate from Classic dashboarding to UX. We were managing this through a POC and we really needed a common centralised repository to keep track of everything.
It was a little bit like a centralised Excel or Jira, where we were creating entries, uploading images and links to the Idea Exchange, using text line ítems for commentaries and or the standard comment and tag features and it was working very well.
This was enabling me to lead the cátch-up calls and I believe this was working well for both us at the customer and Anaplan as well.
This is a very simplified mock-up of the page I created :
2 – Model Size Estimator
This is something I started working on and never finished and that I think should/could be an app available for everyone.
•For whom ? Everyone
•Why ? We know that in Anaplan model size is a big topic and we always need to work with estimates.
I see 2 types of estimations : High level or Granular level.
High Level estimates are always needed before a project starts. For new projects there is a reasonably simple Excel spreadsheet that is circulating which is providing a basic high level estimate based on a number of factors
Granular level estimates are usually more of a BAU topic. Perhaps your model has grown a lot and you need to explore options to reduce its size or perhaps you are at the stage where you are asked for new functionality and you can/want to estimate it with more precision.
•Solution:
What I wanted to do was to create one single app that could be used for those 2 types of model size estimates. The high level estimate would have been the easier one to tackle as I could have replicated the Excel design into Excel…I know it’s not good practice but that’s all is needed for it ! 😋
What I did was to start creating the granular level estimator. I only had 0.5 days to do so (while I was consulting on a Project) and I started with something that was shared by Anaplan (thanks Paul G!). I wanted to create something that could have been reused with any models, exporting and importing the blueprint as the baseline and then having the opportunity to interact with it adding new lists, new subsets, time ranges, subsets, new modules dimensioned by any lists, and subsets and being able to change the size of any of these objects and/or central time/calendar settings.
I eventually came close to complete it but I got stuck with the integration of the subsets. I started using the APIs with postmanand Ryan from Anaplan shared helpful tips, however, I had to park this and I never really had the opportunity to pick it up again.
However, this is a random selection of the pages I created.
I hope you find this post and these ideas helpful !
Alessio
5 -
Problem Statement: Design a line item in a module dimensioned by time that generates these numbers from the first column to the end column. The order of numbers and the numbers themselves are as below :
1,2,2,3,3,3,4,4,4,4, 5,5,5,5,5 and so one ( it should continue till the end column )
Design Thinking: Finding the Right Solution
To develop this solution, I began by conducting research to identify patterns and came across the concept of arithmetic progression. I explored various resources and watched videos to deepen my understanding of how these types of problems are solved mathematically.
Through this research, I discovered the formula n(n+1) /2 for calculating the end term of a sequence. With this mathematical foundation, I then applied the logic to Anaplan.
Technical Solution
Solution: We are working with an arithmetic progression and using a formula to determine the end term of a sequence. The formula to find the end term for a given number n is
This is an example of arithmetic progression and there is a formula to calculate the the end term of a number if you see the pattern closely. So let's say
- 1 ends on 1st term
- 2 ends on 3rd term
- 3 ends on 6th term
- 4 ends on 10th term
Formula to calculate the end term of a number (n) is
n(n+1) /2
In our system, we can create a list called "Sequence" and populate it with a few items (1-10). We then calculate the corresponding end term using the formula.
We can create a list called Sequence and add a few items in it and we can calculate it's corresponding end term in the system module SYS01 Sequence Details.
List: Sequence List
Module: SYS01 Sequence Details
This must be your main module with time dimension.
Implementation:
- Sequence Calculation:
- Create a sequence line item that generates a sequence of numbers (e.g., 1, 2, 3, etc.) across different months.
- Convert this sequence into a list format using the
FINDITEM
function. - Look up the end term for each sequence item using the formula.
- Update End Terms:
- Use the
POST
function to update the end term values in the system.
- Use the
- Fill Missing Values:
- Apply a final transformation to populate months where the end term is zero. This can be achieved with a formula to fill in the gaps.
Apply a final transformation to populate months where the end term is zero. This can be achieved with a formula to fill in the gaps.
The final formula can be optimized using a simple IF-ELSE statement.
Source: Community Query https://community.anaplan.com/discussion/157881/design-a-line-item-with-a-sequential-numbers-in-it
12 -
Ahoi, Anaplanners! 🌊🌊🌊🌊🌊🌊
This challenge is wonderful, thank you for bringing this up @becky.leung
I am still amazed at how creative our community can be!
So here is my project:
I've recently built the famous Battleship game in Anaplan, and it was both a fun and challenging project! My goal was to bring the classic naval strategy game to life using the Anaplan platform, complete with ship placement, turn-based play, and randomized fun facts about maritime history and marine warfare that appear with each new shot.
Starting screen
This screen serves two roles simultaneously: it functions as a welcome page, ensuring players that everything is ready for a new game, and as a settings dashboard where you can change configurations, reset the game, add new players, and more.
If you scroll down, you'll find ship properties configurations, as the rules can vary slightly in different countries:
Fleet/Ship Placement
One of the most intricate and rewarding parts of building the Battleship game in Anaplan was designing the Fleet/Ship Placement module. The challenge was to create a system that allowed players to position their ships on a grid while ensuring that no two ships could overlap and that all placements adhered to the game's rules.
This was particularly challenging as I needed to ensure that ships were placed correctly on the grid without overlaps, while also allowing for flexibility in positioning. Tests and try-and-errors were infinite 😅. I used a combination of boolean/binary logic and list mappings to handle the various ship sizes and orientations, ensuring a smooth and error-free setup phase.
User-Friendly Interface: The placement process is designed to be intuitive. Players can click and drag across the grid to select the cells for their ship, and a visual confirmation appears when the placement is valid. Once confirmed, the ship is locked in place, and players can move on to the next one.
Compromises had to be made. I initially wanted the user to place all the ships without needing to select the ship type beforehand, but the backend calculations became too complex. So, I decided to change the approach to the current one that you see now.
The "Start the battle" action is locked until all ships are placed for both players and "Ready?" status gets green.
Gameplay
Once both players have set up their fleets, the game moves into a turn-based battle mode. I implemented DCA to make the game quick and responsive. Players can easily track hits and misses, and the game automatically updates the status of each ship as hits accumulate.
In this version of Battleship, the gameplay isn't strictly turn-based in a one-by-one fashion. Instead, the sequence of moves depends on whether the previous player hits or misses. If a player successfully hits an opponent's ship, they get to take another shot. If they miss, the turn passes to the other player. All shots are logged on the bottom section
Player 1 screen:
Player 2 screen:
All shots are logged at the bottom section "Moves" to calculate whose turn it is now, display the right status, and calculate which new fun fact to show.
"Random" Fun Facts
To add an educational twist, each new shot reveals a random fact about maritime history, marine warfare, or board games. This not only keeps the game entertaining but also informative, adding a layer of trivia that players can enjoy as they play.
It's done pretty simply: Since I already have a Shots register I can match each player-coordinate combination with a Facts repository (there are 200 facts in total = a 10x10 field x2 players)
I am really happy with how this game turned out. Of course, there were some compromises but on the other hand, I have discovered really awesome things. For example, the background of the main field is sooo satisfying like it is an ocean with waves 😌
This small project was a great way to explore the flexibility of Anaplan and test my skills,and I hope it inspires others to think outside the box with their own models!
Fair winds! 💨 ⛵
10 -
Hey Everyone,
I am interested to show case one of my recently build Anaplan App which is my personal Cricbuzz App.
I have been fond of cricket since childhood and I play a famous cricket game named 'Real Cricket 24' with my friends. This game can be found on Playstore.
This game gives you real life experience to play against your friends.
Since there are a lot of my friends who play this game, so we decided to play a tournament of cricket. But there we certain problems with that.
Problem Statement: There was a problem to define the fixtures of matches and defining the players and their respective teams. Then to decide the points table based on Points, Net Run Rate,etc.
Design Thinking: To effectively manage this problem, I decided to develop a Tracker that will calculate all the logics like calculating the Net Run Rate after every match, points table ,etc.
Technical Solution: To avoid this problem, I have provided the players to define fixtures as per there need. Below is the screenshot:
As soon as you click on "Add Player Name", it will create a new item in the list to add your player name and then select the team you want in the Game.
As soon as you choose your team, that grid will become uneditable.
Once your player is added, then you can define the match fixture by clicking on "Add Match Fixture" for with whom you want to play.
The right hand side Grid is for the admin who is responsible for maintaining this tournament. This is to be moved on a different page but for now I kept it on the same page.
Once a particular match is over, the admin will define the winner in the grid and once the winner is defined, the grid will become uneditable.
Also, if the admin selects the tournament ended boolean, the tournament will be closed and the player will not be able to add any fixtures and not add any players. This is achieved by defining a driver based line item based on tournament ended selection.
To end the tournament and start a new tournament, the admin have to run the "Reset Tournament" button that will erase all the existing data and will start from scratch again.
Now, Lastly comes the match results and summary page which defines the winner based on points and Net Run Rate.
The Matches each player plays gets incremented at backend and gets added for the Match Played columns.
Winner and Lost will be manually updated by the Admin on the Admin page.
The points are calculated based on the matches won and is sorted in descending order so as to maintain the points table in correct manner.
The Net Run Rate is calculated based on the formula defined by the ICC.
NRR = (Runs scored by the team in the match)/(Number of overs faced by the team in the match) - (Runs scored by the opposition in the match)/(Number of overs faced by the opposition team in the match).
This is the App that I have build it till now but I am planning to add on more features into it in coming weeks.
Anaplanners please suggest any feature I should add into it.
7