用 Tabular Editor 在 Power BI 中创建 KPI

本文翻译自国际Power BI大师Alberto Ferrari的文章——《Creating KPIs in Power BI Desktop》。本文介绍了如何使用Tabular Editor在Power BI Desktop数据模型中创建关键绩效指标(KPI)。

从2020年7月版本更新开始,Power BI Desktop可以使用外部工具修改其内部表格模型。通过使用Tabular Editor之类的工具,您可以直接在Power BI Desktop中创建KPI,以便它可以在任何Power BI报告中使用,或者在Excel的分析功能中使用。KPI功能在之前仅在Analysis Services或Power BI Premium中创建的表格模型中可用。这篇文章将向您展示如何在Power BI Desktop中创建和使用KPI。

让我们用一个实例(虽然是虚构的)来观察一下这个特性。假设Contoso公司需要分析其产品的利润率。衡量标准是总体利润率,即随时间发生变化的利润率,产品的公差为2%。Contoso公司整体利润率为53%。利润率低于51%的类别被认为是差的(红色),超过55%的被认为是好的(绿色),介于51%和55%之间的被认为是一般的(黄色)。此外,Contoso公司希望分析利润率与上年相比的走势。例如,边距可能是红色的,但是Contoso公司可以根据其是否随着时间改善来评估将要采取的措施。

下图是我们的目标报告:


从报告中,你可以看到2008年家电选项显示为黄色,相较于上一年有所改善。同样的情况在2009年也出现了。另一方面,尽管指示图标一直显示为绿色,但相机和摄像机的增长趋势显示为负(箭头向下)。

因为KPI是在数据模型中定义的,所以在将报告发布到Power BI Service(www.powerbi.com)之后,您还可以在Excel中使用Analyze创建类似的报告。


本案例是一个KPI的完美场景。您必须对条件格式和度量进行一系列的编排设计才能生成这样的报告。此外,无论您使用Power BI和条件格式做了什么处理,都必须在Excel中重复一次。通过表格模型中的KPI选项,您可以在Margin %度量值上方创建KPI,以便定义的KPI可以被Excel和Power BI使用,并在所有可视化上保留相同的属性。

在表格模型中,KPI由一些属性定义。

首先,KPI总是基于一个度量值。当您在表格中创建KPI时,您可以使用KPI替换一个度量值。该度量值本身变成KPI的值。您仍然可以在代码中使用和引用度量值。在用户界面中,该度量值被显示为KPI,而不再作为一个度量。在本例中,我们将Margin %度量值转换为KPI。

KPI具有一些附加属性:“目标”,“状态”和“趋势”。在我们的示例中,“Margin %”的“目标”是总利润率。“状态”是一个与目标进行比较时如何引用KPI值的视觉指示器。您可以通过对度量值和KPI的“目标”执行一些数学运算来定义KPI的状态。“状态”的结果必须是一个能通过Power BI转换为可视表示形式的数字。从技术角度来看,趋势不过是另一种状态。在视觉上代表度量值与另一个值的比较。在我们的案例中,我们将“Margin %”的值与上一年同期内计算出的相同“Margin %”度量进行比较。因为我们使用的是上一年的当前值,所以我们描绘了一种趋势。

我们已经在表格中设置了KPI的基础,现在让我们来一起构建。

首先,您需要安装Tabular Editor。安装Tabular Editor后,在Power BI功能区的“外部工具”面板中,您可以看到Tabular Editor图标。


Tabular Editor用户界面(UI)与Power BI的用户界面有很大不同:Tabular Editor专为提高生产力和开发而设计。

初始模型中已经包含一些基本度量:

Sales Amount :=

SUMX ( Sales, Sales[Quantity] * Sales[Net Price] )

Total Cost :=

SUMX ( Sales, Sales[Quantity] * Sales[Unit Cost] )

Margin :=

[Sales Amount] - [Total Cost]

Margin % :=

DIVIDE ( [Margin], [Sales Amount] )

Margin % Overall :=

ROUND ( CALCULATE( [Margin %], REMOVEFILTERS () ), 2 )

正如我们前面解释过的那样,我们需要将Margin %度量值转换为KPI。右键单击Margin %度量值,并从菜单中选择“新建”->"KPI"。


通过这个操作,度量值就变成了一个KPI,并且一个新的KPI图标出现在度量值的下方。在这里,您可以更新KPI的属性。让我们来简单看一下:


主要有三个属性:状态、指标和趋势。这些是内部表格名称。正如您所看到的,状态和趋势需要您定义描述、表达式和需要用到的图形。指标(在power bi中被称为目标)有格式字符串选项,没有图形选项。

若要在Tabular Editor中编辑表达式,请从表达式编辑器的属性列表中选择属性(状态、指标或趋势表达式)。在编辑器中编辑您的DAX代码。


对于指标,我们仅使用[Overall Margin]作为目标表达式,并使用正百分数(0.00%)作为目标格式字符串。完成此操作后,您已定义了KPI的第一个属性。为了更新Power BI Desktop,必须在Tabular Editor中保存项目。Tabular Editor会通过创建KPI更新Power BI Desktop。

您会注意到,Power BI Desktop的“字段”窗格不再将“Margin %”显示为度量值。而是将Margin %显示为KPI,其中包括值,目标和状态三个属性。


如果选择“值”,则Power BI Desktop将使用原始“Margin %”度量值。如果选择目标或状态,则Power BI Desktop会调用自动创建的度量值来查询KPI。这些度量值遵循标准的命名约定。原始度量是Margin %。新创建的度量名为_Margin%Goal,_Margin%Trend和_Margin%Status。这些度量值使用您在KPI属性中提供的定义。它们作为常规度量值,您可以在DAX代码中调用它们,并在报表中使用它们。Power BI Desktop以特定方式使用这些KPI属性。例如,如果选择“状态”,则Power BI将显示图形而不是数字。

至此,我们已经设置了目标属性。让我们回到表格编辑器设置状态和趋势属性。状态通过图形元素表示。您选择所需的符号(我们使用了交通信号灯),并定义了一个状态表达式,该表达式返回一个整数,与要生成的符号相对应。因为我们使用的是交通信号灯,所以有三种状态:-1、0和1:

-- DAX code for Status Expression

VAR MarginPercentage = [Margin %]

VAR MarginTolerance = 0.02

VAR MarginGoal = [_Margin % Goal]

RETURN

IF (

NOT ISBLANK ( MarginPercentage ),

SWITCH (

TRUE,

MarginPercentage < MarginGoal - MarginTolerance, -1, -- Negative

MarginPercentage > MarginGoal + MarginTolerance, 1, -- Positive

0

)

)

如您所见,在代码中,我们使用_Margin%Goal度量来获取KPI的目标。通过将当前KPI的值与目标值以及容差进行比较,我们返回-1(不好),1(好)和0(平均值)。

现在,以类似的方式定义趋势属性。在这种情况下,我们使用标准箭头作为指示图形,并使用不同的表达式将KPI的当前值与其上一年的值进行比较。趋势表达式须定义如下:

-- DAX code for Trend Expression

VAR MarginPerc = [Margin %]

VAR PrevMarginPerc =

CALCULATE (

[Margin %],

PREVIOUSYEAR( 'Date'[Date] )

)

RETURN

IF (

NOT ISBLANK ( MarginPerc ) && NOT ISBLANK ( PrevMarginPerc ),

SWITCH (

TRUE,

MarginPerc > PrevMarginPerc, 1, -- Positive

MarginPerc < PrevMarginPerc, -1, -- Negative

0

)

)

正确设置所有内容后,表格编辑器将如下所示:


您可以保存项目并返回Power BI。现在是时候在报告中使用KPI了。请注意,您可能在Power BI的KPI属性中看不到“趋势”。您需要再次折叠并展开“字段”窗格,以强制Power BI刷新字段。

最后一步是将Margin%,Margin%Status和Margin%Trend添加到报告中。如果度量名称过长,可以重命名以保证美观。


如您所见,标题框浪费了很多空间来容纳过长的度量值名称。这就是为什么必须在视觉上重命名度量的原因。您的结果应该如下所示。


恭喜你!您在Power BI Desktop中创建了第一个KPI。关于可使用的图形,要用于状态和趋势的数字或在存在计算组的情况下KPI的行为,需要牢记一些重要的细节。但是本文已经很长了, 没有进一步的空间进行说明。请继续关注,我们将在以后的文章的文章里详细介绍。


如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊