Documentation

VisQuill Lens
User Tutorial

Everything you need to load your geographic data, configure the visual, and share your results.

What is VisQuill Lens?

Overview · 1:25

Overview — Basic functionality of VisQuill Lens

Click to load from YouTube

VisQuill Lens is an interactive map visual that lets you explore geographic data by dragging circular lenses across a map. Each lens aggregates the data underneath it and displays a chart — giving you an immediate spatial picture of how values vary across a region.

It is available as a custom visual for Microsoft Power BI and as a standalone web application at visquill.com/visuals.

Quick Start

Getting Started · 2:54

Getting Started — Loading a dataset and configuring a lens

Click to load from YouTube

When you open the standalone app, a London example dataset is loaded automatically — showing the distribution of cafés, fast food outlets, and grocery stores across the city. You will immediately see a working visual you can interact with.

🖼 London example — on first open Screenshot
London example loaded on startup, showing three lenses over central London
The app loads with example data on first open — no setup needed.

Drag the lens circles across the map to explore different neighbourhoods. Notice how the chart inside each lens changes as it moves — comparing the food environment in areas like the City, Shoreditch, or Notting Hill.

Click Change data in the top bar when you are ready to load your own data.

Preparing Your Data

The golden rule: use absolute numbers

VisQuill Lens aggregates values spatially — it sums everything inside the lens circle. This means you must use absolute counts, not percentages or rates.

Important: If you use percentages, the lens will sum them, producing meaningless results. Summing "40% employed" and "35% employed" gives "75%" which has no real-world meaning. Use the raw counts instead — number of venues, number of people, number of votes, etc.

The Stockholm example datasets below use this correctly — each row represents one point of interest, with a 1 in the column matching its category and 0 in all others. When the lens moves over an area, it sums those 1s to tell you how many of each type are there.

Column names

VisQuill Lens automatically detects your coordinate columns. For the best experience, name your columns clearly. The visual recognises these patterns:

ColumnRecognised names
Latitudelat, latitude, breite, breitengrad
Longitudelng, lon, long, longitude, länge, längengrad
Location IDid, location_id, loc_id, ags, key, code, nr

If your column names are not recognised automatically, you can assign them manually in the column mapping step of the data loading wizard.

Tip: Coordinates must be in decimal degrees — for example 59.3263 for latitude and 18.0840 for longitude. Latitudes must be between −90 and 90, longitudes between −180 and 180.

File format

VisQuill Lens accepts CSV files. Most spreadsheet applications can export to CSV via File → Save As or File → Export. Tab-separated and semicolon-separated files are also supported — you can select the separator in the wizard after loading.

Your data never leaves your computer. All files are processed locally in your browser — nothing is uploaded to any server.

Example datasets — Stockholm

Three CSV files covering Stockholm from OpenStreetMap — restaurants, shops, and tourism. Download them to use as a reference or to try the loading workflow yourself. Together they demonstrate the multiple flat files mode, with one file per lens.

restaurants.csv shops.csv tourism.csv

Each file has its own coordinates and a set of binary category columns:

restaurants.csv — cuisine categories

latlngnameAsianEuropeanMid. EasternAmericanAfricanOther
59.305317.9633Marino010000
59.328418.0631Tegelbacken000001

shops.csv — retail categories

latlngnameFoodFashionHealth/BeautyHomeLeisure
59.342818.0367Cykelringen00001
59.337218.0911ICA Karlaplan10000

tourism.csv — attraction categories

latlngnameMuseumGalleryPublic ArtNatureEntertainment
59.324918.0706Gamla stan00001
59.326318.0840Moderna museet10000

Loading Your Data

Click Change data in the top bar to open the data wizard. The wizard guides you through the process in three steps.

1

Choose how you want to load data

Select from CSV upload, load a saved session, or browse example datasets.

2

Choose your data structure

Tell the wizard how your CSV files are organised — one of three options below.

3

Upload and map your columns

Drop your files, confirm the column assignments, and click Load data.

🖼 Step 1 — Choose data source Screenshot
the data wizard step 1, showing the three options — CSV upload, load session, browse examples

Option 1 — Single flat table

One CSV file containing coordinates and all data columns together. All measure columns are assigned to Lens 1 automatically. This is the simplest option — use it when all your data is in one file.

latlngMuseumGalleryNatureEntertainment
59.326318.08401000
59.365518.07100010
🖼 Single file — drop zone with file loaded Screenshot
the drop zone after loading tourism.csv, showing the file name, row count, and column mapping with lat/lng detected

Option 2 — Multiple flat files

Up to three CSV files, each containing their own coordinates and data columns — one file per lens. No shared ID is needed. This is the format used by the three Stockholm datasets — each file maps directly to one lens.

FileLensColumns
restaurants.csvLens 1Asian, European, Mid. Eastern, American, African, Other
shops.csvLens 2Food, Fashion, Health/Beauty, Home, Leisure
tourism.csvLens 3Museum, Gallery, Public Art, Nature, Entertainment
🖼 Multiple flat files — all three Stockholm files loaded Screenshot
the wizard with three drop zones, each showing a loaded Stockholm CSV — restaurants on Lens 1, shops on Lens 2, tourism on Lens 3

Option 3 — Separate tables

A locations file with coordinates plus up to three data files — one per lens — joined by a shared location ID. Use this when your data files do not contain coordinates but share a common identifier with your locations table.

locations.csv

idlatlng
district-151.5074-0.1278
district-253.4808-2.2426

data.csv → Lens 1

id0–1718–6465+
district-112400482009800
district-2187007130014200
Tip: If your file uses a separator other than a comma, a separator selector appears below the drop zone after loading. Switch to semicolon or tab as needed.

Configuring the Visual

Click Configure in the top bar to open the configuration panel.

Fields tab

Assign your data columns to lenses. Click a column in the available list, then click the lens slot you want to assign it to. You can assign multiple columns to one lens — each becomes one bar in the chart. You can also move columns between lenses or remove them.

🖼 Fields tab — columns assigned to lenses Screenshot
the Fields tab showing the Stockholm restaurant columns (Asian, European, etc.) assigned to Lens 1, shop columns to Lens 2, tourism columns to Lens 3

Map tab

Choose your map style from built-in providers — CartoDB, OpenStreetMap, Stadia, and others. You can also enter a custom tile URL. Set the home position by clicking Set current view as home.

Visual tab

Control the overall appearance — background mask (glass pane), title and subtitle, and whether data points are shown as dots on the map.

Lens tabs

Each active lens has its own tab for detailed configuration:

  • Colors — set each bar's color individually or apply a gradient from a base color
  • Scale — linear or square root scaling for bar heights
  • Labels — show or hide category labels, value labels, and grid lines
  • Rim — adjust rim radius and baseline appearance
🖼 Lens tab — color and appearance settings Screenshot
the Lens 1 tab showing color pickers for each restaurant category, and label toggles

AI Assistance tab

Write a natural language instruction — for example "use warm tones for restaurants and show value labels" — then download or copy the generated prompt and paste it into any AI assistant such as Claude or ChatGPT. Paste the response back to apply the changes automatically.

AI Assistance · 1:50

Configure with AI in Under 2 Minutes

Click to load from YouTube

Saving & Exporting

Save a session

Click Save in the top bar to save your session as a .json file. This includes your data and all configuration. Load it again later via Change data → Load saved session, or share it with a colleague.

🖼 Save dialog Screenshot
the save dialog showing the two options — assigned columns only vs. full dataset — with location and column counts for each

Export for the web

Click Export to produce a standalone web viewer as a zip file. Deploy it to any static host — no server-side code required.

Netlify

Go to netlify.com/drop and drag the unzipped folder onto the page. Your visual is live in seconds.

GitHub Pages

Push the files to a repository and enable Pages in Settings.

Preview locally

Open a terminal in the unzipped folder and run:

python3 -m http.server 8080

Then open http://localhost:8080 in your browser.

Using VisQuill Lens in Power BI

Power BI Visual · 2:15

Using the VisQuill Lens custom visual in Power BI

Click to load from YouTube

Download the .pbiviz file from visquill.com/visuals and import it via Insert → More visuals → Import a visual from a file. The evaluation version is fully functional — try it directly with your own data.

Data roles

  • Latitude — a numeric latitude field
  • Longitude — a numeric longitude field
  • Location — optional text field used as a unique identifier
  • Lens 1, Lens 2, Lens 3 — numeric measure fields, one set per lens
Tip: Add multiple measures to a single lens to compare them as separate bars within the same chart.

Configuration and presentation mode

The configuration panel works exactly as described above. In Power BI, your configuration is automatically saved with the report. Enable Presentation mode in the Format pane to hide the configuration toggle when sharing reports with end users.

Troubleshooting

No data appears on the map

  • Check that latitude and longitude columns are correctly assigned in the column mapping step
  • Verify coordinates are in decimal degrees, not degrees/minutes/seconds
  • Check that latitude values are between −90 and 90 and longitude values are between −180 and 180

The lens shows zero or unexpected values

  • Make sure you are using absolute counts, not percentages or rates
  • Check that columns are assigned to the correct lens in the Fields tab
  • Try increasing the lens radius — the area may contain fewer locations than expected

Map tiles are not loading

  • Check your internet connection — tiles are loaded from third-party providers
  • Some providers require an API key — check the Map tab
  • Try switching to a different map style

My CSV file is not loading correctly

  • Check that the separator matches — use the separator selector below the drop zone
  • Make sure the file is saved in UTF-8 encoding if it contains special characters
  • Check there are no empty rows at the top before the header row

Getting Help

For questions, feedback, or assistance with your specific use case, contact contact@visquill.com.

More about pricing and licensing at visquill.com/visuals.