介绍
在我们的商业智能(BI)历程中,我们已经使用了大量的拖放工具。但是,没有哪一个比得上微软Power BI的瑞士军刀性质。它确实简化了处理数字,分析数据和可视化模式的任务。
它是业界最好的“拖放”工具之一。您选择要分析的字段,将其放入Power BI仪表板中,瞧!洞察力就在您眼前。
但是,如果我们想更深入地分析我们该怎么办?如果要自定义某些变量或生成新变量,该怎么办?仅进行快速拖放并不能解决我们的问题。这就是Power BI中数据分析表达式(DAX)的功能发挥作用的地方。
对于任何数据分析专业人士而言,这都是一种方便学习的工具,而不仅仅是有抱负的商业智能专家。它为我们节省了大量时间,否则我们将花费大量时间编写代码。有更多数据分析方面的需求,可以进入九道门商业数据分析学院获取相关信息。
在本文中,我们将首先了解BI是什么以及BI行业专业人员的典型角色。然后,我们将向您介绍功能强大的Microsoft Power BI工具,然后深入研究可在Power BI中使用的十个真正有用的数据分析表达式(DAX)函数。
目录
商业智能入门(BI)
商业智能专家的角色
什么是Power BI?
数据分析表达式(DAX):它们是什么,为什么需要它们?
Power BI中DAX功能的实现
商业智能入门(BI)
商业智能具有广泛的范围,但我们可以将其定义为跟踪和审查业务指标的过程。
让我们以一个例子来理解这一点。
考虑到我们正在运营一家货运公司,该公司将产品交付给该国不同地区的客户。与任何业务一样,我们希望改善客户体验。我们可以通过多种指标来衡量客户满意度,包括:
产品交付给他们的速度
产品是否损坏
是否交付了正确的产品?等等
这些数据将以清晰报告的形式进行处理和显示,从而更容易将洞察力带回家。因此,如果交付率图表显示的评级低于预期,我们可以尝试找出根本原因并提高交付速度。
商业智能专家的角色
现在,商务智能专业人员做什么?我确信在经历上述情况时,这一定已经引起您的注意。以下是典型的BI人员执行的一些常见任务:
编写(SQL)查询或连接器以从关系/ NoSQL数据库中获取数据
编写(SQL)查询以处理数据并计算业务指标
设计代码以使用交互式小部件创建图表以可视化业务指标
从图表创建仪表板并将其部署以供最终用户使用
成为BI专业人员所需的技能因项目而异。但是从广义上讲,您需要对BI工具(如Tableau,PowerBI,Qlik)有扎实的知识,并且对Python,R或SQL等编程语言有一定的经验。还寻求领域知识和结构化思维。
Power BI是最流行,功能最强大的BI工具之一。这将是本文的重点。在到达那里之前,这是一个典型的商业智能体系结构的精彩插图:
示例商业智能架构
什么是Power BI?
Power BI是由Microsoft开发的一种流行且功能强大的商业智能工具。它具有不同的口味和产品。最基本的版本是免费的,但它具有轻松执行中型商业智能练习的能力。
广义上讲,Power BI是基于云的业务分析解决方案套件,它提供了必要的工具,可将孤岛上的大量数据转换为可访问的信息。它一直被评为Gartner BI魔力象限。
Power BI因其多功能性,交互性,美观的设计,与数据库的广泛连接以及易于创建省力的仪表板而广受欢迎。它还利用Microsoft生态系统中其他工具的支持-Azure,Cortana,SQL Server,Azure Active Directory,Azure Blob存储等。
以下是Power BI可以做的一些很酷的事情:
实时警报和可视化,用于监视制造设备的运行状况。这是通过将IoT传感器数据通过IoT Azure集线器,Azure数据工厂,Cognos DB进行传递,然后在Power BI中进行分析来完成的
通过使用Windows语音助手Cortana发出语音指令来创建和获取图表以及Power BI报表和仪表板
数据分析表达式(DAX):它们是什么,为什么需要它们?
我们可以从CSV文件或数据库中将数据读取到Power BI中。我们还可以在Power BI中合并表。经常需要在表列中获得绘图所需的数据(尽管并非总是如此)。
考虑一种情况,我们需要修改或更改数据以改进仪表板。假设我们需要的那些自定义修改在Power BI中不可用。那我们该怎么办?我们如何进行这种修改和数据分析?
答案是DAX(数据分析表达式的缩写)。DAX用于将一些有意义的信息隐藏在原始数据中。简而言之,DAX用于数据处理。
使用DAX必须遵循某些规则。如果您熟悉Excel函数,就会很快理解这些规则。DAX只是其中的一种高级形式。
我们在两个地方编写DAX:
计算列
计算量度
让我们看看这两个代表什么:
计算列与我们在大多数数据集中看到的常规列非常相似。不同之处在于,计算出的列是我们通过使用两个或更多列或使用来自不同表的列进行计算的结果。当我们要执行逐行计算时,可以使用它们
另一方面,“ 计算的度量”类似于计算的列。但是,它们不占用任何物理内存,并且无法以列的形式查看其结果。当我们要对一组行执行动态计算或将数据分组在一起时,通常使用此方法
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函数返回两个日期之间的差
请查看下表,查看下周每个任务的预计工作时间:
尾注
Power BI是一种功能强大且易于使用的工具,可用于创建包含各种数据源的快速仪表板。DAX查询用于映射数据,创建新变量和业务指标以及处理数据。本文提供了一个简短而快速的指南,以开始您的DAX旅程。