岳松同学

2020-09-27   阅读量: 978

index公式

扫码加入数据分析学习群

计算列
计算量度
让我们看看这两个代表什么:

计算列与我们在大多数数据集中看到的常规列非常相似。不同之处在于,计算出的列是我们通过使用两个或更多列或使用来自不同表的列进行计算的结果。当我们要执行逐行计算时,可以使用它们
另一方面,“ 计算的度量”类似于计算的列。但是,它们不占用任何物理内存,并且无法以列的形式查看其结果。当我们要对一组行执行动态计算或将数据分组在一起时,通常使用此方法
Power BI中DAX功能的实现
在本节中,我们将处理一些有用的DAX命令及其功能。我们将使用“样品超级商店”数据集。您可以在此处下载数据集 ,也可以自己开始实验!

数据集包含三个表-“订单”,“退货”和“用户”。继续并将Sample Superstore数据集Excel文件加载到Power BI中。

打开Power BI,然后在“主页”选项卡中查找“获取数据”。选择Excel,然后浏览到本地计算机中存在的数据集文件。将整个文件加载到BI窗口中。

现在,让我们开始吧!

抬头( )
LOOKUP函数与Microsoft Excel中的Vlookup非常相似。

数据集中的第三张表包含每个区域所有经理的详细信息。现在这是LOOKUP即将到来的地方。我们可以针对“用户”表中的“经理”列,针对“订单”表中的相应“地区”列执行查找。

那么我们如何在Power BI中执行查找呢?我们需要记住两件事:

我们需要一个公共列才能执行查找
我们还需要在从两个不同表中选择的至少一个匹配列中的唯一值。查找的基本语法为:
LOOKUPVALUE(结果列名称,搜索列名称,搜索列值)
使用我们的数据集变量放置以下语法:

管理员= LOOKUPVALUE(用户[管理员],用户[地区],订单[地区])
FILTER()和CALCULATE()
下面显示的DAX与按功能分组相似。它基于过滤器动态聚合列。当我们在Power BI仪表板中创建表并且只需要过滤一列(而其余的列不受过滤器的影响)时,这将很有用。

该DAX方便使用,其中表中使用的每个列都可以有自己的过滤器。让我们举一个例子来了解它是如何工作的。

我们要按地区计算销售总额。因此,首先,过滤器功能将区域列分为北,南,东和西。然后,它根据隔离度计算销售总额。我们在这里使用一种度量,因为特定区域中可以包含任意数量的行。

在这里插入图片描述

在这里,我们声明一个变量reg,它充当过滤器的键。我们可以使用关键字VAR声明变量。该RETURN关键字给我们的计算结果(占销售额的总和,在我们的例子)。我们从计算得出的DAX中得到的结果是:

在这里插入图片描述

嵌套IF条件
考虑我们数据集中的订单表。“订单优先级”列下有五个值。假设我们需要一些整数值,而不是该列中的原始值。Nested IF语句在这里是我们的朋友:

嵌套的IF = IF(Orders [Order Priority] =“ Critical”,5,IF(Orders [Order Priority] =“ High”,4,IF(Orders [Order Priority] =“ Medium”,3,IF(Orders [Orders [Order优先级] =“低”,2,IF(Orders [订单优先级] =“未指定”,1))))))

在这里插入图片描述

条件格式
条件格式是Microsoft Excel最常用的功能之一。我们也可以在Power BI中利用它!

对于以前从未使用过的人来说,条件格式是指根据另一列的条件更改列字体颜色的能力。这可以通过根据我们的条件创建一个新列,然后使用该列在条件格式选项卡中设置规则来完成。

让我们使用示例超级商店数据集中的示例进行尝试。

我们要更改在订单表的“订单优先级”列中显示的值的颜色。例如,所有“关键”值应为红色,所有“高”值应为绿色,等等。

因为已经指定了条件,所以我们可以使用上面创建的Nested IF列。在条件格式选项卡中设置规则-如果上面创建的列的值为1,则字体颜色应为红色;如果值为2,则应为橙色,依此类推。

这是显示如何在Power BI中执行此操作的图像:

在这里插入图片描述
在这里插入图片描述

根据定界符分割字符串
我们可以在Power BI中使用的另一个常见Excel功能:

customer_split_1 = PATHITEM(SUBSTITUTE(Orders [客户名称],“”,“ |”),1)
上面的PATHITEM函数返回结果字符串。的替代 函数替换与特定字符中指定的分隔符,并获取基于所提到的值对应的单词。

例如,让我们在“客户名称”字段上进行拆分。在这里,“”空间将成为定界符,我们已将其替换为管道“ |”。我们只需要客户的名字,因此我们指定了1。您可以更改此值并查看得到的结果。

现在,让我们执行以下三个拆分操作,并将其分别命名为customer_split_1,customer_split_2,customer_split_3。

从单词中提取特殊字母
如果我们只想从单词中提取特定字母怎么办?听起来很棘手,但在Power BI中实际上很容易:

customer_initial_1 = LEFT(Orders [customer_split_1],1)
我们只用一行代码就完成了!

假设特定客户的名字是“ Helen Stein”,并且拆分分为两部分。我们使用上面的DAX从第一个拆分词(Helen)中获取第一个字母。的LEFT功能通过定位到该串的开头,则返回的字符数。如果我们给2而不是1,则上面的DAX将返回“ He”而不是“ H”。

连接字符串
我们经常发现自己需要将两个单词组合在一起的情况。为了了解在Power BI中这是如何工作的,我们假设数据中有多个缩写。

我们只需要在可视化中指定客户姓名缩写,而不要指定其全名。这将有助于保持桌子整洁紧凑:

customer_initials = CONCATENATE(订单[customer_initial_1],CONCATENATE(订单[customer_initial_2],订单[customer_initial_3]))
串联函数将字符串连接在一起。在这里,我们执行了三列的串联:
在这里插入图片描述

WEEKDAY()
该WEEKDAY函数返回一个整数给我们当前的一天。让我们找出下订单的日期:

工作日= WEEKDAY(订单[发货日期],2)
上面显示的整数指定开始日期:

1 –从星期日= 1开始,到星期六= 7结束
2 –从星期一= 1开始,到星期日= 7结束
3 –从星期一= 0开始,到星期日= 6结束
DATE拆分
有时我们需要取消某些项目的日期。这是个好消息–我们可以借助DAX和Power BI中的查询编辑器来做到这一点。

现在,我们有两列-订单日期和发货日期。我们要列出两个间隔之间的日期。让我们以订购日期为2015年1月1日,发货日期为2015年3月1日。由于它们之间存在3天的差异,因此该行将被列出3次。

我们可以通过Power BI中的查询编辑器来完成此操作。在“添加列”标签中选择“自定义列”选项。弹出以下窗口,我们可以添加列名称并使用DAX查询:

={Number.From([Order Date])…Number.From([Ship Date])}

在这里插入图片描述

接下来,在我们的数据集中找到DATE列。单击DATE列标题内的小框,然后选择“扩展到新行”选项:

在这里插入图片描述

请注意,这些值如何以整数形式出现?现在,右键单击该列,然后将数据类型更改为“日期”格式:

在这里插入图片描述

基于DATE的复杂聚合
处理日期数据是一个非常复杂的挑战。除了拆分不同的日期,月份等以外,还有很多其他功能。

在本节中,我们将研究一个基于日期的复杂聚合的示例。例如,接下来2周或过去2周列出的总小时数是多少?

我们将在此部分切换数据集。您可以从Forecast下载新的数据集,称为“ Weekcal” 。该数据集以团队时间分配和称为Float的计划工具为模型。Float帮助我们分配任务并计算团队成员的估计工作时间。

我们应该注意Float中的一个警告。在浮动工具中,每周总是从星期一开始。例如,如果要计算从星期四开始的下周分配的小时数,则会找到从最近的星期一到星期五而不是从这个星期四到下一个星期四分配的小时数。

现在,数据集包含以下功能:

开始日期-任务的开始日期
结束日期–任务的结束日期
每天的小时数–每天在任务上花费的小时数
任务名称–任务名称
假设我们有兴趣查找下周分配的小时数。我们可以使用以下逻辑来做到这一点:
FORECA ST_1 WEEK =如果(Forecast1 [开始日期]> = TODAY()-(WEEKDAY(TODAY(),2)-1)&& Forecast1 [end_date] <= TODAY()-(WEEKDAY(TODAY(),2)-1 )+ 7,DATEDIFF(预测1 [开始日期],预测1 [结束日期],DAY)+1 *预测1 [小时/天],

IF(Forecast1 [开始日期]> TODAY()-(WEEKDAY(TODAY(),2)-1),0,IF(Forecast1 [开始日期] <= TODAY()-(WEEKDAY(TODAY(),2)-1) && Forecast1 [end_date] <= TODAY()-(WEEKDAY(TODAY(),2)-1)+7 && Forecast1 [end_date]> = TODAY()-(WEEKDAY(TODAY(),2)-1),DATEDIFF (TODAY()-(WEEKDAY(TODAY(),2)-1),Forecast1 [end_date],DAY)* Forecast1 [hours / day],

IF(Forecast1 [start_date]> = TODAY()-(WEEKDAY(TODAY(),2)-1)&& Forecast1 [end_date]> = TODAY()-(WEEKDAY(TODAY(),2)-1)+7, DATEDIFF(Forecast1 [start_date],TODAY()-(WEEKDAY(TODAY(),2)-1)+ 7,DAY)* Forecast1 [hours / day],

IF(Forecast1 [start_date] <= TODAY()-(WEEKDAY(TODAY(),2)-1)&& Forecast1 [end_date]> = TODAY()-(WEEKDAY(TODAY(),2)-1)+7, DATEDIFF(TODAY()-(WEEKDAY(TODAY(),2)-1),TODAY()-(WEEKDAY(TODAY(),2)-1)+ 7,DAY)* Forecast1 [hours / day],BLANK( ))))))

TODAY()–(WEEKDAY(TODAY(),2)– 1个函数返回一周中的当前星期一
DATEDIFF函数返回两个日期之间的差
请查看下表,查看下周每个任务的预计工作时间:

在这里插入图片描述


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
70.5862 1 0 关注作者 收藏

评论(0)


暂无数据

推荐课程