Power BI技巧之使用 DAX 改进 Power BI 中的时序折线图
Power BI技巧之在同一图表中显示实际值和预测值
强关系,销售表包含关键粒度的信息;以及预算表的弱关系,它必须以不同粒度链接到三个维度。
们的主要重点是能够准备一个像下面这样的图表:演示模型中的预测度量是一段相当高级的DAX代码,它本身就需要一篇完整的文章去阐述。
在本文中,我们对使用的预测方法没有进行详细的解释;我们的目标是解释如何计算下一个度量:剩余预测。
剩下的预测指标必须分析销售表,找出有销售的最后一天,然后计算预测值。
代码如下:关于这个公式有几个有趣的注意事项:在计算LastDateWithSales变量时,我们必须使用ALL来检索销售表的最后一个日期。
如果没有ALL修饰符,该变量将计算筛选期间(或上下文)中销售的最后日期。
这将返回不正确的数字。
另一个注意事项是在筛选Result变量中的日期时使用KEEPFILTERS。
由于筛选器对DateKey列进行操作,而DateKey列是标记为日期表的表的主键,因此它将覆盖先前存在的所有筛选器。
因此,需要KEEPFILTERS来强制在当前选择的时间段内进行计算。
您可以在2010年8月了解该度量值的工作方式。
因为销售的最后一个日期是8月15日,所以剩余的预测量是在8月16日到8月底之间生成的预测。
剩下的预测值被Sales & Forecast度量值使用,Sales & Forecast 度量值简单的将两个基本的度量值相加:请记住,这两项度量值可以很容易地求和,而无需任何额外的测试。
实际上,剩余预测仅产生未来日期的价值 - 与此同时,销售额在未来日期不会产生任何价值。
因此,在任何一天都有销售或预算; 两者都不会在同一时刻出现。
现在,来进行第二步:用以前的销售额来纠正预算。
正如我们已经指出的那样,预算值过低。
应用修正因子是一项需要谨慎处理的业务要求。
在这个例子中,我们使用一种相当简单的方法:我们计算截至8月15日的预算和销售之间的百分比差异,然后我们使用这个百分比差异作为未来的修正因子。
以下是计算预算与销售之间百分比差异的度量值:这项度量值比前一项度量值简单。
PowerBI技巧之Power BI中的DAX基础知识
DAX简介DAX(数据分析表达式)是一种公式表达式语言,可用于不同的BI和可视化工具。
DAX也称为函数语言,其中完整代码保存在函数内。
DAX编程公式包含两种数据类型:数字和其他。
数字包括 - 整数,货币和小数,而其他包括:字符串和二进制对象。
以下是DAX公式的示例,该公式使用函数计算表中的列。
DAX函数还可以包括其他函数,条件语句和值引用。
DAX功能在Power BI中,您可以使用不同的函数类型来分析数据,并创建新的列和度量。
它包括来自不同类别的功能,例如 -AggregateTextDateLogicalCountingInformationPower BI提供了一种查看所有功能列表的简便方法。
当您在公式栏中开始键入函数时,您可以看到以该字母开头的所有函数的列表。
Aggregate FunctionsDAX has a number of aggregate functions.MINMAXAverageSUMSUMXCounting FunctionsOther counting functions in DAX include −DISTINCTCOUNTCOUNTCOUNTACOUNTROWSCOUNTBLANKLogical FunctionsFollowing are the collection of Logical functions −ANDORNOTIFIFERRORTEXT FunctionsREPLACESEARCHUPPERFIXEDCONCATENATEDATE FunctionsDATEHOURWEEKDAYNOWEOMONTHINFORMATION FunctionsISBLANKISNUMBERISTEXTISNONTEXTISERRORDAX Calculation TypesIn Power BI, you can create two primary calculations using DAX −Calculated columnsCalculated measures导航到“建模”选项卡时,您可以在屏幕顶部看到“新建列”选项。
PowerBI技巧之POWER BI_DAX函数简介(转自微软官方)
什么是 DAX?DAX 是公式或表达式中可用来计算并返回一个或多个值的函数、运算符和常量的集合。
简而言之,DAX 可帮助您通过模型中已有的数据创建新信息。
为何 DAX 如此重要?创建工作簿并向其中导入一些数据的过程很轻松。
您甚至可以不使用任何 DAX 公式,即可创建显示重要信息的数据透视表或数据透视图。
但是,如果您需要跨多个产品类别和针对不同日期范围分析关键的销售数据,那该怎么办?或者,如果您需要组合来自不同数据源的若干表中的重要库存数据,又该怎么办?DAX 公式提供了这一功能以及许多其他重要功能。
了解如何创建有效的 DAX 公式将帮助您最大限度地利用您的数据。
当您获得所需的信息后,可以开始解决影响您的利润的实际业务问题。
这就是商业智能,DAX 将帮助您实现它。
先决条件您可能已经熟悉了如何在 Microsoft Excel 中创建公式。
此知识将有助于您了解 DAX,但即使您对 Excel 公式没有任何经验,此处介绍的概念也将帮助您开始创建 DAX 公式和立即解决实际的商业智能问题。
我们将焦点移到特定于了解 DAX 公式在计算中使用。
您应该已经熟悉这两种Power Pivot帮助中介绍的计算的列和度量值(也称为计算字段)的基本概念。
您也应该熟悉Power Pivot创作环境和工具的 Excel 中。
示例工作簿学习 DAX 的最佳方式是创建一些基本的公式,将其与某些实际数据结合使用并自行查看结果。
这些示例和任务使用 Contoso Sample DAX Formulas.xlsx 工作簿。
可以从/fwlink/?LinkID=237472&clcid=0x409下载此工作簿。
在将此工作簿下载到您的计算机上之后,请将其打开,然后打开Power Pivot 窗口。
现在开始!我们将围绕三个非常重要的基础概念设置 DAX 的框架:“语法”、“函数”和“上下文”。
当然,DAX 中还有其他重要概念,但了解这三个概念将为您增强 DAX 技能提供最佳基础。
PowerBI技巧之DAX的参数查询
PowerBI技巧之DAX的参数查询DAX(Data Analysis Expressions)是Power BI中的一种查询语言,用于计算和分析数据模型中的数据。
DAX提供了丰富的函数和运算符,可用于创建复杂的计算和筛选条件。
其中一个强大的功能是使用DAX进行参数查询。
参数查询允许用户在查询中使用变量,而不是固定的值,从而提供了更灵活、动态和可重用的查询选项。
在Power BI中使用DAX参数查询的步骤如下:````````````4. 调用查询:在Power BI的报表或仪表盘中,可以调用查询并提供参数的值。
这样,用户可以根据需要动态地更改查询的结果。
使用DAX参数查询的好处有很多。
首先,它提供了更灵活和动态的查询选项。
用户可以根据需要更改查询的参数,而不是每次都修改查询的代码。
其次,参数查询可以使查询更具可重用性。
用户可以定义一次查询,然后多次调用它,并提供不同的参数值,而不必每次都重新创建查询。
然而,使用DAX参数查询也有一些注意事项。
首先,需要确保定义的变量在查询中被正确使用和引用。
否则,查询可能无法正常工作。
其次,需要注意变量的作用域。
变量只在声明它们的查询中可见,不能跨查询使用。
此外,参数查询可能会对性能产生影响。
当查询使用多个参数时,可能需要进行额外的计算和过滤,从而导致查询的执行速度变慢。
综上所述,DAX的参数查询是Power BI中一个强大且实用的功能。
它提供了灵活、动态和可重用的查询选项,使查询更容易理解和维护。
然而,使用参数查询需要注意变量的定义和作用域,并且要注意对查询性能的影响。
掌握DAX参数查询可以提升Power BI的数据分析和报告功能,为用户提供更多的自定义和控制选项。
PowerBI技巧之数据分析表达式(DAX)--几个常用函数
true()
固定用法。
expression
比较判断表达式
result 当满足 expression 表达式时,要进行计算的任何标量表达式。
FILTER 函数
返回表示另一个表或表达式的子集的表。
FILTER(<table>,<fБайду номын сангаасlter>)
参数:
table
要筛选的表。 此表还可以是产生的结果是表的表达式。
ALL 函数
返回表中的所有行或者返回列中的所有值,同时忽略可能已应用的任何筛选器。 此函数可用于清除筛选器并对表 中的所有行创建计算。
ALL( {<table> | <column>[, <column>[, <column>[,…]]]} )
参数:
table
要清除其筛选器的表。
column
要清除其筛选器的列。
ALL (Column[, Column[, …]]):删除表中指定列的所有筛选器;表中针对其他列的所有其他筛选器仍应用。 所
有列参数必须都来自同一个表。
ALLEXCEPT(Table, Column1 [,Column2]…):删除表中所有上下文筛选器,但已应用于指定列的筛选器除
外。
ALLSELECTED 函数
ALL 函数的参数必须或者是对某一基表的引用,或者是对某一基列的引用。 不能将表的表达式或列的表达式与 ALL 函数一起使用。
返回值: 删除了筛选器的表或列。
函数和用法:
ALL(Table):从指定表中删除所有筛选器。 实际上,ALL(Table) 返回表中的所有值,并且删除上下文中可能
已应用的任何筛选器。
PowerBI技巧之Power BI DAX语言简介2 - 使用场景
DAX主要用来对加载到Power BI中的数据做修剪。
在import完成之后,可以在Data模块看的被导入的原始数据表单。
由于Power BI不支持编辑或者修改任何原始数据,因此要想对数据进行加工,都必须先创建一个New Measure(度量值)或者New Column(列),之后在通过DAX表达式对数据进行计算整理。
一个简单的DAX表达式组成如下:1. 位置1是新建的Measure或者Column的名称,示例中叫FileCount。
Measure或者Column名可以包含空格或者特殊符号(!@#$%^&等),但不能包括等号(=)。
等号(=)表示Measure或者Column的命名已经结束,后面开始函数部分。
2. 位置2需要指定一个DAX中的函数进行计算,示例中使用了Count函数,目的是对列中的数值进行计算。
为了方便用户使用,当输入某个字母时,Power BI会自动查找以此字母开头的有关函数供用户使用,当选中某一个函数时,Power BI还会给出相应帮助,提示该函数的功能以及所需要输入的参数。
a. 列出所有包含Count字母的函数供选择。
b. 给出Count函数说明。
c. 提示Count函数所要输入的参数。
3. 位置3填入的是该函数使用的参数,需要用括号进行包裹。
示例中DDD_FileInfo[Id]表示的是DDD_FileInfo表中的ID这一列,其中,列明需要被方括号[]包裹。
回车或者点击列头中的对号即可执行该函数。
与Visual Studio类似,为了方便阅读,Power BI也用颜色对函数各个部分进行了区分,例如函数名标记成蓝色;字符串用双引号包裹起来被标记成了深红色;引用的表达式则用了紫色做标记,等等。
DAX支持多个函数进行嵌套。
例如在下面示例中就是用了两个函数,在Calculate函数中以Userelationship函数获取的结果作为参数进行计算。
PowerBI技巧之PowerBI开发 第十四篇:DAX 表达式(时间+过滤+关系)
DAX表达式中包含时间关系(Time Intelligence)相关的函数,用于对日期维度进行累加、同比和环比等分析。
PowerBI能够创建关系,通过过滤器来对影响计算的上下文。
一,时间关系DAX表达式有两种方式计算累加和,TOTALxTD()是DATESxTD()的语法糖,使得PowerBI对累加和的计算更加简单。
所有的时间关系函数都包含一个特殊的dates参数,该参数有三种形式:对date/time列的引用,格式是DateTable[Date_Column]表格表达式,返回日期/时间类型的单列表布尔表达式,用于定义日期/时间值的单列表。
为了应用时间关系,按照时间对数据分析,最好单独创建一个日期维度表,并和事实表创建 1 : N 的关联,确保关系是活跃的。
日期维度的粒度设置为Day,确保日期维度表包括所有的日期数据。
1,直接计算累加和DAX中有三个函数直接用于计算累加和,TOTALMTD是按当前月计算累加和、TOTALQTD是按当前季度计算累加和、TOTALYTD是按当前年份计算累加和:TOTALMTD(<expression>,<dates>[,<filter>])TOTALQTD(<expression>,<dates>[,<filter>])TOTALYTD(<expression>,<dates>[,<filter>][,<year_end_date>])参数 expression是聚合标量值的表达式,dates是包含日期的字段,filter是过滤器,返回的是布尔值。
例如,计算当前的销售额:= TOTALMTD(SUM(InternetSales[SalesAmount]),DateTime[DateKey])2,返回xTD得所有日期返回到当前的所有日期,参数dates是只包含一个日期列的表格,函数从dates中取第一个日期作为基准:DATESMTD(<dates>)DATESQTD(<dates>)DATESYTD(<dates> [,<year_end_date>])DATESMTD()函数适用于日期维度,该日期维度必须具有连续的非重复日期,从指定数据的第一年的1月1日到去年12月31日,该函数返回一个单列表,该表由上下文中当前日期的月份的第一个月与上下文中的当前日期之间的日期组成。
PowerBI中的高级计算DAX函数详解
PowerBI中的高级计算DAX函数详解在PowerBI中,DAX函数是一种用于数据分析和报表制作的强大工具。
它们可以用于计算、过滤、聚合和转换数据,以及执行各种复杂的计算任务。
本文将对PowerBI中一些常用的高级计算DAX函数进行详细解析,帮助读者更好地理解和应用这些函数。
一、SUMX函数SUMX函数是PowerBI中的一个高级计算函数,用于按照给定的表达式对表中的每个行进行求和。
它的语法如下:SUMX(表达式表,TABLE[列名])其中,表达式表是一个包含需要计算的表达式的表,TABLE是待求和的表,[列名]是需要求和的列名。
通过该函数,我们可以对表中的每个行进行计算,并将结果进行求和。
这对于一些需要对每个行进行计算后再求和的场景非常有用,比如计算每个产品销售量总和。
二、RANKX函数RANKX函数是用于计算给定表达式在给定表中的排名。
它的语法如下:RANKX(表,TABLE[列名],表达式,[排序顺序],[排名排序])其中,表是需要进行排名的表,TABLE是需要排名的表,[列名]是用于排序的列名,表达式是需要进行排名的表达式,[排序顺序]是指定排名是升序还是降序,[排名排序]是指定排名是否跳过相同排名的项。
通过该函数,我们可以方便地得到表中各项的排名。
三、FILTER函数FILTER函数用于根据给定的条件筛选表中的数据,并返回满足条件的行。
它的语法如下:FILTER(表,条件)其中,表是需要进行筛选的表,条件是一个布尔表达式,用于指定筛选条件。
通过该函数,我们可以快速地筛选出表中满足特定条件的行,便于进一步分析和展示。
四、CALCULATE函数CALCULATE函数是PowerBI中最常用的函数之一,用于对指定的表达式进行计算,并应用一个或多个筛选条件。
它的语法如下:CALCULATE(表达式,筛选条件1,筛选条件2,......)其中,表达式是需要计算的表达式,筛选条件是一个或多个布尔表达式,用于指定需要应用的筛选条件。
PowerBI技巧之新手上路必备的DAX函数
PowerBI技巧之新手上路必备的DAX函数1.IF函数IF函数是一种逻辑函数,用于根据条件返回不同的结果。
它的语法如下:IF(条件,结果为真时的值,结果为假时的值)例如,如果我们想根据销售额是否超过1000来判断销售业绩是否优秀,可以使用如下的公式:IF(Sales > 1000, "优秀", "普通")2.SWITCH函数SWITCH函数类似于IF函数,但是它可以根据不同的条件返回不同的结果。
它的语法如下:SWITCH(表达式,值1,结果1,值2,结果2,...)例如,我们可以使用SWITCH函数根据员工的级别设置相应的工资倍数:SWITCH(Level, 1, 1, 2, 1.5, 3, 2, 4, 3)3.CALCULATE函数CALCULATE函数用于在给定的上下文中修改计算。
它可以用于过滤数据、添加条件等。
它的语法如下:CALCULATE(表达式,过滤条件1,过滤条件2,...)例如,我们可以使用CALCULATE函数计算一些产品的销售额比总销售额的占比:CALCULATESUM(Sales),Product = "Product A"/CALCULATESUM(Sales),ALL(Product)4.FILTER函数FILTER函数用于根据条件过滤数据。
它的语法如下:FILTER(表,条件)例如,我们可以使用FILTER函数筛选出销售额超过1000的产品:FILTERProducts,Sales > 10005.TOPN函数TOPN函数用于返回按指定条件排序的前N个数据。
它的语法如下:TOPN(N,表,排序条件1,排序条件2,...)例如,我们可以使用TOPN函数返回销售额最高的前5个产品:TOPN5,Products,Sales以上是 Power BI 中一些新手上路必备的 DAX 函数,它们能够帮助您更高效地处理和计算数据。
PowerBI技巧之从图表中的断线简聊DAX中的空值(null)
之前有个小伙伴做Report,发现他弄得折线图不是连续的,出现了断线的情况,看起来很是奇怪,在某些应该是0值的位置处折线图就断掉了。
尝试调整了Report的各种设置也没有解决。
这是怎么回事呢?既然界面调整设置解决不了了问题,那就回头看一下原始数据情况。
发现出现问题的Commission Amount和正常的Discount Amount最大的不同是,Commission Amount里面有空值,而Discount Amount没有。
问题会不会出现在这些空值身上?在查询编辑器中用批量替换的方式将所有空值null替换成0,之后在查看折线图,发现断线的问题被解决了。
由此可以判断,在生成图标的时候DAX并没有将空值(null)当成0直接进行计算。
在DAX中对空值的处理逻辑有两种情况,一种是将null转换成数字0进行计算,另外一种是转换成空字符进行计算。
具体按照何种方式转换实际上是根据当前空值所在列的数据类型以及所使用的函数决定的。
在查询编辑器中,空值会显示成null,这实际上反应的是M语言对空值的定义。
而在DAX使用的数据模型中,空值以空白的形式出现,如果要将空值作为参数放到函数中是用,可以用BLANK()方法表示空值。
在算数运算中,DAX中对空值的处理与数字0逻辑相同,也就是会把BLANK()转换成0进行运算,例如:使用方法结果BLANK ()Blank valueBLANK () + 11BLANK () - 1-1BLANK () * 1BLANK value1 / BLANK ()InfiniteBLANK() / 1BLANK value在逻辑判断中,BLANK()按照FALSE进行处理,使用方法结果BLANK () && TRUE FALSEBLANK () || TRUE TrueIF(BLANK(),”Yes”,”No”)NoIF(BLANK()=TRUE(),”Yes”,”No”)NoIF(BLANK()=FALSE(),”Yes”,”No”)Yes在比较判断中,BLANK()按照等同于0,空字符”“,以及其自身,例如:使用方法结果IF(BLANK()=0,”Yes”,”No”)YesIF(BLANK()=”“,T”Yes”,”No”)YesIF(BLANK()=BLANK(),”Yes”,”No”)Yes在DAX中ISBLANK是用来专门判断当前传入参数是否是空值的函数,例如:使用方法结果IF(ISBLANK(BLANK()),”Yes”,”No”)YesIF(ISBLANK(BLANK()=0),”Yes”,”No”)No在IF函数中使用空值BLANK()表达式作为其判断真假的返回结果时有一点特殊情况需要注意,如果另外一个输出结果是TRUE()或者FALSE()表达式,则BLANK()则会被转换成FALSE()。
PowerBI作图技巧:折线图突出标识特定数据
PowerBI作图技巧:折线图突出标识特定数据
某种情况下,我们需要将图表中特定时期、或者特定数据点进⾏突出标记出来,⽐如标识
周末的数据,观察与其他的数据有没有异常。
在Excel中可以通过辅助列来完成,在PowerBI中我们可以通过DAX来实现。
以折线图为例,标识出周末的销售⾦额,以垂直阴影显⽰出来,下⾯是作图步骤.
1,为⽇期表添加周末标记
新建列,
周末 = IF('⽇期表'[星期]>5,"Y")
2,创建度量值,只显⽰周末数据点
周末标记 =
IF(SELECTEDVALUE('⽇期表'[周末])="Y",
MAXX(
ALLSELECTED('⽇期表'[⽇期]),
[销售⾦额]
)
)
为了能动态显⽰阴影的⾼度,以所选时间段的最⾼值为依据。
3,利⽤折现和柱形组合图
PowerBI中有两个组合图,都可以,任意选择⼀个,把销售⾦额放在【⾏】中,⽣成折线
图,第⼆步创建的度量值“周末标记”放在列上,会⽣成柱形图,
效果如下,
这样就清晰的显⽰出了周末数据,并且选择不同的时间段可以动态展⽰。
这⾥举的是周末的例⼦,当然还可以标记节假⽇、促销⽇等,都可以利⽤第⼀个步骤,在
⽇期表中进⾏特定的标注来实现。
用PowerBI图表进行时间序列预测分析
用PowerBI图表进行时间序列预测分析时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等。
对于大部分人来说,这是个相对比较复杂的预测建模问题,但在工具如此丰富的今天,当然可以不用自己动手建模,很多工具都可以实现这一功能。
本文介绍在PowerBI中如何进行时间序列预测。
折线图中的预测时间序列数据一般使用折线图来展现,因此在PowerBI的折现图中也就有了预测功能。
先在PowerBI中创建一个折线图,然后在分析面板中,可以看到最后要有一个【预测】功能,展开【预测】,点击添加,有以下几个参数设置,预测长度就是进行未来多长时间的预测,下面以50天为例,忽略最后N个数据点,可以避免最后一些异常值的影响;还有一个功能是可以检验预测的效果,比如忽略最后50天,预测长度也是50天,这样就可以检验最后50天的实际值和预测值的差异,通过下图可以看到,实际走势的确在预测区间内,置信区间是统计学上的一个基础术语,利用它可以计算出预测区间的上限和下限值。
通过置信区间的设置,可以控制预测的质量,因为既然是预测,结果往往会有误差,几乎不可避免。
上图用的是95%的置信区间,通俗的来说,就是实际数据有95%的可能性会落在这个区间内。
如果选择的是75%的置信区间,如下图,可以看出预测区间收窄,只有75%的可能性会落在这个区间内。
置信区间设置的越高,预测区间越大,但预测的精度较低;通过降低置信区间,可以提升预测的精度,但其可信度也随之下降。
实际预测时要平衡这二者的关系。
最后还有一个参数是季节性,如果历史数据有规律性的变化,可以在这里进行设置。
假如每年的销售数据有季节性的规律,如果数据点间隔是季度,就可以设置为4,如果数据点间隔为天,设置为365。
这里如果不填,系统会自动检测规律性。
上面的几个预测,就是没有填写这个参数,系统没有检测出历史数据有什么规律,所以预测线都是一条直线,预测区间上下限间隔相等。
PowerBI可视化技巧:折线图动态显示预算实际
PowerBI可视化技巧:折线图动态显示预算实际上篇文章介绍了利用柱形图来动态显示预算实际的做法,本文再介绍一下用折线图实现的思路。
其实用折线图也很简单,需要的字段与柱形图相同,可以直接将柱形图切换为折线图,但切换后的效果变成了这样:你会发现,折线有断点,并不是连续的,看起来很奇怪,为什么会这样呢?这是因为,我们用的两个度量值来制作折线图,这两个度量值就是两条独立的折线,以上图为例,实际收入的折线显示1-9月,在9月份结束,而预算收入的折线显示10-12月,10月才开始,因此从9月到10月之间就成了断点。
这个问题在柱形图中不成问题,因为柱形图本身就是一根根柱子分别显示的,并不需要连接到一起,但是折线图这样看就太不美观,那么如何让折线图也像正常一样连到一起呢?解决的办法就是让其中一条折线多显示一个月,比如上面的例子中,让实际收入度量值在10月返回预算数,这样前面一条折线到10月才结束;或者让预算收入在9月返回实际收入数,也就是预算折线图从9月份开始。
这里以第二种方式为例:让预算收入度量值,判断时往前推一个月,让它返回实际收入数,修改预算收入度量值如下:因为这里还要考虑是否为完整的业务月份,所以稍显复杂,其实逻辑很简单,就是让这个度量值,在正常判断的基础上,往前推一个月来显示实际数据,以便与实际收入的折线结束点保持一致,看起来正好连接在一起。
效果如下:其实在9月,两条度量值都返回了数据,并且同样是实际收入数,所以能实现连接到一起的效果。
与上篇文章一样,也可以设置个参数来动态显示某个月之前的实际数据以及之后的预测数据。
度量值修改为:这里直接判断月份,度量值就简洁多了,效果如下:无论在哪个月,都能显示出之前的实际收入和之后的预算收入,并且折线图是连续的。
这篇文章虽然讨论的是用折线图来展示预算实际,但实际上就为了解决折线图中一个经典的、经常被问到的问题:如何让折线图分成两个颜色显示,并且折线是连续不间断的?这个技巧,你学会了吗?。
PowerBI中的高级DAX函数提升数据分析的效率
PowerBI中的高级DAX函数提升数据分析的效率PowerBI是一款功能强大的商业智能工具,它提供了各种数据可视化和分析功能,帮助用户更好地理解和探索数据。
而在PowerBI中,DAX(Data Analysis Expressions)函数是一种非常重要的工具,用于处理和分析数据。
在本文中,我们将探讨一些高级DAX函数,以提升数据分析的效率。
1. SUMX函数SUMX函数是DAX函数中的一种,它可以对某个表或者一个表达式中的所有行进行求和运算。
与普通的SUM函数不同,SUMX函数可以在计算过程中应用一定的条件。
例如,我们可以使用SUMX函数计算某个产品在每个月的销售总额,而不仅仅是简单地对每个月的销售额进行求和。
这样一来,我们可以更精确地分析销售趋势和季度变化。
2. CALCULATE函数CALCULATE函数是PowerBI中最常用的函数之一,它用于在计算过程中改变筛选器的行为。
通过使用CALCULATE函数,我们可以对数据进行动态筛选和计算。
例如,我们可以通过设置CALCULATE函数在特定时间范围内计算销售额,或者仅计算某个地区的销售额。
这样一来,我们可以快速过滤和计算不同条件下的数据,以满足特定的分析需求。
3. RANKX函数RANKX函数是用于排序和排名的函数,它可以根据指定的条件对数据进行排序,并为每一行分配相应的排名值。
例如,我们可以使用RANKX函数计算每个销售人员在销售额方面的排名,并根据排名结果进行可视化展示。
这样一来,我们可以更好地了解各个销售人员的表现,并进行有效的绩效评估。
4. RELATED函数RELATED函数是一种强大的函数,它用于在不同表之间建立关联关系,并在计算过程中获取相关数据。
通过使用RELATED函数,我们可以在一个表中引用另一个表中的数据,以便进行更深入的分析。
例如,我们可以使用RELATED函数在销售订单表中引用产品表中的产品名称,从而在分析过程中更清晰地了解销售情况。
PowerBI作图技巧:在走势图上标注最大值、最小值…
PowerBI作图技巧:在⾛势图上标注最⼤值、最⼩值…这篇⽂章就来告诉你如何在⾛势图上标记出这些特定数据点,以最常⽤的折线图为例。
这是以⽇期表的⽇期为横轴,度量值[指标数据]作为值⽣成的折线图。
让我们通过⼀个度量值来标记处最⼤值,最⼤值 =IF([指标数据]=MAXX(ALLSELECTED('⽇期表'[⽇期]),[指标数据]),[指标数据])该DAX先通过MAXX函数找出所选期间的最⼤值,然后使⽤IF函数判断,如果指标数据等于这个最⼤值,则返回该数据,否则返回空值。
将这个度量值也放⼊到折线图中,并设置显⽰该系列的数据标签,效果如下图,理解了最⼤值的做法,标记最⼩值就很简单了,只要把上述代码的MAXX改成MINX就可以了,最⼩值 =IF([指标数据]=MINX(ALLSELECTED('⽇期表'[⽇期]),[指标数据]),[指标数据])同样我们还可以标记处起始点和结束点,起始点=IF(MAX('⽇期表'[⽇期])=MINX(ALLSELECTED('⽇期表'[⽇期]),'⽇期表'[⽇期]),[指标数据])结束点 =IF(MAX('⽇期表'[⽇期])=MAXX(ALLSELECTED('⽇期表'[⽇期]),'⽇期表'[⽇期]),[指标数据])注意这⾥⽐较的对象已经不是指标数据的最⼤值和最⼩值,⽽是⽇期的最⼤值和最⼩值。
把这⼏个度量值全放进来,效果如下,并且这些数据点可以随着时间段的变化⽽动态变化,不仅在折线图可以标记,在另外⼀个常⽤的⾛势图,⾯积图中同样可以⽤这个⽅法标记。
直接把折线图切换为⾯积图,这个技巧,你get了吗?/前⽂回顾/01 报表布局技巧:折叠切⽚器,拯救有限的空间02 如何⽤Power BI分析产品关联度?03 可视化演练:使⽤PowerBI复刻魔⼒象限图来知识星球,和我⼀起,精进PowerBI.。
PowerBI技巧之[PowerBI]用DAX实现20_80(帕累托Pareto)分析
到这里,可能有人会说,我要的其实不仅是这个占比,重要的是要把这些排名前20%的客户找出来。这个问题其
实反而不用那么麻烦,尽管对上面的代码做一点修改也可以做到,但代码没必要那么冗长,这里只需直接使用
TOPN()筛选一下再算行数即可:
TOP 20% CUST = CALCUL 前 20%的 订 单 所 贡 献 的 销 量 (销 售 额 或 利 润 ) 占 总 销 量 (销 售 额 或 利 润 ) 的 百
分比
先定义我们要计算的字段:销量,销售额或利润(此处详见本文关于根据用户选择决定度量值计算字段的部分)
Measure = VAR SELECTED = IF(HASONEVALUE('模式'[模式]),VALUES('模式'[模式]),0) VAR AMT = sum(Data[销售额]) VAR QTY = SUM(Data[数量]) VAR PROFIT = SUM(Data[利润]) RETURN SWITCH(SELECTED,"销售额",AMT,"销售量",QTY,"利润",PROFIT)
简述&目标
本 文 将 使 用 DAX解 决 以 下 计 算 : 1.实现对产品的AB分类,找出总共贡献利润占总利润80%左右的那些产品 2.计算出排名前20%的订单所贡献的销量(销售额或利润)占总销量(销售额或利润)的百分比 3.计算出排名前20%的客户所贡献的销量(销售额或利润)占总销量(销售额或利润)的百分比
分比
这个问题的计算原理和上一个相同,但在这里的计算方法和上一个稍有不同,因为这里调 用 了 虚 拟 表 的 列 : 20/80 Customers %= var percent_ = 0.2 var all_amt = CALCULATE('Data'[Measure]) var summ = SUMMARIZE('data','Data'[客户 ID],"cccc",'Data'[Measure]) var top_table = topn(
PowerBI技巧之[PowerBI]用DAX完成简单线性回归
简单线性回归的方法: 只需要一个度量值就可以完成简单线性回归:
要让下面代码适用于你的模型,只需要把对应的字段/度量值 替换为你自己模型的字段/度量值: Simple linear regression = VAR Known =
FILTER ( SELECTCOLUMNS ( ALLSELECTED ( 'Date'[Date] ), "Known[X]", 'Date'[Date], "Known[Y]", [Measure Y] ), AND ( NOT ( ISBLANK ( Known[X] ) ), NOT ( ISBLANK ( Known[Y] ) ) )
SUMX ( Known, Known[X] * Known[Y] ) VAR Average_X =
AVERAGEX ( Known, Known[X] ) VAR Average_Y =
AVERAGEX ( Known, Known[Y] ) VAR Slope =
DIVIDE ( Count_Items Y, Count_Items * Sum_X2 - Sum_X ^ 2
SUMX ( Known, Known[X] * Known[Y] ) VAR Average_X =
AVERAGEX ( Known, Known[X] ) VAR Average_Y =
AVERAGEX ( Known, Known[Y] ) VAR Slope =
DIVIDE ( Count_Items * Sum_XY - Sum_X * Sum_Y, Count_Items * Sum_X2 - Sum_X ^ 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
额(Sales Amount)的折线图时将其层级放于轴上,则会获得如下结果:
在下面的截图中,点击下钻按钮,它可以导航到轴属性层级中的下一级。
通过下钻可显示季度级别的数据,该模型通过使用包含季度和年份的字符串来定义数据,从而使季度列在不同年份具有唯一性。
然而显示的结果似乎过于冗余,每个数据点上的年份都重复出现了两次。
通过重复下钻操作,我们可导航到日期表层次结构的月份级别。
上图中的结果令人不解,因为X轴上每个数据点标签的年份都重复了三次。
然而,没有年份属性的季度或月份列并不能彻底解决问题。
图表中的每个点上依然会有重复的年份。
有一个不完全的解决方案是在下图所示的可视化折线图的X轴上的“连接标签”选项,将其禁用。
下图中显示的结果只是稍作改动,便从季度和月份级别上移除了年份从而改善了阅读体验,但很难想象如何在同一图表中显示超过三年的内容。
实际上,当存在过多标签时。
Power BI为每个点创建了一个只展示部分报告的滚动条(即使下一份图表中的季度和月份级别上仍然出现年份数字)。
最后一个可视化显示了36个点,若增加年份将使其在单个可视化中无法读取。
此外,若将图表扩展到以周为单位显示,则需要为每年设置52个点,同样的问题再次产生:过多的点,过多的标签。
到现在为止,因为数据需用字符串显示,所以我们使用的都是分类折线图。
折线图还提供了一种名为连续型的可视化类型,它需要轴属性为数字列或日期列。
连续折线图的轴显示的标签数量较少,这是因为缺少的标签可根据与现有标签的距离来推断。
连续折线图也对日期列起到特殊的管理作用,即显示简化的Year-Month标签。
举个例子,在下图中,度量值与之前一样,但这次使用的是连续折线图。
标签之间的距离可通过网格线来判断,这个方法也适用于判断可见轴标签之间的距离。
因为该轴现在有来自日期表中的的日期列,则可将折线图属性中的X轴区域的类型属性设置为连续型,只有日期和数字可以与连续折线图一起使用。
此外,网格线属性也已启用,它也是同一X轴区域的一部分。
虽然连续折线图改善了标签的处理,但我们只能被迫使用日粒度。
这将导致折线图中包含1000个点,然而更重要的是,这很可能不是用户想要展示的粒度。
使用月粒度或周粒度可以获得更好的信息。
我们将在下一节中展示如何通过使用DAX代码修改数据模型来克服该问题的限制性。
使用月粒度和季度粒度连续折线图
正如上一节所示,连续折线图仅适用于数字列。
日期列在内部作为数字进行管理,并且折线图会以智能方式来显示日期。
如果X 轴上的点太多,则需要压缩同一可视化中的所有数据点,连续折线图不再需要水平滚动条。
当以不同的粒度(如月粒度和季度粒度)来呈现数据时,这一方法同样很实用。
换句话说,为了使用连续折线图,你需要在轴上使用日期列。
然而,如果使用像月份和季度这样较低的粒度时,用于切片的列通常是代表月份或季度的字符串。
这种情况下,似乎只能放弃连续折线图从而被迫使用分类折线图(及其所有约束),但事实并非如此。
解锁不同时间段的连续类需使用日期列显示所需的粒度,该日期列将整个周期聚合为单个日期。
更简便的方法是在周期本身的最后一个日期聚合整个周期。
举个例子,我们可在日期表中建立如下两个计算列。
我们在此采用两种不同的技术,Year-Month计算列使用DAX函数EOMONTH计算月末,这适用于任何标准日历表。
并且,此处用于计算Year-Quarter计算列的技术对于自定义日历或月份以外的粒度同样有效:只需在筛选上下文中使
用ALLEXCEPT保留一列或多列所需标识的周期,使用单列表示所需粒度始终可行。
然而,如果该季度并非每年都是独一无二的,那我们就不用建立 Year Quarter Number 列,我们需要建立的是
ALLEXCEPT ( 'Date', 'Date'[Year],'Date'[Quarter Number] )
下图显示了连续折线图在轴属性中使用Year-Month列的结果,我们专门为该图表启用了数据标签和X轴 / 标题属性。
将轴属性中的日期列替换为Year-Quarter列后,图表的粒度以季度划分,唯一需要注意的是,在默认情况下,工具提示会显示使用日期(季度末)作为其本身的一个标签。
解决方法是用如MMMM yyyy这样的格式表示季末列和月末列。
但是,周期末不会明确呈现粒度是按月还是按季度划分,因此展示在X轴中启用标题可视化的粒度极其重要,我们也使用了月粒度去启用之前的折线图计算(下图不适用于下载的示例文件中的MMMM yyyy格式)。
如图所见,使用日期来表示月份和季度是解锁连续可视化类型的有用技能,下一节所述的是如何以周粒度呈现数据。
使用周粒度连续折线图
由于周数不同于月份、季度及年份,我们需要根据同一周的所有日期对一周的粒度进行分组,在日期表中我们创建了两个计算
日期进行分组。
下图显示了在轴上使用Week列的结果:
该可视化模型呈现数据时可提供更多正在进行的操作的相关详细信息。
第一行截至于2月2日的那一周,因此销售额仅包括了两天(2月1日和2日),而不考虑当周(1月27日至31日)其他五天的销售情况。
与上周相同,该周包括了6月29日和30日的销售数据,但不包括当周(7月1日至5日)剩余五天的销售额。
这也解释了为什么尽管月份切片器仅包括截至2008年6月的日期,但该报告却包括截至2008年7月的一周。
我们还可以创建一个度量值来从计算中删除不完整的周数,类似的技巧还可适用于不完整的月份和季度,如以下代码所示。
现在,折线图可视化可使用新的度量值来删除第一个和最后一个数据点,呈现更多可靠的数据。
在将模型可视化中的Sales Amount度量值与Sales Amount complete weeks度量值进行比较时,后者的操作会更加清晰。
新的度量值会为两个不完整的周返回一个空白值,此外,Sales Amountcomplete weeks度量值中使用的筛选技术同样适用于所
有层级;它仅包括完整的周数而不需要数周的昂贵迭代来获得正确的结果。
该结果对于按周计算平均值很有用,否则如果使用常规的Sales Amount度量值时,将会因为不完整周数的存在而导致数据不可靠。
总结
本文介绍了几种在折线图的X轴上用不同粒度的Date表来改进度量可视化的技术,这些技术可以适用于任何非标准日历。
更重要的一点是,通过使用DAX对数据模型稍作改动,我们可以解决现有可视化的某些条件限制。