Skip to content

Lesson 1 of 119 min video10 question quiz

Build a Focus and Talent report with Visual SQL

A nineteen-minute lesson that builds one report in Atlassian Analytics from an empty chart: the open role rate of every at-risk focus area, from Focus and Talent data, without writing SQL. On the way it explains the Data Lake, who a connection lets see what, aggregation, joins, formulas, both kinds of filter and which chart fits which question.

Level
Beginner
Products
Atlassian Analytics, Focus, Talent
Format
On demand, free, no sign-up

Watch the lesson Take the quiz

This is the lesson written out as reference. Each section below is one chapter of the video, in the same order, with the moment to watch and a frame from it. The video shows each step being done; this page is what to come back to when you are doing it yourself.

Where the data comes from

Watch this from 1:10

The Data Lake's eight apps, with Focus and Talent marked as the lesson's example and the mapping table that joins them

Every chart in Atlassian Analytics reads from a data source. For Atlassian apps, that source is the Atlassian Data Lake: one central database of your organization's app data, already modeled into tables and columns. There are no exports and no pipelines to build. You connect to it and you query it. If your data team wants the same model in its own platform, data shares let them extract it.

The Data Lake covers eight apps: Jira, Jira Service Management, Jira Product Discovery, Confluence, Focus, Talent, Goals and Atlassian Projects. Because they share one model, one chart can blend them:

  • service requests beside Jira work
  • goals beside the projects behind them
  • Focus beside Talent, which is this lesson's example

In this example, Focus brings the focus areas, Talent brings the positions, and a mapping table records which positions are allocated to which focus area.

Watch out. The Data Lake is not real time. Changes arrive with its refresh: on the demo site, Talent changes appeared after the overnight refresh.

What a connection can see

Watch this from 2:09

The five steps of a new Data Lake connection, and the all data and limited data scopes side by side

A connection decides what Analytics can see. Only an organization admin can create or edit one. To create a connection:

  1. Pick the apps and sites it reads, and include or exclude specific spaces.
  2. Pick the scope of data.
  3. Acknowledge the permission difference, explained in the next section.
  4. Name the connection.
  5. Add the people who can use it.
ScopeWhat it includes
All dataDetailed content such as names and descriptions, user names and email addresses, and the dashboard templates
Limited dataDescriptive fields and user IDs only. No dashboard templates

An organization can have up to ten connections, so sensitive data can sit in a connection of its own with a smaller audience. Access is then set per connection, at two levels:

ActionCan queryCan manage
Create chartsYesYes
View the schema and the query logYesYes
Grant or revoke accessNoYes
Sync and edit the schemaNoYes
Disconnect the sourceNoYes

Watch out. A connection that selects specific spaces does not pick up new spaces on its own. They stay out until someone edits the connection.

Permissions do not carry over

Watch this from 3:08

Permissions don't carry over: no row-level security, access means the whole connection, and email visibility settings don't apply

Permissions set in Jira, Confluence or Focus do not carry over to Analytics. In practice:

  • There is no row-level security. A permission that hides a work item in Jira does not hide its row in Analytics.
  • Access means the whole connection. Anyone who can query a connection, or view a dashboard built on it, sees everything that connection includes.
  • Email visibility settings do not apply.

The connection is the permission boundary. Scope each connection on purpose, and share dashboards the same way: a dashboard's audience sees the whole connection underneath it.

Inside the chart editor

Watch this from 3:56

The chart editor in visual mode: the query on the left with the aggregation menu open, the chart preview on the right, the result table below

To open the editor, start on any dashboard, add a chart, and pick your Atlassian Data Lake connection. The editor has three parts:

WhereWhat it is
LeftYour query: the columns, filters, sort, join path and row limit
RightA live preview of the chart
BottomThe result table, with the Visual SQL steps above it

Visual mode writes the SQL for you. Switch to SQL mode whenever you would rather write it yourself.

Add column opens the schema, where tables are grouped by app. Focus tables and Talent tables sit in the same schema, so one chart can use both. Hover any table to preview its rows before you pick a column. Each column you add shows the table it comes from. For this report, the first columns are focus area name and focus area health.

Group the labels, aggregate the numbers

Watch this from 5:00

Five sample rows grouped by focus area: count of unique gives three and one, count of all gives four and one

The dropdown next to each column is the most important choice in visual mode. It decides whether the column becomes a label or a number:

ChoiceWhat it returns
GroupOne row for every unique value
Count of uniqueThe number of distinct values inside each group
Count of allThe number of rows inside each group, duplicates included
Minimum, maximumThe lowest and highest value inside each group
UnaggregatedGrouping off: the raw rows

The two counts differ when a join repeats a row. The video's sample has five rows, two focus areas, and one position that appears twice:

Focus areaPosition
Quality ManagementP-101
Quality ManagementP-102
Quality ManagementP-102, the repeat
Quality ManagementP-103
Invest in mobileP-201

Group on focus area and you get two rows. Count of unique counts each position once: three and one. Count of all counts every row, so the repeat counts twice: four and one.

Rule of thumb. Group the columns you want as labels. Aggregate the columns you want as numbers. For positions behind each focus area: group name and health, and use count of unique on position ID.

Query filters

Watch this from 6:08

The four families of filter operators: exact match, pattern match, present and relative match

A query filter runs in the Data Lake, before anything is grouped or counted. Use it to shrink the data early. To add one:

  1. Pick the column, here lifecycle status.
  2. Pick an operator, here is one of.
  3. Pick the values. Analytics offers the ones it finds in your data; this report keeps active.

The operators come in four families:

FamilyOperatorsUse it for
Exact matchis one of, is not one of, equals, not equalsWhole values
Pattern matchlike, not like, matches regex, like case-insensitiveFinding text
Presentis null, is not nullEmpty values
Relative matchgreater than and the other comparisonsNumbers

A query filter cannot see anything you calculate later. For that, see filter steps.

The join path and the generated query

Watch this from 6:53

The join path: focus_area joined to talent_position through the mapping table, two inner joins written for you

Under the columns you set the sort order, see the join path, and cap the row limit. Run the query and you get the focus areas, each with its positions counted.

Two things are worth opening on any chart, including one you inherit:

  • Generated query shows the SQL visual mode wrote. It is the quickest way to check exactly what a chart does.
  • Join path shows how the tables were connected. Nobody told Analytics how Focus and Talent connect: visual mode found the route on its own, from focus area, through the Talent position mapping table, to position.
TableFromJoined on
focus_areaFocusfocus_area_id
focus_area_talent_position_mappingThe bridge: one row per position allocated to a focus areafocus_area_id and position_id
talent_positionTalentposition_id

Visual mode writes both joins for you; you only pick columns. When there is more than one way to connect two tables, the join path is where you pick the right one.

Every chart is a pipeline

Watch this from 7:55

A chart as a pipeline: query one and its copy, then join, formula column, apply formula, filter, sort rows and the chart

Everything below the query is a Visual SQL step. A chart runs in this order:

  1. The queries run first, against the Data Lake.
  2. Each step runs in order, on the results.
  3. The last result becomes the chart.

Each step appears in the pipeline on the left, so a chart is a recipe you can edit or remove one step at a time. Change one step and everything after it updates. This lesson's finished pipeline is: query one, a copy of query one, join, formula column, apply formula, filter, sort rows, then the chart.

Joining two queries

Watch this from 8:27

Five join types on two small results: inner keeps two rows, left three, outer four, union six and cross nine

Total positions is only half the story; the report also needs the open ones. To add them:

  1. Choose Add query. Start fresh, or copy a query you already have.
  2. Copy query one, and add one filter: position status is unfilled.
  3. Visual SQL adds a join step to merge the two results. Columns from the second query get :1 on the end of their names, so you can tell them apart.
  4. Open the join step. It matches on the first column, here focus area name, and the join type decides which rows survive.

With query one returning A, B and C, and query two returning A, B and D:

JoinWhat it keepsRows
InnerOnly values found in both: A, B2
LeftEvery row from the first query: A, B, and C with an empty value3
OuterEvery value from both: A, B, C and D, with empty values where there is no match4
UnionBoth results stacked instead of matched6
CrossEvery row paired with every row9

This report uses left: the first query leads, so every focus area stays on the list, even one with no open roles at all.

Formulas, three ways

Watch this from 10:14

The four families of guided formulas: arithmetic, comparisons, across rows, and text and dates

Visual SQL calculates in three ways:

WayWhat it doesWhere
Guided formula columnAdds a new column from a templateFormula column, then pick a formula
Custom formula columnAdds a new column from an expression you writeFormula column, then custom
Apply formulaChanges an existing column in placeHover the column, then the function icon

The open role rate takes two of them:

  1. A guided column ratio: open positions, the column ending :1, as the numerator, and total positions as the denominator.
  2. Apply formula on the new column, to round it to three decimal places.

The guided formulas fall into four families:

FamilyFormulas
Arithmeticadd, subtract, multiply, divide, round
Comparisonscolumn ratio, ratio of total, percent change
Across rowsrunning total, moving average, lag, percentile, total column sum, aggregation
Text and datesextract text, format, date difference, create link with title

Watch out. The across-rows formulas depend on row order. Sort the rows before you add one.

The same hover menu hides a column or sorts it, and clicking a header renames it, so a leader can read the chart without a legend. Hidden columns still feed your formulas; they only stay out of the chart.

Filter steps

Watch this from 12:10

Two filters, two moments: a query filter runs in the Data Lake before counting, a filter step runs on the results

A filter step runs on the results, after the counts and the formulas. This report uses one to keep only the focus areas whose health is at risk, then a sort rows step to put the highest open role rate first.

Query filterFilter step
RunsIn the Data Lake, before rows are grouped or countedOn the results, after counts and formulas
Use it toShrink the data earlyFilter on something you calculated
ExampleLifecycle status is activeOpen role rate above a quarter

In the demo data the answer is plain: Quality Management is at risk, with twelve of its thirty-four positions still open, and four at-risk focus areas have more than a quarter of their seats open. That is the first conversation in the next portfolio review.

Picking the chart

Watch this from 13:17

The finished bar chart of open role rate for each at-risk focus area, saved to the dashboard

Analytics has more than a dozen chart types. The right one depends on your question and on the shape of your result table. For most charts, the first column is the label or the x-axis, and the columns after it are the numbers. A grayed-out type does not fit your data yet: pick it anyway and Analytics shows the format it needs, or choose Auto and let it pick.

The questionThe chart
Compare categoriesBar, stacked or grouped for more than one series. Bar line adds a line on its own axis for a goal or an average
Two categories at onceHeat map
Drop-off between stagesFunnel
Change over timeLine. Area adds weight; percent area shows each share
Parts of a wholePie, or donut with the total in the middle
How two numbers relateScatter plot with a line of best fit. Bubble adds a third number as bubble size
The spread of a numberBox plot: median, quartiles, minimum and maximum
One numberSingle value
One number against anotherSingle value indicator, with an arrow and the percent change
One number against goal rangesBullet
PlacesMap, or bubble map
The raw rowsTable, with links kept clickable

Watch out. Bar charts do not sort dates or fill in missing ones. Add a sort rows or zero fill step first.

This report compares categories, so it is a bar chart. To finish it:

  1. Hide the helper columns. Hidden columns still feed the formulas.
  2. Switch from Auto to a bar chart: open role rate for each at-risk focus area.
  3. Give it a title and save it to the dashboard.

Every step is saved with the chart. When Talent picks up a new hire, the numbers follow on the next data refresh without anyone rebuilding the report.

Same steps, other questions

Watch this from 15:43

Three more questions from the same steps: skills, contractor mix and seniority per focus area

The same handful of steps answers the questions that usually come next:

QuestionThe step
Which skills does each focus area really have?Pivot job family into columns
What is the contractor mix by focus area?Filter on employment type
How senior is each focus area?Group on Talent's level column

And because every app shares the Data Lake, the same editor works across the rest of your stack: request volume by team from Jira Service Management, pages created by space in Confluence, or goals beside the projects behind them.

Check what stuck

10 questions on this lesson. Pick an answer to see whether it is right, and why. Nothing is sent anywhere and there is nothing to sign up for.

  1. Question 1 of 10You want one row per focus area, with the number of distinct positions in each. Which aggregation goes on position ID?

    The answer: Count of unique.

    Count of unique counts each position once, even when a join repeats a row. Count of all would count the repeat twice.

  2. Question 2 of 10Who can create or edit an Atlassian Data Lake connection?

    The answer: An organization admin.

    Only an organization admin creates or edits a connection. Everyone else gets access to one through can query or can manage.

  3. Question 3 of 10True or false: the permissions you set in Jira carry over to Analytics dashboards.

    The answer: False.

    There is no row-level security. Anyone who can query the connection, or view a dashboard built on it, sees everything the connection includes.

  4. Question 4 of 10You merge two queries and want every focus area from the first one, even those with no match in the second. Which join?

    The answer: Left.

    A left join lets the first query lead. Rows with no match stay on the list, with empty values where the second query had nothing.

  5. Question 5 of 10You want only the rows where your calculated open role rate is above a quarter. Where does that filter go?

    The answer: As a filter step.

    A filter step runs on the results, after the counts and formulas, so the rate exists by then. A query filter runs before anything is counted.

  6. Question 6 of 10You want this month's number compared with last month's, with an up or down arrow. Which chart?

    The answer: Single value indicator.

    A single value indicator shows the first value, and the percent change against the second, with an arrow.

  7. Question 7 of 10Query one returns A, B and C. Query two returns A, B and D. How many rows does an outer join give you?

    The answer: Four.

    Outer keeps every value from both sides: A, B, C and D. Inner would give two, left three, union six and cross nine.

  8. Question 8 of 10A connection uses the limited data scope. What does it leave out?

    The answer: User names and email addresses.

    Limited data keeps descriptive fields and user IDs only. User names, email addresses and the dashboard templates need the all data scope.

  9. Question 9 of 10You add a running total and the numbers make no sense. What should come first?

    The answer: Sort the rows.

    Running total, moving average, lag and the other across-rows formulas depend on row order, so the rows have to be sorted first.

  10. Question 10 of 10Your connection includes specific spaces, and a team creates a new one. When does it appear in Analytics?

    The answer: Only once you edit the connection.

    A connection that selects specific spaces does not pick up new ones on its own. Edit the connection to include them.

Who teaches it

Riley Venable

Riley Venable

VP of Services, Atlas Bench

Full-stack engineer, Atlassian Certified Instructor, and Atlassian Community Champion who works on the layer underneath the tools: identity, infrastructure, and the systems that decide whether AI can be trusted with them.

Build this on your own data.

The report in this lesson runs on demo data. An Atlas Bench architect can build the same reporting on your Focus, Talent and Jira data, with each connection scoped and each dashboard shared on purpose.