> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.omni.co/feedback

```json
{
  "path": "/guides/workbooks/custom-drill-fields",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Customize drill fields

> Curate the columns displayed to users when drilling.

export const categoryIcons = {
  'administration': 'lock',
  'api': 'terminal',
  'connections': 'database',
  'dashboards': 'table-columns',
  'embed': 'code',
  'errors': 'exclamation',
  'modeling': 'wrench',
  'patterns': 'plus',
  'schedules & alerts': 'envelope',
  'visualizations': 'chart-column',
  'workbooks': 'book'
};

export const GuideSidebar = ({category, relatedLinks, updatedDate}) => {
  const [progress, setProgress] = React.useState(0);
  React.useEffect(() => {
    const sidebar = document.querySelector('.guide-sidebar');
    if (!sidebar) return;
    let container = sidebar.parentElement;
    while (container && !container.querySelector('.guide-header')) {
      container = container.parentElement;
    }
    if (container && !container.classList.contains('guide-page-layout')) {
      container.classList.add('guide-page-layout');
    }
  }, []);
  React.useEffect(() => {
    const handleScroll = () => {
      const scrollTop = window.scrollY;
      const docHeight = document.documentElement.scrollHeight - window.innerHeight;
      const scrollPercent = docHeight > 0 ? scrollTop / docHeight * 100 : 0;
      setProgress(Math.min(100, Math.max(0, scrollPercent)));
    };
    window.addEventListener('scroll', handleScroll, {
      passive: true
    });
    handleScroll();
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);
  const icon = category ? categoryIcons[category.toLowerCase()] || 'book' : 'book';
  return <aside className="guide-sidebar">
      <div className="guide-sidebar-content">
        <a href="/guides" className="guide-sidebar-back">
          <Icon icon="arrow-left" iconType="solid" size={14} />
          <span>All guides</span>
        </a>

        <div className="guide-sidebar-section">
          <div className="guide-sidebar-label">Progress</div>
          <div className="guide-sidebar-progress">
            <div className="guide-mascot">
              <svg viewBox="0 0 450 450" width="48" height="48">
                <defs>
                  <clipPath id="progressClip">
                    <rect x="0" y={450 - progress * 4.5} width="450" height={progress * 4.5} />
                  </clipPath>
                  <linearGradient id="blobbyGradient" x1="55.9753" y1="0" x2="492.197" y2="169.724" gradientUnits="userSpaceOnUse">
                    <stop stopColor="#BCA2F3" />
                    <stop offset="0.572917" stopColor="#FF7AA2" />
                    <stop offset="1" stopColor="#F3D4A2" />
                  </linearGradient>
                </defs>

                {}
                <circle cx="223.901" cy="223.901" r="213.901" transform="matrix(-0.999988 -0.0049013 0.00491945 -0.999988 447.797 449.992)" fill="#FAFAFA" stroke="#480B38" strokeWidth="20" />

                {}
                <circle cx="223.901" cy="223.901" r="213.901" transform="matrix(-0.999988 -0.0049013 0.00491945 -0.999988 447.797 449.992)" fill="url(#blobbyGradient)" stroke="#480B38" strokeWidth="20" clipPath="url(#progressClip)" />

                {}
                <path d="M310.41 195.084C310.41 200.052 301.362 212.472 284.328 212.472C266.585 212.472 258.246 201.294 258.246 195.912" stroke="#480B38" strokeWidth="17.3883" strokeMiterlimit="1.33344" strokeLinecap="round" />
                <circle cx="21.168" cy="21.168" r="21.168" transform="matrix(-1 0 0 1 388.658 169.001)" fill="#480B38" />
                <circle cx="21.168" cy="21.168" r="21.168" transform="matrix(-1 0 0 1 223.467 169.001)" fill="#480B38" />
              </svg>
            </div>
            <span className="guide-sidebar-progress-text">{Math.round(progress)}%</span>
          </div>
        </div>

        {category && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Category</div>
            <div className="guide-sidebar-category">
              <Icon icon={icon} iconType="solid" size={14} />
              <span>{category}</span>
            </div>
          </div>}

        {updatedDate && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Last updated</div>
            <div className="guide-sidebar-date">{updatedDate}</div>
          </div>}

        {relatedLinks && relatedLinks.length > 0 && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Related</div>
            <ul className="guide-sidebar-links">
              {relatedLinks.map((link, index) => <li key={index}>
                  <a href={link.href}>{link.title}</a>
                </li>)}
            </ul>
          </div>}
      </div>
    </aside>;
};

export const GuideTitle = ({title}) => {
  return <div className="guide-header">
      <h1 className="guide-title">{title}</h1>
    </div>;
};

<GuideSidebar
  categoryIcons={categoryIcons}
  category="workbooks"
  updatedDate="December 2025"
  relatedLinks={[
{ title: "Measure drill fields", href: "/modeling/measures/parameters/drill-fields" },
{ title: "Default drill fields for views", href: "/modeling/views/parameters/default-drill-fields" }
]}
/>

<GuideTitle title="Customize drill fields" />

Drilling is a great way to invite users to dig deeper into the data. For example, if you have a measure `Order Items Count` with a value of `10`, drilling lets you see more details on those 10 order items.

By default, when you drill, Omni will show the first 10 columns defined in your view. However, you can curate what columns are shown upon drilling in the workbook or the model IDE.

## Option 1: Workbook

1. In a workbook query tab, click <Icon icon="ellipsis-vertical" iconType="solid" /> and select **Modeling > Edit**:
   <img src="https://mintcdn.com/omni-e7402367/Ueaby5Zd9SfduDZ-/guides/workbooks/images/custom-drill-fields-workbook.png?fit=max&auto=format&n=Ueaby5Zd9SfduDZ-&q=85&s=af4049143d018386eef8fe7b6f1066b2" alt="" width="1486" height="676" data-path="guides/workbooks/images/custom-drill-fields-workbook.png" />
2. Use the **Drill fields** section to add, remove, and reorder the drill fields:
   <img src="https://mintcdn.com/omni-e7402367/Ueaby5Zd9SfduDZ-/guides/workbooks/images/custom-drill-field-order.png?fit=max&auto=format&n=Ueaby5Zd9SfduDZ-&q=85&s=d2f922c94389542eec33749a5bd3bcc5" alt="" width="500" height="409" data-path="guides/workbooks/images/custom-drill-field-order.png" />

<Note>
  These changes will only exist for this workbook unless you [promote them to the shared model](/modeling/develop/promotion).
</Note>

## Option 2: Model IDE

To customize the available drill fields on a measure, use the [`drill_fields` parameter](/modeling/measures/parameters/drill-fields):

```yaml title="Measure with specific drill fields" theme={null}
count:
  drill_fields:
    [
      users.id,
      users.full_name,
      users.email,
      users.age,
      users.state,
      users.country,
      "users.created_at[date]"
    ]
  aggregate_type: count
```

You can also specify a default set of drill fields for all measures in a view with the [`default_drill_fields` view parameter](/modeling/views/parameters/default-drill-fields):

```yaml title="Default drill fields for order_items view" theme={null}
default_drill_fields:
  [
    id,
    user_id,
    users.full_name,
    inventory_items.product_name,
    sale_price,
    margin,
    "order_items.created_at[date]",
    status
  ]
```
