Microsoft Introduces new Virtual Assistant Bot Framework

Microsoft has announced a new “bot framework” for building virtual assistants available via text message, Skype, Slack, and other services.  Bots are software driven virtual assistants that use natural language recognition to allow customers or users to interact with applications for scenarios such as obtaining customer service, ordering food, or finding information.

The bot framework is available in Node.JS and C# and can be written and deployed to a specific channel, e.g. your Office 365 account to receive requests.

Bot Framework Diagram

Bot Connector Diagram

The SDK is open source and available on GitHub

Read More

Microsoft Unveils Face, Speech and Emotion Recognition APIs as Microsoft Cognitive Services

Microsoft has been developing a set of APIs for speech, face and emotion recognition under the banner of Project Oxford for the past several months.  In September, I wrote a blog post that demonstrated how to use their Face Identification APIs to match faces and tag them.  I also wrote a blog post on how to use their OCR service to tag photos and extract text content.   Microsoft has also added new services for recognizing emotions in photos.

Microsoft Project Oxford

These APIs have been available in preview but are now being rolled out in production under the new brand “Microsoft Cognitive Services”.  There is a new web site and pricing is now available for each API.  The APIs will be available on demand as a cloud service. 

Microsoft has also provided a video that shows their vision around using applied artificial intelligence to enhance every day life, in this case for someone who is disabled.

Read More

Microsoft Office 365 Groups Connectors Starting to Roll Out

One of the new features for Office 365 Groups is the ability to integrate external notifications and feeds into the shared inbox of an Office 365 group.  Microsoft is now starting to roll out this service to Office 365 customers.  There are 50+ connectors now available including Twitter, SalesForce, MailChimp, GitHub, etc. 

Introducing Office 365 Connectors 1

There is also a developer API that allows anyone that can support WebHooks to generate notifications.

Read More

Row Level Security Coming to Power BI

Microsoft has announced that row level security will be available as part of the Power BI service with a preview version available in March.

This means that within your Power BI models, you’ll be able to define what users can see based on their roles and restrict access to data based on permissions.  For example, you could create a sales dashboard where each sales person can only see their own opportunity records.  You could create a dashboard for patient data that is restricted by customized views.

Read More

New SQL Server 2016 RC1 Released with SSRS Updates

Microsoft has just released RC1 of SQL Server 2016 and with it a number of SSRS enhancements.  Here are a few of the key updates to reporting services – see this blog post for the full list of enhancements.

Web Portal Replaces Report Manager

Leveraging the DataZen technology the acquired, Microsoft has been working on a new modern HTML 5 based web portal for displaying dashboards and reports.  It is now “feature complete” and replaces the old report manager.


One of the latest features in RC1 is search – you can enter in a query and be provided all the KPIs, reports and dashboards matching the search terms.

New Custom Branding

The new Web Portal can be branded to reflect your organization’s fonts, colours and logo. 


Easy Embedding of Reports into other Apps

All reports are now embeddable through an IFrame – for example, in order to embed into a SharePoint page.  You just add the rs:Embed=true query parameter to the end of the URL and it will strip away all of the SSRS chrome to make it optimized for inserting into another page.

Newly Modern Paginated Reports

SSRS reports no longer need to look like they were created in the mid-90s!  Styling is now much easier and is now modern design by default. 

Read More

Using Power BI to Visualize WordPress Blog Posts runs on WordPress, and I have been working with Power BI to show some analytics on my posting behavior.  Fetching the data can be done using a JSON plugin (I use the JSON API plugin but there is also now a new WordPress REST API plugin) which will provide all your blog posts as a JSON data source.  

Accessing WordPress Blog Posts

The first step is accessing the JSON data – in the latest version of Power BI desktop there is a dedicated JSON data source that you can provide the URL for your JSON feed and it will fetch the data into PowerQuery for further manipulation.  Here is what the results of my query look like in Power BI Desktop.


As a table, this just provides the count of the posts but not the posts themselves – not very interesting.  However, if I click on the List of posts then I can drill down into the JSON and fetch the list of posts themselves.

Each post is represented as a record.  You can convert this now to a table by clicking on the “To Table” function and then clicking on the expand icon to the right of column 1.  When you do this you are prompted to select the fields that you want to select as part of your table.


If you click Close and Apply this will load all your blog posts into a table. 

Adding Date Filtering and Drill Down

Each post as a posting date.  We can create a calculated table that represents all the possible dates and add in year, month, and day columns that are nicely formatted to support drill down by year, month or day.

Start by creating a calculated table by clicking on “New Table” with the following formula:

DateTable = CALENDAR (MINX(‘Blog Posts’, [date]), NOW())

This will create a table of all the possible dates from the earliest blog post to today.

Now we need to add a bunch of calculated columns to represent year, month, day, day of the week, etc.  Here are some formulas that you can use – each line is a calculated column that you add to the table.

DateTable = CALENDAR (MINX(‘Blog Posts’, [date]), NOW())

Day = Format([Date],”DDDD”)

DayofMonth = DAY([Date])

DayofWeek = WEEKDAY([Date],2)

ISOWeekofYear = IF ((([OrdinalDate] – [DayofWeek] + 10)/7) >= 53, 1, TRUNC(([OrdinalDate] – [DayofWeek] + 10)/7))

LongDay = Format(DateTable[Date], “dddd”)

Month = FORMAT([Date], “MMM”) & ” ” & [Year]

MonthDate = Date(DateTable[Year], DateTable[MonthofYear], 1)

MonthofYear = MONTH([Date])

OrdinalDate = DATEDIFF([Year]&”,1,1″,[Date],DAY)+1

QuarterofYear = ROUNDUP (MONTH([Date])/3,0)

Year = YEAR([Date])

In addition, you will need to change the sort column for columns such as LongDay to the integer or date representations so that your columns sort in the appropriate order and not in alphabetical order.

Once you have your date table set up, you can create a relationship between the date column in the blog posts table and the DateValue column.  Depending on the format of your original date column, you may need a calculated column that reflects the identical format so that the ids match.  In my case, I created a calculated column called “DateOnly” that has the same formula as the DateValue column and linked these together through the relationship management dialog.


Once you have this set up, you can now create date driven visualizations such as the number of posts per month or per day of the week!



Adding Metadata Filtering

One of the key features of a blog are tags and categories that act as metadata for filtering.  The JSON provides these within its structure so can we extract the data and use it for creating some dashboards by category or tag?

If we go back to our original Power Query, we can create a new table that contains a denormalized set of keys that provide the link from the blog post ID to the tag values (the same approach will work for categories, authors, etc.).   When we get the list of posts, we do the same as above and expand the records but in this case we only need two columns – the blog post ID and the tags.


Then, we need to expand the list of tags so that we can fetch the tag ID and the title of the tag for each record.


Our new table should look something like this:


Once we load up this as a table, we can now create some interesting dashboards based on the tag frequency.  For example, here is the frequency of posts per tag:


Here is the frequency of tag use by month as a visualization.


Here is a comparison of the use of the tag “Azure” with the use of the tag “Power BI” over time.


Once you have the data there are lots of possible ways to explore and analyze the data!

Read More

Power BI Custom Visuals Will be Sandboxed using IFrames

Microsoft released the ability to create custom visuals for Power BI a few months ago.  These custom visuals allow developers to build new visualization widgets for both private organization specific use or public use via the custom visuals gallery.  In the gallery today, there are more than forty different visuals that you can add to your Power BI dashboard.

image        image

In the current model, the custom visuals reside in the same code space as the main Power BI service which can lead to some interesting conflicts and errors when multiple organizations are providing their own JavaScript and CSS.  As Microsoft moves out of preview, they have now stated that custom visuals will be “sandboxed” which means that each codebase will execute in its own IFrame.  This will prevent collision of code coming from multiple developers and contain any bugs or errors in the visual.

Sandboxing runs your visual’s code in a low privilege iFrame with no domain. You will not be able to assume access to Power BI styles (CSS), Power BI fonts, or undocumented Power BI APIs. We will inject all the required interfaces into the iFrame, including your visual’s code, and then marshal data points and required settings across the iFrame boundary. Since the iFrame has no domain, you will not have access to cookies or local storage. Finally, how you debug your custom visual will change a little, which I’ll cover below.

Having worked with SharePoint add-ins and app-parts for years, which also use an IFrame container to render the widget, one of the key challenges with this approach will be ensuring the overall layout is fluid and responsive and works successfully on a mobile device.  This is a fundamental challenge with having all these IFrames on the page – each one has to be resized dynamically when the page layout changes. 

Read More

SQL Server 2016 is Coming to Linux!

Microsoft has just announced that SQL Server 2016 is coming to Linux!

SQL Loves Linux_2_Twitter (002)

Microsoft will be releasing the core database platform on Linux in preview now with an expected release in mid 2017.

There is no word on pricing just yet and it appears for now that SSIS, SSRS and SSAS are not part of the solution – just the core database will be provided.

Read More

Microsoft Brings Identity Protection Service to Azure Active Directory

Microsoft continues to enhance its cloud Active Directory platform to provide customers with incentives to migrate their directories from on premise AD to the cloud.  The latest service to be added to Azure AD is a new Identity Protection Service

Azure AD Identity Protection is now available in preview.  It uses advanced machine learning to look for anomalies, intrusion and compromised accounts to proactively detect cyber attacks. 

At Microsoft, we enjoy a unique advantage here because we run many of the world’s largest cloud services, including, Xbox Live, Office 365 and Azure and they generate an incredible amount of data. And we put this data to good use! Every day our ML system processes>10 terabytes of data, including information on over 14B logins from nearly 1B users. These login signals are combined with data feeds from Microsoft’s Digital Crimes Unit and Microsoft Security Response Center, phishing attack data from and Exchange Online as well as information we acquire from partnering with law enforcement, academia, security researchers, and industry partners around the world.

Azure AD Identity Protection will notify admins of any detected attempts, risky sign-ins or configuration vulnerabilities.

Read More