Dynamic Chart of Step Line

Step line, LOD calc, Running_sum

By: Rosario Gauna @rosariogaunag

One of the new features that Tableau 2018.1 offers us, is the ability to visualize non-continuous data to a single click, by allowing any linear chart to be converted into a Step Line chart.

A Step Line chart is similar to a traditional line chart, but instead of joining points, lines that represent each period are joined, using vertical lines at 90-degree angles to connect each horizontal line.

If you still do not have the new version of Tableau 2018.1 and you need to have a Step Line chart, there are several techniques to achieve this type of chart.

The technique that I present below offers the following benefits:

  • Accuracy in the location of the points when presenting horizontal lines in each of the periods.
    • Including the horizontal lines in the initial period and the final period.
    • Very useful option when the periods evaluated are few, for example, when working with the twelve months of the year.
  • It allows you to consult the tooltips both at the beginning and at the end of each horizontal line.
  • Flexibility to exchange the query of amounts for the period to the accumulated amounts (RUNNING SUM).

Picture1

In this example, to consult the data of Superstore the user has the following options to define the chart:

  • Select the period for the Step Line: Annual, quarterly or monthly.
  • Select monthly sales or accumulated sales.
  • Select total sales or by category or region or segment.

It is important to indicate that two points or “marks” are required to create each horizontal line of each period. Why? Because the first “mark” is the starting point of the line and the second “mark” is the end of the line of the metric of the period analyzed.

One of the ways to achieve the two necessary points to build each line, is with the “Union” technique that we already used in a previous exercise seen in the blog of  My First Radial Chart , where we join the table of Superstore with itself, to be able to count on the two necessary marks.

In this exercise we use a technique of creating the two “marks” based on an existing dimension, with the benefit that it does not require duplicating the records of the table, achieving the same effect as the “Union” technique.

Step 1: Define the parameters for the user to select among the allowed options. The parameters are three: “Accumulated Sales?”, “Detail?” And “Type Period?”

Picture2

Step 2: Create a dimension with two values to identify the start and end points of each horizontal line.

The trick is to generate the new variable with only two possible values based on another existing dimension, in this case the new variable is derived from the day of the “Order Date”.

  • For even days the new variable is given the value of Zero
  • For the odd days the new variable is given the value of One
Points = DATEPART(‘day’, [Order Date]) % 2

This calculation is based on the assumption that you always have at least one even day and one odd day in each period to have the two marks required for each horizontal line. If this condition is not met, the “Union” technique can be used to define the two marks.

Convert the new “Points” variable to dimension.

Step 3: Calculate the start date of each period.It is calculated according to the option selected by the user in the period type parameter: Annual, Quarterly or Monthly.

Initial Date of the Period = DATETRUNC([Type Period?],[Order Date])

 Step 4: Calculate the date value of each of the two points of each period.This calculation allows to determine the values of the start and end date of each horizontal line on the x axis.

Condition Date Axis =
First point or Initial Point

The value of the date of the first day of the analyzed period is assigned.

IIF([Points] = 0, [Initial Date of the Period],
Second Point or Final Point

The value of the date of the first day of the nextperiod is assigned.

DATEADD([Type Period?],1,[Initial Date of the Period]))

Step 5: Calculate the level of detail to determine the color of the lines.It is calculated according to the option selected by the user.

Detail  =

CASE [Detail?]

WHEN 1 THEN “Total”

WHEN 2 THEN [Category]

WHEN 3 THEN [Region]

WHEN 4 THEN [Segment]

END

 Step 6: Calculate the value of sales by period and level of detail.

Sales by Period & Detail =

{FIXED [Initial Date of the Period], [Detail] : SUM([Sales])}

It is important to highlight that the result of the LOD calculation gives us the value of the total sales of each period (annual, quarterly or annual) and the level of detail selected. It does not matter if the sales are made on an even day or on an odd day.

 Step 7: Get the value of sales to graph. It is calculated according to the option selected by the user.

Sales Axis =  IIF([Accumulated Sales?]=FALSE,

SUM([Sales by Period & Detail]), RUNNING_SUM(SUM([Sales by Period & Detail])))

 Step 8: Calculate the variable “path” to join the points in the correct order and modify the aggregation level of the new variable to “Average”.

Path =  INT(DATETRUNC([Type Period?], [Order Date])) + [Points]

This formula adds to the value of the initial date of the period a value of zero for the first point and the value of one for the second point. In such a way that the second point of each period will have the value of +1 with respect to the first point of the period.

And when including the value of the initial date, each point in the chart will have a higher value than the previous one, which will allow joining the points in the correct order.

Step 9: Select the line chart and move to the shelves of:

  • Columns ➔ the variable “Date Axis” and modify to “Exact Date”
  • Rows ➔ the variable “Sales Axis” and apply the Computing table calculation option by “Date Axis”
  • Color ➔ the variable “Detail”
  • Detail ➔ the variable “Points”
  • Path ➔ the variable “AVG (Path)”

 Step 10: Adjust colors and formats. Ready!

Link Tableau Public

Picture0

If you have any questions, do not hesitate to contact me on Twitter (@rosariogaunag)

Regards!

Rosario Gauna

Advertisements

Gráfica Dinámica de Step Line

Step line, LOD calc, Running_sum

By: Rosario Gauna @rosariogaunag

Una de las novedades que Tableau 2018.1 nos ofrece, es la capacidad de visualizar datos no continuos a un solo click, al permitir convertir cualquier gráfica lineal en una gráfica de Step Line.

Una gráfica Step Line es similar a una gráfica de líneas tradicional, pero en lugar de unir puntos, se unen líneas que representan cada período, utilizando líneas verticales en ángulos de 90 grados para conectar cada línea horizontal.

Si aún no tienes la nueva versión de Tableau 2018.1 y requieres contar con una gráfica de Step Line existen diversas técnicas para lograr este tipo de gráfica.

La técnica que a continuación presento brinda los siguientes beneficios:

  • Exactitud en la ubicación de los puntos al presentar líneas horizontales en cada uno de los períodos.
    • Incluyendo las líneas horizontalesen el período inicial y el período final.
    • Opción muy útil cuando los períodos evaluados son pocos, por ejemplo, cuando se trabaja con los doce meses del año.
  • Permite consultar los tooltips tanto al inicio, como al final de cada línea horizontal.
  • Flexibilidad para intercambiar la consulta de montos del período a los montos acumulados (RUNNING SUM).

Picture1

En este ejemplo, para consultar los datos de Superstore el usuario tiene  las siguientes opciones para definir la gráfica:

  • Seleccionar el período para el Step Line: Anual, trimestral o mensual.
  • Seleccionar ventas mensuales o ventas acumuladas.
  • Seleccionar ventas totales o por categoría o región o segmento.

Es importante indicar que para crear cada línea horizontal de cada período se requieren de dos puntos o “marks”. ¿Por qué? Porque la primera “mark” es el punto de inicio de la línea y la segunda “mark” es el fin de la línea de la métrica del período analizado.

Una de las formas para lograr contar con los dos puntos necesarios para construir cada línea, es con la técnica de “Union” que ya utilizamos en un ejercicio previo visto en el blog de Mi Primer Gráfico Radial , en donde unimos la tabla de Superstore consigo misma, para poder contar con las dos marks necesarias.

En este ejercicio utilizamos una técnica de crear las dos “marks” en función de una dimensión existente, con el beneficio de que no requiere duplicar los registros de la tabla logrando el mismo efecto que la técnica de “Union”.

Paso 1: Definir los parámetros para que el usuario seleccione entre las opciones permitidas. Los parámetros son tres: “Acumulated Sales?”, “Detail?” y “Type Period?”

Picture2

Paso 2: Crear una dimensión con dos valores para identificar el punto inicial y final de cada línea horizontal.  

El truco consiste en generar la nueva variable con solo dos valores posibles en base a otra dimensión existente, en este caso la nueva variable se deriva del día del “Order Date”.

  • Para los días paresa la nueva variable se le da el valor de Cero
  • Para los días imparesa la nueva variable se le da el valor de Uno
Points = DATEPART(‘day’, [Order Date]) % 2

Este cálculo se basa en el supuesto de que siempre se tiene al menos un día par y un día impar en cada período para disponer de las dos marks requeridas para cada línea horizontal. En caso de que no se cumpla esta condición se puede utilizar la técnica de “Union” para definir las dos marks.

Convertir a dimensiónla nueva variable de “Points”.

Paso 3: Calcular la fecha de inicio de cada período. Se calcula en función de la opción seleccionada por el usuario en el parámetro del tipo período: Anual, Trimestral o Mensual.

Initial Date of the Period = DATETRUNC([Type Period?],[Order Date]) 

Paso 4: Calcular el valor de fecha de cada uno de los dos puntos de cada período. Este cálculo permite determinar los valores de la fecha de inicio y de fin de cada línea horizontal en el eje de las x.

Condición Date Axis =
Primer punto o Punto Inicial

Se asigna el valor de la fecha del primer día del período analizado.

 

IIF([Points] = 0, [Initial Date of the Period],
Segundo Punto o Punto Final

Se asigna el valor de la fecha del primer día del siguienteperíodo.

 

DATEADD([Type Period?],1,[Initial Date of the Period]))

Paso 5: Calcular el nivel de detalle para determinar el color de las líneas. Se calcula en función de la opción seleccionada por el usuario.

Detail  =

CASE [Detail?]

WHEN 1 THEN “Total”

WHEN 2 THEN [Category]

WHEN 3 THEN [Region]

WHEN 4 THEN [Segment]

END

Paso 6: Calcular el valor de las ventas por período y nivel de detalle.

Sales by Period & Detail =

{FIXED [Initial Date of the Period], [Detail] : SUM([Sales])}

Es importante resaltar que el resultado del cálculo LOD nos da el valor de las ventas totales de cada período (anual, trimestral o anual) y el nivel de detalle seleccionado. No importa si las ventas se realizan en un día par o en un día impar.

 Paso 7: Obtener el valor de las ventas a graficar. Se calcula en función a la opción seleccionada por el usuario.

Sales Axis =  IIF([Accumulated Sales?]=FALSE,

SUM([Sales by Period & Detail]), RUNNING_SUM(SUM([Sales by Period & Detail])))

 Paso 8: Calcular la variable “path” para unir los puntos en el orden correcto y modificar el nivel de agregación de la nueva variable a “Average”.

Path =  INT(DATETRUNC([Type Period?], [Order Date])) + [Points]

Esta fórmula suma al valor de la fecha inicial del período un valor de cero para el primer punto y el valor de uno para el segundo punto. De tal forma que el segundo punto de cada período tendrá el valor de +1 con respecto al primer punto del período.

Y al incluir el valor de la fecha inicial, cada punto en la gráfica tendrá un valor mayor al anterior lo cual permitirá unir los puntos en el orden correcto.

 Paso 9: Seleccione el gráfico de líneas y mover a los estantes de:

  • Columns ➔la variable “Date Axis” y modificar a “Exact Date”
  • Rows ➔la variable “Sales Axis” y aplicar la opción de cálculo de tabla de Computing by “Date Axis”
  • Color ➔ la variable “Detail”
  • Detail ➔la variable “Points”
  • Path ➔la variable “AVG(Path)”

 Paso 10: Ajuste colores y formatos. Listo!

Link a Tableau Public

Picture0

Si tiene alguna pregunta, no dudes en ponerte en contacto conmigo en Twitter (@rosariogaunag)

¡Saludos!

Rosario Gauna

My First Radial Chart

SOLUTION TO THE CHALLENGE OF THE WEEK 10 OF #WORKOUTWEDNESDAY 2018 % of total , challenge , sunburst , table calc , LOD calc , Workout Wednesday

By: @rosariogaunag

In Week 10 of Workout Wednesday, @LukeStanke had prepared a very special challenge for us: “KEEP AN EYE ON SALES”. Link to the Challenge

For me, who had never worked with a radial stacked chart, I think that just by reading the “spoiler” I blocked myself, I did feel that unpleasant feeling of not knowing how to start.

Luke gave us two formulas as a spoiler:

Radius * COS (2 * PI () * [Percent of Circle]) will return your Y-axis

Radius * SIN (2 * PI () * [Percent of Circle]) will return your X-axis

And after seeing the spoilers, I say OK, I already have the formulas and now the question is, what variables will I put there?

At the beginning, I searched through radial chart blogs, although very good, they were also blogs that were written for the use of multiple configuration parameters, which necessarily increased the complexity of the formulas used and increased my confusion.

I had to take a look at the work of @VizWizBI, to remove the blockade and I generated a first version.

After this first version, I wanted to give myself time to assimilate the challenge and with the help of @ebautistag, we tried with the experience gained, start the challenge of zero again. That is, try to understand the variables in the following graph.

Circunferencia  

And then I will share the solution we got:

Step 0: Understand what variables we need for the formulas.

Percent of Circle: This variable is determined by:

  • The number of the week plotted
  • The total number of weeks
  • The requirement that week 1 must be in the 12:00 position

Radius: This variable is determined by:

  • The sales percentage of each segment
  • The accumulated sales percentage of the previous segments.
  • The spaces of 0.15 left between each segment
  • And the minimum values ​​of 1 and maximum of 2.3 indicated by Luke.
  • The difference of:
    • Final range of 2.3, less
    • Initial range of 1.0, less
    • Two spaces of 0.15 between segments or 0.30 of total space
    • It leaves us a value of 1, to distribute each segment based on its percentage of sales.

Step 1: For each segment line two points are required.

Therefore, it is necessary to create the union of the data table of Superstore with itself, this to have two “marks” for each segment-week. Why? Because the first “mark” is the point with the beginning of the line and the second “mark” is the end of the line that represents the % sales of the segment.

We use the union within Tableau, which creates a new field called “Table Name” with the values ​​”Orders” and “Orders1”.

Step 2: Calculate the “Percent of Circle” field. The position within the circle is calculated according to the week number to be plotted. As if it were a clock hand and you had to indicate the 52 points to stop.

Percent Circle = (DATEPART (‘week’, [Order Date]) – 1) / 52

Step 3: Calculate the Percentage of the Sales of each Segment. We use an LOD calculation to calculate sales by segment and divide it by total sales by excluding the segment.

% Sales by Segment = 

{INCLUDE [Segment]: SUM ([Sales])} / {EXCLUDE [Segment]: SUM ([Sales])}

Step 4: Calculate the Percentage of the Sales of Accumulated until the Previous Segment. The accumulated percentage of sales per segment is calculated and the value of the current segment is subtracted. This is a “using [Segment]” table calculation

% Accumulated Previous =

RUNNING_SUM (SUM ([% Sales by Segment])) – SUM ([% Sales by Segment])

Step 5: Calculate Radius. In this calculation should be taken into consideration

CONSIDERATION FORMULA
The minimum value set by Luke of 1 1 +
The spaces of 0.15 between each segment CASE ATTR([Segment])

WHEN “Corporate” THEN 0

WHEN “Consumer” THEN 1

ELSE 2

END * 0.15

The % accumulated previous sales + [% Accumulated Previous]
If you are plotting the first or second points of each segment to accumulate or not the value of the segment sales percentage + IIF(ATTR([Table Name])=”Orders”,0,1) * SUM([% Sales by Segment])

 

Step 6: Calculate “x”

X = [Radius] * ATTR (SIN (2 * PI () * [Percent of Circle]))

Step 7: Calculate “y”

Y = [Radius] * ATTR (COS (2 * PI () * [Percent of Circle]))

Step 8: Move to the Shelf

  • Detail –> the week -> DATEPART (‘week’, [Order Date])
  • Color –> the variable “Segment”. And order the segments 1) Corporate, 2) Consumer and 3) Home Office

Step 9: Move the variable “x” to the column shelf and the variable “y” to the row shelf. 

Apply to both variables the option of Calculation of Table using the option of “Compute Using” Segment.

Step 10: Select the chart of line and move to the shelf of Path -> the variable “Table Name”

Step 11: Just adjust colors and formats and filter or select data for the year 2017. Ready!

Link a Tableau Public

Screen Shot 2018-03-09 at 4.37.58 PM

I hope that this recapitulation will help you as well as me, to take confidence in the handling of radial graphics.

To be ready for the next challenges that we have prepared in the future @RodyZakovich or @LukeStanke with radial graphics

Frequency Matrix or Market Basket Analysis

Market Basket, table calc, LOD calc, Workout Wednesday

By:Rosario Gauna @rosariogaunag

In Week 14 of Workout Wednesday, @AnnUJackson prepared us a frequency matrix challenge. Link to the Challenge

This challenge reminded me of the week 42 of last year published by @EmmaWhyte, referring to the analysis of market basket. Although the graphs presented in both challenges are different, the basic solution procedure is very similar.

The analysis of market basket is a common request, particularly in certain industries such as online retail, to make suggestions on what other product might be of interest to the customer at the time of purchase.

Next, I will list the main steps required:

Step 1: Create an INNER-JOIN from the data table of “Orders” in Excel from SuperStore with itself.

The graph requested in this challenge is a symmetric matrix of frequencies of the number of orders for each combination of Sub-Categories. The dimensions of the matrix show the need to perform an INNER-JOIN of the data table with itself through the “Order ID” dimension.

Picture2

The variables of the second table used in the JOIN (Orders1) will be differentiated from the original table with the termination (Orders1).

Step 2: Calculate the number of unique orders that are sold for each combination of Sub-Categories. This is the calculation of the frequency of orders.

Unique Orders = COUNTD([Order ID])

Step 3: Obtain the average sales for each of the Sub-Categories of the selected combination.

Average Sales = SUM({FIXED [Row ID] : AVG([Sales])}) / [Unique Orders]
Average Sales (Orders1) = IIF(ATTR([Sub-Category]) = ATTR([Sub-Category (Orders1)]), NULL, SUM({FIXED [Row ID (Orders1)] : AVG([Sales (Orders1)])}) / [Unique Orders])

I believe that the formulas of this step are crucial to achieve the correct numbers, so I will delve into its explanation and its relationship with the operation of the INNER-JOIN.

When using the INNER-JOIN technique of a table with itself, caution should be exercised if the analysis is performed on an aggregate dimension, i.e. a Sub-Category can have several records of different products purchased within the same order or basket and causes the details of the second table of the INNER-JOIN to be repeated as a result of the JOIN.

If the requested challenge were about combinations of products instead of combinations of Sub-Categories, the required formulas would be quite simple because each line represents a product and at the product level there is no duplication. However, in this challenge the analysis is done at the level of Sub-Categories combination.

Picture3

The previous table shows an example of the JOIN resulting from the Order “CA-2014-103317”. From the Sub-Category “Furnishing” two different products registered in lines 5437 and 5439 are sold and for the Sub-Category (Orders1) of “Binders” a single product registered in line 5438 is sold.

When you want to analyze the sales “Furnishing” with “Binders”, if you take the sales directly from the Sub-Category of Orders1 of “Binders” you would be duplicating the sale. That is, there is a repetition for each different product sold from “Furnishing”. See Row ID 5438 from (Orders1) on the right side in red.

Therefore, to ensure that the information is considered without duplication, you must initially calculate the average sales for each unique “Row ID” with the following formula {FIXED [Row ID] : AVG([Sales])}

Picture4

The next step is to obtain the average of the sales by Sub-Category for the selected combination, which are obtained by adding the average sales for each Row-Id and the result is divided by the number of unique orders for the combination of Sub- Selected categories

Why do I do the manual calculation of the average and do not use the “Average” formula? Because if we apply the average formula, the results obtained would be from the average sales by Row-Id, and the challenge requests the average sales per Order of each Sub-Category.

Additionally, to the formula of (Orders1) the condition is included so that the value is null in case the Sub-Category and the Sub-Category (Orders1) matches. On the diagonal, only the average sales are considered.

Step 4: Calculate the name of the sub-categories in upper case and start the definition of the graph:

Upper Sub-Category = UPPER([Sub-Category])
Upper Sub-Category (Orders1) = UPPER([Sub-Category (Orders1)])

Place the variables “Upper Sub-Category” in Rows and “Upper Sub-Category (Orders1)” in Columns (If you prefer you can create the formulas directly on the shelves of rows and columns without having to define them as new variables).

Sort down both variables, by the number of unique orders obtained in step two.

Select Square in the Mark type.

Step 5: Customize the displayed text, the tooltips and the color depending on whether it is on the diagonal line or outside the diagonal line.

A) Calculate the Text label displayed on the diagonal of the matrix

This label will be displayed only when the selected Sub-Category and Sub-Category (Order1) match.

Label Diagonal = IIF(ATTR([Sub-Category])=ATTR([Sub-Category (Orders1)]),[Unique Orders],NULL)

Move the newly created variable to the Text shelf.

B) Customize the tooltips of the diagonal vs. the rest of the matrix

Picture5

The following variables will only show information when the selected Sub-Category and Sub-Category (Order1) are different.

Label SubCategories A & B = [Sub-Category] + IIF([Sub-Category]<>[Sub-Category (Orders1)], ” & ” + [Sub-Category (Orders1)],””)
Label SubCategories B = IIF([Sub-Category]<>[Sub-Category (Orders1)], [Sub-Category (Orders1)] + “:”,NULL)

These variables, plus the “Unique Orders”, “Sub-Category”, “Avg Sales” and “Avg Sales (Orders1) should be included in the tooltips shelf.

C) Customize the color of the diagonal vs. the rest of the matrix

Color = IIF(ATTR([Sub-Category])<>ATTR([Sub-Category (Orders1)]), [Unique Orders], -20)

The challenge asks us to use the purple color in the cells of the matrix that are outside the diagonal line and to use the darker tonalities for the frequency of orders of greater value.

In my first version I used the blue color, I like the blue color. Now I will use the purple color.

We need a little trick to achieve this.

The first step to follow is to select the Red-Blue-White Diverging key.

Do not think that I forgot what I just told you or that it is a joke, we are going to present the matrix in purple.

The Red-Blue-White Diverging selection is only one step to achieve the purple color, as there is no predefined purple diverging option that you can select.

The next step is to change the color blue by purple, for which, it is simply required to double-click the blue color and indicate the color that will replace it (I used the color “990099”)

Finally, in the advanced color options, the center is set to a value of -20, which is the value that the formula establishes for all the cells in the diagonal, to force the value of -20 to correspond to the color of white.

Picture6

Step 6: Get the combination with higher average sales per order and customize the Text and tooltips.

Customize the Text shelf to include a point, in the highest average sales cell.

Label Dot = IIF(WINDOW_MAX([Avg Sales] + [Average Sales (Orders1)])=[Avg Sales] + [Average Sales (Orders1)], “●”, “”)

Customize your tooltip to include a legend, in the cell with the highest average sales.

Label Dot 2 = IIF(WINDOW_MAX([Avg Sales] + [Average Sales (Orders1)])=[Avg Sales] + [Average Sales (Orders1)], “highest average sales per order”, “”)

 Step 7: Adjust formats. And ready!

Link Tableau Public

Picture1

I hope you find this blog useful.

If you have any questions, do not hesitate to contact me on Twitter (@rosariogaunag)

Regards!

Rosario Gauna

 

Matriz de frecuencias o análisis de cestas de compras

Cestas o canastas de compras, table calc, LOD calc, Workout Wednesday

Por:Rosario Gauna @rosariogaunag

En la semana 14 de Workout Wednesday, @AnnUJacksonnos preparó un reto de matriz de frecuencias. Link al Reto

Este reto me recordó al de la semana 42 del año pasado publicado por @EmmaWhyte, referente al análisis de cestas de compras. Aunque las gráficas presentadas en ambos retos son diferentes, el procedimiento básico de solución es muy similar.

El análisis de cestas de compras es una solicitud común, particularmente en ciertas industrias como el comercio minorista en línea, para realizar sugerencias sobre qué otro producto podría interesar al cliente al momento de su compra.

A continuación, enlistaré los principales pasos requeridos:

Paso 1: Crear un INNER-JOIN de la tabla de datos de “Orders” en Excel de SuperStore consigo misma

La gráfica solicitada en este reto es una matriz simétrica de frecuencias del número de órdenes para cada combinación de Sub-Categorías. Por las dimensiones de la matriz se percibe la necesidad de realizar un INNER-JOIN de la tabla de datos consigo misma a través de la dimensión de “Order ID”.

Picture2

Las variables de la segunda tabla utilizada en el JOIN (Orders1) se diferenciarán de la tabla original con la terminación (Orders1).

Paso 2: Calcular el número de órdenes únicas que se venden por cada combinación de Sub-Categorías. Este es el cálculo de la frecuencia de órdenes.

Unique Orders = COUNTD([Order ID])

Paso 3: Obtener el promedio de ventas para cada una de las Sub-Categorías, de la combinación seleccionada.

Average Sales = SUM({FIXED [Row ID] : AVG([Sales])}) / [Unique Orders]
Average Sales (Orders1) = IIF(ATTR([Sub-Category]) = ATTR([Sub-Category (Orders1)]), NULL, SUM({FIXED [Row ID (Orders1)] : AVG([Sales (Orders1)])}) / [Unique Orders])

Considero que las fórmulas de este paso son cruciales para lograr obtener los números correctos, por lo cual profundizaré en su explicación y su relación con el funcionamiento del INNER-JOIN.

Cuando se utiliza la técnica del INNER-JOIN de una tabla consigo misma, se debe tener precauciónsi el análisis se realiza sobre una dimensión agregada, i.e. una Sub-Categoría puede tener varios registros de productos diferentes comprados dentro de una misma orden o cesta y hace que los detalles de la segunda tabla del INNER-JOIN se repitan a consecuencia del JOIN.

Si el reto solicitado tratara de combinaciones de productos en lugar de combinaciones de Sub-Categorías, las fórmulas requeridas serían bastante sencillas debido a que cada renglón representa un producto y a nivel producto no hay duplicidad. Sin embargo, en este reto el análisis se realiza a nivel de combinación de Sub-Categorías.

Picture3

La tabla anterior, muestra un ejemplo del JOIN resultante de la Orden “CA-2014-103317”. De la Sub-Categoría “Furnishing” se venden dos productos diferentes registrados en los renglones 5437 y el 5439 y para la Sub-Categoría (Orders1) de “Binders” se vende un solo producto registrado en el renglón 5438.

Cuando se desean analizar las ventas “Furnishing” con “Binders”, si se tomaran las ventas directamente de la Sub-Categoría de Orders1 de “Binders” se estarían duplicando la venta. Es decir, existe una repetición por cada producto diferente vendido de “Furnishing”. Ver Row ID 5438 de (Orders1) del lado derecho en color rojo.

Por lo cual, para asegurar que la información se considere sin duplicidad, se deben calcular inicialmente las ventas promedio por cada “Row ID” único con la siguiente fórmula {FIXED [Row ID] : AVG([Sales])}

Picture4

El siguiente paso es obtener el promedio de las ventas por Sub-Categoría para la combinación seleccionada, las cuales se obtienen de sumar las ventas promedio por cada Row-Id y el resultado se divide entre el número de órdenes únicas para la combinación de Sub-Categorías seleccionadas.

¿Por qué realizo el cálculo manual del promedio y no utilizo la fórmula de “Average”?Porque si aplicáramos la fórmula de average, los resultados obtenidos serían de las ventas promedio por Row-Id, y el reto solicita las ventas promedio por orden de cada Sub-Categoría.

Adicionalmente, a la fórmula de (Orders1) se le incluye la condición para que el valor sea nulo en caso de que la Sub-Category y la Sub-Category (Orders1) coincidan. En la diagonal se considera sólo un promedio de ventas.

Paso 4: Calcular el nombre de las Sub-Categorías en mayúscula e iniciar la definición de la gráfica:

Upper Sub-Category = UPPER([Sub-Category])
Upper Sub-Category (Orders1) = UPPER([Sub-Category (Orders1)])

Colocar las variables “Upper Sub-Category” en Rows y “Upper Sub-Category (Orders1)” en Columns (Si lo prefiere puede crear las fórmulas directamente en los estantes de renglones y columnas sin necesidad de definirlas como nuevas variables).

Ordenar descendentemente ambas variables, por el número de órdenes únicas obtenidas en el paso dos.

Seleccionar Square en el tipo de Mark.

Paso 5: Personalizar el texto desplegado, los tooltips y el color dependiendo si se está en la línea diagonal o fuera de la línea diagonal.

A) Calcular la etiqueta de Texto desplegado en la diagonal de la matriz

Esta etiqueta se mostrará sólo cuando la SubCategory seleccionada y SubCategory (Order1) coincidan.

Label Diagonal = IIF(ATTR([Sub-Category])=ATTR([Sub-Category (Orders1)]),[Unique Orders],NULL)

Mover al estante de Text la variable recién creada.

B) Personalizar los tooltips de la diagonal vs. el resto de la matriz

Picture5

Las siguientes variables, sólo mostrarán información cuando la SubCategory seleccionada y SubCategory (Order1) son diferentes.

Label SubCategories A & B = [Sub-Category] + IIF([Sub-Category]<>[Sub-Category (Orders1)], ” & ” + [Sub-Category (Orders1)],””)
Label SubCategories B =  IIF([Sub-Category]<>[Sub-Category (Orders1)], [Sub-Category (Orders1)] + “:”,NULL)

Estas variables, más la de “Unique Orders”, “Sub-Category”, “Avg Sales” y “Avg Sales (Orders1) deberán ser incluidas en el estante de tooltips.

C) Personalizar el color de la diagonal vs. el resto de la matriz

Color = IIF(ATTR([Sub-Category])<>ATTR([Sub-Category (Orders1)]), [Unique Orders], -20)

El reto nos solicita utilizar el color morado en las celdas de la matriz que se encuentren fuera de la línea diagonal y usar las tonalidades más obscuras para la frecuencia de órdenes de mayor valor.

En mi primera versión yo utilicé el color azul, me gusta el color azul. Ahora utilizaré el color morado.

Necesitamos un pequeño truco para lograr esto.

El primer paso a seguir es seleccionar la tonalidad Red-Blue-White Diverging.

No crean que olvidé lo que acabo de decirles o que se trata de una broma, vamos a presentar la matriz en color morado, aunque prefiera el azul.

La selección Red-Blue-White Diverging es solo un paso para lograr el color morado, ya que no existe una opción de morado divergente predefinida que pueda seleccionar.

El siguiente paso es modificar el color azul por morado, para lo cual, simplemente se requiere dar un doble-click al color azul e indicarle el color que lo reemplazará (yo utilicé el color “990099”)

Por último, en las opciones avanzadas de color, se establece el centro en un valor de -20, que es el valor que la fórmula establece para de todas las celdas de la diagonal, para obligar que al valor de -20 le corresponda el color de blanco.

Picture6 

Paso 6: Obtener la combinación con mayores ventas promedio por orden y personalizar el Texto y los tooltips.

Personalizar el estante de Texto para incluir un punto, en la celda de mayores ventas promedio.

Label Dot = IIF(WINDOW_MAX([Avg Sales] + [Average Sales (Orders1)])=[Avg Sales] + [Average Sales (Orders1)], “●”, “”)

Personalizar su tooltip para incluir una leyenda, en la celda con mayores ventas promedio.

Label Dot 2 = IIF(WINDOW_MAX([Avg Sales] + [Average Sales (Orders1)])=[Avg Sales] + [Average Sales (Orders1)], “highest average sales per order”, “”)

Paso 7: Ajuste formatos. ¡Y listo!

Link Tableau Public

Picture1

Espero que les sea de utilidad este blog.

Si tiene alguna pregunta, no dudes en ponerte en contacto conmigo en Twitter (@rosariogaunag)

¡Saludos!

Rosario Gauna

¿Pequeños Puntos Múltiples de Caramelo Solo con Texto?

% of total, candy dots, circles, small multiples, text, waffle chart, trellis chart, table calc, LOD calc, Workout Wednesday

Por: Rosario Gauna @rosariogaunag

En la semana 11 de Workout Wednesday, @RodyZakovich nos preparó un reto diferente y divertido, quizás decidió que merecíamos bajar el nivel de estrés después del reto de @LukeStanke de la semana previa. Link al Reto

En este reto, Rody nos pide crear waffles con círculos distribuidos 20X5 SIN UTILIZAR BLENDING, SIN SHAPES DE CUADROS, SOLO UTILIZANDO TEXTO.

Se deberá mostrar un waffle para cada una de las sub-categorías de productos de Artículos de Oficina, con su porcentaje de ventas con respecto a las ventas totales de la categoría en un color azul y el resto de los puntos en un color gris.

A continuación, detallo los pasos que seguí:

Paso 1: Filtrar los datos por la categoría de “Artículos de Oficina”

Paso 2: Definir las coordenadas (x, y) para cada una de subcategorías, de tal forma que cada una de las 9 sub-categorías tendrá una coordenada única dentro de una matriz de 3 x 3

VARIABLE FÓRMULA
Calcular la variable “x” o columna a ubicarse cada una de las subcategorías COLUMN =

(INDEX()-1) % INT(SQRT(SIZE())) + 1

En este ejercicio, conocemos de antemano que se van a presentar 3 columnas, por lo cual, podemos utilizar una fórmula simplificada

(INDEX() – 1) % 3 + 1

Calcular la variable “y” o renglón a ubicarse cada una de las subcategorías ROW =

INT((INDEX()-1) / INT(SQRT(SIZE()))) + 1

La fórmula simplificada para tres columnas, sería

INT( (INDEX()-1) / 3) + 1

Paso 3: Calcular el campo del “% Sales”. Se calculan las ventas de cada sub-categoría y se divide entre el total de ventas de la categoría.

      % Sales =

{FIXED [Sub-Category] : SUM([Sales])} / {FIXED [Category] : SUM([Sales])} * 100

Paso 4: Calcular el campo del “% Sales Display”. Esta fórmula tiene como finalidad el coincidir con el redondeo de “Ceiling” que utilizó Rody o también conocido como redondeo hacia el entero mayor más cercano. En un inicio, yo había utilizado el redondeo simétrico, pero decidí que era mejor incluir un parámetro para que el usuario decidiera el tipo de redondeo a aplicar.

            % Sales Display =

CASE [Choose Round]

WHEN 1 THEN CEILING([% Sales])

WHEN 2 THEN FLOOR([% Sales])

WHEN 3 THEN ROUND([% Sales],0)

END

Paso 5: Definir el campo “String Candy Dots”. El cual está compuesto por un total de 104 caracteres. 100 caracteres de círculos distribuidos 20 por renglón, más los 4 caracteres de salto de línea. A continuación, se muestran dos de los métodos para definir el string en Tableau.

DEFINICION MANUAL DEFINICION UTILIZANDO FÓRMULA
String Candy Dots =

“●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●”
String Candy Dots =

REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)

 

Paso 6: Subdividir el campo de “String Candy Dots” en dos, para manejar dos colores de puntos.

VARIABLE FÓRMULA
Calcular la longitud del string que corresponden al porcentaje de las ventas más 1 carácter adicional por cada 20 puntos del porcentaje de las ventas Length 2nd Part =

[% Sales Display]

+ INT([% Sales Display]/20)

Calcular la primera parte de los puntos, es decir, los de color gris claro.

Se tomarán los caracteres izquierdos del string, que correspondan a la resta de 104 (tamaño total de string) menos la longitud calculada en el primer cálculo de este paso

Candy Dots 1st Part =

LEFT([String Candy Dots],

104 – [Length 2nd Part])

Calcular la segunda parte de los puntos, es decir, los de color azul.

Se tomarán los caracteres de la derecha del string, que correspondan a la longitud calculada en el primer cálculo de este paso.

 

Candy Dots 2nd Part =

RIGHT([String Candy Dots],

[Length 2nd Part])

Paso 7: Mover al tipo de marca detalle (detail) en marks card, la variable de Sub-Category ordenada descendentemente por el monto de las ventas.

Paso 8: Mover al tipo de marca etiqueta (label) en marks card, las variables: Sub-Category, % de Sales Display, Candy Dots 1st Part y Candy Dots 2nd Part

Acomodar las cuatro variables dentro del estante de texto, las dos primeras variables en el primer renglón y las últimas dos variables en el segundo renglón. Y cambiar los textos a los colores deseados.

Estante de Texto

Paso 9: Mover al estante de columnas la variable “Column” y al estante de renglones la variable “Row”.

Aplicar a ambas variables, la opción de Cálculo de Tabla utilizando la opción de “Compute Using” Sub-Category, Candy Dots 1st Part y Candy Dots 2nd Part.

Paso 10: Solo ajuste formatos. ¡Y listo!

Link Tableau Public

D_Small Multiple Grids-Final

Muchas gracias @RodyZakovich por este divertido reto.

 

EJERCICIO EXTRA

Después de este ejercicio de Rody, recordé el diseño de @tableauing de #MakeoverMonday de la semana 10, en donde tenía pequeños waffles y cada punto representaba una respuesta y los colores asignados indicaban el tipo de respuesta obtenida: Correcta, Incorrecta o Nula.

Imagen Rodrigo

Él comentaba que deseaba poder ordenar los puntos por colores, pero aún lo estaba trabajando.

Y recién terminé el reto de Rody, me resultaba mas que tentador probar la técnica en el diseño de Rodrigo, en donde básicamente se requería:

  • El uso de tres colores, uno por tipo de respuesta: 1) Correcta, 2) Incorrecta, 3) Nula
  • Ordenar los colores por tipo de respuesta
  • Manejar una cantidad de puntos o dots variables por país. (Hay países con 20 encuestados, países con 22 encuestados y países con 26 encuestados)
  • Se requería desplegar un máximo de 9 puntos o dots por renglón.

Para este ejercicio, se deben tener calculados previamente por país-pregunta, el número de:

  • Respuestas correctas (# correct)
  • Respuestas incorrectas (# incorrect)
  • Total de personas encuestadas (# Total of Respondent)

 

Paso 1: Definir “String Candy Dots”. El cual está compuesto por un total de 29 caracteres. 27 caracteres de círculos distribuidos 9 por renglón, más los 2 caracteres de caracteres de salto de línea. A continuación, se muestran dos de los métodos para definir el string en Tableau.

DEFINICION MANUAL DEFINICION UTILIZANDO FÓRMULA
String Candy Dots =

“●●●●●●●●●
●●●●●●●●●
●●●●●●●●●”
String Candy Dots =

REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)

Paso 2: Calcular el primer sub-string correspondiente a las respuestas correctas.

VARIABLE FÓRMULA
Calcular la cantidad de caracteres del string de respuestas correctas.

Su valor corresponde al número de respuestas correctas más 1 carácter adicional por cada 9 respuestas correctas

Length Correct Answers =

[# Correct]

+ INT([# Correct]/9)

Calcular la primera parte del string que corresponde a las respuestas correctas.

Se tomarán los caracteres izquierdos del string, que corresponden a la longitud, recién calculada.

Candy Dots 1st Part=

LEFT([String Candy Button],

[Length Correct Answers])

Paso 3: Calcular el segundo sub-string correspondiente a las respuestas incorrectas.

VARIABLE FÓRMULA
Calcular la cantidad de caracteres del string, del número de respuestas contestadas (tanto correctas, como de incorrectas). Length Answers with Response =

[# Correct] + [# Incorrect] +

INT(([# Correct]+[# Incorrect])/9)

Calcular la segunda parte del string que corresponde a las respuestas incorrectas.

Se utiliza la función LEFT() para crear primero un sub-string que corresponde al total de respuestas contestadas (correctas e incorrectas).

Y al sub-string recién calculado, se le aplica la función RIGHT() para crear el sub-string de solo las respuestas incorrectas

Candy Dots 2nd Part =

RIGHT(

LEFT([String Candy Button], [Length Answers with Response]),

[Length Answers with Response] – [Length Correct Answers])

Paso 4: Calcular el último sub-string correspondiente a las respuestas sin contestar o nulas.

VARIABLE FÓRMULA
Calcular la cantidad de caracteres del string del total de encuestados (con respuestas correctas, incorrectas y sin contestar) Length Total of Respondent =

[# Total of Respondent]

+ INT([# Total of Respondent]/9)

Calcular la última parte del string que corresponde a las respuestas sin contestar o con valor nulo. Candy Dots 3rd Part =

RIGHT(

LEFT([String Candy Button], [Length Total of Respondent]),

[Length Total of Respondent] – [Length Answers with Response])

 Paso 5: Calcular el número de respuestas correctas por país.

           Label Correct by Country =

{FIXED [Country] : [# Correct]}

Paso 6: Mover al tipo de marca etiqueta (label) en marks card, las variables: Candy Dots 1st Part, Candy Dots 2nd Part y Candy Dots 3rd Part.

Acomodar las tres variables dentro del estante de texto en un solo renglón en el orden de presentación requerido y cambiar los textos a los colores deseados.

Paso 7: Mover al estante de columnas la variable “Topic” y al estante de renglones las variables “Country” y “Label Correct by Country”.

Paso 8: Solo ajuste formatos. ¡Y listo!

Link Tableau Public

Policymaker Report

Muchas gracias @tableauing por compartir diseño.

Espero que hayan disfrutado leyendo este blog.

Si tiene alguna pregunta, no dudes en ponerte en contacto conmigo en Twitter (@rosariogaunag)

¡Saludos!

Rosario Gauna

Small Multiple Candy Points Only with Text?

% of total, candy dots, circles, small multiples, text, waffle chart, trellis chart, table calc, LOD calc, Workout Wednesday

By: Rosario Gauna @rosariogaunag

In Week 11 of Workout Wednesday, @RodyZakovich prepared us a different and fun challenge, perhaps decided that we deserved to lower the level of stress after the challenge of @LukeStanke of the previous week. Link to the Challenge

In this challenge, Rody asks us to create waffles with circles distributed 20X5 WITHOUT USING BLENDING, WITHOUT SHAPES OF PICTURES, ONLY USING TEXT.

A waffle must be displayed for each of the sub-categories of Office Supplies, with its percentage of sales with respect to the total sales of the category in a blue color and the rest of the points in a gray color.

Next, I detail the steps that I followed:

Step 1: Filter the data by the category of “Office Supplies”

Step 2: Define the coordinates (x, y) for each of subcategories, so that each of the 9 sub-categories will have a unique coordinate within a 3 x 3 matrix.

VARIABLE FORMULA
Calculate the variable “x” or column to be located at each of the subcategories COLUMN =

(INDEX()-1) % INT(SQRT(SIZE())) + 1

In this exercise, we know in advance that 3 columns will be presented, so we can use a simplified formula

(INDEX() – 1) % 3 + 1

Calculate the variable “y” or row to be located at each of the subcategories ROW =

INT((INDEX()-1) / INT(SQRT(SIZE()))) + 1

The simplified formula for three columns, would be

INT( (INDEX()-1) / 3) + 1

Step 3: Calculate the field of “% Sales”. The sales of each sub-category are calculated and divided by the total sales of the category.

          % Sales =

{FIXED [Sub-Category] : SUM([Sales])} / {FIXED [Category] : SUM([Sales])} * 100

Step 4: Calculate the “% Sales Display” field. This formula has the purpose of matching the rounding of “Ceiling” that Rody used or also known as rounding to the nearest larger integer. Initially, I had used symmetric rounding, but I decided that it was better to include a parameter so that the user could decide the type of rounding to apply.

            % Sales Display =

CASE [Choose Round]

    WHEN 1 THEN CEILING([% Sales])

    WHEN 2 THEN FLOOR([% Sales])

    WHEN 3 THEN ROUND([% Sales],0)

END

Step 5: Define the “String Candy Dots” field. Which is composed of a total of 104 characters. 100 characters of circles distributed 20 per line, plus the 4 characters of line break. Here are two of the methods to define the string in Tableau.

DEFINITION MANUAL DEFINITION USING FORMULA
String Candy Dots =

“●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●”

String Candy Dots =

REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(20),’\s’,’\u25cf’)

Step 6: Subdivide the field of “String Candy Dots” in two, to handle two dot colors.

VARIABLE FORMULA
Calculate the length of the string corresponding to the percentage of sales plus 1 additional character for every 20 points of the percentage of sales. Length 2nd Part =

[% Sales Display]

+ INT([% Sales Display]/20)

Calculate the first part of the points, that is, those of light gray color.

The left characters of the string will be taken, corresponding to the subtraction of 104 (total size of string) minus the length calculated in the first calculation of this step

Candy Dots 1st Part =

LEFT([String Candy Dots],

104 – [Length 2nd Part])

Calculate the second part of the points, that is, the blue ones.

The characters on the right of the string will be taken, corresponding to the length calculated in the first calculation of this step.

Candy Dots 2nd Part =

RIGHT([String Candy Dots],

[Length 2nd Part])

Step 7: Move to the mark type detail (detail) in marks card, the Sub-Category variable ordered descending by the amount of the sales.

 Step 8: Move to label type in marks card, the variables: Sub-Category, % de Sales Display, Candy Dots 1st Part and Candy Dots 2nd Part

Accommodate the four variables within the text shelf, the first two variables in the first row and the last two variables in the second row. And change the texts to the desired colors.

Estante de Texto

Step 9: Move the “Column” variable to the column shelf and the “Row” variable to the row shelf.

Apply to both variables, the option of Calculation of Table using the option of “Compute Using” Sub-Category, Candy Dots 1st Part and Candy Dots 2nd Part

Step 10: Only adjust formats. And ready!

Link Tableau Public 

D_Small Multiple Grids-Final

Thank you very much @RodyZakovich for this fun challenge.

EXTRA EXERCISE

After this Rody exercise, I remembered the @tableauing design of #MakeoverMonday from week 10, where I had small waffles and each point represented a response and the colors assigned indicated the type of response obtained: Correct, Incorrect or Null.

Imagen Rodrigo

He commented that he wished he could order the points by color, but he was still working.

And I just finished Rody’s challenge, it was more than tempting to try the technique in Rodrigo’s design, where basically it was required:

  • The use of three colors, one per response type: 1) Correct, 2) Incorrect, 3) Null
  • Sort colors by type of response
  • Manage a number of variable points or dots per country. (There are countries with 20 respondents, countries with 22 respondents and countries with 26 respondents)
  • It was required to display a maximum of 9 points or dots per line.

For this exercise, you must have previously calculated by country-question, the number of:

  • Correct answers (# correct)
  • Incorrect answers (# incorrect)
  • Total people surveyed (# Total of Respondent)

Step 1: Define “String Candy Dots”. Which is composed of a total of 29 characters. 27 characters of circles distributed 9 by line, plus the 2 characters of line break. Here are two of the methods to define the string in Tableau.

DEFINITION MANUAL DEFINITION USING FORMULA
String Candy Dots =

“●●●●●●●●●

●●●●●●●●●

●●●●●●●●●”

String Candy Dots =

REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)+CHAR(10)+ REGEXP_REPLACE(SPACE(9),’\s’,’\u25cf’)

Step 2: Calculate the first sub-string corresponding to the correct answers.

VARIABLE FORMULA
Calculate the number of characters in the string of correct answers.

Its value corresponds to the number of correct answers plus 1 additional character for every 9 correct answers.

Length Correct Answers =

[# Correct]

+ INT([# Correct]/9)

Calculate the first part of the string that corresponds to the correct answers.

The left characters of the string will be taken, corresponding to the length, just calculated.

Candy Dots 1st Part=

LEFT([String Candy Button],

[Length Correct Answers])

Step 3: Calculate the second sub-string corresponding to the incorrect answers.

VARIABLE FORMULA
Calculate the number of characters in the string, the number of answers answered (both correct and incorrect). Length Answers with Response =

[# Correct] + [# Incorrect] +

INT(([# Correct]+[# Incorrect])/9)

Calculate the second part of the string that corresponds to the incorrect answers.

The LEFT () function is used to create a sub-string that corresponds to the total number of answers answered (correct and incorrect).

And to the newly calculated sub-string, the RIGHT () function is applied to create the sub-string of only the incorrect answers

Candy Dots 2nd Part =

RIGHT(

LEFT([String Candy Button], [Length Answers with Response]),

[Length Answers with Response] – [Length Correct Answers])

Step 4: Calculate the last sub-string corresponding to the unanswered or null answers.

VARIABLE FORMULA
Calculate the number of characters in the string of the total number of respondents (with correct, incorrect and unanswered answers) Length Total of Respondent =

[# Total of Respondent]

+ INT([# Total of Respondent]/9)

Calculate the last part of the string that corresponds to the answers without answering or with null value. Candy Dots 3rd Part =

RIGHT(

LEFT([String Candy Button], [Length Total of Respondent]),

[Length Total of Respondent] – [Length Answers with Response])

Step 5: Calculate the number of correct answers per country.

        Label Correct by Country =

{FIXED [Country] : [# Correct]}

Step 6: Move to label type in marks card, the variables: Candy Dots 1st Part, Candy Dots 2nd Part and Candy Dots 3rd Part.

Arrange the three variables within the text shelf in a single line in the required presentation order and change the texts to the desired colors.

Step 7: Move the “Topic” variable to the column shelf and the “Country” and “Label Correct by Country” variables to the row shelf.

Step 8: Only adjust formats. And ready!

Link a Tableau Public

Policymaker Report

Thank you very much @tableauing for sharing your design.

I hope you enjoyed reading this blog.

If you have any questions, do not hesitate to contact me on Twitter (@rosariogaunag)

Regards!

Rosario Gauna