zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

手把手教你年会评优投票嗨翻全场:Power BI流数据集仪表板实时动态展现

2023-04-18 16:55:58 时间

按照惯例,先来个平平无奇的视频:

下图投票方式,只有一个问题,要求选出三个候选人名单:

没什么特别的,但还是那句话,请仔细看!仔细想!

引言

大型公司的年会上总会进行一些优秀员工的评选,大学每个学期期末的时候总会进行奖学金的评选,等等……

其中全员投票拉票占了较大的比重。

如果在年会现场来一个实时投票仪表板同步展现,还是很高大上的,再配电动感的音乐,嗨翻全场,老板一定很满意。

本文前半段用到的思路基本上完全复刻了工坊去年发表的这篇文章,大家可以参考:

PowerPivot工坊:使用Forms+Power BI实时统计员工健康状况

里面总结了使用流数据集和根据文件创建报告两种办法的优劣对比,比较好:

第一种是用Forms创建问卷,然后用Power Automate将数据实时更新到Power BI数据集中,通过Power BI进行分析和可视化呈现。这种办法可以实现统计结果的实时更新。 第二种是用Power BI连接Forms背后的Excel数据源来创建更复杂的分析报表。 两种方法各有优劣,第一种方法的优点是可以实时更新Power BI的数据,缺点是不能对数据进行复杂的聚合运算;第二种方法的优点是可以对数据进行复杂的运算来对数据进行我们想要的处理,缺点是这种方式不能实现实时更新,只能实现定时更新

本视频很明显采用的是第一种,那也就意味着:不能对数据进行复杂的聚合运算。

事实真的如此吗?

学谦还真就不信这个邪。

本文我就手把手带着大家来突破流数据集模型不能进行复杂聚合运算的限制!

全文共3500字,35张图,肝了我3个小时!

正文开始

01新建forms表单

要投票,先建表。

可以直接forms创建,也可以从onedrive中创建,两种方法都可以,在本文的案例中没有任何区别。

为了简化模型,问卷只有一个问题(千万不要觉得:只有一个问题,so easy啊):

02创建流数据集

新建一个流数据集:

不要问我是不是“数据集”,不要问我是不是“数据流”,也不要问我数据流和流数据集有啥区别,问就是不知道……我确实不知道……

选择默认的API:

给它取一个名字,然后有三个值——填表时间、编号和选择的员工:

注意要将“历史数据分析”打开。

我们的目的就是要让forms提交的内容流入这个数据集中。

forms会自动生成填表时间,并且每添加一行,编号自动+1

03Power Automate链接

起始点有了,目的地也有了,那么下一步就是开车:

我们需要创建一个自动化云端流:

起一个好记的名字,然后选择forms提交新回复时的操作:

选取优秀员工评选这个ID:

添加新步骤-获取回复详细信息:

添加新步骤-向数据集添加行:

选择工作区、数据集和表,然后根据提示将forms生成的内容填入相应的位置:

保存即可。

此处要注意填表时间,因为我们的流数据集对于填表时间的要求是日期时间格式,所以要对这个位置进行一些格式修改,否则会遇到这样的错误提示:

Error encountered by JSON parser when reading input data for column '<pi>填表时间</pi>': <pi>Could not convert string to DateTime

04PA测试

随便挑选几个看着顺眼的名字提交:

查看运行记录:

PA运行成功!说明数据已经进入了数据集。

接下来我们就可以用数据集进行建模了!

05建立模型

打开Power BI Desktop,登录账号,选择数据集:

不要选择数据流。流数据集≠数据流,说过了。

刚刚我们是在“学谦PowerBI示例文件”这个工作区创建的数据集,就选它:

导入报告,就一个表,3列:

正如在这篇文章中所说:

如何应对极度刁钻的甲方:Power BI处理非结构化流数据集思路

不允许对数据做任何修改,不允许新建表、新建列、修改数据格式、按列排序等操作,也不允许设置自动日期智能:

先拖到报告中看看:

我了个乖乖!对于这个数据,作为正经人,只能表示投降!

我就试问,这怎么分析?!

简直无理取闹!

再来几行:

你瞅瞅,这是正儿八经的数据吗?

最主要的是这个数据根本无法进行编辑,PQ也不行,新建列还不行,甚至我就想改个格式也不行!

我们能做的,也就是统计一下提交了几次数据:

然后通过写几个度量值的方式:

投票数 = COUNTROWS(VALUES('RealTimeData'[编号]))
总人数 = 500
投票率 = DIVIDE([投票数],[总人数])

添加一个仪表盘获取投票人数和投票率:

其他的无能为力。

那么问题来了,这种对于人名维度的分析又是如何得到的呢?

本文精髓

以下部分才是重点~!

首先,确认两点内容:

  1. 进入模型的现有的数据列我们是无法进行任何更改或者添加的,这一点必须明确。数据中是没有人名列的。
  2. 最终报告中,有人名的维度,那么模型中的数据必须有一列是人名。

先不要往下看,仔细想明白以上两点,你就知道该怎么做了。

认真想,此处对于锻炼解决问题能力很有提升!

3

2

1

上链接!

公布答案:

在流数据集中直接添加一列姓名维度:

有同学就要问了,这怎么往里添加数据?

方法其实还是一样,我们再复制一个forms:

内部是这样的,稍微改一下名称,改为单选:

接下来还是用PA将所选择的内容添加到流数据集,只不过,这次我们只输入“逐个选择并提交”的人名即可:

好了,接下来,我们逐个将10名候选人填入forms:

再查看报告:

结果跟我们预想的一模一样,有评选员工名单的行,其他列都是空;有选择员工的行,名单列也是空。

那么,问题来了,这种表我们怎么处理呢?

仍然先确立一点:流数据集不允许对数据做任何修改,不允许新建表、新建列、修改数据格式、按列排序等操作,也不允许设置自动日期智能。

但是至少,姓名列,出来了!拖一个表再说:

我们能做的只有写度量值

关于这一点,我在这篇文章中有详细的描述,大家可以再认真阅读一遍:

如何应对极度刁钻的甲方:Power BI处理非结构化流数据集思路

查看票数的方法其实很简单,昨天我是用虚拟表的列转行然后数个数来实现的,非常麻烦,想了想,其实可以用CONTAINSSTRING一步就出来了:

得票数 = 
VAR A_NAME=SELECTEDVALUE(RealTimeData[评选员工名单])
VAR NAME_IN=
CALCULATETABLE(
    RealTimeData,
    ALL(RealTimeData[评选员工名单]),
    CONTAINSSTRING('RealTimeData'[选择的员工],A_NAME)
)
return COUNTROWS(NAME_IN)

查看结果:

接下来对报告进行一些相关的美化(限于时间关系,承认很粗糙,勿喷):

发布到云端,然后将组件放到仪表板。

年会的时候,大屏展示,动态实时更新,配点动感的音乐,激动人心的时刻到来了,high翻全场吧:

至此,一个结合了流数据集实时更新秒级展示和导入数据的普通数据集报告的复杂聚合运算双重优势的报告就完美展现出来了!

也就将工坊那篇文章中说的两个限制都给突破了。

怎么样,动动手,你也能拥有!

后记

本文使用了微软的Forms、Power Automate和Power BI流数据集。

全部的操作过程和细节要点都已经完全展示给大家了,大家自己动手可以创建属于自己的一套流程。