in packages/timebrush-powerbi/src/TimeBrushVisual.ts [270:318]
private parseDatesFromPowerBi(dataView: powerbi.DataView, hasDataChanged: boolean) {
const objects: any = get(dataView, "metadata.objects", undefined);
let filterStartDate;
let filterEndDate;
let dataSourceChanged = hasDataChanged;
const objFilter = get(objects, "general.filter", undefined);
if (objFilter) {
const appliedFilter = filter.FilterManager.restoreFilter(objFilter) as models.AdvancedFilter;
if (appliedFilter && appliedFilter.conditions && appliedFilter.conditions.length === 2) {
filterStartDate = appliedFilter.conditions[0].value;
filterEndDate = appliedFilter.conditions[1].value;
// Sometimes the appliedFilter.target is null, so lets just assume that the dataSource didn't change.
dataSourceChanged = false;
if (appliedFilter.target) {
const { table, column } = getFilterTargetFromColumn(this.timeColumn);
dataSourceChanged =
table !== appliedFilter.target.table ||
column !== appliedFilter.target["column"];
}
}
// Attempt legacy load
if (!filterStartDate && !filterEndDate) {
const legacyConditions = get(objects, "general.filter.whereItems[0].condition", undefined);
if (legacyConditions && legacyConditions.upper && legacyConditions.lower) {
filterStartDate = (legacyConditions.lower).value;
filterEndDate = (legacyConditions.upper).value;
// Here we detect if the underlying datasource has changed
const colExpr = legacyConditions.arg;
if (colExpr && colExpr.source) {
const filterSource = colExpr.source;
const source = this.timeColumn && (<any>this.timeColumn.source.expr).source;
if (source) {
dataSourceChanged =
filterSource.entity !== source.entity ||
filterSource.schema !== source.schema;
}
}
}
}
}
return {dataSourceChanged, filterStartDate, filterEndDate};
}