PowerBI技巧之PowerBI_DAX的计算组之间的优先级设置
- 格式:pdf
- 大小:1.73 MB
- 文档页数:4
之前介绍的TOPN函数可以获得前N个数据返回的表单,但这个函数通常是作为参数被其他函数使用,通常如果想在可视化图表中获得前N个数据列表,通常会使用RANKX函数。
用RANKX函数获得Top N数值的思路比较直接,就是先按照排序要求,创建RANKX函数去计算不同行数值的排序序号,之后按照要求只显示前N个数据即可。
最直接的方法就是通过添加视觉级筛选器来实现,例如下图用RANKX函数按照销售量对数据进行排序后,可以用视觉级筛选器显示销售额前三的数据。
TotalS_SUM = SUM(SalesInfo[Amount])RankQ_A = RANKX ( ALL(SalesInfo[Product]),[TotalQ_SUM],, DESC )这种设置方式的优点是简单直观,不用添加或者修改DAX表达式就可以实现,任何小白都可以上手。
缺点也比较明显,首先是这个修改只对当前表单起作用,如果你想有其他也使用了对应RankQ_A度量值的图表也只显示Top 3数据就必须去找的这个图表进行再次修改。
其次,这种修改只能通过页面筛选器获得,不能使用切片器等可视化工具来实现,应用在图表制作中并不美观,实用性也比较查。
如果想制作一个切片器,通过选择切片器上不同的数值来动态获取Top N数据,则需要通过添加新的DAX表达式来获得。
方法如下:首先,由于切片器不支持使用度量值作为字段,因此需要创建一个模拟参数来作为切片器使用的字段,之后将该模拟参数作为获取Top N数据的参数来使用。
创建模拟参数方法很简单,在报表页面(注意,一定是报表页面),选择新建参数,然后填写模拟参数名称,以及相关设置值即可。
对于TOPN这个类型模拟参数,一般可以设置求Top 5, Top 10, Top 20这种,选择整数类型,增量值为1.点击确定后能看到Power BI新创建了一个名为TopN的表单,里面只包含TopN列,即可以选择的N值,同时在报表页面也新创建了一个切片器,使用了TopN列。
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导航到“建模”选项卡时,您可以在屏幕顶部看到“新建列”选项。
在数据报表中常有一类需求是按照一定要求对数据进行排序,然后根据排序结果,获取前N个数据,例如,求总成绩排名前10的学生,求销售量最多的前3个产品等等。
在DAX中要实现该需求,通常是用的函数有两个,一个是TOPN,还有一个是RANKX。
本文主要介绍TOPN的用法,其语法结构如下:TOPN(<n_value>, <table>, <orderBy_expression>, [<order>[, <orderBy_expression>, [<order>]]…])TOPN函数主要有3个参数组成:<n_value>处需要填写一个返回的行数,也就是想要获取前多少个数据,即N值。
可以是一个数字,也可以是一个返回单一数字的表达式。
< table>处指定从哪个表单中获取前N个数据,可以填写一个表单或者可以返回表单的表达式。
<orderBy_expression>处填写一个表达式,该表达式的返回结果将作为表单的排序依据。
< order>是一个可选项,如果填写0或者FALSE或者DESC,代表按照降序对表单进行排序;如果填写1或者TRUE或者ASC,则按照升序对表单进行排序。
如果缺省则表示0,如果填写其他数值,则DAX会报错。
TOPN函数的返回结果是一个表单,也就是说,如果是单一的直接使用TOPN函数,只能通过创建一个计算表单来调用。
如果是想在度量值或则计算列中使用TOPN函数,则必须作为其他函数的参数而进行使用。
说明:1. n_value这个地方如果填写的是正小数,则DAX会取小数点后一位,然后按照四舍五入规则转换成整数,来确定N值。
如果填写的是负数或者0,则返回空表单。
2. 对于排序结果,如果有相同值,即排序序号相同,当这种数据符合前N的筛选条件时,TOPN函数会把相同值数据都作为结果进行返回。
转载自:知乎在实际做报表时,有时会遇到需要对某些指标(例如销售额等)进行排名,所以今天跟大家讨论一下可以实现排名的DAX函数-RANKX函数。
—————————————————————————————————————————————————————首先看下RANKX函数的参数:RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])其中table:表,或者能返回表的DAX表达式。
expression: 任何返回单一标量值的DAX 表达式,此表达式将针对 table 的每一行进行计算,以生成所有用于排名的可能值。
value:(可选)任何返回要找到其排名的单个标量值的 DAX 表达式。
order:(可选)指定如何对 value 排名的值,从低到高或从高到低。
ties:(可选)一个枚举,它定义如何在具有等同值时确定排名。
函数返回值:针对为表中每一行计算的表达式,返回值列表中当前表达式的排名。
函数返回值—————————————————————————————————————————————————————下图为我们此次讨论用到的数据,为方便起见,我们将数据做了简化,分别为’销售记录’表和’产品’表。
现在,我们需要对各类产品的销售额进行排名。
要实现排名,我们可以在表中创建计算列,也可以写度量值。
此次我们先来看下相对简单的计算列。
因为要对各产品的销售额进行排名,所以我们先写出[销售额]的公式:销售额 = sum('销售记录'[销售])接着在’产品’表中新建列,命名为[排名1],然后使用RANKX函数写出[排名1]列的公式:排名1 = rankx('产品',[销售额])结果如下:但是有人可能会无意发现这个问题,若排名的公式不完全按上文那样写,不预先写出度量值[销售额],而是将其直接嵌套入RANKX函数中,如下,结果怎么不对了呢?排名2 = rankx('产品',SUM('销售记录'[销售]))这是因为,RANKX是一个迭代函数,它对’产品’表中的每一行都计算了该函数第二个参数处的表达式,然后再根据计算结果进行排名。
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方法计算TOP1的值在Power BI中,DAX (Data Analysis Expressions) 函数是一种用于计算和分析数据的语言。
它提供了多种方法来计算TOP1的值。
在本文中,将介绍三种常用的DAX函数来计算TOP1的值。
1.MAX函数:
MAX函数用于返回一个给定列中的最大值。
可以将MAX函数与其他函数结合使用,以获取TOP1的值。
例如,如果有一个“销售额”列和一个“产品名称”列,可以使用以下DAX公式计算TOP1的产品销售额:```DAX
=MAXX(VALUES(表名[产品名称]),[销售额])
```
这个公式中,VALUES函数用于获取产品名称列的唯一值,MAXX函数用于获取销售额列中的最大值。
2.TOPN函数:
TOPN函数用于返回给定列中的前n个值。
可以将TOPN函数与其他函数结合使用,以获取TOP1的值。
例如,如果有一个“销售额”列和一个“产品名称”列,可以使用以下DAX公式计算TOP1的产品销售额:```DAX
=TOPN(1,表名,[销售额],DESC)
```
这个公式中,TOPN函数用于返回表名中基于销售额列的前1个值,DESC参数用于按降序排列。
3.RANKX函数:
RANKX函数用于为给定列中的每个值分配一个排名。
可以将RANKX函数与其他函数结合使用,以获取TOP1的值。
一、power bi dax简介Power BI是微软提供的一款数据分析和可视化工具,而DAX(Data Analysis Expressions)是用于Power BI中的数据分析表达式语言。
在Power BI中使用DAX语言可以进行不同类型的数据计算、过滤和汇总,帮助用户更好地理解数据,做出更准确的决策。
二、DAX语句的排列顺序在编写Power BI的DAX语句时,需要注意语句的排列顺序,以确保语法正确和逻辑清晰。
一般来说,DAX语句可以按照以下顺序排列:1. 声明变量:可以使用VAR关键字声明变量,以便在后续的计算中复用某个表达式的结果。
2. 计算列:可以使用CALCULATE关键字创建计算列,将某个表达式的计算结果作为新的列添加到数据表中。
3. 定义度量值:可以使用DEFINE MEASURE关键字定义度量值,用于在报表中进行汇总和计算。
三、DAX语句的基本语法在编写DAX语句时,需要掌握其基本语法,包括以下几个方面:1. 表达式:DAX语句中的表达式可以是数学运算、逻辑运算、文本操作等,需要根据实际需求选择合适的表达式。
2. 函数:DAX语句中包含了丰富的函数库,用于完成各种数据分析和计算操作,包括聚合函数、数学函数、逻辑函数等。
3. 运算符:DAX语句中包含了各种运算符,包括加减乘除、逻辑运算、文本连接等,需要根据实际需求选择合适的运算符。
四、DAX语句的常见问题及解决方法在编写DAX语句时,可能会遇到一些常见问题,比如语法错误、逻辑错误等,需要注意以下几个方面:1.语法错误:在编写DAX语句时,需要严格按照语法规则进行排列和书写,以避免出现语法错误,需要仔细检查语句的拼写和格式。
2.逻辑错误:在编写DAX语句时,需要确保逻辑的正确性,比如条件判断、数据筛选等,需要对逻辑进行仔细思考和验证。
3.优化性能:在编写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 函数,它们能够帮助您更高效地处理和计算数据。
随着数据分析在各个领域的应用不断深入,数据分析工具也在不断更新和改进。
其中,微软的Power BI作为业内领先的商业智能工具之一,其功能强大且易于使用的特点备受用户青睐。
在Power BI中,DAX (Data Analysis Expressions) 作为其数据分析语言,被广泛应用于数据建模和计算字段的创建中。
在DAX中,公式的层次结构是非常重要的,它能够帮助用户更好地组织和管理复杂的计算逻辑,提高数据分析的效率和准确性。
一、什么是DAX公式层次结构DAX公式层次结构指的是DAX表达式中各个部分之间的逻辑关系和执行顺序。
在Power BI中,DAX公式通常由多个函数和操作符组成,这些函数和操作符之间存在着相互依赖和执行的先后顺序。
了解和掌握DAX公式的层次结构对于编写和理解复杂的计算逻辑至关重要。
二、DAX公式层次结构的组成部分DAX公式层次结构通常由以下几个主要的组成部分构成:1.函数:DAX函数是DAX表达式的基本组成部分,它用于实现各种数据计算和转换操作。
在编写DAX公式时,我们需要合理地选择和组合各种函数,以实现所需的计算逻辑。
2.操作符:DAX操作符用于对数据进行各种数学运算和逻辑判断。
在DAX公式中,操作符的使用能够帮助我们实现复杂的计算和条件判断。
3.表达式:DAX表达式是由函数和操作符组合而成的数据计算逻辑,它是DAX公式的核心部分。
在编写DAX公式时,我们需要构建清晰、简洁且准确的DAX表达式,以实现所需的数据分析和计算功能。
三、DAX公式层次结构的执行顺序在Power BI中,DAX公式的执行顺序遵循一定的规则,了解和掌握这些规则对于编写高效和准确的DAX公式至关重要。
DAX公式的执行顺序通常遵循以下几个基本原则:1.从内向外:在执行DAX公式时,通常会先执行最内层的函数和操作符,然后逐步向外执行,直到整个DAX表达式被完整计算出来。
2.按优先级执行:DAX函数和操作符通常具有不同的优先级,需要根据其优先级来确定执行的先后顺序。
PowerBIPowerQuery排名2-分组排名前⼀篇关于排名的博⽂中,我们是基于整个表对分数进⾏排名,假若有如下形式的数据,我们需要最终的名次是按照分组来归类排名的,这种排名应该如何实现了?分组排名⾮连续排名思路1、从表中筛选出分数⼤于当前分数,且分组等于当前分组的⾏2、统计筛选出来的总⾏数,将其+1即为排名分组排名连续排名思路1、从表中筛选出分数⼤于当前分数,且分组等于当前分组的⾏2、挑选出第1步得到的表中的分数列,形成新表(想⼀想为什么不需要分组列?)3、从第2步的表中求⾮重复,得到⾮重复的记录表2、统计第3步得到的⾮重复记录表的总⾏数,将其+1即为排名分组排名⾮连续排名实现⼤致的操作基本上和上⼀篇博⽂⼀样,我主要是给出各个步骤中的公式和运算结果图=Table.SelectRows(更改的类型,(r)=>(r[分组]=[分组] and r[分数]>[分数]))=Table.RowCount(Table.SelectRows(更改的类型,(r)=>(r[分组]=[分组] and r[分数]>[分数])))+1分组排名连续排名实现=Table.SelectColumns(Table.SelectRows(更改的类型,(r)=>(r[分组]=[分组] and r[分数]>[分数])),"分数")=Table.Distinct(Table.SelectColumns(Table.SelectRows(更改的类型,(r)=>(r[分组]=[分组] and r[分数]>[分数])),"分数"))=Table.RowCount(Table.Distinct(Table.SelectColumns(Table.SelectRows(更改的类型,(r)=>(r[分组]=[分组] and r[分数]>[分数])),"分数")))+1。
DAX—快速入门与原理掌握
现有文章:
1、初识DAX—DAX是什么?能干什么?怎么用?
2、DAX的度量值、计算列、查询分别是什么?数据模型又是什么?
3、DAX的筛选上下文详解以及CALCULATE的初步应用
4、DAX的常用迭代函数详解
5、DAX的常用表函数之VALUES与DISTINCT
6、DAX的ALL类函数详解以及影子筛选上下文的介绍—上篇
7、DAX的ALL类函数详解以及影子筛选上下文的介绍—下篇
PowerBI/DAX的计算组功能是什么?怎么用?
PowerBI/DAX的计算组之间的优先级设置
【停止更新】该专栏的知识分享已有免费的视频课程分享在B站,欢迎前往观看!
本文目录
DAX—快速入门与原理掌握
一、前言
二、计算组之间的优先级
三、总结
一、前言
在昨天介绍计算组的《PowerBI/DAX的计算组功能是什么?怎么用?》这篇文章中,漏掉了一个比较关键的点,那就是多个计算组作用于同一个度量值时的优先级问题,因此在这篇文章里做补充说明,算是之前那篇文章的后续吧。
如果你没看过之前那篇介绍计算组功能的文章,我建议你先去阅读完后再来看本文,因为在这里我不会再去重复的讲解怎么创建计算组、怎么使用计算组的动态数据格式等等内容,我将默认你看过上篇文章。
二、计算组之间的优先级
先来看看下面这张图,将它称呼为图1,下面需要引用这张图,请记住它的名字:
为了方便展示与讲解,我没有把数据透视表弄得很复杂,仅仅是把年份与月份放在了行字段,将销售金额和销售数量放在了值字段,将计算组的计算项都做成了切片器,并且这些切片器都还没有工作。
所用的销售金额与销售数量度量值如下:
Sales = SUMX('T3销售','T3销售'[T3销售册数]*'T3销售'[T3销售单价])
Volume = SUM('T3销售'[T3销售册数])
现在问题来了,我定义了一个将数值加上100的计算组以及一个能改变数值符号正负的计算组,那么:是先将数值加上一百后再改变符号,还是改变符号后再将数值增加一百?
想要弄懂上面的计算顺序,那么就先要设置计算组之间的优先级,只有告诉引擎先执行那个计算组才能够得
到正确结果。
计算组的优先级设置位置如下图:
上图中的红框框起来的行就是计算组优先级的设置地方,可以看到,我将改变数值符号的计算组的优先级设
数字越小越优先执行,因为它是置为了100,你可能会觉得这个数字越大就越是优先执行。
其实不是的,应该是数字越小越优先执行,因为它是按照升序排列的,所以数字越大越靠后执行。
下面来看一下将数值增加一百的计算组的优先级:
按照升序排列的,所以数字越大越靠后执行
我把将数值增加一百的计算组的优先级设置为了20,而改变数值符号的计算组的优先级设置为了100,所以是先将数据透视表里的数值加上一百后再改变符号,结果如下图:
可以看到,上图与图1相比,数值的确是先增加了一百再改变了符号。
下面将这两个计算组的优先级互换,将数值增加一百的计算组的优先级设置为100,而改变数值符号的计算组的优先级设置为了20,所以结果是改变符号后再将数值增加一百,结果如下图:
同样的,将上图的结果与图1的值作比较,可以验证数值是否是先改变符号再增加一百。
三、总结
当你定义了多个计算组,且得到的结果让你迷惑时,那么很可能就是计算组之间的优先级顺序没有设置好,这点需要注意。
那么,关于计算组的优先级的补充说明就到此为止了。
如果你没有相关数据进行练习或者想要我上面使用的数据,可以在上一篇介绍计算组功能的文章末尾处获取。
再次给出上篇文章的传送门:《PowerBI/DAX的计算组功能是什么?怎么用?》。