Published
Edited
May 28, 2021
1 fork
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
raw = FileAttachment("tableau-source@1").text()
Insert cell
Insert cell
secondaryInfo = raw
.split(/\d{2,10};(?={.+})/) // parse out non-JSON pieces
.filter(s => s.length) // get rid of empty strings
.map(t => JSON.parse(t)) // JSON.parse
.find(d => d.secondaryInfo).secondaryInfo // where the good stuff is
Insert cell
Insert cell
root = secondaryInfo.presModelMap
Insert cell
Insert cell
Insert cell
dataColumns = root.dataDictionary.presModelHolder
.genDataDictionaryPresModel.dataSegments[0].dataColumns
Insert cell
Insert cell
Insert cell
Insert cell
dataLookup = new Map(dataColumns.map(d => [d.dataType, d.dataValues]))
Insert cell
Insert cell
presModelMap = root.vizData.presModelHolder.genPresModelMapPresModel
.presModelMap
Insert cell
Insert cell
Insert cell
Insert cell
columns1 = presModelMap[sheet].presModelHolder.genVizDataPresModel
.paneColumnsData.paneColumnsList[0].vizPaneColumns
Insert cell
columns2 = presModelMap[sheet].presModelHolder.genVizDataPresModel
.paneColumnsData.paneColumnsList[1].vizPaneColumns
Insert cell
Insert cell
columns1[1].aliasIndices.length
Insert cell
uniqueValues = new Set(columns1[1].aliasIndices)
Insert cell
Insert cell
positives = {
const indices = columns1[1].aliasIndices;
const values = dataLookup.get('integer');

return indices.map(idx => values[idx]);
}
Insert cell
Insert cell
uniqueDates = new Set(columns1[2].valueIndices)
Insert cell
Insert cell
dates = {
const indices = columns1[2].valueIndices;
const values = dataLookup.get('datetime');

return indices.map(idx => values[idx].replace(' 00:00:00', ''));
}
Insert cell
data = d3.zip(dates, positives).map(([date, positive]) => ({ date, positive }))
Insert cell
Insert cell
Inputs.table(data)
Insert cell
Insert cell
uniqueLineLabels = new Set(columns2[2].aliasIndices)
Insert cell
Insert cell
lineCategories = {
const indices = columns2[2].aliasIndices;
const values = dataLookup.get('cstring');

return indices.map(idx => values[idx]);
}
Insert cell
Insert cell
lineValues = {
const indices = columns2[3].valueIndices;
const values = dataLookup.get('real');

return indices.map(idx => values[idx]);
}
Insert cell
Insert cell
lineDates = {
const indices = columns2[1].valueIndices;
const values = dataLookup.get('datetime');

return indices.map(idx => values[idx].replace(' 00:00:00', ''));
}
Insert cell
lineData = d3
.zip(lineCategories, lineValues, lineDates)
.map(([label, value, date]) => ({ label, value, date }))
Insert cell
Insert cell
Insert cell
Insert cell
d3 = require('d3-array@2')
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more