Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bugfix]: Fixing bug in label generation for multiple groupbys #3594

Merged
merged 1 commit into from
Oct 4, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions superset/assets/visualizations/nvd3_vis.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,16 @@ function getMaxLabelSize(container, axisClass) {
/* eslint-disable camelcase */
function formatLabel(column, verbose_map) {
let label;
if (verbose_map) {
if (Array.isArray(column) && column.length) {
label = verbose_map[column[0]];
if (column.length > 1) {
label += `, ${column.slice(1).join(', ')}`;
}
} else {
label = verbose_map[column];
if (Array.isArray(column) && column.length) {
label = verbose_map[column[0]] || column[0];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it a safe assumption that metric is always in position 0?

const label = column.map(s => verbose_map[s] || s).join(', ') may be more elegant but it may "verbosify" dimension members instead of metrics (collisions are probably rare and not super problematic). This problem exist here too as in this current case column[0] could be a metric or a dimension member anyhow.

Now I'm thinking verbosifying could be done in the backend where we know what is a metric or a dim member (this info is lost on the frontend). I know I said to verbosify it in the frontend earlier. What I wanted to avoid was using verbose names in dataframe column headers...

In any case I'll merge this to fix the bug and we can revisit later if needed.

Copy link
Contributor Author

@fabianmenges fabianmenges Oct 4, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, so my change for renaming on the backend is still around somewhere #3437.

Anyways your change #3563 as well as the original code also assumed it in the first position too.
There are some advantages (that we currently don't use) to do it in the front end.
E.g. we could have a checkbox that cloud switch between verbose and regular name or you could have custom verbose maps per slice instead of per datasource. And updating the charts would not require requests to the application.

So if we document and define that metrics always have to come before groupys we should be fine doing it in the UI.

if (column.length > 1) {
label += ', ';
}
label += column.slice(1).join(', ');
} else {
label = verbose_map[column] || column;
}
return label || column;
return label;
}
/* eslint-enable camelcase */

Expand Down