# Function useExecuteCsvQuery
useExecuteCsvQuery(...
args
):CsvQueryState
React hook that executes a CSV data query. Similar to useExecuteQuery, but returns the data in CSV format as text or as a stream.
# Parameters
Parameter | Type |
---|---|
...args | [ExecuteCsvQueryParams ] |
# Returns
Query state that contains the status of the query execution, the result data, or the error if any occurred
# Example
An example of using the hook to obtain data in a CSV string:
const { data, isLoading, isError } = useExecuteCsvQuery({
dataSource: DM.DataSource,
dimensions: [DM.Commerce.AgeRange],
measures: [measureFactory.sum(DM.Commerce.Revenue)],
filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
});
if (isLoading) {
return <div>Loading...</div>;
}
if (isError) {
return <div>Error</div>;
}
if (data) {
return <div>{`CSV as string: ${data}`}</div>;
}
return null;
An example of using the hook to obtain data in CSV format as a stream, translating headers, and triggering file download:
const { data, isLoading, isError } = useExecuteCsvQuery({
dataSource: DM.DataSource,
dimensions: [DM.Commerce.AgeRange],
measures: [measureFactory.sum(DM.Commerce.Revenue)],
filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
config: { asDataStream: true },
});
if (isLoading) {
return <div>Loading...</div>;
}
if (isError) {
return <div>Error</div>;
}
if (data) {
const reader = new FileReader();
reader.onload = () => {
if (reader.result) {
const text = reader.result as string;
const lines = text.split('\n');
// Update headers
if (lines.length > 0) {
lines[0] = translateHeaders(lines[0]); // replace with own implementation
}
// Join modified lines back to a text
const modifiedCsv = lines.join('\n');
// Create a new Blob with modified content
const modifiedBlob = new Blob([modifiedCsv], { type: 'text/csv' });
// Trigger file download
const blobURL = window.URL.createObjectURL(modifiedBlob);
const a = document.createElement('a');
a.href = blobURL;
const fileName = 'data_translated_headers'
a.download = fileName;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(blobURL);
document.body.removeChild(a);
}
};
reader.readAsText(data as Blob);
}
return null;