Flexi Kanban
  • Introduction
    • πŸ“ƒAbout Flexi Kanban
    • βš–οΈFlexi Kanban in Comparison with Other
    • πŸ“˜What are Kanbans?
    • πŸ“•User's Guide to the Kanban Boards
  • Standard Dashboard
    • πŸš€Getting started
      • How to Build a Simple Kanban Using Creation Wizard Abilities
      • Demo Example: Task Dashboard
      • Demo Example: Events Dashboard
      • Demo Example: Opportunities Dashboard
      • Demo Example: Gantt Dashboard
      • Demo Example: Cases Dashboard
    • πŸ“Basics
      • How to Create Standard Dashboard
      • How to Create Child Dashboard
      • How to Incorporate Child Dashboard into Lightning Page
      • How to Open Dashboard in builder (Edit)
      • How to Share Dashboard
      • How to Clone Dashboard
    • πŸ—οΈConfigure Dashboard
      • Working with Dashboard Layout
      • How to Configure Dashboard Basic Properties
      • How to Configure Dashboard Filters
      • How to Add Dashboard Statistics
      • How to Configure Variables
      • How to Configure Events
      • How to add Dashboard Buttons and Menus
    • πŸ™οΈConfigure Column
      • How to Π‘onfigure Column Properties
      • How to Set Column Groups
      • How to Set and Use Column Custom Attributes
      • How to configure Column Data Source
      • How to work with Related Objects
      • How to configure Column Header
      • How to configure Column Body
      • How to configure Column Footer
      • How to configure Column Container and Filters
    • 🎫Configure Card
      • How to configure Card Properties
      • How to configure Card Data Source and Conditions
      • How to configure Card Compact Layout
      • How to configure Card Layout
      • How to configure and use Card Custom Attributes
      • Configuring Card Movement and Column Junctions
      • Configuring Card Actions
    • πŸ“šGroups of Cards
      • How to configure Card Grouping
    • πŸ”§Tools
      • Using Merge Field Picker
      • Using Formula Editor
      • Configuring CSS styles
      • Configuring Rows, Cells, Menus and Buttons
      • Configuring Handlers
    • πŸ‘“Using Dashboard
      • How to use Kanban API actions
      • How to Incorporate Dashboard into Lightning Page
      • How to build the link to the Dashboard
      • How to Work with Variables
      • How to debug Dashboard
      • How to Work with Filters and Orders
    • ✨Howtos and Best Practices
      • How to configure communication between Dashboards
      • How to configure communication between Dashboard and Form
      • How to display different layouts for the same kanban card
      • How to design kanban for your needs
        • How to colorize cards
        • How to add a quick-filter column
      • What inactive column can be used for
      • Tips and Tricks
  • Composite Dashboard
    • πŸ—„οΈIntroduction
      • πŸ”§How to Create a Composite Dashboard
    • πŸͺ›Working with Composite Dashboard Layout
      • Configuring Parent Dashboard
      • Configuring Child Dashboard
    • πŸ–‡οΈConnections Between Dashboards
    • πŸ”¬Examples
      • !! Calendar Dashboard
    • πŸ₯‡Howtos and Best Practices
      • How to Pass Variables Between Parent and Child Dashboards
  • Components
    • πŸ“‹Forms
      • πŸ“‘Basics
        • Form Building Overview
        • Working with Form Settings
        • Working with Source Object fields
        • How to Preview the Form
        • How to configure the Form Sharing Rules
        • Understanding the Form Dependencies
        • Working with Conditional Styles
        • Working with Conditions
        • Search Over the Form
      • πŸͺ›Tools
        • Variables
        • Additional Fields
        • Context Object
        • Form Action
        • Event
      • Components
        • Add and Remove Form Components
        • Components Basic Properties
        • Components Validation Rules
        • Styling Form and Form Components
        • String Field
        • Text Area Field
        • Rich Text Field
        • Lookup Field
        • Date Field
        • Datetime Field
        • Time Field
        • Number Field
        • Currency Field
        • Multi-Select Field
        • Picklist Field
        • Option: Section
        • Option: Static Text
        • Option: Image
        • Option: Blank Space
        • Option: File
        • Option: Custom Button
        • Option: Custom URL
        • Option: Nested Form
        • Option: Lightning Component
        • List. Related Lists.
      • Using Form
        • How to incorporate Form into the Lightning Page
        • How to incorporate Form into Screen Flow
        • How to build the link to the Form
        • (unpublished, empty)How to incorporate Form into the Lightning Component
        • How to run Form Action from Lightning Component
      • Tricks, Hints and Best Practices
        • How to configure communication between Forms
        • How to pre-populate form fields
        • Deployment of Forms
        • What Are Parameters?
    • 🀾Actions/Action Groups
      • Basics
        • Working with Actions
        • Working with Action Groups
        • Working with Functions
        • Working with Context objects
        • Working with Conditions
      • Types
        • Validation Rule Action
        • Define Variable Action
        • Create Record Action
        • Update Records Action
        • Delete Records Action
        • Send Email Action
        • Callout Action
        • Execute Apex Action
        • KanBan API Action
      • Using Actions
        • !!unpublished empty!! How to execute Action/Group from the SF Process/Flow Builder
        • How to execute Action/Group through the REST api
        • !!unpublished empty!! How to execute Action/Group from the Einstain Bot
        • !!unpublished empty !! How to execute Action/Group from APEX
      • Best Practices
        • !! How to use Execute in background option
        • !! Deployment Actions/Action Groups
  • πŸ“–References
    • βš™οΈApplication Settings
    • ♾️Functions
      • SObject
      • Text
      • Logical
      • Numeric
      • Date and Time
      • JSON
      • System
      • Charts
    • πŸ—ƒοΈQuery Conditions
    • Apex Data Provider
    • πŸ“How to add a Kanban to Navigation Items Panel
    • πŸ‘₯Manage Licenses
    • πŸͺͺAssign Permission Sets
    • πŸ“¦Deployment
      • Deploying Using Standard Credentials
      • Deploying Using Connected App Authentication
      • How to configure the Salesforce Connected Application for Flexi Kanban deployment
  • Grant Login Access to Support
  • Subscription Plans
  • Support Agreement
  • Access License Agreement
  • Privacy Policy
Powered by GitBook
On this page
  • Create new dashboard
  • Configure dashboard
  • Configure column
  • Row 1 (for Quarter date range)
  • Row 2 (for Year date range)
  • Row 3 (for Month date range)
  • Row 4 (for Week date range)
  • Configure card
  • Configure Card Layout
  • Configure Card Compact Layout
  • Configure dashboard actions and action groups
  1. Standard Dashboard
  2. Getting started

Demo Example: Gantt Dashboard

Last updated 6 months ago

The Gantt Dashboard represents events as classic Gantt chart. It allows dashboard user to view a project or events schedule on the timeline, and manage them. Here is how such dashboard can look like:

To make this dashboard administrator should do actions listed below:

Create new dashboard

  • Give it a name and description.

  • Select default "White" theme.

  • Save dashboard and go to Kanban builder.

Configure dashboard

  1. from = FORMULA[STARTOFWEEK({$System.Date})]

  2. to = FORMULA[ADDDAYS(STARTOFWEEK({$System.Date}),7,false)]

  3. range = week

  4. columnName = FORMULA[FORMAT(STARTOFWEEK({$System.Date}),'d MMM yyyy') + ' - ' + FORMAT(ADDDAYS(STARTOFWEEK({$System.Date}),6,false),'d MMM yyyy')]

  5. dayOfWeek = FORMULA[{$System.Date} - STARTOFWEEK({$System.Date})]

Go to Statistics Configuration.

  • Add the cell which will overlay unnecessary views selector. Set these properties to it:

    • Type = Text

    • Value = Gantt Dashboard

  • Set CSS Styles to this cell:

font-weight: bold;
background-color: #F7F7F7;
font-size: 1.5em;
position: absolute;
top: 0;
bottom: 0;
left: 0;
z-index: 1;
padding: 0 1.5em 0 1.5em;
display: flex;
align-items: center;
  • Add another cell with these properties:

    • Type = Text

  • Set Value to the following formula:

FORMULA[
  IF(
    {$Variables.range} = 'week',
    '',
    IF(
      {$Variables.range} = 'month',
      FORMAT({$Variables.from},'MMMM yyyy'),
      IF(
        {$Variables.range} = 'quarter',
        FORMAT(ADDDAYS({$Variables.from},1,false), 'yyyy') + ', Quarter ' + CASE(FORMAT(ADDDAYS({$Variables.to}, -1, false), 'M'),'3','I','6','II','9','III','IV'),
        FORMAT({$Variables.from}, 'yyyy')
      )
    )
  )
]

This formula sets the text at the middle of Kanban header to represent currently selected date range.

Configure column

  • Add 1 column to the dashboard.

  • Name it {$Variables.columnName}

  • Leave column width default ("auto")

  • Leave column "Is Active" checkbox default (checked)

  • Set these properties to the column:

    • Data Source Type = SObject

    • Data Source = Event

    • Order = Start Date Time, asc

    • Page size = 20

  • Set the following conditions to the column (set type to "Formula" to all):

  1. End Date Time >= FORMULA[FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  2. Start Date Time < FORMULA[FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  3. End Date Time < FORMULA[FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  4. Start Date Time >= FORMULA[FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  5. Start Date Time < FORMULA[FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  6. End Date Time >= FORMULA[FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')]

  • Set this logic to column conditions:

({1} AND {3}) OR ({2} AND {4}) OR ({5} AND {6})
display: none;
padding-top: 2.5rem;
background-color: #fff;
padding-right: 0;
padding-left: 0;
  • Add a background-image property to column body CSS styles. Set its value to this code (don't think about formatting - the code below will lose it after being inserted into CSS Rule Value input field):

repeating-linear-gradient(
  90deg,
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (6 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  rgba(150,150,255,0.1) calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (6 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  rgba(150,150,255,0.1) calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (8 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (8 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (13 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  )
),

repeating-linear-gradient(
  90deg,
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (7 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
    -
    1px
  ),
  RGBA(187,187,187,0.56) calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (7 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
    -
    1px
  ),
  RGBA(187,187,187,0.56) calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (7 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (7 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
  ),
  transparent calc(
    (100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)])
    *
    (14 - FORMULA[IF({$Variables.range} = 'week', 0, {$Variables.dayOfWeek})])
    -
    1px
  )
)

FORMULA[
  IF(
    {$Variables.range} = 'year',
    '',
    ', repeating-linear-gradient(
      90deg,
      #fff 0px,
      #fff calc(
        100%
        /
        ' + TEXT(DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)) + '
        -
        1px
      ),
      #eee calc(
        100%
        /
        ' + TEXT(DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)) + '
        -
        1px
      ),
      #eee calc(
        100%
        /
        ' + TEXT(DAYSBETWEEN(DATETIMEVALUE({$Variables.to}), DATETIMEVALUE({$Variables.from}), false)) + '
      )
    )'
  )
]

This big formula is used to make column background depending on date range selected:

  • First background gradient draws weekends

  • Second gradient draws borders between weeks

  • Third gradient draws days borders (except when date range = year, because only weeks are drawn due too small days widths)

padding: 0.4rem 0 0.25rem 0;
top: 0px;
background: transparent;
width: 100%;
position: absolute;
border-bottom: 2px solid #ddd;
  • Set the following Rows with Cells on them (all cells should have Type = Text):

Row 1 (for Quarter date range)

#
Cell Value
Cell CSS styles

1

2

3

Row 2 (for Year date range)

#
Cell Value
Cell Title
Cell CSS Styles

1

Jan

January

2

Feb

February

3

Mar

March

4

Apr

April

5

May

May

6

Jun

June

7

Jul

July

8

Aug

August

9

Sep

September

10

Oct

October

11

Nov

November

12

Dec

December

Row 3 (for Month date range)

  • Set names from 1 to 31 to them

#
Cell Value
Cell CSS Styles

1...28

From 1 to 28

29

29

30

30

31

31

Days from 1 to 28 are shown for each month. Days from 29 to 31 are shown depending on specific month length.

Row 4 (for Week date range)

  • Add 7 cells

  • Set CSS Styles to all of them to the following:

text-align: center;
width: calc(100% / 7);
display: FORMULA[IF({$Variables.range} = 'week',block,none)];
  • Set their Values to these:

#
Cell Value

1

2

3

4

5

6

7

Configure card

  • Set Data Source Type to "Event".

Configure Card Layout

Property
Value

Name

Event form

Data Source Object

Event

Multi Page Form?

false

Show navigation panel

true

Buttons configuration

Check "Save" button for "Edit" mode only. Uncheck other.

Header configuration

{$Event.Subject} (for all modes)

  • Add these elements to the form:

  1. Type = Section Name = section Title = '' (leave empty) Properties: Columns = 2 Show on Edit page = true Show on View page = true Scrollable = false

  2. Type = Button Name = button Title = Close Properties: Show on Edit page = true Show on View page = true

The following elements all should be added into section configured above. All these elements should be Data Source Fields:

  1. Data Source Field = Subject Name = Subject Title = Subject

  2. Data Source Field = Type Name = Type Title = Type

  3. Data Source Field = EventSubtype Name = EventSubtype Title = Subtype

  4. Data Source Field = StartDateTime Name = StartDateTime Title = Start Date Time

  5. Data Source Field = EndDateTime Name = EndDateTime Title = End Date Time

  6. Data Source Field = Description Name = Description Title = Description

Set properties of all Data Source Fields above to:

  • Required = false

  • Read Only = false

  • Show on Edit page = true

  • Show on View page = true

  • Instructions = (not set)

  • Conditional Styles = (not set)

  • Events = (not set)

  • View Type (for picklists) = Single list

  • Hide 'None' (for picklists) = false

  • Option groups (for picklists) = (not set)

  1. Action name and Title = Close Panel Type = Form API Form Action Type = Fire Event Name = e.c.:ApplicationEvent Parameters = Name: data; Value Type: Object; Value: {"componentType":"c:KanBanPanelComponent","method":"hideCard"} Has Conditions = false

  2. Action name and Title = Refresh Column Type = Form API Form Action Type = Fire Event Name = e.c.:ApplicationEvent Parameters = Name: data; Value Type: Object; Value: {"componentType":"c:KanBanColumnComponent","method":"refresh","params":{"kanbans":"{$FormParameters.kanban}"}} Has Conditions = true Conditions = 1: Form.StartDateTime not equal to {$Event.StartDateTime}; 2: Form.EndDateTime not equal to {$Event.EndDateTime} Conditions logic = {1} OR {2}

  • Add the following events to the form:

#
Element what event is added to
Event properties
Event Handler

1

Form

Type: onAfterSave Enabled: true

"Refresh Column" action without parameters

2

"Close" button

Type: onClick Enabled: true

"Close Panel" action without parameters

  • Set these parameters for the Card Layout body:

    • id = {Event.Id}

    • mode = edit

  • Set other Card Layout properties:

    • Position = Modal

    • Hide Header = false

    • Hide Footer = true

  • Go to "Header Configuration" tab and set Text in Title Settings to "{event.Subject}".

The Layout described above will show the form with basic Event properties that can be edited.

Configure Card Compact Layout

  • Set the following CSS Styles to the whole Card:

color: #ffffff;
border: 0px none;
padding: 0;
box-shadow: 1px 1px 4px rgba(0,0,0,0.3) inset;
  • Add a background-color property to Card CSS Styles and set its value to the following formula:

FORMULA[
  IF(
    CONTAINS(LOWER({Event.Subject}), 'meeting'),
    #75c769,
    IF(
      OR(
        CONTAINS(LOWER({Event.Subject}), 'send'),
        CONTAINS(LOWER({Event.Subject}), 'letter'),
        CONTAINS(LOWER({Event.Subject}), 'email')
      ),
      #DE5449,
      IF(
        CONTAINS(LOWER({Event.Subject}), 'call'),
        #71afd0,
        #d6b37a
      )
    )
  )
]

This formula sets the Card background color depending on keywords the subject of Event can contain:

  • Event with "meeting" word in subject is light green

  • Event with "send", "letter" or "email" word is red

  • Event with "call" word is blue

  • Other events are yellow brown

  • Add a border-radius CSS property and set its value to the following formula:

FORMULA[
    IF(
        {Event.StartDateTime} &lt; DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
        '0 ',
        '5px '
    ) + 
    IF(
        {Event.EndDateTime} &gt; DATETIMEVALUE(FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
        '0 0 ',
        '5px 5px '
    ) + 
    IF(
        {Event.StartDateTime} &lt; DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
        '0',
        '5px'
    )
]

This formula sets the border radius of Cards (that are Gantt Chart Lines) corners to represent if the current Gantt line is started or ended in the shown date range or not. If the start (or end) date is out of range, both left (or right) corners will not be rounded, otherwise they will be rounded.

  • Add a left CSS property and set its value to the following formula:

FORMULA[
    SCALE(
        IF(
            {Event.StartDateTime} &lt; DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
            0,
            ({Event.StartDateTime} - DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}'))) * 100 / (
              DAYSBETWEEN(
                  DATETIMEVALUE(FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                  DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                  false
              )
            )
        ),
        8
    )
]%

This formula calculates position of the Card left side that should represent the Start Date of Event. The SCALE(***,8) function truncates the result to 8 digits in order to avoid long decimal fractions.

  • Add a width CSS property and set its value to the following formula:

FORMULA[
  SCALE(
    (
      (
        IF(
          {Event.EndDateTime} &gt; DATETIMEVALUE(FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}'))
          ,
          100
          ,
          (
            ({Event.EndDateTime} - DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}'))) * 100 / (
              DAYSBETWEEN(
                DATETIMEVALUE(FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                false
              )
            )
          )
        )
      )
      -
      (
        IF(
          {Event.StartDateTime} &lt; DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}'))
          ,
          0
          ,
          (
            ({Event.StartDateTime} - DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}'))) * 100 / (
              DAYSBETWEEN(
                DATETIMEVALUE(FORMAT({$Variables.to}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                DATETIMEVALUE(FORMAT({$Variables.from}, 'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),
                false
              )
            )
          )
        )
      )
    ),
    8
  )
]%

This formula calculates the width of the Card. Position of Card right side after applying left and width CSS properties will represent the End Date of Event. Width of the card, thus, represents its duration.

  • Change the Value of default existing Card Component to {Event.Subject}.

  • Set its Title to the same value.

  • Set its CSS Styles to these:

width: calc(100% - 24px);
padding: 0.25rem 0.5rem 0 0.5rem;
font-size: 1.1em;
  • Set its Value to the following formula:

utility:FORMULA[
  IF(
    CONTAINS(LOWER({Event.Subject}), 'meeting'),
    'groups',
    IF(
      OR(
        CONTAINS(LOWER({Event.Subject}), 'send'),
        CONTAINS(LOWER({Event.Subject}), 'letter'),
        CONTAINS(LOWER({Event.Subject}), 'email')
      ),
      'email',
      IF(
        CONTAINS(LOWER({Event.Subject}), 'call'),
        'call',
        'note'
      )
    )
  )
]

This formula sets the icon depending on keywords the subject of Event can contain:

  • Event with "meeting" word in subject has utility:groups icon

  • Event with "send", "letter" or "email" word has utility:email icon

  • Event with "call" word has utility:call icon

  • Other events have utility:note icon

  • Set its Title to {Event.Subject}

  • Set its CSS Styles to these:

width: 16px;
padding: 0.25rem 0 0 0.5rem;
box-sizing: content-box;
  • Set its Value to this formula:

β—„ FORMULA[FORMAT({Event.StartDateTime},'dd MMM yyyy, HH:mm')] ─  FORMULA[FORMAT({Event.EndDateTime},'dd MMM yyyy, HH:mm')] β–Ί
  • Set its Title to this formula:

Start date: FORMULA[FORMAT({Event.StartDateTime},'dd MMM yyyy, HH:mm')]; end date: FORMULA[FORMAT({Event.EndDateTime},'dd MMM yyyy, HH:mm')]
  • Set its Handler to this one:

    • Type = SObject

    • Value = {$Object.Id}

    • Parameters: id = {Event.Id}

  • Set its CSS Styles to these:

font-size: 0.9em;
padding: 0 0.5rem 0.25rem 0.5rem;

Configure dashboard actions and action groups

"Get Previous Dates" action group

  • Create Action Group named "Get Previous Dates" and add following actions to it:

Index
Name
Properties

1

Get Prev Quarter Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

2

Get Prev Year Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

3

Get Prev Month Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

4

Get Prev Week Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

5

Define Column Name

Type = Define Variable Execute = Always Variable Type = Text Variable Name = columnName Variable Value =

6

Define Day of Week

Type = Define Variable Execute = Always Variable Type = Text Variable Name = dayOfWeek Variable Value =

"Get Next Dates" action group

  • Create Action Group named "Get Next Dates" and add following actions to it:

Index
Name
Properties

1

Get Next Week Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

2

Get Next Quarter Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

3

Get Next Year Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

4

Get Next Month Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

5

Define Column Name

(this is the same action that was already created for the "Get Previous Dates" action group)

6

Define Day of Week

(this is the same action that was already created for the "Get Previous Dates" action group)

"Get Date Ranges" action group

  • Create Action Group named "Get Date Ranges" and add following actions to it:

Index
Name
Properties

1

Get Week Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

2

Get Year Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

3

Get Month Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

4

Get Quarter Dates

Type = Define Variable Execute = With Conditions Conditions type = Formula Formula Expression =

Variable Type = JSON Variables JSON =

5

Define Column Name

(this is the same action that was already created for the "Get Previous Dates" action group)

6

Define Day of Week

(this is the same action that was already created for the "Get Previous Dates" action group)

Configure dashboard buttons and menus

  1. Button Basic configuration: Type = Icon Title = Previous {$Variables.range} Icon = utility:left Handler configuration: Type = Action Group Value = Get Previous Dates Parameters = variables = {"button":"prev"} Success Handler = Kanban API -> Refresh Kanbans

  2. Menu Basic configuration: Type = Button Label = FORMULA[REPLACE({$Variables.range},SUBSTR(,0,1),UPPER(SUBSTR({$Variables.range},0,1)))] Title = {$Variables.range} Position = Right and Top

  3. Button Basic configuration: Type = Icon Title = Next {$Variables.range} Icon = utility:right Handler configuration: Type = Action Group Value = Get Next Dates Parameters = variables = {"button":"next"} Success Handler = Kanban API -> Refresh Kanbans

  • Add Menu Buttons to the Menu created above and set these properties for them:

  1. Basic Configuration: Type = Standard Label = Quarter Title = Quarter Conditions = FORMULA[{$Variables.range != 'quarter'] Handler configuration: Type = Action Group Value = Get Date Ranges Parameters = variables = {"range":"quarter"} Success Handler = Kanban API -> Refresh Kanbans

  2. Basic Configuration: Type = Standard Label = Month Title = Month Conditions = FORMULA[{$Variables.range != 'month'] Handler configuration: Type = Action Group Value = Get Date Ranges Parameters = variables = {"range":"month"} Success Handler = Kanban API -> Refresh Kanbans

  3. Basic Configuration: Type = Standard Label = Year Title = Year Conditions = FORMULA[{$Variables.range != 'year'] Handler configuration: Type = Action Group Value = Get Date Ranges Parameters = variables = {"range":"year"} Success Handler = Kanban API -> Refresh Kanbans

  4. Basic Configuration: Type = Standard Label = Week Title = Week Conditions = FORMULA[{$Variables.range != 'week'] Handler configuration: Type = Action Group Value = Get Date Ranges Parameters = variables = {"range":"week"} Success Handler = Kanban API -> Refresh Kanbans

Go to and create new standard dashboard.

Go to tab. Add these variables:

Set this to column header in :

Set these CSS styles to column body in :

Set these CSS styles to column footer on :

We're moving column footer to the top in order to have a header where we can use

Add 31

Set these to them:

This card does not require configuring in the one existing column. Just leave "Visible in this column" checkbox checked.

to dashboard.

to "Form".

Click "+" button to add new Form. Create with these properties:

Add these :

Add of "Icon" type to the left of the previous.

Add of "Text" type below the two previous.

There are several action groups needed to be created. These groups are listed below with actions they contain. Order of actions in groups is determined by actions indexes: the action with lowest index will be executed first. Refer to proper articles to know how to work with and .

to the dashboard:

πŸš€
FORMULA[FORMAT({$Variables.from},'MMMM')]
box-shadow: 0 -0.4rem 0 rgba(150,150,255,0.25), 0 0.25rem 0 rgba(150,150,255,0.25);
background-color: rgba(150,150,255,0.25);
display: FORMULA[IF({$Variables.range} = 'quarter',block,none)];
text-align: center;
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), false)] *Β FORMULA[IF( Β  Β  Β  Β  FORMAT(ADDDAYS({$Variables.from},15,false),'M') = '4', Β  Β  Β  Β  30, Β  Β  Β  Β  31 Β  Β  ) ] );
FORMULA[FORMAT(ADDDAYS({$Variables.from},45,false),'MMMM')]
box-shadow: 0 -0.4rem 0 rgba(150,255,150,0.25), 0 0.25rem 0 rgba(150,255,150,0.25);
background-color: rgba(150, 255, 150, 0.25);
display: FORMULA[IF({$Variables.range} = 'quarter',block,none)];
text-align: center;
width: calc(100% / Β FORMULA[ Β  Β  DAYSBETWEEN( Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  false Β  Β  ) ] Β * Β FORMULA[ Β  Β  CASE( Β  Β  Β  Β  FORMAT(ADDDAYS({$Variables.from},45,false),'M'), Β  Β  Β  Β  '5',31, Β  Β  Β  Β  '8',31, Β  Β  Β  Β  '11',30, Β  Β  Β  Β  IF( Β  Β  Β  Β  Β  Β  DAYSBETWEEN( Β  Β  Β  Β  Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  Β  Β  Β  Β  false Β  Β  Β  Β  Β  Β  ) = 91, Β  Β  Β  Β  Β  Β  29, Β  Β  Β  Β  Β  Β  28 Β  Β  Β  Β  ) Β  Β  ) ] );
FORMULA[FORMAT(ADDDAYS({$Variables.from},75,false),'MMMM')]
box-shadow: 0 -0.4rem 0 rgba(255, 150, 150, 0.25), 0 0.25rem 0 rgba(255, 150, 150, 0.25);
background-color: rgba(255, 150, 150, 0.25);
display: FORMULA[IF({$Variables.range} = 'quarter',block,none)];
text-align: center;
width: calc(100% / Β FORMULA[ Β  Β  DAYSBETWEEN( Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), Β  Β  Β  Β  false Β  Β  ) ] Β * Β FORMULA[ Β  Β  CASE( Β  Β  Β  Β  FORMAT(ADDDAYS({$Variables.from},75,false),'M'), Β  Β  Β  Β  '3',31, Β  Β  Β  Β  '12',31, Β  Β  Β  Β  30 Β  Β  ) ] );
box-shadow: 0 -0.4rem 0 rgba(150,150,255,0.25), 0 0.25rem 0 rgba(150,150,255,0.25);
background-color: rgba(150,150,255,0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
text-align: center;
box-shadow: 0 -0.4rem 0 rgba(150,255,150,0.25), 0 0.25rem 0 rgba(150,255,150,0.25);
background-color: rgba(150, 255, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * FORMULA[ Β  Β  IF( Β  Β  Β  Β  DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false) = 366, Β  Β  Β  Β  29, Β  Β  Β  Β  28) ]);
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
text-align: center;
box-shadow: 0 -0.4rem 0 rgba(255, 150, 150, 0.25), 0 0.25rem 0 rgba(255, 150, 150, 0.25);
background-color: rgba(255, 150, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,150,255,0.25), 0 0.25rem 0 rgba(150,150,255,0.25);
background-color: rgba(150,150,255,0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 30);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,255,150,0.25), 0 0.25rem 0 rgba(150,255,150,0.25);
background-color: rgba(150, 255, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(255, 150, 150, 0.25), 0 0.25rem 0 rgba(255, 150, 150, 0.25);
background-color: rgba(255, 150, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 30);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,150,255,0.25), 0 0.25rem 0 rgba(150,150,255,0.25);
background-color: rgba(150,150,255,0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,255,150,0.25), 0 0.25rem 0 rgba(150,255,150,0.25);
background-color: rgba(150, 255, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(255, 150, 150, 0.25), 0 0.25rem 0 rgba(255, 150, 150, 0.25);
background-color: rgba(255, 150, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 30);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,150,255,0.25), 0 0.25rem 0 rgba(150,150,255,0.25);
background-color: rgba(150,150,255,0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(150,255,150,0.25), 0 0.25rem 0 rgba(150,255,150,0.25);
background-color: rgba(150, 255, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 30);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
box-shadow: 0 -0.4rem 0 rgba(255, 150, 150, 0.25), 0 0.25rem 0 rgba(255, 150, 150, 0.25);
background-color: rgba(255, 150, 150, 0.25);
width: calc(100% / FORMULA[DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false)] * 31);
text-align: center;
display: FORMULA[IF({$Variables.range} = 'year',block,none)];
display: FORMULA[IF({$Variables.range} = 'month',block,none)];
text-align: center;
width: calc(100% / FORMULA[CASE(DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false),28,'28',29,'29',30,'30','31')]);
width: calc(100% / FORMULA[CASE(DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false),28,'28',29,'29',30,'30','31')]);
text-align: center;
display: FORMULA[IF(AND({$Variables.range} = 'month',DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false) > 28),block,none)];
width: calc(100% / FORMULA[CASE(DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false),28,'28',29,'29',30,'30','31')]);
text-align: center;
display: FORMULA[IF(AND({$Variables.range} = 'month',DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false) > 29),block,none)];
width: calc(100% / FORMULA[CASE(DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false),28,'28',29,'29',30,'30','31')]);
text-align: center;
display: FORMULA[IF(AND({$Variables.range} = 'month',DAYSBETWEEN(DATETIMEVALUE(FORMAT({$Variables.to},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')), DATETIMEVALUE(FORMAT({$Variables.from},'yyyy-MM-dd{QUOTE}T00:00:00Z{QUOTE}')),false) > 30),block,none)];
Sun, FORMULA[FORMAT({$Variables.from}, 'dd MMM yyyy')]
Mon, FORMULA[FORMAT(ADDDAYS({$Variables.from}, 1, false), 'dd MMM yyyy')]
Tue, FORMULA[FORMAT(ADDDAYS({$Variables.from}, 2, false), 'dd MMM yyyy')]
Wed, FORMULA[FORMAT(ADDDAYS({$Variables.from}, 3, false), 'dd MMM yyyy')]
Thu, FORMULA[FORMAT(ADDDAYS({$Variables.from}, 4, false), 'dd MMM yyyy')]
Fri, FORMULA[FORMAT(ADDDAYS({$Variables.from}, 5, false), 'dd MMM yyyy')]
Sat, FORMULA[FORMAT({$Variables.to}, 'dd MMM yyyy')]
AND({$Variables.button} = 'prev', {$Variables.range} = 'quarter')
{
  "from":"FORMULA[ADDMONTHS({$Variables.from}, -3)]",
  "to":"FORMULA[ADDMONTHS({$Variables.to}, -3)]"
}
AND({$Variables.button} = 'prev', {$Variables.range} = 'year')
{
  "from":"FORMULA[ADDYEARS({$Variables.from}, -1)]",
  "to":"FORMULA[ADDYEARS({$Variables.to}, -1)]"
}
AND({$Variables.range} = 'month', {$Variables.button} = 'prev')
{
  "from":"FORMULA[ADDMONTHS({$Variables.from}, -1)]",
  "to":"FORMULA[ADDMONTHS({$Variables.to}, -1)]"
}
AND({$Variables.range} = 'week', {$Variables.button} = 'prev')
{
  "from":"FORMULA[ADDDAYS({$Variables.from}, -7, false)]",
  "to":"FORMULA[ADDDAYS({$Variables.to}, -7, false)]"
}
FORMULA[FORMAT({$Variables.from}, 'd MMM yyyy') + ' - ' + FORMATGMT({$Variables.to}-1, 'd MMM yyyy')]
FORMULA[INTNUMBER({$Variables.from} - STARTOFWEEK({$Variables.from}))]
AND({$Variables.range} = 'week', {$Variables.button} = 'next')
{
  "from":"FORMULA[ADDDAYS({$Variables.from}, 7, false)]",
  "to":"FORMULA[ADDDAYS({$Variables.to}, 7, false)]"
}
AND({$Variables.range} = 'quarter', {$Variables.button} = 'next')
{
  "from":"FORMULA[ADDMONTHS({$Variables.from}, 3)]",
  "to":"FORMULA[ADDMONTHS({$Variables.to}, 3)]"
}
AND({$Variables.range} = 'year', {$Variables.button} = 'next')
{
  "from":"FORMULA[ADDYEARS({$Variables.from},1)]",
  "to":"FORMULA[ADDYEARS({$Variables.to},1)]"
}
AND({$Variables.range} = 'month', {$Variables.button} = 'next')
{
  "from":"FORMULA[ADDMONTHS({$Variables.from}, 1)]",
  "to":"FORMULA[ADDMONTHS({$Variables.to}, 1)]"
}
{$Variables.range} = 'week'
{
  "from":"FORMULA[STARTOFWEEK({$System.Date})]",
  "to":"FORMULA[ADDDAYS(STARTOFWEEK({$System.Date}), 7, false)]"
}
{$Variables.range} = 'year'
{
  "from":"FORMULA[DATE(YEAR({$System.Date}), 1, 1)]",
  "to":"FORMULA[ADDYEARS(DATE(YEAR({$System.Date}), 1, 1), 1)]"
}
{$Variables.range} = 'month'
{
  "from":"FORMULA[DATE(YEAR({$System.Date}), MONTH({$System.Date}), 1)]",
  "to":"FORMULA[ADDMONTHS(DATE(YEAR({$System.Date}), MONTH({$System.Date}), 1), 1)]"
}
{$Variables.range} = 'quarter'
{
  "from":"FORMULA[DATE(YEAR({$System.Date}), IF(MONTH({$System.Date}) >=10, 10, IF(MONTH({$System.Date}) <=3, 1, IF(MONTH({$System.Date}) <=6, 4, 7))), 1)]",
  "to":"FORMULA[ADDMONTHS(DATE(YEAR({$System.Date}), IF(MONTH({$System.Date}) >=10, 10, IF(MONTH({$System.Date}) <=3, 1, IF(MONTH({$System.Date}) <=6, 4, 7))), 1), 3)]"
}
dashboard creation wizard
Variables Configuration
CSS style
Header Configuration tab
Body configuration tab
Footer Configuration tab
Rows
cells.
CSS Styles
Junction Settings
Add one card
Set Card Layout
new form
Form Actions
actions
action groups
Add buttons and menu
one more Card Component
one more Card Component