Skip to main content
Version: 26.2.0

Working with Measure Names and Measure Values

Measure Names and Measure Values are special columns that enable you to create dynamic, multi-measure visualizations.

What are Measure Names and Measure Values?

Measure Names (MN) and Measure Values (MV) are virtual columns that transform your data structure:

  • Measure Names: A dimension column containing the names of all measures in your query
  • Measure Values: A measure column containing the actual values of those measures

How They Work

Consider a dataset with these columns:

  • Ship Mode (dimension)
  • Total Revenue (measure)
  • Total Discount (measure)
  • Total Quantity (measure)

When you enable Measure Values, your data transforms from:

Ship ModeTotal RevenueTotal DiscountTotal Quantity
Air50,0005,0001,200
Ground75,0007,5002,000

To a structure like:

Ship ModeMeasure namesMeasure values
AirTotal Revenue50,000
AirTotal Discount5,000
AirTotal Quantity1,200
GroundTotal Revenue75,000
GroundTotal Discount7,500
GroundTotal Quantity2,000

Enabling Measure Values

To use Measure Names and Measure Values, enable them when retrieving data:

const { muze, getDataFromSearchQuery } = viz;

const data = getDataFromSearchQuery({
  measureValues: {
    enabled: true,
  },
});

Once enabled, two additional columns become available:

  • "Measure names"
  • "Measure values"

Basic Usage

Creating a Simple Text Table

Display measure values as text in a table layout:

/**
 * Available Columns:
 * "Ship Mode"
 * "Total Discount"
 * "Total Quantity"
 * "Measure names" // If 'measureValues' is enabled.
 * "Measure values" // If 'measureValues' is enabled.
 */

const { muze, getDataFromSearchQuery } = viz;

const data = getDataFromSearchQuery({
  measureValues: {
    enabled: true,
  },
});

muze
  .canvas()
  .rows(["Ship Mode"])
  .columns(["Measure names"])
  .layers([
    {
      mark: "text",
      encoding: {
        text: "Measure values",
      },
    },
  ])
  .data(data)
  .mount("#chart");

Formatting Measure Values

Since Measure Values combines different measures (revenue, quantity, percentages), you often need to format them appropriately.

Using NumberFormatter

Apply formatting to measure values displayed in text layers:

/**
 * Available Columns:
 * "Ship Mode"
 * "Total Discount"
 * "Total Quantity"
 * "Measure names"
 * "Measure values"
 */

const {
  muze,
  getDataFromSearchQuery,
  formatters: { NumberFormatter },
} = viz;

const data = getDataFromSearchQuery({
  measureValues: {
    enabled: true,
  },
});

// Create a formatter for currency values
const currencyFormatter = new NumberFormatter("currency", {
  currency: "USD",
  unit: "auto",
  decimalDigits: 2,
});

muze
  .canvas()
  .rows(["Ship Mode"])
  .columns(["Measure names"])
  .layers([
    {
      mark: "text",
      encoding: {
        text: {
          field: "Measure values",
          formatter: currencyFormatter.formatterFunc(),
        },
      },
    },
  ])
  .data(data)
  .mount("#chart");

Different Formatters per Measure

For mixed measure types, use splitby formatting:

/**
 * Available Columns:
 * "Day of Week(Order Date)"
 * "Category"
 * "Ship Mode"
 * "Type"
 * "Total Discount"
 * "Total Revenue"
 * "Total Quantity"
 * "Measure names" // If 'measureValues' is enabled.
 * "Measure values" // If 'measureValues' is enabled.
 */

const {
  muze,
  getDataFromSearchQuery,
  formatters: { NumberFormatter, SplitByFormatter },
} = viz;

const data = getDataFromSearchQuery({
  measureValues: {
    enabled: true,
  },
});

// Create individual formatters for each measure
const mnFormatter = new SplitByFormatter({
  splitByField: "Measure names",
  values: {
    "Total Discount": new NumberFormatter("percent"),
    "Total Quantity": new NumberFormatter("decimal"),
    "Total Revenue": new NumberFormatter("currency", { currency: "INR" }),
  },
});

muze
  .canvas()
  .rows(["Ship Mode"])
  .columns([["Measure names"], []])
  .layers([
    {
      mark: "text",
      encoding: {
        text: {
          field: "Measure values",
          formatter: mnFormatter.formatterFunc(),
        },
      },
    },
  ])
  .data(data)
  .mount("#chart");

Formatting in Tooltips

Apply formatting to measure values in tooltips:

/**
 * Available Columns:
 * "Ship Mode"
 * "Total Discount"
 * "Total Quantity"
 * "Measure names" // If 'measureValues' is enabled.
 * "Measure values" // If 'measureValues' is enabled.
 * --- END ---
 */

const {
  muze,
  getDataFromSearchQuery,
  formatters: { NumberFormatter },
} = viz;

const data = getDataFromSearchQuery({
  measureValues: {
    enabled: true,
  },
});

const formatter = new NumberFormatter("currency", {
  currency: "USD",
  unit: "auto",
  decimalDigits: 2,
});

muze
  .canvas()
  .rows(["Measure values"])
  .columns(["Measure names"])
  .layers([
    {
      mark: "text",
      encoding: {
        text: {
          field: "Measure values",
        },
      },
    },
  ])
  .config({
    interaction: {
      tooltip: {
        fieldFormatters: {
          "Measure values": formatter.formatterFunc(),
        },
      },
    },
  })
  .data(data)
  .mount("#chart");