I will say yes, I really want to share. Purvin if you can just
let me know once my screens come through
correctly and I’ll get going.>>You are good to go.>>Wonderful. So today, we’ll be giving an introduction
to the Common Data Service. So from an agenda perspective, we’ll do a few introductions. We’ll talk a bit about the Common
Data Service value proposition. We’ll talk about how the power
platform fits with Power Apps, and how that fits with CDS, and how that fits with Azure. Then what we’re going to do is
we’re going to switch out of slides and we’re going to just go
into a really long demo mode. We’re going to do demo
for almost a half hour. I’m a little anxious just because, Oh my gosh there’s
so much demo there. But I really hope that
it’ll help you understand, really how the Common Data Service can make your applications amazing. Then we’ll do a quick recap
of what we’ll talked about, and then I’ll turn things
opened over to ask any questions or answer
any questions that you might have. So with that said, let’s get rolling. So about me, I like to
joke with my teams, sorry, it’s a bad joke but that
I put the fun in fundamentals. So because so much of
the business applications, business runs on top of
the Common Data Service. We really focus on making sure
that it’s like the foundation. It’s the bedrock on top of which our customers business
applications can be built. So I spend a huge amount
of time focusing on, I call them the big five, but availability, performance, supportability, security
and efficiency. Because those are really
the table stakes to the things that everybody expects from
a business application platform. The other thing that I
think about quite a bit is we have all these
amazing assets from Power Apps and from flow and from dynamics and from
the Common Data Service, and how do we really
bring those things together so that people can build very compelling end to end applications in
a seamless and easy way. That’s why I focused on taking
all these puzzle pieces and putting them together into one
cohesive larger picture. I want to let you guys know
that I’m here to help. If you ever need to get a hold of me, my Twitter handles is @rjmax and there my e-mail address is there
at the bottom of the screen. Feel free to reach out to me. One quick note though, I do typically lag a day
or two behind on e-mail. So if you have a critical live
site issue please leverage our appropriate support channels
for those types of things. Otherwise, completely want to
help you guys out and make you successful on
the power platform in CDS. So I want to learn
a little bit more about you. Thank you so much for taking
the time to chat with me today, but I really want to
learn more about how you guys are building Power Apps
and flows and so on and so forth. So we have a quick little survey,
it’s really simple. It asks like, hey are you an office person or an Azure
person or a dynamics person, asked what type of data sources you used to
build your apps typically, and then we asked whether or not
you built an app before on CDS. So if you have a moment please go in and complete this survey so that I know a little bit
more about you. So with that said, we’ve wrapped up introductions
and so we’ll start talking a bit about what the Common Data
Services is and what are the value is that we
aimed to provide. So we’ve got this overall,
very simple statement. The Common Data Service
helps you easily structure a variety
of business data to support interconnected apps and processes in a secure
and compliant manner. So let’s dig into each of
those four primary points, talk a bit about what
each one of those mean. So the first one it
easily structures. So CDS makes it very easy to define the structure
of your business data. When we see people start to digitize their experiences
around gathering data when they start to digitize the
business processes around that data as a part of an overall
digital transformation narrative. What we find is, the first step is defining a basic shape to that data. CDS provides you with a very rich and powerful way of doing that but also in a
way that’s very easy. The other thing that the Common
Data Service aims to do is, we aim to support a broad broad
set of different types of business data and we’ll
talk about this a little bit more in our demo later. But the thing is CDS is way
way more than just a database. We support relational data of course, that’s been our bread and
butter that we’ve been doing for the last
almost two decades now. We also have rich robust
support for files. We have rich support for log data. Rich support for
all types of data that we see is actually necessary to build not only a business applications
but modern business applications. One of the things that’s
really important to us is the way that we do it, is to support a set of interconnected
applications and processes. When we look at how folks, even in the last let’s say three to five years have
approached digital transformation, when they do it they do it
in this very siloed manner. That, “hey, I’m going to spin up
some lists or a SQL database or whatever kind of in the silo and
it solves one business problem”, but then when they have
another business problem they spin up yet another AppStack. Spin up yet another AppStack
and you end up with all these little silos that are
disconnected from one another. What the Common Data Service
aims to do is to, it aims to allow you to structure your data and store
your data and define your business logic in a way that
supports Common Data Service. That can support different interconnected applications
and processes, so that you can provide
a single source of truth across all of
these different data. Then the final thing is we aim to do this in a secure and
compliant manner. So we’re very deeply integrated
with Azure Active Directory. We’re very deeply integrated with the Office
Administration Center. We have an industry leading set of certifications around
compliance and security, so that you know when you place your business critical data
in the Common Data Service, that only the right people will
be able to access it under the correct circumstances
and in a way that allows you to meet your various security and compliance objectives. So I want to dig now into the difference between
the Power Platform, Power Apps, Common Data Service, so on and so forth because
we use these terms a lot. Sometimes we use them interchangeably
when maybe we shouldn’t, and so I want to separate and
distinguish these different items. I will say we’re always supposed
to think outside of the box, but at least in
the context of this slide, we are going to be thinking
inside the box for a little bit. So the box that I’ve drawn here, as you can see on your screen, is the Power Platform box. So everything that I’m
going to show you within this box is a part of
the Power Platform. Now, within the Power Platform, and I will say that
I’m a little biased, I see CDS as being quite
central to the Power Platform, because at the end of the, day
we build experiences over data, we build processes over data, we derive insights from data, we derive intelligence from data. So as a result, I’ve used CDS as
being really critical and important to the
Power Platform overall. So around CDS, we have of course the various consumers or clients of data like PowerApps,
Flow, Power BI, and AI Builder that are there
for defining your experiences, automating your business processes, deriving insights or deriving intelligence from the data that’s stored in
the Common Data Service. So as you can see, we have the Power Platform
which is the outer box. We then have the
distinct components that provide different
capabilities over data, and then we have CDS
in the middle which is our data store for Power Platform. Now, one thing I don’t capture
here and I want to make sure that I provide ample coverage
or discussion for us, we do have an amazingly
rich connector ecosystem that allows you to build
PowerApps and Flow, Power BI report, so on and so forth, over the top of data that
does not reside in CDS. However, with some of the things I’m going to show you later today, you’ll see there’s some really
cool things that you can do really only when data resides centrally when it’s
defined in a specific way, so that we understand the shape of that data rather than
just understanding, oh, data lives over here, oh, actions live over there, so on and so forth. So the other thing I
want to touch on, sorry, real quickly is
the relationship between the Common Data Service and Dynamics. Now, many of you have
seen this diagram before. Normally, there are
all animations and everything with little dots
flowing everywhere, but I guess this is the low budget version
of the PowerPoint slide. But within this slide, there’s a key thing that I guess I
really want to drive home, is we have a broad set of Dynamics applications like
Dynamics 365 for sales, for customer service,
for field service, for projects service, for
talent, for marketing. All of those applications
that I just listed are built on top of CDS natively. The real benefit of this is, when you’re looking to digitally
transform your business, the first way to do it is via
an off the shelf application. However, we also realized that often self applications need
to be customized, and we provide you with
those capabilities to customize those
Dynamics applications. That really if you think about it, they’re very fancy
PowerApps with a bunch of entities and business logic and other things defined in
the Common Data Service, we provide you with a
way to customize those. But sometimes there
isn’t an app for that. So between CDS and PowerApps, within the power platform, we provide you with ways
to build what I call satellite apps which
orbit the Dynamics app, but are in fact separate or completely standalone
separate apps that don’t interact with or touch
the Dynamics data at all. But key point here is, Common Data Service
is central to many of the Dynamics applications
that you use today, and is the basis around
which we customize, extend those apps as well. So the other question that
we get a lot is like, well, what’s the relationship between
Common Data Service and Azure? That’s a great question. So I’ve got a little infrastructure
architecture diagram here that I want to show you. Really what it starts
with is an endpoint. The Common Data Service exposes an OData endpoint that is
consumed by the world at large. When we think about like what our PowerApps or Flows or AI
Builder or Power BI applications are communicating with when they
talk to the Common Data Service, they’re communicating with
just that OData endpoint. Now, that OData endpoint
behind the scenes, we have a Load Balancer. That routes requests to a bunch of different types of
VM scale sets that we have, some of which hosts
the API, our web servers, some of which handle asynchronous
processing in our jobs tear, some of which handle hosting custom business logic
in our sandbox tear, some which handle reporting
duties like generating paginated reports using
SQL reporting services. However, key point here, single endpoint that is exposed. You don’t go interact with provision
managed so on and so forth, any of this compute infrastructure. Now, you might be
saying, “Well, great. But what about like where
you go store stuff?” That’s a great question. So we also have very broad set
of storage technologies that we use within
the Common Data Service to store your data in the best
and most efficient way. One of the things that commonly we see folks doing is
when they draw CDS, they’ll draw like the oil can
that looks like a database, and I have to be honest like this is one of the things
that makes me very sad inside because CDSs is so
much more than a database, and you can almost see it
by no other virtue than just the different technologies that we use to store and
persists their data. So for example, a lot of
relational data that people store, goes into SQL Elastic Pools. When you have attachments
or files in CDS, those things get persisted in Blob. For other types of data in
our system like logged data or like some of the data
that we use for our mobile offline capabilities, that data gets stored in Cosmos DB. When you enable relevant search
and we start indexing data, that data gets stored
in Azure Search. So even from just a raw storage technology
perspective that we use, we use way, way more than just SQL behind the scenes to
make this happen. Yes, that endpoint is of
course as I said earlier, consumed by PowerApps, Flow, AI Builder, Power BI, so on and so forth. Now, the other thing
that we see is you can extend the Common Data
Service using Azure. So we have a very rich set
of capabilities around how you can extend
the Common Data Service with Azure. Where through eventing
and extensibility points, you can use for example our web hook capabilities to trigger either Azure Functions
or App Services. We have the ability to publish
messages to Event Hubs and Service Bus so that you can then consume those events from
the buses as you see is fit. So bunch of very rich capabilities
around how we’re able to extend the Common Data Service with capabilities that you host
yourself in Azure as well. So I know you’re going to be
really disappointed by this, but we’re getting ready
to shift or change gears and move over into
a demo application. So I’m going to drop out of my PowerPoint presentation and should have a browser window
up on the screen. Pavin, can you confirm
that we’re still good.>>We are good.>>Wonderful. Thank you so much. So the demo that I’m going to
show you today is actually an application that
we cloned from one of our customers, Virgin Atlantic. Virgin Atlantic as you know, they are an airline and they handle a lot of trans continental flights. So one of their big things
is for their passengers, especially for their frequent flyers, they have a set of services in
spas where after a long flight, you can go be pampered or whatever before you hop
on your next flight, go to an important business meeting, meet with your family,
so on and so forth. So this is an application
that they built to facilitate greeting customers as they
arrive in the spa facility, as well as handle certain onsite
like ad hoc booking activities. So you may have actually
seen this app before, we do demo it a lot at the
various like keynotes big tin. We call them demos, but what we don’t do in
those demos is really show you how the Common Data Service
makes those apps possible. We believe that CDS is really the best data source for
business applications. So in this app, we’re going to start by
showing how we built this application using
a handful of entities to start. So what I’ve got up on my screen
here that you can see is I’ve pulled up my list of entities
and I’ve drilled into contact. Now, the thing is,
this contact entity, Virgin didn’t have to cook
up what a contact look like. Because the thing is, remember, if you look at the lineage or go
into the genealogy or what have, you the Common Data Service, we do pull a lot of our DNA from
Dynamics which has been helping people run business applications
for almost the last two decades. So the Common Data Service
comes out of box with entities that are most commonly
used for business applications. So this is going to be things
such as contact count, almost a 100 other
different entities that are used for these most common
business applications. So these are actually the basis of what we publicly document as the common data model that’s
published out on GitHub. However, even though we put it in a place where we know what
these things look like to start, you can still customize them. So let’s go ahead and click
around and look at some of the capabilities that we have
around entity field definitions, so on and so forth.>>Can you make the text
a little bit bigger?>>Yes. How’s that?>>I think that it’s a little better.>>Okay cool. So the first thing
that we will do. Let’s go ahead and try
to look for a field that has a phone number in it, and by the way an entity
is really analogous like a table or a list in
SharePoint parlance, and then fields are similar
to attributes or columns. So each entity is composed
of multiple fields. For each field we’re able
to specify a data type as well as constraints for
that particular field. So these are rich data types that are exposed to a metadata
which we then consume via our PowerApps and
flows to scaffold like first and best experiences
over the top of that data. So as an example, if I have a field which
is a phone number, which I’ve selected here, you’ll see that my data type
is actually phone number. It’s not a number. It’s not a string. It’s actually a rich or much more tightly defined data type than that, and that helps our apps to understand that this thing is a phone number. So if for example, I were to go over to
my application and here you can see my contact record, and you can see here I have a phone number and I were
to click this button right here which I’m not going to
do because it’ll cause me to drop off our conference together, but this would actually initiate a phone call to this particular
phone number right here. So another example is I’m able to define basic data validation rules. So if I go over here and I search for zip code and I go right here and then I go
to my “Advanced Options”, you’ll see that this is a text field, but we’ve also defined
a max length on this, and so yes this does define the max length at
the data store level. However, this metadata is also made available through our OData APIs
and our PowerApps and flows know how to consume
that so that they can provide great experiences to customers that are interacting with this data. So if I go back to my contact card
and I go to my zip code, and let’s assume that I try to enter a very very long zip code that is longer than 20 characters
and I click “Save”, what will happen you just see, I’ve exceeded the maximum number of 20 characters for that field
as you would expect. So the thing is this
didn’t even actually require a full server
round-trip because we are able to express
these constraints in a way that we enforce not
only in the data tier, but also in a way that
can be honored and respected by the various
clients as well. So similarly, I can define let’s see. Sorry, give me just one minute. So these capabilities are there into our model-driven apps today and
they’re coming soon and trickling into Canvas apps over time as a part of
the new native connectivity that you may be seeing roll
out for Canvas applications. So the next thing I want to
show you is our relationships. Give me one moment to refresh this. There we go. So CDS makes it very easy to define
relationships between entities. Today CDS supports
one-to-many, many-to-one, many-to-many
relationships, and we use these relationships to
make join super easy. So for example, if when you’ve been building your Canvas application and you’ve gone to
thisaccount.contact.phonenumber, what you’ve actually done
behind the scenes there is joined these two different tables, but we use this relationship metadata to make those joins
super easy so that you can just use that simple dots type syntax to navigate
the relationship. Now these relationships go
beyond just our data tier. They’re exposed via
the CDS OData APIs following the standard
OData patterns. These relationships are actually what power navigation between
forms and views and the unified client and they make
it as I mentioned earlier easy to retrieve attributes of
related entities via PowerApps. They are also used in
our business logic which I’ll come back to later. So here you can see in the Virgin Atlantic application
how they have defined customer relationships
that exist between the customer and his or her flights, and that you can see there on
the flight member manifest. The relationship between
this contact and a questionnaire that asks
health-related questions. You’ll see this in the app
here in a few minutes, and also the relationship
between this contact and their various spa bookings as well. So we’ve talked about data modeling. Now let’s start shifting
gears and go in up a little bit higher
into business logic, and this is one of
the places where we see that CDS really starts to stand apart from some of the other data stores in
that when I look at Excel, when I look at SharePoint, my ability to express business logic in the data tier
is actually very very limited. If I look at data stores like SQL. SQL is very very powerful. However, to implement a lot
of that business logic, you have to turn around and involve a developer to build
a bunch of complex code, and with CDS we bring that power, but bring it all the way to just regular people so that we
democratize those capabilities so that really anybody can
define business logic over the top of the data
that’s defined in CDS. So let’s go and take a few looks at different types
of business logic. One of those types of business logic that we allow people to define. It’s still pretty close
to the data layer, but then what we call
calculated fields. So calculated fields you can think
of as a computed column in SQL. However, we do persist
them in the data store, and so here what they wanted to
do is they wanted to generate a greeting that which can be used
when people come into the spa. So you’ll see what
we do is we look to see if there’s a salutation, and if there is, then we’ll say “Hello” and then “Mr. or Mrs.” and then the last name. However, otherwise, if
that’s not the case, we say “Hello” and the
first name with a bit of more an informal greeting when we don’t happen to
have a salutation for them. Now, this information
is persisted in CDS. These calculated fields, and the reason why is they
then become sortable, filterable as well in
a very highly performant manner. One of the things that we
see when we look across the broader data stores
that people are building PowerApps over today, is while they might have
the capabilities for building calculated fields are things
similar to calculated fields, we find that performance in some of those stories can
become a huge problem. Common Data Service is
built for enterprise scale. We have customers today. They go all the way up
to our maximum limit of four terabytes in
a single CDS instance. So this thing really is
built from the ground up to support enterprise
scale applications. So the next type of business logic that I want to
show you and we’re going up the stack in the levels of complexity involved
are a roll-up fields, and roll-up fields
are aggregate values. They are calculated using an
aggregation functions such as sum, or average, or max, or min, and they are grouped by
a given relationship. So the thing to remember
here is a few moments ago I showed you their
relationships that existed. Here I am showing you
how we are able to use those relationships to
compute an aggregate value. So in this case, Virgin wanted to see how many bookings
a given customer had. So in this case, what we do is we look
at the relationship that exists between a contact and spa bookings using the relationship between spa bookings and contact, and then what we do is we use
the aggregate function of count, and so what this will do
is count the number of spa bookings for a given contact. So you can see “My gosh this
person very clearly must be very relaxed and beautiful or handsome because they’re
in the spa all the time.” Because I guess I use
this demo all the time. So you’re going to think that I’ve
spent a lot of time in the spa. Of course given the condition
of my beard and my hair, you don’t know that I very
clearly I booked the spa a lot, but never once gone. So anyway, an example of another
once again fairly close to the data side of things
but business logic that we’ve defined around this. Now the other thing
though is we also have. I almost forgot
a really important thing. The other thing that we’re
able to express in CDS in a fairly simple and
straightforward way are things like hierarchies. This might be common if you
were trying to understand a sales opportunity
pipelined by geography, where you start at the zip code and then maybe go up to
the state or province, and then up to the country
and so on and so forth, and we understand how to calculate
roll-up fields understanding that hierarchy so that we calculate the aggregated values
at each level up the stack. So the other thing
that’s interesting about Intelligent Smart
Business logic is we see that in many cases data quality
is a huge problem, and in my mind as people start by digitizing experiences like
low-quality data can be okay then, but then when you
start to automate over the top of that data if
you have low quality data, it becomes a problem
because stuff starts breaking in unexpected ways. Then when you start trying to derive insights from that data
using Power BI, if you have bad data, you see all sorts of
things where data gets aggregated strangely or you start seeing data points or values that pop that
really don’t make sense. Then if you start thinking about AI, where you’re talking
about intelligence, you can start to see
really creepy things start to occur when you have bad quality data. So one of the things that’s
interesting to look at is well, how does CDS help improve
the quality of my data overall? We showed earlier how there are constraints over the data
that you can define, but there’s actually
way more than that. So one of the common scenarios
that we see is there’s lots of duplicate data in systems that involve customer contact type things. So what I’m going to do right
here is I’m going to enter a new contact Michael and Jones, and then I’m going to go down
to e-mail and [email protected], and I’m going to save, and what
you’re going to see happen here. It’s going to say “Wait a second.” Something looks strange. You said that you want to
create this Michael Jones, but actually I have
a Mike Jones in the system. I have a Michael Jones in the system. You’ll notice these
aren’t all exact matches, but they look and smell similar
to the same kind of person. Are you sure you really want
to create another record here or do you actually want to update one of the existing contacts? So now to be clear
I’d love to say “Hey, this is super advanced AI, ML so on and so forth.” It’s really just looking at similarity patterns
across multiple fields, and it generates like a duplicate
score that you could think of. So it’s not rocket surgery here, but it’s actually a very
very helpful tool to improve the overall quality of the data that’s in
our business applications. So let’s switch gears now. We’ve talked a lot about
the capabilities that we have around contact management through
this application built on CDS, but I also want to talk a little bit
about offering management. Because Virgin of course that are
always bringing in new folks, adding new services to
the spas that they have. So they have a need to define and
describe these different offers in their different Spas. Now, what I’m showing you here is a model-driven application
for Offer Management. This is actually a dashboard. In case you aren’t familiar
with model-driven apps, we have a number of artifacts
there called Forms which is how I view or edit a specific record
for a specific entity. I have Views, which is how do I view a list of multiple records
of a specific entity. I have Dashboards, which
is a collection of charts as you can see here
and then a list of views. Then of course we
have charts as well, which can be inserted into
dashboards or use in other ways. So here’s my Offer Dashboard. You can see these three amazing
charts that show things. I don’t remember what they show, it’s not really important. Then down here, I have a view
that shows me Active Spa Offers. Now, what’s interesting
here is a view, actually, is quite helpful in that views
are used to not only say “Hey, here’s the columns that
I’m interested in, here’s how things are
sorted,” so on and so forth, but they also actually help
us do magic on the backend. In that we’re always trying to figure out in the CDS how do we auto magically index things
to maximize performance, maximize reliability,
so on and so forth. So we actually use view definitions to optimize the way
that we store data, since we know that
generally speaking, people do access their data
through these views. Okay, so let’s go and
create a new Spa offer. So here’s my amazing
new Spa offer page. So we will call this, hey, Pavin. What kind of service do you feel you really
need from the Spa today?>>I can certainly use a massage.>>Okay. A massage. So I’ve seen you’ve
been typing furiously. So how about a hand
massage specifically? So I’m going to save this. Hold on one more thing, and I’m going to set
a minimum tier availability. So let’s go ahead and save this. So the thing is, there’s actually a lot of information
that we need to gather from a Spa operator to be able
to ingest a new Spa offer. So what we do is we actually
break this down into a bunch of different steps so that it doesn’t overwhelm the user as
they manage these things. Now, these are what we call
it Business Process Flow. You might be saying, “Well,
wait a second, Ryan.” Business process flows are
like this thing that show up in model-driven PowerApps and they
are considered a part of flow, what the CDS have to do with this. Well, the reality is all
these business process flows actually get persisted
into CDS. Make sense? So what we’ll do here is let’s start clicking through
our Business Process Flow. So I’ve gone through and I’ve defined name and I’ve defined
the minimum tier availability. So I’m going to move to
the next stage of this. So here, let’s go ahead
and define a base price, and because this is a special offer that maybe I’m only
going to sell to Pavin, we’re going to make
this a really cheap offer. We’re going to sell this for $20, and because points are points, I’m pretty sure that probably
equates to 20,000 miles. So here I’m going to go to
the next stage of my offer. Now, what’s interesting
here is remember, a virgin has different tiers
of Franklin Flyers. We want to allow people
to be able to customize the price for each of
these different tiers of customers. However, it would seem that for
customers that are more common, more frequent flyers
I guess I could say, those prices should be lower. So the thing is, if you think about how
you do this in SQL, you could build
constraints or you could build stored procedures
or what have you. If you try to do this
over SharePoint lists, this actually becomes
a very challenging problem. You have to figure out how to route
this through some others tier business logic or run that tier
business logic after the fact. Well, with CDS, what we
have is we have a set of capabilities around business rules. So I’ve actually pulled up a set of business rules that we have
defined on this particular entity. So what we’ve done is we’ve defined two specific business rules that
ensure number 1, my base price. I’m sorry, my silver price is less
than or equal to my base price, and my gold price is less than
or equal to my silver price. That ensures that my silver and gold tier frequent flyers
never have to pay more than someone that
has a lower priced offer. So a lower tier of
status on the airline. So here’s my business rules. Editor, and what you
will see is I have a condition here that looks to see if the Goldman per price is greater than the Silver member price in which
case it throws an error message. Now by the way, you
may notice the way I described the business rule on the list page is slightly
different than how I defined it, because it’s just
a little bit easier to define the business rule
for the negative case. So similarly, there’s a clone of
this between the silver price and the regular or
the red tier price as well. So if I go to my offer
ingestion form and I say, “Hey, for silver members, this thing is going to be priced at $25,” and you’ll see
immediately it says, “Please ensure prices for
our premium customers are equal or lower than our base prices.” Now that message actually comes from right here in my
business rules designer. I was able to do this graphically, I was able to do this without
writing a single line of code, and these business rules sit between the CDS APIs and where
we process the data. So what this means is anybody
that is interacting with the data that’s persisted in
CDS will be subjected to, or for any requests that go to CDS, these business rules
will be enforced. So for example, we see that
for systems that don’t allow people to define
business rules like this, we’ll see that they
might go through and expose an Azure function that implements their business
rule and then turns around and rights to
their data source, or they might expose
a flow that they hit and then the flow implements
their business logic and then it hits the data
store of choice. The problem is you
can still go and hit that data store directly and
bypass all of this business logic. With CDS, all that stuff is part
of the exact same pipeline. So you’re able to ensure consistent
application of business logic, regardless of what app, like which power app is
interacting with that entity, or whether it’s a flow that’s
interacting with that entity, whether it’s a custom app built in Xamarin that’s interacting
with our OData APIs, or whether it’s Power BI or PowerAI, we bring consistent business
logic across those, if you remember earlier, interconnected applications
and business processes. So cool, that is offer management. So we’re putting all this
different data into CDS. The thing is that can make it
hard to find things over time. So one of the things
that CDS does is that it includes a capability
called relevant search which provides
relevant space searches over the top of the data
that we store in CDS. So to configure relevant
search, you turn it on, you define which entities and
feels you want to be indexed. Once that’s done, folks
can go into and click this little button right here which
takes them to this experience. So as an example, let’s assume I decide that
I needed a “leg wax”. So I search for that. Here, you’ll see that I get
a whole bunch of things that come back and you’ll
see we start with things that are exact match, and then we go with a full match
but with something else, and then we go into partial match, so on and so forth so that
folks can find this data. Now, if you remember from the slide
that I showed earlier on, the thing is this information is not coming from our relational store. It’s actually based on how we index the data that’s stored in SQL file, Cosmos, so on and so forth, and index that within Azure Search. All this stuff is
wired up. Turn it on. You just tell us, “Hey,
I want this field on this entity to be indexed,”
and that’s really about it. So pretty straightforward. So I know I’ve showed you
a bunch of things about the maker experience or offer
management or contact management. But I want to switch gears now and take you to the experience
that shows you the application that they’re
using for check-in in the Spa. So this is a tablet application, it’s right here, and so I’m
going to scan my boarding pass. So here in a moment, it
will take me to my record. So give me just a moment. So the thing that’s interesting here, a few things behind the scenes. One is, we’ve got this headshot here of this amazing-looking fellow. Very clearly back when
that photo was taken, I’d visited the spot
a bit more often. But the thing is even
though this is a field on the contact entity where lots of these fields that you see here are persisted in
our relational store, the thing is these images
we actually happen to store in Azure Blob
behind the scenes. So what this does is
it’s a great example of how we use the best storage service
to persist your data, but still expose it in
a consistent manner for consumption by your application. The other thing is you’ll notice this greeting right here, “Hello Mr. Jones.” I don’t think I’ve
ever heard that before. Normally, people are like what’s this long haired crazy looking dude doing in our spot. But anyway, we have this right here. That’s the calculated field that we defined in CDS that is bubbling up through my Canvas application. Once again, the same
business logic that we had in our model-driven
app is being exposed in our Canvas driven app
because it’s defined in CDS rather than all the way
up in the presentation layer. So let’s go ahead and click
or create a treatment. So here we will see all
of these great services. I don’t know what a Fringe trim
or an Olaplex Experience are, but try everything once, sometimes twice just to make sure. So I’ll select those, and have I visited before? No. Any medical conditions? No, I don’t have any of those things, and so I’m going to turn
around and sign beautifully. You guys can keep that signatures
as an autograph if you like. I will submit. So and now I will confirm. That’s interesting. This looks a little suspicious. Well, we’ll come back to
that here in a little bit. So the prices are of
course $16 and $35. So I will confirm my booking. So I am now booked for this
particular service or whatever else. Now, the thing is what we saw was these different types of services that people are
looking for in the Spa. Sometimes they wanted some sort of confirmation and maybe received is that the right word because a lot of times on these services
are billing them using their points rather than billing
them for dollars and cents. So one of the things that we
decided that would be nice is, hey, what if we were to generate
like a receipt for them. So one of the things
that CDS has in it, we actually have a version
of SQL reporting services that is able to report against the OData APIs that I
talked about earlier. So we also have
this capability in CDS, and that you can define like super advanced business logic
using custom code. You can write this in two ways. One way is you can write C-Sharp that implements this thing called
the I Plug-in Interface. The other thing that
you can do is you can create custom workflows as well. So this custom plugins you bind them against
different actions, against entities. So if, for example, I wanted this thing to fire or
trigger every time someone created an account or updated a contact
or deleted a Spa booking, you can actually run this custom code and that custom code
runs in transaction. It’s there’s a part of the
processing pipeline below the API, so that once again even custom
business logic is applied in a consistent way regardless of which application or client is
interacting with the system. So what we’ve done here is we have registered a plug-in
to run asynchronously. You can choose to register them to run asynchronously or synchronously. What it does is it calls the Reporting Services Web API
to generate a PDF. So here I have a PDF that
was generated by this code. I will admit CDS
platform API guy here, not the most stunningly
beautiful PDF, but a great example
of how you can bind our reporting services
capability with our custom business
logic capability to render PDFs pretty simply
with very, very minimal code. I think it’s like a dozen, two dozen lines of code
or something like that. So this is a huge
differentiator for us, once again like really
difficult to try to do something like this
with other platforms without going through
and needing to hire a developer or deal with what I
call business logic hodgepodge, where business logic lives
over here but not over here, so on and so forth. So the other thing that’s interesting is we saw how my points balance looked
really, really strange earlier. I think it might be worth us
looking into why that is. So what I’m going to do is I’m
going to go over to my audit tab. So within CDS, you can define which entities and fields
you want to be audited, so that you can understand who
is interacting with what data, under which circumstances,
so on and so forth. So here, we can see that all these different changes have been made and I just happened to know, sorry guys, it’s demo after all, which update is suspicious. So what we’ll see is right here
on July 25th in the evening, Mr. Horlock went through
and decided to give me 999 million frequent flyer points. That was a very, generous of Kevin. I’m going to need to send
him a fruit basket for this. But this is super powerful
feature and that you can understand who changed what
and when they did that. The other thing that’s
interesting is, we’ve optimized where we
store and persist this data. In that, this data isn’t
necessarily always efficiently stored within a relational capacity
or a database capacity. So we store this using
our log capacity based capability. So another example of
where CDS is bringing heterogeneous storage capabilities
within a single API, single service, so on and so forth. So that’s that. So that concludes my demo, I’m going to switch back over
to my PowerPoint presentation. We’ll cover just a few more things
before we call it a day. So I hope that based
on today’s discussion, you see and understand how
CDS is more than a database. I hope you can see how CDS helps
you easily structure variety of business data to support interconnected apps and processes in a secure and compliant manner. What I’d ask you to do is, if you haven’t already, go and try to build
a CDS PowerApps and Flow Demo or application today. A few resources that you
may want to take a look at after we’re done
with our discussion, you can see that we have documentation
or I guess I should say it, marketing comedy overview of CDS
available in the power app site, and then we have a bunch of
documentation on how to use Common Data Service within
the Power Apps documentation. So with that said, love to take questions
if there are any. I’m happy to answer any questions. You can ask me about my kids, you can ask me about
Power Apps that are CDS, that’d probably be more helpful, but I always love
answering questions about my kids. I used to say dogs but I
don’t have dogs anymore, they went to doggy heavens.>>Great questions you-all. It could be a case where Ryan was so thorough that everyone is now rushing out to spin up their own
CDS instance right now.>>That’s my hope. I
hope to see a spike in our monthly active users today
just because of this call.>>Let’s put it a little bit
of enticement to their, the best question today
gets a Bluetooth speaker.>>Can I ask myself a question?>>No. But last week on the call we did give away one to John [inaudible] for asking
a really good question. Anyone? He’s even taking
questions about his kids.>>Their names are Hollis and Audrey.>>Right, I guess. Oh! We got one, we got one.>>Oh! Okay.>>I see some similarities
with serum DB on CDS. Is CDS basically a serum
behind the scenes?>>That’s a great question. So kind of, okay? The thing is, there are
lots of similarities, because what we’ve done is, if we go on our time machine
and go back like three years, there was no CDS and CRM
distinct from one another. Okay? What we’ve done is we’ve
actually pulled apart the platform, capabilities, that
historically have powered CRM, pull those apart and separated them. So now CRM is an application
that installs on top of CDS. Okay? Logically speaking, we don’t actually allow
folks to install CRM onto CDS today for a bunch of complicated reasons
I’d rather not get into, but the way of thinking of it is, a metaphor that I sometimes use is like the way that we have Windows, and then you install Office
over the top of it, similarly, we have CDS and then you install Dynamics 365 for Sales on top of CDS. However, from once again our DNA, the code, the things that you can do, they share a lot of the same things
and in fact the bulk of where my team spins are our time on a day-to-day basis on
those five fundamental things, are actually around people who
are running CRM on top of CDS using the Dynamics 365 for Sales
or customer service applications. So great questions, just
maybe a little bit flipped. So I hope my answer was helpful and then I was
able to answer it for you.>>All right. Now, they’re
starting to come in. Good session, really
clear presentation. Could you briefly explain CDM.>>Yes. So the CDM is
a modular definition of schema for commonly used entities that are used in
business applications. Okay? So when we look at CDS, CRM, so on and so forth. One is, a lot of what’s in
CDM actually was derived from how CRM and the Dynamics Applications have
historically been built. Okay? But what we find is, people need to be able to
shuffle data in and out of CDS, CRM so on and so forth. People need to have ways to report over this data and
things like Power BI. They need a way to define
the structure of this data, so that if they export that data
to for example Azure Data Lake, the data has a common structure, schema, so on and so forth. So CDM is that schema
definition, right? So one of the questions that I then
get as a follow-up usually is, what is the difference between the Common Data Model and
the Common Data Service? The thing is the Common Data Service
is in fact a service, it is a thing that runs, and the CDM is instantiated or hydrated if you will within
the Common Data Service. You could, if you so chose, tried to hydrate
the Common Data Model into other data stores as well, we have lots of customers who do
this in Azure Data Lake today, but you can think of the CDM
as a definition of schema, while the Common Data Service
is an actual running Service into which that schema has been
materialized or is instantiated. I hope I answered your question.>>Fully. I will also
responded to the same thing.>>Okay.>>Next question is
a two part from Aaron, I’ve heard that the Common
Data Service Connector for Flow and Power Apps is supposed to replace
the Dynamic CE connector for Flow and Power Apps, is this the case? The second part to that question is, if so, is this the same as
for Logic Apps Connector?>>Okay. So the first part of
the question I can answer, which is, we’ve been making a huge number
of investments around how Flows and PowerApp specifically, Canvas Apps connect to CDS, and the bulk of
that investment is going into the CDS Connector rather
than the Dynamics Connector. So our general guidance is to use the CDS Connector
whenever possible. Now, we did just introduce what
we call Native Connectivity, between Canvas Apps and CDS, and Flow has this notion of
Native Connectivity as well. Those connector lists experiences, actually provide
the best performance, availability, and
the broadest set of features. So if I were to put, I don’t want to say, how
about good, better, best. Good would be Dynamics connector. Better would be CDS connector. Best would be Native
Connectivity to CDS, and that would be our recommendation. Now, when it comes to Logic Apps. Similarly, like we’d have the
good and better, however, Logic Apps doesn’t really
have the notion of Native connectivity to CDS. So I hope I answered your question.>>Next question was, what is the implications
of migrating from an On-premise 365
instance to a CDS model? Any migration required?>>So I think the question, there’s two ways that
you could look at that. One would be, if you’re
running Dynamics On-premises and you use
a 100 percent custom entities, and you don’t take
any dependencies on the Dynamics, part of that On-prem deployment
like use opportunity, or lead, or the forums, or views associated
with those as one example, then you should be able
to take that solution and import it to CDS instance
and be good to go. Now, if you have used for example some of the parts
of the Dynamics Application, as I mentioned earlier,
opportunity or lead, and the sales scenario or maybe
for service you’re using case, then what you would do there is, you would actually need to have Dynamics in your online environment, you would need to be appropriately
licensed for Dynamics. However, that Dynamics
365 online environment would be running on top of the Common Data Service
from the get-go. So, hope that answered
the question and any of the two different pivots
that are available to you there. Next question from Ron Harris. How do we know if
dynamics 365 for sales is running on CDS for older clients?>>So if you’re online at this point, every customer except for
our Dynamics in Germany, the German sovereign Cloud, all of our online customers are running on top of
CDS at this point. We completed that migration
back in the spring timeframe. So everybody upgraded, if you will, as a part of the April release wave.>>Okay. Next question
is from Thomas. Will we be able to use the full CDM schema with
PowerApps plans in the future?>>Not necessarily
because today some of the things that we document in the common data model are what
we call restricted entities, and restricted entities
require you to have a dynamics license
to interact with them. So not at this time.>>One more question from him. Are there any plans to open CDS integrator to
third party integrations?>>I would need to ask a follow up. When you talk about CDS integrator, are you referring to the get_data experience where
you’re able to bring data into CDS? Oh wait, sorry. I know I answered
a question with a question. How about this, if the answer is yes, then what you would do is
you would build a connector and participate in
our connector partner ecosystem and yes there are lots of
third party connectors. In fact, the majority of
the connectors that we have available are third party today. So if the answer was yes, then yes you can participate there. Other ways that the ecosystem can interact with CDS of
course solutions. If you’re familiar with
Dynamics work with CDS, the same way that they always have, we support packages for
distribution through AppSource, all of those things work
just as they always have.>>He meant the thing for
connecting finance and operations.>>Okay. So we have some capabilities around how
we enable what we call it like dual right of data
that gets written to both the common data service and the finance and operations services. That offering I believe is in preview today and will
be evolving over time. I believe that there is
work going on there to figure out how that can
be more extensible, by third parties but I tell you what, I know the lady that’s driving that effort and so I
can get from pervade your contact information
and I will connect you directly with her because she
is the domain expert there. I would not claim to be. Fair?>>Absolutely one more. Oh wait he’s still responding. For example, opportunity is not restricted entity
but it is available. I think this is related
to the original question, will we be able to use the full CDM schema with
PowerApps plans in the future?>>Yeah. So like opportunity is not a restricted entity but
for example goal is. So there are restricted
entities that require dynamics licenses to work with them and I apologize
if I was unclear. Opportunity is not a restricted
entity however you do have to have a dynamics license to have an environment in which
the Dynamics 365 for Sales app is installed which includes
the opportunity entity. That was a long answer.>>It was.>>Sorry, you got me honest
though Thomas. Thank you.>>I think we’ve covered
all the questions so far. I will give one more
question and then we’ll let Ryan choose which one
was the most thought-provoking.>>Okay.>>Anyone last call for questions. All right. Ryan, which one
stumped you today? I wouldn’t say stumped you, which
one made you think a little bit?>>Oh gosh. I tell you what, I’ll give you two choices
proven and then you can pick. So either the restricted
entity question since I had to give like
a three-minute answer to it or the connector question. So you can pick between the two.>>I think the restricted
question was more thought-provoking because
a lot of people don’t realize when you get
CDS about the licensing needs if you are to use
those restricted entities, so I personally think
that that’s the one and especially since it made
you give a three-minute answer.>>Okay, then that one it is.>>All right. Thomas,
we will certainly circle back with you after the call, and for those of you who
have attended the call, we’ve certainly had
a quite a few bit of people, thank you so much. We will be back on
next week same time, 10 o’clock pacific time and we will have the two guys
from PowerApp attics, we’ll have Daniel Laskewitz and we’ll also have
Anton Robbins and they’ll actually show how to use our app for Outlook and whether you’re
using PowerApps or Dynamics. So we will have this recording published up next week
around the Monday timeframe. So if you didn’t get
a chance to watch this live, you can always watch offline and certainly share with
all your other friends. These webinars are free for
everyone and we want to make sure that everyone gets full blast
from the firehose. So with that said, I think Ryan Jones will
pop in for an hour and a couple of minutes and
all the people that were on live, again feel free to go to
community.dynamics.com under webinars and we’ll have this recording published.
Thank you so much Ryan.>>Thanks guys. I appreciate your time this morning,
have a great one.