Forum Discussion
Problem using "d3-array".rollup (and it spread argument) in a Power BI Custom Visual
- 6 years ago
Hi Schizzomarino ,
Sorry, but I took a shot before trying it myself. But if I change the key attribute to ...key: any[] I can get your code working.
I do realise that the typing are a bit off now, but looks like TypeScript doesn't work correctly with this type of parameter binding.
But the most important thing: it compiles!
-JP
Hi Dan,
"I would like to know how to remove limitations that d3V5 encounters in Power BI."
If you use the 3rd version of tools there cannot be any limitations for external libraries usage.
If you built your porject using the 2nd version of tools, there is an instruction how to migrate.
Kind Regards,
Evgenii Elkin,
Software Engineer
Microsoft Power BI Custom Visuals
[email protected]
Thanks Evgenii v-evelk ,
I am using pbiviz 3.1.5 and have imported the rollup function from d3-array as such:
- import { rollup } from "d3-array"
(I have also installed the types for d3 and it)
- npm install --save @types/d3
- npm install --save @types/d3-array
And when only one key is used the rollup function works, it looks to me the problem resides in recognising and using the spread operator that is part of the arguments for rollup.
I am thinking it might be a typescript limitation rather than Power BI, but was hoping for a workaround that would allow me to use the data functions within d3 (rather than recoding them in typescript myself)
best,
Daniel
- jppp6 years agoContinued Contributor
Hi Schizzomarino ,
It looks to me that it is an issue with the current typedefinitions (@types/d3-array) as the current only accepts one key, see: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/cbcfdd4b12b863a82f5f1903c47fe22fa3b6975c/types/d3-array/index.d.ts#L245 There is already an issue reported, but with not much happening: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32162
This kind of errors are usually related to outdated typedefinitions used by TypeScript and you can easily update the current typedefiniton and add the missing '...'
-JP
- Schizzomarino6 years agoAdvocate I
Thanks jppp ,
I had not noticed this... Just goes to show how I still need to learn about definitions in typescript
So looking at the type definition I found this
/*
@param a The array to group.@param reduce The reduce function.@param key The key function.*/export function rollup<TObject, TKey, TReduce>(a: Iterable<TObject>, reduce: (value: TObject[]) => TReduce, key: (value: TObject) => TKey) : Map<TKey, TReduce>;Unfortunately I can't figure where to insert the spread operator here, would someone know how to change it, so the above line from the type definitions file provides the third argument as a spread one (key/TReduce)?Thanks again JPDaniel- jppp6 years agoContinued Contributor
Hi Schizzomarino ,
You can adjust your local version in the node_modules/@types/d3-array folder.
And I think you only need to add the spread '...' before the key parameter:
export function rollup<TObject, TKey, TReduce>(a: Iterable<TObject>, reduce: (value: TObject[]) => TReduce, ...key: (value: TObject) => TKey) : Map<TKey, TReduce>;
-JP