Personalizar el panel Formato en objetos visuales personalizados de Power BI

A partir de la versión 5.1 de la API, los desarrolladores pueden crear objetos visuales que usen el nuevo panel Formato de Power. Los desarrolladores pueden definir las tarjetas y sus categorías para cualquier propiedad de su objeto visual personalizado, lo que facilita a los creadores de informes el uso de estos objetos visuales.

La nueva API usa el método FormatModel para personalizar partes de los paneles de formato y análisis.

Sugerencia

El método getFormattingModel reemplaza el método enumerateObjectInstances en versiones anteriores de la API.

getFormattingModel devuelve un valor de tipo FormattingModel que define el aspecto del panel de formato y análisis del objeto visual.

Además de todas las funcionalidades del panel de formato antiguo, el nuevo modelo de formato admite nuevas funcionalidades del panel de formato, nuevas propiedades y nuevas jerarquías.

Screenshot of the new formatting pane.

Para actualizar a la versión 5.1 o posterior de la API, establezca la apiVersion en el archivo pbiviz.json en 5.1 o posterior y realice una de las siguientes acciones:

Crear un objeto visual compatible con el nuevo panel de formato

Para crear un objeto visual personalizado que use el nuevo panel de formato:

  1. Defina todas los objects personalizables en el archivo capabilities.json.
    Se requieren las siguientes propiedades para cada objeto:

    • nombre de objeto
    • nombre de la propiedad
    • tipo de propiedad

    Todas las demás propiedades, incluidas DisplayName y description, ahora son opcionales.

  2. Compile el objeto visual personalizado FormatModel. Defina las propiedades del modelo de formato de objeto visual personalizado y compílelo mediante código (no JSON).

  3. Implemente la API getFormattingModel en la clase de objeto visual personalizada que devuelve el modelo de formato de objeto visual personalizado. (Esta API reemplaza a la enumerateObjectInstances que se usó en versiones anteriores).

Propiedades de formato de mapa

Si tiene un objeto visual personalizado creado con una API anterior y desea migrar al nuevo panel de formato, o si va a crear un nuevo objeto visual personalizado:

  1. Establezca la apiVersion en el archivo pbiviz.json en 5.1 o posterior.

  2. Para cada nombre de objeto y nombre de propiedad en capabilities.json, cree una propiedad de formato coincidente. La propiedad de formato debe tener un descriptor que contenga objectName y propertyName que coincida con el nombre de objeto y el nombre de propiedad en capabilities.json.

Las propiedades objects del archivo de funcionalidades siguen teniendo el mismo formato y no es necesario cambiarlas.

Por ejemplo, si el objeto circle del archivo capabilities.json se define de la siguiente manera:

"objects": {
    "circle": {
        "properties": {
            "circleColor": {
                "type": {
                    "fill": {
                        "solid": {
                            "color": true
                        }
                    }
                  }
          },
        }
      }
    }

La propiedad de formato del modelo debe ser de tipo ColorPicker y tener este aspecto:

control: {
    type: "ColorPicker",
    properties: {
        descriptor: {
            objectName: "circle",
            propertyName: "circleColor"
        },
        value: {
            value: this.visualSettings.circle.circleColor
        }
    }
}

Recibirá un error si el valor de una de las condiciones siguientes es true:

  • El nombre de objeto o propiedad del archivo de funcionalidades no coincide con el del modelo de formato
  • El tipo de propiedad del archivo de funcionalidades no coincide con el tipo en el modelo de formato

Modelo de formato

El modelo de formato es donde se describen y personalizan todas las propiedades del panel de formato.

Aplicación de formato a los componentes del modelo

En el nuevo modelo de formato, los componentes de propiedad se agrupan en categorías lógicas y subcategorías. Estos grupos facilitan el examen del modelo. Hay cinco componentes básicos, de más grande a más pequeño:

  • Modelo de formato
    El contenedor de panel más grande, que se usa para dar formato a la interfaz frontal del panel. Contiene una lista de tarjetas de formato.

  • Tarjeta de formato
    Contenedor de agrupación de propiedades de nivel superior para aplicar formato a las propiedades. Cada tarjeta consta de uno o varios grupos de formato, como se muestra aquí.

    Screenshot of formatting model with individual formatting cards.

  • Grupo de formato
    Contenedor de agrupación de propiedades de nivel secundario. El grupo de formato se muestra como un contenedor de agrupación para segmentos de formato.

    Screenshot of formatting cards divided into formatting groups.

  • Segmento de formato
    Contenedor de propiedades. Hay dos tipos de segmentos:

    • Segmento simple: contenedor de propiedad individual
    • Segmento compuesto: varios contenedores de propiedades relacionados agrupados en un segmento de formato

    En la imagen siguiente se muestran los distintos tipos de segmentos. "Fuente" es un segmento compuesto que consta de la familia de fuentes, tamaño y negrita, cursiva y modificadores de subrayado. "Color", "unidades de visualización" y los demás segmentos son segmentos simples con un componente cada uno.

    Screenshot of format pane composite and simple slices.

Propiedades de formato del panel de visualización

Cada propiedad del modelo de formato debe coincidir y el tipo de objeto en el archivo capabilities.json.

En la tabla siguiente se muestran los tipos de propiedad de formato en el archivo capabilities.json y su clase de tipo coincidente en las propiedades del modelo de formato moderno:

Tipo Tipo de valor de funcionalidades Propiedad Formatting
Boolean Bool ToggleSwitch
Number
  • NUMERIC
  • integer
  • NumUpDown
  • Control deslizante
  • Lista de enumeración enumeration:[]
  • ItemDropdown
  • ItemFlagsSelection
  • AutoDropdown
  • AutoFlagsSelection
  • * Vea la nota a continuación
    Color Rellenar ColorPicker
    Degradado fillRule GradientBar: el valor de propiedad debe ser una cadena que conste de: minValue[,midValue],maxValue
    Texto Texto
  • TextInput
  • TextArea
  • Objeto de formato de funcionalidades

    Tipo Tipo de valor de funcionalidades Propiedad Formatting
    Tamaño de fuente FontSize NumUpDown
    Familia de fuentes FontFamily FontPicker
    Alineación de líneas Alineación AlignmentGroup
    Unidades de presentación de etiquetas LabelDisplayUnits AutoDropDown

    * La propiedad de formato de lista de enumeración es diferente en el modelo de formato y en el archivo de funcionalidades.

    • Declare las siguientes propiedades en la clase de configuración de formato, incluida la lista de elementos de enumeración:

      • ItemDropdown
      • ItemFlagsSelection
    • Declare las siguientes propiedades en la clase de configuración de formato, sin la lista de elementos de enumeración. Declare su lista de elementos de enumeración en capabilities.json en el objeto adecuado. (Estos tipos son los mismos que en las versiones anteriores de la API):

      • AutoDropdown
      • AutoFlagSelection

    Propiedades del segmento compuesto

    Un segmento compuesto de formato es un segmento de formato que contiene varias propiedades relacionadas juntas.

    Por ahora tenemos dos tipos de segmentos compuestos:

    • FontControl
      Esto mantiene juntas todas las propiedades relacionadas con la fuente. Consta de las siguientes propiedades:

      • Familia de fuentes
      • Tamaño de fuente
      • Negrita [opcional]
      • Cursiva [opcional]
      • Subrayado [opcional]

      Screenshot of font composite slice with font family, font size, bold, italic, and underline options.

      Cada una de estas propiedades debe tener un objeto correspondiente en el archivo de funcionalidades:

      Propiedad Tipo de funcionalidad Tipo de formato
      Familia de fuentes Formato: {fontFamily} FontPicker
      Tamaño de fuente Formato: {fontSize} NumUpDown
      Bold Bool ToggleSwitch
      Cursiva Bool ToggleSwitch
      Subrayado Bool ToggleSwitch
    • MarginPadding El relleno del margen determina la alineación del texto en el objeto visual. Consta de las siguientes propiedades:

      • Left
      • Right
      • Superior
      • Inferior

      Cada una de estas propiedades debe tener un objeto correspondiente en el archivo de funcionalidades:

      Propiedad Tipo de funcionalidad Tipo de formato
      Izquierda Numeric NumUpDown
      Right Numeric NumUpDown
      Superior Numeric NumUpDown
      Inferior Numeric NumUpDown

    Ejemplo: aplicar formato a una tarjeta de datos

    En este ejemplo, se muestra cómo crear un modelo de formato de objeto visual personalizado con una tarjeta.
    La tarjeta tiene dos grupos:

    • Grupo de control de fuente con una propiedad compuesta
      • Control de fuente
    • Grupo de diseño de datos con dos propiedades simples
      • Color de fuente
      • Alineación de líneas

    En primer lugar, agregue objetos al archivo de funcionalidades:

    "objects": {
            "dataCard": {
                "properties": {
                    "displayUnitsProperty": {
                        "type":
                        {
                            "formatting": {
                                "labelDisplayUnits": true
                            }
                        }
                    },
                    "fontSize": { 
                        "type": {
                            "formatting": {
                                "fontSize": true
                            }
                        }
                    },
                    "fontFamily": {
                        "type": {
                            "formatting": {
                                "fontFamily": true
                            }
                        }
                    },
                    "fontBold": {
                        "type": {
                            "bool": true
                        }
                    },
                    "fontUnderline": {
                        "type": {
                            "bool": true
                        }
                    },
                    "fontItalic": {
                        "type": {
                            "bool": true
                        }
                    },
                    "fontColor": {
                        "type": {
                            "fill": {
                                "solid": {
                                    "color": true
                                }
                            }
                        }
                    },
                    "lineAlignment": {
                        "type": {
                            "formatting": {
                                "alignment": true
                            }
                        }
                    }
                }
            }
        }
    

    A continuación, cree el getFormattingModel

        public getFormattingModel(): powerbi.visuals.FormattingModel {
            // Building data card, We are going to add two formatting groups "Font Control Group" and "Data Design Group"
            let dataCard: powerbi.visuals.FormattingCard = {
                description: "Data Card Description",
                displayName: "Data Card",
                uid: "dataCard_uid",
                groups: []
            }
    
            // Building formatting group "Font Control Group"
            // Notice that "descriptor" objectName and propertyName should match capabilities object and property names
            let group1_dataFont: powerbi.visuals.FormattingGroup = {
                displayName: "Font Control Group",
                uid: "dataCard_fontControl_group_uid",
                slices: [
                    {
                        uid: "dataCard_fontControl_displayUnits_uid",
                        displayName:"display units",
                        control: {
                            type: powerbi.visuals.FormattingComponent.Dropdown,
                            properties: {
                                descriptor: {
                                    objectName: "dataCard",
                                    propertyName:"displayUnitsProperty"
                                },
                                value: 0
                            }
                        }
                    },
                    // FontControl slice is composite slice, It means it contain multiple properties inside it
                    {
                        uid: "data_font_control_slice_uid",
                        displayName: "Font",
                        control: {
                            type: powerbi.visuals.FormattingComponent.FontControl,
                            properties: {
                                fontFamily: {
                                    descriptor: {
                                        objectName: "dataCard",
                                        propertyName: "fontFamily"
                                    },
                                    value: "wf_standard-font, helvetica, arial, sans-serif"
                                },
                                fontSize: {
                                    descriptor: {
                                        objectName: "dataCard",
                                        propertyName: "fontSize"
                                    },
                                    value: 16
                                },
                                bold: {
                                    descriptor: {
                                        objectName: "dataCard",
                                        propertyName: "fontBold"
                                    },
                                    value: false
                                },
                                italic: {
                                    descriptor: {
                                        objectName: "dataCard",
                                        propertyName: "fontItalic"
                                    },
                                    value: false
                                },
                                underline: {
                                    descriptor: {
                                        objectName: "dataCard",
                                        propertyName: "fontUnderline"
                                    },
                                    value: false
                                }
                            }
                        }
                    }
                ],
            };
            // Building formatting group "Font Control Group"
            // Notice that "descriptor" objectName and propertyName should match capabilities object and property names
            let group2_dataDesign: powerbi.visuals.FormattingGroup = {
                displayName: "Data Design Group",
                uid: "dataCard_dataDesign_group_uid",
                slices: [
                    // Adding ColorPicker simple slice for font color
                    {
                        displayName: "Font Color",
                        uid: "dataCard_dataDesign_fontColor_slice",
                        control: {
                            type: powerbi.visuals.FormattingComponent.ColorPicker,
                            properties: {
                                descriptor:
                                {
                                    objectName: "dataCard",
                                    propertyName: "fontColor"
                                },
                                value: { value: "#01B8AA" }
                            }
                        }
                    },
                    // Adding AlignmentGroup simple slice for line alignment
                    {
                        displayName: "Line Alignment",
                        uid: "dataCard_dataDesign_lineAlignment_slice",
                        control: {
                            type: powerbi.visuals.FormattingComponent.AlignmentGroup,
                            properties: {
                                descriptor:
                                {
                                    objectName: "dataCard",
                                    propertyName: "lineAlignment"
                                },
                                mode: powerbi.visuals.AlignmentGroupMode.Horizonal,
                                value: "right"
                            }
                        }
                    },
                ]
            };
    
            // Add formatting groups to data card
            dataCard.groups.push(group1_dataFont);
            dataCard.groups.push(group2_dataDesign);
    
            // Build and return formatting model with data card
            const formattingModel: powerbi.visuals.FormattingModel = { cards: [dataCard] };
            return formattingModel;
        }
    

    Este es el panel resultante:

    Screenshot of format pane that results from the data card example.

    Restablecer la configuración al valor predeterminado

    El nuevo panel de formato tiene la opción de restablecer todos los valores de propiedades de tarjeta de formato de forma predeterminada haciendo clic en el botón Restablecer al valor predeterminado que aparece en la tarjeta abierta.

    Screenshot of format card reset to default button.

    Para habilitar esta característica, agregue una lista de descriptores de propiedades de tarjeta de formato a la tarjeta de formato revertToDefaultDescriptors. En el ejemplo siguiente se muestra cómo agregar el botón Restablecer al valor predeterminado :

    let dataCard: powerbi.visuals.FormattingCard = {
        displayName: "Data Card",
        // ... card parameters and groups list
    
        revertToDefaultDescriptors: [
            {
                objectName: "dataCard",
                propertyName:"displayUnitsProperty"
            },
            {
                objectName: "dataCard",
                propertyName: "fontFamily"
            },
    
            // ... the rest of properties descriptors 
        ]
    };
    

    Agregar revertToDefaultDescriptors a tarjetas de formato también permite restablecer todas las propiedades de las tarjetas de formato a la vez haciendo clic en el botón restablecer toda la configuración al valor predeterminado en la barra superior del panel de formato:

    Screenshot of format pane reset all settings to default button.

    Selector de propiedades de formato

    El selector opcional en el descriptor de propiedades de formato determina dónde se enlaza cada propiedad en dataView. Hay cuatro opciones disponibles. Obtenga información sobre ellos en los tipos de selectores de objetos.

    Localización

    Para obtener más información sobre la característica de localización y para configurar un entorno de localización, consulte Incorporación del idioma local a un objeto visual de Power BI. Usar el administrador de localización para dar formato a los componentes que desea localizar:

    displayName: this.localization.getDisplayName("Font_Color_DisplayNameKey");
    description: this.localization.getDisplayName("Font_Color_DescriptionKey");
    

    Para localizar las utilidades del modelo de formato, consulte Localización de utilidades de formato.

    Recursos de GitHub

    Pasos siguientes

    ¿Tiene más preguntas? Pregunte a la comunidad de Power BI