
这篇文章在我的博客列表中等待了一段时间,现在这是我在2019年发布的最后一篇文章。我希望大家度过美好的一年。
在这篇文章中,我讨论了数据可视化的一个非常重要的方面。颜色编码。我相信,颜色编码是向用户提供适当信息的最强大,最有效的方法之一。作为人类,我们知道颜色可以说明很多事情。例如,我们看着绿草,如果是浅绿色,我们会立即了解到草非常新鲜和健康。当她有点发黄时,我们知道她’也许渴了。当它变成棕色时,可能为时已晚。
另一个完美的例子是交通信号灯。当它是绿色时,每个人都很高兴,当它是黄色时,每个人都在竞速通过路口,好吧,我’我只是在开玩笑,有些人倾向于通过黄灯,而每个人都知道当红绿灯亮时必须停车吗?和…红色时,我们必须停下来。关于颜色编码及其对我们的生活的日常影响已经足够多了。让’谈论Power BI中的颜色编码,并迅速获得更多令人兴奋的内容。
So…在Power BI中进行颜色编码,好吧,我们可以从Power BI诞生的第一天开始进行颜色编码,但也许不是’我将在这篇文章中进行解释。条件格式也存在了一段时间。在这篇文章中,我展示了一种我们可以在Power BI中实现的技术,以便在整个报表中使用一致的颜色编码。
这是没有颜色编码的报告:

现在看起来是相同的报告,用颜色编码:

让 ’s get into it.
入门
在这项技术中,我们’请按照以下步骤操作:
- 我们使用一些很棒的免费调色板网站在线上生成了我们所需要的颜色’d想在我们的报告中使用
- 我们复制十六进制值并粘贴到Power BI(通过输入数据)
- 我们定义一个数字范围以标识我们的值将属于的范围。我个人使用百分比,但在您的情况下可能还有其他用途
- 然后,我们定义一些度量以为要着色的度量选择特定的颜色
在线生成十六进制颜色
有很多网站可以为您生成十六进制颜色。这是我最喜欢的:
- Chroma.js调色板助手:您只需选择您的调色板类型’d希望产生(顺序或发散),以及您需要的颜色数量’d喜欢产生。然后,您只需选择两种或三种颜色就可以了!它生成您所用颜色数的十六进制值’d想在您的报告中使用。 Chroma.js中一个真正强大的功能是,它可以测试调色板的色盲安全性。
- 颜色渐变表生成器:虽然它不像Chroma.js那样好用且容易使用,但它具有一些免费的炫酷功能。您需要做的是输入您的颜色的开始和结束十六进制值’d想从中创建渐变。您还需要输入您要执行的步骤’d想从中生成渐变,然后它会快速为您生成值。我发现非常有用的一件事是它为您生成了百分比,因此,在我的情况下,我更喜欢比较度量值的百分比变化,因为已经生成的百分比很方便。
对于我为此博客文章创建的示例报告文件,我使用了Chrome.js,但是,在其他一些实际项目中,我有时碰巧使用了颜色渐变表生成器。与往常一样,这取决于情况和我的情况’m going to do.
让 ’从生成一些调色板开始。
- 浏览 Chroma.js
- 请点击“Diverging” for Palette type
- 输入颜色数(我输入10)
- 将鼠标悬停在颜色上,输入或选择开始和结束颜色
- 确保调色板是色盲安全的
- 现在向下滚动并从列表中复制十六进制颜色

颜色编码
让 ’在Power BI中使用十六进制颜色。我们需要将复制的十六进制代码粘贴到Power BI Desktop中,然后添加一些将在条件格式中使用的计算列。我们给表命名“ConfigColour”。请按照以下步骤操作。
- 打开桌面
- 请点击“Enter Data”并粘贴值,然后单击确定

- 现在我要添加一个“Index” column which I’稍后将在其他列中使用。要添加索引列,请单击“Index Column” drop down from “Add Column” tab then select “From 1”
现在我’d想添加其他两列来代表每种颜色的百分比值。通过添加这些新列,我们可以对值进行颜色编码,如下所示:

这对于用彩色编码在数量增加时不希望出现的条件(例如在“健康与安全”报告中,与上一期间相比,事件数量增加)而言是有利的。在那种情况下’d用红色显示事件数量。
根据您的用例,您可能希望使用第二列来支持相反的情况,例如当销售数量与上期销售相比增长时。然后我’d想用深蓝色显示销售值以表明理想的情况。
让 ’s添加两个新列,如下所示:
- 等级 :包含从10%到100%的百分比值,其中10%代表深蓝色,而100%代表红色
- 等级Dsc :RankDsc相反地包含百分比值,从100%到10%,其中100%代表深蓝色,而10%代表红色
我们可以使用添加两个新列“Index Column”,但这一次我们需要使用十进制值作为索引。当前的用户界面“Add 指数 Column”不允许十进制值:

好消息是,这仅是一个UI限制,并且没有’t apply to “ 表 .AddIndexColumn”功能在Power Query中。因此,您可以自己编写脚本,而不会出现任何问题:
= 表 .AddIndexColumn(#"Added 指数", " 等级 ", 0.1, 0.1)

但是,等等,仍然存在一种方法,可以通过首先使用具有整数值的UI并随后更改具有整数值的代码来简化脚本编写。

我们可以使用相同的方法来添加” 等级Dsc ” column as below:
= 表 .AddIndexColumn(#"Added 等级 ", " 等级Dsc ", 1, -0.1)

现在,更改” 等级 ” and ” 等级Dsc ” columns to “Percentage”.

在Power BI Desktop中创建数据模型
现在是时候连接到您的数据源并在Power BI中构建数据模型了。我用 “AdventureWorksDW2017”示例SQL Server数据库。为了这篇文章,我只导入“FactInternetSales” and “DimDate”表格,因此我的模型如下所示:

归功于: 记录员 通过 数据Vizioner
具有以下关系:

归功于: 记录员 通过 数据Vizioner
现在我 want to create the following two measures and colour code the results:
- 同比销售百分比:计算同比销售变化的百分比
- 年初至今的销售同比百分比:计算年初至今的销售变化百分比
这是上述度量中使用的度量依赖性和DAX表达式:

归功于: 记录员 通过 数据Vizioner
销售额同比 = DIVIDE([Sales Variance Current 年 vs Last 年], [Sales Last 年])
Sales Variance Current 年 vs Last 年 =
var firstDateLYTD = FIRSTNONBLANK('Date'[FullDateAlternateKey], [Sales Last 年])
return
CALCULATE([Total Sales Amount] - [Sales Last 年], firstDateLYTD)
Sales Last 年 =
CALCULATE(
[Total Sales Amount],
CALCULATETABLE(DATEADD('Date'[FullDateAlternateKey], -1, YEAR)
, 'Date'[IsValidDateYTD] = TRUE()
))
Total Sales Amount = SUM('Internet Sales'[SalesAmount])
Date.IsValidDateYTD =
AND('Date'[DateKey] >= MIN('Internet Sales'[OrderDateKey])
, 'Date'[DateKey] <= MAX('Internet Sales'[OrderDateKey])
)
注意: 后者“Date.IsValidDateYTD”是在“日期”表中创建的计算列,用于根据“订单日期”标识有效日期。

归功于: 记录员 通过 数据Vizioner
年初至今销售额% = DIVIDE([Sales YTD] - [Sales LYTD], [Sales LYTD])
Sales YTD =
CALCULATE([Total Sales Amount]
, CALCULATETABLE(DATESYTD('Date'[FullDateAlternateKey])
, 'Date'[IsValidDateYTD])
)
Sales LYTD =
CALCULATE([Total Sales Amount]
, CALCULATETABLE(DATESYTD(DATEADD('Date'[FullDateAlternateKey], -1, YEAR))
, 'Date'[IsValidDateYTD])
)
Creating 格式ting Measures
到目前为止,我们’我们创建了我们的数据模型以及Color Config表。为了能够使用导入到“ColourConfig”在我们的条件格式表中,我们需要创建一些文本度量。当我们在条件格式中使用这些度量时,它们为每个数据点选择相关的颜色。我们希望每个数据点给我们一个介于0和1之间的值,以便当我们将该值格式化为百分比时,它将介于0和100之间。但这有点挑战性,因为我们在两个 等级 要么 RandDsc 列可被10整除,换句话说,每个值代表一个值范围或一组值。例如,30%表示30%到39%之间的任何值都属于30%桶。现在的挑战是 销售额同比 度量不一定能被10整除。例如,对于一个数据点,我们可能会获得33%的收益,但是对于33%的收益’t exist in either 等级 要么 等级Dsc 列。当我们查看数据时,我们很快就会了解到33%属于30%。要在DAX中计算相同的逻辑,需要使用以下公式将值除以10:
CONVERT([Sales YoY %] * 10, INTEGER)/10
以下是上述公式的工作原理:
- 我们乘以 销售额同比 用10来衡量 小数 介于0到10之间的值(我们将处理小于0或大于10的情况)
- 我们将 小数 价值 整数 将小数点后的数字删除。
- 最后,我们将值除以10
当我们以百分比格式格式化结果时,最终百分比值可被10整除。然后检查该值是否小于10%,则返回10%,如果大于100%,则返回100%。
现在我们创建两个文本度量,一个选择十六进制颜色,另一个选择描述。可以在我们的报告中重复使用这些措施,以使我们的颜色编码在整个报告中保持一致。因此,我创建了以下度量,您可能会在实际场景中创建更多度量。
销售额同比颜色 =
var percentRound = CONVERT([Sales YoY %] * 10, INTEGER)/10
var checkMinValue = IF(percentRound < 0.1, 0.1, percentRound)
var checkMaxValue = IF(checkMinValue > 1, 1, checkMinValue)
return
CALCULATE(
VALUES(ConfigColour[ColourHex])
, FILTER( ConfigColour
, 'ConfigColour'[RankDsc] = checkMaxValue
)
)
销售额同比 Text =
var percentRound = CONVERT([Sales YoY %] * 10, INTEGER)/10
var checkMinValue = IF(percentRound < 0.1, 0.1, percentRound)
var checkMaxValue = IF(checkMinValue > 1, 1, checkMinValue)
return
CALCULATE(
VALUES(ConfigColour[RankDsc Group])
, FILTER( ConfigColour
, 'ConfigColour'[RankDsc] = checkMaxValue
)
)
在条件格式中使用格式化措施
现在我们已经创建了一些格式化措施,使用它们有条件地格式化视觉效果(如果支持)非常容易。
以下视觉效果当前支持条件格式:
- 堆积条形图
- 堆积柱形图
- 集群条形图
- 聚集柱形图
- 100%堆积条形图
- 100%堆积柱形图
- 折线图和堆积柱形图
- 折线图和聚集柱形图
- 功能区图表
- 漏斗图
- 散点图
- 树状图
- 测量
- 卡:来自“Data Label” colour 要么 “Background” colour
- 关键绩效指标
- 表
- 矩阵
在本节中,我将说明如何轻松地有条件地格式化聚簇柱状图。
- 将聚簇柱形图放在Power BI Desktop中的页面上
- 放“Year” and “Month” on Axis
- 放“Sales YoY %” on Value
- 请点击“Format” tab from “Visualisation” pane
- 扩大“Data Colour”
- 悬停“Default Colour”然后单击省略号按钮
- 请点击“Conditional 格式ting”
- 选择“Field Value” from “Fromat 通过 ” drop down list
- 选择“Sales YoY % Colour”测量,然后单击确定

这是我们得到的:

这是我与您分享的完整报告,供您尝试:
您可以 在此处下载PBIX文件.
你使用过这种技术吗?您是否正在使用其他技术?一世’d喜欢倾听并向您学习,所以请在下面留下您的评论。
惊人!!!!非常感谢!!!