最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,Power BI Embedded 的数据展示大致思路是利用Bot framework的卡片展示把 PowerBI embedded 的展示结果通过更加自然,更加智能的方式展示在前端甚至是微信客户端,当然如果展示在微信端还是需要在微信的公共号后台有一些特殊处理。

首先我想先介绍一下 PowerBI embedded 这个产品是基于 windows Azure PaaS 层的一个服务所以如果您想使用这个功能您需要一个 Azure的账户,不过幸好 Power BI Embedded 价格不贵按照访问次数收费并且每个月都有免费次数所以从成本上非常推荐,其次一个好消息是这个服务在我们中国版本的 Azure上也同样提供所以今天我用 中国版的Azure (MoonCake版)来演示这个方案。下图是我从MSND上打劫来的图说明了一个非常明显的问题,在PowerBI中如果您需要动态的刷新数据那么您的数据源是需要设置成 Azure SQL DB 或者是 Azure SQL Data warehouse

对于PowerBI Embedded的数据架构见下图 这里最重要的是 workspace collection 中可有有多个 workspace。在每一个 workspace 中可以有多个dataset 每一个detaset 对应一个 PowerBI 的 PBIX 文件

所以我就直奔主题如果您想问怎么申请 Azure 账户 或者什么是 Azure MoonCake 版那么请问度娘或者谷歌。

第一步您需要先创建一个Power BI  Embedded 的工作区如下图,输入必选项目点击创建。

随后您就可以看到创建好的 Power BI Embedded workspace collection,但是您可以注意到工作区是空的,这里有个吐槽点创建工作区只能使用API而不能通过portal。

点击访问键我们可以看到Key值,保存下来一会儿我们在创建workspace的时候要使用。

接着下一步是创建新的workspace,正如上面说过需要通过 API创建,幸好这里在Github上提供了 中国 Mooncake版本的代码案例,Mooncake_PowerBI_Embedded 编译的时候建议打开VPN因为有Nuget的类库要下载, 打开项目以后找到 ProvisionSample - App.config 文件,输入配置文件节点数值(在这输入可以在 console 中省去输入的麻烦)。

subscriptionId 在概述页面可以找到

resourceGroup 也是在概述页面可以找到 资源组

workspaceCollectionName 就是工作区集合名称

accessKey 就是上面的Key

 

随后运行程序即可,由于我们在config文件中设置好了数值,所以只需要按下数字5就可以创建一个新的 workspace 随着创建成功 console 会返回 workspace ID 当然这里您刷新一下portal页面也可以在 portal 中看到这个新的workspace。

 

那么下一步我们需要上传一个做好的 PowerBI 的 PBIX 文件,选择6 随后输入刚刚创建的 workspace ID,随后会让您给您的这个数据集起一个名字,我这里输入的是PBIE Dataset, 最后输入 PBIX的文件路径,最后会看到如下图的结果说明上传已经成功了。

 下一步我们需要在一个 ASP.NET 的 MVC Web 站点中 Embedded我们的这个BI view 幸好刚才的项目中有写好的demo code  打开 EmbedSample 项目 - Web.config文件 输入appSettings节点中的数值

随后运行网站查看效果如下

 

做到这里我们就完成了 Power BI Embedded 的工作。当然我们还需要讲这个站点部署在IIS上这里您可以部署在 Azure 的 App Service上或者 其他环境中,测试通过后我们进行下一步开始集成到Bot framework中。

 

此外您有可能遇到这个 feature switch have not been registered yet so switch values may not be correct 的这个错误,解决这个问题也很简单您只要通过Nuget更新一下您网站项目中和power BI Embedded相关的类库即可。

接着我我们将这个 Power BI 的站点结合Bot Framework Attachments, Card的形式集成进来其实原理很简单,我这里使用的是Hero Card,利用三方现成的API获取网页快照,当然您也可以自己实现这一功能github上有非常多的开源项目。然后添加一个超链接实现这个跳转功能。

如果您还没有BoT请参考 如何将 Microsoft Bot Framework 链接至微信公共号 这篇文章先创建一个Bot。

 那么关键一点就是如何添加一个Bot中的Hero card 请参考这里 Attachments, Cards and Actions 这里我就直接把实现代码放给大家,减少复杂度我没有添加LUIS。

实现效果:

调用Hero Card 的代码

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
        {
            var activity = await result as Activity;

            if (activity.Text.ToLower().Contains("hi") || activity.Text.ToLower().Contains("hello"))
            {
                await context.PostAsync("Hi, I can show the report for you, do you want it?");
            }
            else if (activity.Text.ToLower().Contains("yes") || activity.Text.ToLower().Contains("ok") || activity.Text.ToLower().Contains("go"))
            {
                #region HeroCard

                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

                Activity replyToConversation = activity.CreateReply("Hi, report is here!");
                replyToConversation.Recipient = activity.From;
                replyToConversation.Type = "message";
                replyToConversation.Attachments = new List<Attachment>();

                List<CardImage> cardImages = new List<CardImage>();
                //这里是三方SDK直接URL传参返回截图 - 我已经去掉了KEY
                cardImages.Add(new CardImage(url: "http://api.page2images.com/directlink?p2i_url=http://pbie.chinacloudsites.cn/Dashboard/Report?reportId=0a46b754-f5a3-4c19-b032-c6599bdb2f4d&p2i_key=yourKey"));

                List<CardAction> cardButtons = new List<CardAction>();

                CardAction plButton = new CardAction()
                {
                    Value = "http://pbie.chinacloudsites.cn/Dashboard/Report?reportId=0a46b754-f5a3-4c19-b032-c6599bdb2f4d",
                    Type = "openUrl",
                    Title = "Show me details!"
                };

                cardButtons.Add(plButton);

                HeroCard plCard = new HeroCard()
                {
                    Title = "Report",
                    //Subtitle = "详细页",
                    Images = cardImages,
                    Buttons = cardButtons
                };

                Attachment plAttachment = plCard.ToAttachment();
                replyToConversation.Attachments.Add(plAttachment);

                var reply = await connector.Conversations.SendToConversationAsync(replyToConversation);

                //context.Wait(MessageReceivedAsync);
                #endregion
            }
            else if (!string.IsNullOrWhiteSpace(activity.Text))
            {
                //calculate something for us to return
                int length = (activity.Text ?? string.Empty).Length;
                // return our reply to the user
                await context.PostAsync("sorry, I'm trying to learn more, so far I can show the report for you, do you want it?");
                //context.Wait(MessageReceivedAsync);
            }

            context.Wait(MessageReceivedAsync);
        }

BotFramework 的完成webChat版本 链接 http://bobot.chinacloudsites.cn/

Power BI Embedded 站点链接: http://pbie.chinacloudsites.cn/

Power BI Embedded 表单链接:http://pbie.chinacloudsites.cn/Dashboard/Report?reportId=0a46b754-f5a3-4c19-b032-c6599bdb2f4d

 希望上的总结可以帮助到大家, 同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick

posted @ 2017-03-23 22:22 王博_Nick 阅读(1853) 评论(1) 推荐(1) Edit
随着微软发布 Surface Studio 在演示视频中非常抢眼的一个配件就是 Surface Dial,Dial 是Windows输入设备大家庭中的新成员我们把它归类为Windows Wheel 类型设备。今天为大家介绍一下如何配合这个神奇设备开发自己的应用。 Read More
posted @ 2017-02-09 17:07 王博_Nick 阅读(1867) 评论(2) 推荐(2) Edit
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何使用Bot Framework和我们的一个现有的三方客服(例如一个微信的公共号)集成起来。 Read More
posted @ 2016-10-10 19:06 王博_Nick 阅读(10314) 评论(5) 推荐(5) Edit
今天在这里给大家介绍一个可以帮助开发者升级应用的工具 Mobilize.Net Silverlight bridge 这是一个Visual Studio的集成工具插件,可以帮助开发者将一个WPSL应用转换成一个Windows 10 UWP应用。(此工具目前是一个预览版所以在使用的时候还会遇到一些问题,不过即便如此大家可以先下载一个尝试一下也不会有什么损失对吧。) Read More
posted @ 2015-09-29 15:29 王博_Nick 阅读(1148) 评论(0) 推荐(2) Edit
消息通知是最常用的应用功能之一了,但是由于平台的差异,IOS Android 以及 Windows 都有其特殊性,Android开发者在国内常常都是使用三方的一些推送服务,或者是使用自建的服务器为应用提供推送服务,方式多种多样这里就不多阐述了,对比在国内可以使用的两个推送系统 IOS 和 Windows 对比来说,经历了 WindowsPhone 7 / 7.5 /8 / 8.1 /10 五代系统的迭代以后相比 IOS 系统的推送消息的种类来说更加丰富且更加任性化,今天给大家介绍一下如何在 Windows 10 推送消息中显示图片并且实现消息快速回复。 Read More
posted @ 2015-09-14 15:49 王博_Nick 阅读(4755) 评论(1) 推荐(2) Edit
使用三方账号登录应用应该对大家来说已经不是什么新鲜事儿了,但是今天为什么还要在这里跟大家聊这个话题呢,原因很简单 Windows Azure Mobiles Service Authentication 身份验证可以方便的帮你在应用中集成此功能。 Read More
posted @ 2015-03-02 16:00 王博_Nick 阅读(2893) 评论(1) 推荐(2) Edit
今天我在这里为大家介绍了一下NFC支付相关内容,在 Windows Phone 8.1 也是具备 读卡,刷卡,支付 等场景的,希望大家了解了这部分内容后可以结合自己好的想法做出更好的应用,相信今后是一定会迎来一个NFC时代的到来大家赶快行动起来吧:) Read More
posted @ 2015-01-18 17:05 王博_Nick 阅读(4799) 评论(4) 推荐(3) Edit
Windows Phone 官方支付支持中国移动(MO Payment),在此之前无论是 Windows Phone 的用户还是开发者,都知道在Windows Phone 上购买应用或者在进行应用内付费(IAP)的时候微软官方只支持支付宝一种支付方式,这对一些没有支付宝账户的朋友来说,付费流程就会相对复杂一些(因为还需要注册账户),但是现在中国移动的用户,在使用大家手中的Windows Phone 进行购买应用或应用内付费(IAP)时大家会惊喜的发现我们可以使用全新的中国移动的支付方式进行购买。 Read More
posted @ 2014-12-08 14:37 王博_Nick 阅读(1267) 评论(0) 推荐(0) Edit
今天在这里跟大家聊聊关于 Windows Universal 应用夸平台的问题,首先Universal Windows App的定义相信大家已经有所了解了(如果你是一个刚刚接触 Universal APP 的开发这个请先阅读一下我之前的文章 Windows Phone 8.1 开发技术概览 [Universal APP]), 相信大家在这里最苦恼的事情莫过于在不同开发架构下分享代码了,今天我在这里给大家推荐一个解决方案使用可移植类库(Portable Class Library)在不同的Windows项目之间分享代码。(Windows 8.1 / Windows Phone 8.1 )这里还包括Silverlight开发的 Windows Phone 8.1 应用。 Read More
posted @ 2014-11-30 18:12 王博_Nick 阅读(5911) 评论(2) 推荐(4) Edit
之前我为大家介绍过 App Studio 这只神器可以帮助大家快速制作一个 Windows Phone 8 的应用,今天之所以在写一篇关于 App Studio 的文章是因为,App Studio 经过了几次升级功能得到了明显提升还可以调用系统功能了,并且可以更方便的和应用商店关联发布 Universal Windows 应用(注:这是指 Windows 8.1 和 Windows Phone 8.1应用)以及 Windows Phone 8.0应用,接下来我为大家在介绍一下这升级后的 Universal Windows App Studio 使用 App Studio 的意义在于你有一个好的创意,但是由于时间或者技术等方面因素的制约 App Studio 可以帮你在有限的资源和时间情况下帮助你快速生成和发布一个高质量 Universal Windows 平台应用。并且用App Studio 制作的应用我们还可以拿到源代码方便我们学习和升级更高级的功能。 Read More
posted @ 2014-11-08 16:25 王博_Nick 阅读(2265) 评论(0) 推荐(2) Edit
点击右上角即可分享
微信分享提示