Power BI workout - レポートの Base theme

デフォルトのレポートテーマ CY22SU03.json をハック。最終的には カスタム レポート テーマを理解する。

**pbix ファイルの構成**
- *.pbix
    - Report
        - StaticResources
            - RegisteredResources
                - **\*.json (インポートされたカスタム テーマ ファイル)**
                - イメージファイル(Canvas background: キャンバスの背景)
                - イメージファイル(Wallpaper: キャンバス背後の背景)
            - SharedResources
                - BaseThemes
                    - **CY\*\*SU\*\*.json (デフォルトのテーマ ファイル)** 👈👈
        - Layout (レポート本体)
    - [Content_Types].xml
    - DataModel (データ本体)
    - DiagramLayout
    - Metadata
    - SecurityBindings
    - Settings
    - Version

**CY\*\*SU\*\*.json**
レポートに配置したビジュアルやフィルター ペイン などの既定値が一式含まれている。カスタム テーマ ファイル を考えるときや確かめるときにも役に立つので整理しておく。Power BI で利用するビジュアルや機能などが増えたときなどで更新されるが Power BI Desktop の更新に含まれるので何もする必要はない。2022-03 時点で "CY22SU03.json"

# Base theme (CY22SU03.json) をハック
|PropertyName|PropertyValue|
|:--|:--|
|name|CY22SU03|
|dataColors|*array*|
|foreground|`#252423`|
|foregroundNeutralSecondary|`#605E5C`|
|foregroundNeutralTertiary|`#B3B0AD`|
|background|`#FFFFFF`|
|backgroundLight|`#F3F2F1`|
|backgroundNeutral|`#C8C6C4`|
|tableAccent|`#118DFF`|
|good|`#1AAB40`|
|neutral|`#D9B300`|
|bad|`#D64554`|
|maximum|`#118DFF`|
|center|`#D9B300`|
|minimum|`#DEEFFF`|
|null|`#FF7F48`|
|hyperlink|`#0078d4`|
|visitedHyperlink|`#0078d4`|
|textClasses|*object*|
|visualStyles|*object*|

## name
レポート テーマ ファイルで唯一の必須プロパティ
|PropertyName|PropertyValue|
|:--|:--|
|name|CY22SU03|

## dataColors
|PropertyName|PropertyValue|
|:--|:--|
|dataColors|*array*|

|dataColors|
|:--|
|`#118DFF`|
|`#12239E`|
|`#E66C37`|
|`#6B007B`|
|`#E044A7`|
|`#744EC2`|
|`#D9B300`|
|`#D64550`|
|`#197278`|
|`#1AAB40`|
|`#15C6F4`|
|`#4092FF`|
|`#FFA058`|
|`#BE5DC9`|
|`#F472D0`|
|`#B5A1FF`|
|`#C4A200`|
|`#FF8080`|
|`#00DBBC`|
|`#5BD667`|
|`#0091D5`|
|`#4668C5`|
|`#FF6300`|
|`#99008A`|
|`#EC008C`|
|`#533285`|
|`#99700A`|
|`#FF4141`|
|`#1F9A85`|
|`#25891C`|
|`#0057A2`|
|`#002050`|
|`#C94F0F`|
|`#450F54`|
|`#B60064`|
|`#34124F`|
|`#6A5A29`|
|`#1AAB40`|
|`#BA141A`|
|`#0C3D37`|
|`#0B511F`|

定義のうち先頭 8 色がパレットに反映。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/294f1c04-4641-39dc-8ff4-cb04ea841973.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/b7c5578e-939e-c324-2bfc-171bed105c77.png)

## Color class
|PropertyName|PropertyValue|
|:--|:--|
|foreground|`#252423`|
|foregroundNeutralSecondary|`#605E5C`|
|foregroundNeutralTertiary|`#B3B0AD`|
|background|`#FFFFFF`|
|backgroundLight|`#F3F2F1`|
|backgroundNeutral|`#C8C6C4`|
|tableAccent|`#118DFF`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/77f35720-7818-e06a-de6d-ec5d0cbc965d.png)

### tableAccent
|PropertyName|PropertyValue|
|:--|:--|
|tableAccent|`#118DFF`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/167c7e13-ba55-acb5-f7d8-d3ab4f185105.png)


## good / neutral / bad
|PropertyName|PropertyValue|
|:--|:--|
|good|`#1AAB40`|
|neutral|`#D9B300`|
|bad|`#D64554`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/514f308f-122d-6e14-cf6d-56d0f157a546.png)

## maximum / center / minimum / null
|PropertyName|PropertyValue|
|:--|:--|
|maximum|`#118DFF`|
|center|`#D9B300`|
|minimum|`#DEEFFF`|
|null|`#FF7F48`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/947e62b3-686c-ea30-d8e6-90205dd62af8.png)

## Text class

```text
{
  "textClasses": {
    "<ClassName>": {
      "<propertyName>": <propertyValue>,
      ...
    },
    ...
  }
}
```

### Primary classes
|ClassName|propertyName-propertyValue|
|:--|:--|
|callout|"fontSize": 45<br>"fontFace": "DIN"<br>"color": "`#252423`"|
|title|"fontSize": 12<br>"fontFace": "DIN"<br>"color": "`#252423`"|
|header|"fontSize": 12<br>"fontFace": "Segoe UI Semibold"<br>"color": "`#252423`"|
|label|"fontSize": 12<br>"fontFace": "Segoe UI"<br>"color": "`#252423`"|
### Secondary classes
Base theme では未定義。Secondary class は Primary class を継承
- (Primary class) title
    - largeTitle
- (Primary class) label
    - semiboldLabel
    - largeLabel
    - smallLabel
    - lightLabel
    - boldLabel
    - largeLightLabel
    - smallLightLabel

Text class で影響するビジュアルの要素は次のリンク先で。

https://docs.microsoft.com/en-us/power-bi/create-reports/desktop-report-themes#setting-formatted-text-defaults

## visualStyles
```text
    "visualStyles": {
        "<visualName>": {
            "<styleName>": {
                "<cardName>": [{
                    "<propertyName>": <propertyValue>
                }]
            }
        }
    }
```
|VisualName|StyleName|CardName-propertyName-propertyValue|
|:--|:--|:--|
|*|*|*object*|
|scatterChart|*|*object*|
|lineChart|*|*object*|
|map|*|*object*|
|pieChart|*|*object*|
|donutChart|*|*object*|
|pivotTable|*|*object*|
|multiRowCard|*|*object*|
|kpi|*|*object*|
|slicer|*|*object*|
|waterfallChart|*|*object*|
|columnChart|*|*object*|
|clusteredColumnChart|*|*object*|
|hundredPercentStackedColumnChart|*|*object*|
|barChart|*|*object*|
|clusteredBarChart|*|*object*|
|hundredPercentStackedBarChart|*|*object*|
|areaChart|*|*object*|
|stackedAreaChart|*|*object*|
|lineClusteredColumnComboChart|*|*object*|
|lineStackedColumnComboChart|*|*object*|
|ribbonChart|*|*object*|
|group|*|*object*|
|basicShape|*|*object*|
|shape|*|*object*|
|image|*|*object*|
|actionButton|*|*object*|
|pageNavigator|*|*object*|
|bookmarkNavigator|*|*object*|
|textbox|*|*object*|
|page|*|*object*|

**すべての ビジュアル が Base theme (CY22SU03.json) に網羅されているわけではない。**
たとえば、tableEx(テーブル ビジュアル) は Base theme (CY22SU03.json) に定義されていない。継承された定義で充分であるか、個別の要素で定義されていて ビジュアル ごとの定義が必要ない感じ。

- tableEx
- funnel
- treemap
- filledMap
- decompositionTreeVisual
- keyDriversVisual
- qnaVisual
- azureMap
- rdlVisual


#### *(any VisualName) - *(any StyleName)

|VisualName|StyleName|CardName-propertyName-propertyValue|
|:--|:--|:--|
|*|*|*object*|

|CardName|propertyName: propertyValue|
|:--|:--|
|*|"wordWrap": true|
|line|"transparency": 0|
|outline|"transparency": 0|
|plotArea|"transparency": 0|
|categoryAxis|"showAxisTitle": true<br>"gridlineStyle": "dotted"|
|valueAxis|"showAxisTitle": true<br>"gridlineStyle": "dotted"|
|title|"titleWrap": true|
|lineStyles|"strokeWidth": 3|
|wordWrap|"show": true|
|background|"show": true<br>"transparency": 0|
|outspacePane|"backgroundColor": { "solid": { "color": "`#ffffff`" } }<br>"foregroundColor": { "solid": { "color": "`#252423`" } }<br>"transparency": 0<br>"border": true<br>"borderColor": { "solid": { "color": "`#B3B0AD`" } }|
|filterCard|"$id": "Applied"<br>"transparency": 0<br>"foregroundColor": { "solid": { "color": "`#252423`" } }<br>"border": true|
||"$id": "Available"<br>"transparency": 0<br>"foregroundColor": { "solid": { "color": "`#252423`" } }<br>"border": true|

##### outspacePane
フィルタ ペイン(filterCard の外側)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/12ba10eb-ff08-3d69-3a0a-f48614c7115e.png)

##### filterCard
フィルタ ペイン に配置されている filterCard
フィルタ適用可能(Available) / フィルタ適用済み(Applied) それぞれ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/a2e39a40-5797-9b38-c2fd-90c4e8970f1f.png)

#### scatterChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|bubbles|"bubbleSize": -10|
|general|"responsive": true|
|fillPoint|"show": true|
|legend|"showGradientLegend": true|

#### lineChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### map - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|bubbles|"bubbleSize": -10|

#### pieChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|legend|"show": true<br>"position": "RightCenter"|
|labels|"labelStyle": "Data value, percent of total"|

#### donutChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|legend|"show": true<br>"position": "RightCenter"|
|labels|"labelStyle": "Data value, percent of total"|

#### pivotTable - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|*|"showExpandCollapseButtons": true|

#### multiRowCard - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|card|"outlineWeight": 2<br>"barShow": true<br>"barWeight": 2|

#### kpi - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|trendline|"transparency": 20|

#### slicer - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|date|"hideDatePickerButton": false|
|items|"fontColor": { "solid": { "color": "`#252423`" } }<br>"padding": 4<br>"accessibilityContrastProperties": true }|

#### waterfallChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|

#### columnChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### clusteredColumnChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### hundredPercentStackedColumnChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### barChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### clusteredBarChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### hundredPercentStackedBarChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|legend|"showGradientLegend": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### areaChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### stackedAreaChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### lineClusteredColumnComboChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### lineStackedColumnComboChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|
|smallMultiplesLayout|"backgroundTransparency": 0<br>"gridLineType": "inner"|

#### ribbonChart - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"responsive": true|

#### group - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|

#### basicShape - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|general|"keepLayerOrder": true|
|visualHeader|"show": false|

#### shape - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|general|"keepLayerOrder": true|
|visualHeader|"show": false|

#### image - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|general|"keepLayerOrder": true|
|visualHeader|"show": false|
|lockAspect|"show": true|

#### actionButton - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|visualHeader|"show": false|

#### pageNavigator - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|visualHeader|"show": false|

#### bookmarkNavigator - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|background|"show": false|
|visualHeader|"show": false|

#### textbox - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|general|"keepLayerOrder": true|
|visualHeader|"show": false|

#### page - *(any StyleName)
|CardName|propertyName: propertyValue|
|:--|:--|
|outspace|"color": { "solid": { "color": "`#FFFFFF`" } }|
|background|"transparency": 100|


# その他
https://powerbi.connpass.com/

- [Power BI 勉強会 - connpass](https://powerbi.connpass.com/)
- [Power BI Desktop を使い始めるには](http://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)
- [Excel で Power Query を使い始めるには](http://qiita.com/PowerBIxyz/items/52e563037b855a099ca9)