Forum Discussion
Power BI Property pane - Slider control
Hi Team,
I am a Power BI custom visual developer.
I am trying to create a slider control for one of my property with a range 0% to 50% like the X-Axis > Maximum Size property of Clustered bar chart.
slider_control
I understand that only certain pre-defined technical name of the properties give us slider control eg. transparency.
I want to know
- What other technical names would get us the same slider control
- Is there any option to specify the control type (slider, rolodex, textbox, etc)
- Is there any documentation where this information could be found
- How to specify the range of a slider (15% to 50%)
- How to specify the unit of a slider (%, pt, k, etc)
I am stuck in a scenario where I cant create slider for my desired field because transparency is not meaningfull for the property 's technical name and also I am using that name for a different property in the same section.
Thanks in Advance.
Right. Please use numeric type instead. Anonymous is tracking a feature request to support Slider.
- Not sure because it is not documented
- You can specify the data type instead
- I don't think so
- Ted gave a very good example with numberRange
- I don't think because native visual do not provide such a feature
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
12 Replies
- v-viigCommunity Champion
As far as I know, there's no good way to specify min and max values and use the good property name.
Our suggestion is to use numberic type of property and check what user's input is.
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- TedPattisonMicrosoft Employee
Yes, this technique isn't really documented. I discovered it by reverse engineering examples created by others.
Begin by creating an integer property objects section of capabities.json.
"objects": { "barchartProperties": { "displayName": "Bar Chart Properties", "properties": { "xAxisFontSize": { "displayName": "X Axis Font Size", "type": { "integer": true } } } } }In settings.ts, define the VisualSettings class with the property based on the number type.
module powerbi.extensibility.visual { import DataViewObjectsParser = powerbi.extensibility.utils.dataview.DataViewObjectsParser; export class VisualSettings extends DataViewObjectsParser { public barchartProperties: BarchartProperties = new BarchartProperties(); } export class BarchartProperties { xAxisFontSize: number = 10; } }Finally, extend the enumerateObjectInstances method in the visual class to add a range of valid values using the validValues property of the visual as shown in the following code.
public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstanceEnumeration {
var visualObjects: VisualObjectInstanceEnumerationObject = <VisualObjectInstanceEnumerationObject>VisualSettings.enumerateObjectInstances(this.settings, options);
visualObjects.instances[0].validValues = { xAxisFontSize: { numberRange: { min: 10, max: 36 } } };
return visualObjects; }This allows you to create a slider and explicitly set the min and max values.
- AnonymousNot applicable
Hi TedPattison ,
Thanks for the reply. I tried with your approach and I was able to only get a increment/decrement box and not a slider.
I have attached a screenshot of what I am getting below
A screenshot of what you are getting will be helpful.
Appologies to the for the late reply.
- TedPattisonMicrosoft Employee
Yes, this technique isn't really documented. I discovered it by reverse engineering examples created by others.
Begin by creating an integer property objects section of capabities.json.
"objects": { "barchartProperties": { "displayName": "Bar Chart Properties", "properties": { "xAxisFontSize": { "displayName": "X Axis Font Size", "type": { "integer": true } } } } }In settings.ts, define the VisualSettings class with the property based on the number type.
module powerbi.extensibility.visual { import DataViewObjectsParser = powerbi.extensibility.utils.dataview.DataViewObjectsParser; export class VisualSettings extends DataViewObjectsParser { public barchartProperties: BarchartProperties = new BarchartProperties(); } export class BarchartProperties { xAxisFontSize: number = 10; } }Finally, extend the enumerateObjectInstances method in the visual class to add a range of valid values using the validValues property of the visual as shown in the following code.
public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstanceEnumeration {
var visualObjects: VisualObjectInstanceEnumerationObject = <VisualObjectInstanceEnumerationObject>VisualSettings.enumerateObjectInstances(this.settings, options);
visualObjects.instances[0].validValues = { xAxisFontSize: { numberRange: { min: 10, max: 36 } } };
return visualObjects; }This allows you to create a slider and explicitly set the min and max values.
- TedPattisonMicrosoft Employee
Yes, this technique isn't really documented. I discovered it by reverse engineering examples created by others.
Begin by creating an integer property objects section of capabities.json.
"objects": { "barchartProperties": { "displayName": "Bar Chart Properties", "properties": { "xAxisFontSize": { "displayName": "X Axis Font Size", "type": { "integer": true } } } } }In settings.ts, define the VisualSettings class with the property based on the number type.
module powerbi.extensibility.visual { import DataViewObjectsParser = powerbi.extensibility.utils.dataview.DataViewObjectsParser; export class VisualSettings extends DataViewObjectsParser { public barchartProperties: BarchartProperties = new BarchartProperties(); } export class BarchartProperties { xAxisFontSize: number = 10; } }Finally, extend the enumerateObjectInstances method in the visual class to add a range of valid values using the validValues property of the visual as shown in the following code.
public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstanceEnumeration {
var visualObjects: VisualObjectInstanceEnumerationObject = <VisualObjectInstanceEnumerationObject>VisualSettings.enumerateObjectInstances(this.settings, options);
visualObjects.instances[0].validValues = { xAxisFontSize: { numberRange: { min: 10, max: 36 } } };
return visualObjects; }This allows you to create a slider and explicitly set the min and max values.