SlideShare uma empresa Scribd logo
1 de 50
Ike Ellis, MVP, Partner – Crafting Bytes
Introdution to DAX
Do you know DAX?
What do you need to know in order to say yes, I know DAX?
1. You need to know these functions:
• SUM, AVERAGE, MIN, MAX
• COUNT, COUNTROWS
• CALCULATE
• FILTER
• IF/VARIABLES
2. You need to know about Contexts
• Row Context
• Filter Context
3. Some other things:
Formatting
White space
Time intelligence
Best Practices
X vs nonX functions(SUM vs SUMX)
DAX Studio
Basic Troubleshooting
So how will you learn it?
Go in order:
• This slide deck
• This Power BI Project
Practice, practice, practice
And how will you use it?
Works in Excel
Works in Power BI
Works in SQL Server Analysis Services (SSAS) Tabular
This presentation
• Simplifies the complexity
• Might not tell you the whole truth for the sake of simplicity
• Is not seeking to be comprehensive, but instead, seeks to
allow you to answer the question, yes, I know DAX in that job
interview
Your first DAX expression
Check Power BI Desktop tab “Your First DAX Expression”
It’s a calculated column called Order Line Total
Meant to add a column to every record in a table.
Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
Your Second DAX Expression
Check Power BI Desktop tab “Your Second DAX Expression”
This is a measure
Meant to perform an aggregation that we can slice & dice
Total Sales = SUM('Sales OrderDetails'[Order Line Total])
How can we verify this?
select sum(Sales.OrderDetails.unitprice * Sales.OrderDetails.qty)
from sales.OrderDetails
DAX Expression Breakdown
Name the
measure.
You’ll use
that in the
visualizatio
n
Built in DAX formula
Table name
Column nameEquals sign
separates
expression name
from expression
formula
Total Sales = SUM('Sales OrderDetails'[Ordera Line Total])
All kinds of easy to use DAX formulas that you can
learn quickly
SUM
AVERAGE
MIN
MAX
COUNT
COUNTROWS
DATEDIFF
DATEADD
Look at tab “Easy DAX built-in formulas”
Look under the Orders table for the calculated column “Days to
Ship”
Look under Orders table for measure “Average Days to Ship
Days To Ship = DATEDIFF('Sales Orders'[orderdate], 'Sales Orders'[shippeddate],DAY)
Play again: AVERAGE and DATEDIFF
Average Days to Ship = AVERAGE('Sales Orders'[Days To Ship])
Your Third DAX expression: Calculated Table
Look at the Dates table. It was built with a DAX expression
Created a Dates table with a date per day between the specified
range
Also created a Dates hierarchy
Dates = CALENDAR("1/1/2000", "12/31/2016")
Now on to Contexts!
Two different contexts:
• Row Context
• Filter Context
Row Context
We already know how this works! We’ve been using it for all of
our calculated columns. Let’s revisit our first DAX Expression
Notice we expect a value per row in a table
This runs at import and gets stored
Might increase file size
Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
Filter Context
Easy to show with measures
Look at Filter Context 1, 2, 3 in the Power BI Desktop file
(PBIX).
Filter Context 1
We see it filtered by year and optionally by product category
The measure is only defined once, and the DAX engine takes
care of doing the calculations on the fly
The calculations are not stored, but created and retrieved at
query time
Filter Context 2
Total Sales by year and with a page filter.
Filter Context 3
Visuals can impact each other and change context
Now that we understand context, we can
answer this: Measures vs Calculated
Columns
Measures Calculated Columns
Different functions Uses Row Context
Doesn’t take up space Mostly text
Less space Executes at the point data is read into the model
and saved (value is static)
Filter Context
Executed at the time it is used
CALCULATE: Breaking out of the filter context
Beverages Total Sales = CALCULATE
(
SUM('Sales OrderDetails'[Order Line Total])
, 'Production Categories'[categoryname] = "Beverages"
)
AGGREGATION
FILTER
Look at the tab CALCULATE
Let’s look at the syntax from books online
CALCULATE(<expression>,<filter1>,<filter2>
…)
CALCULATE: Over Multiple Tables
Total Sales - Beverages in USA = CALCULATE(
sum('Sales OrderDetails'[Order Line Total])
, 'Production Categories'[categoryname]= "Beverages"
, 'Sales Customers'[country] = "USA"
)
Two Types of Filters for Calculate
Simple Filters
• We’ve been doing simple filters the whole time. We already know this.
Complex Filters
Complex Filters
VALUES
ALL
FILTER
VALUES
Returns a virtual table
• A table that’s created in memory, but has a relationship with existing tables
Returns a single column table that respects the current filter
context
Country Count = COUNTROWS(
VALUES('Sales Orders'[shipcountry]))
Country Count wo VALUES = COUNTROWS('Sales Orders’)
ALL
Removes all current filters from the filter context
Could be renamed “remove filter”
Country Count Total = COUNTROWS(All('Sales
Orders'[shipcountry]))
FILTER
Very powerful when combined with DAX
Allows you to filter your calculation anyway you want
Allows you to dream up very complicated code
Easier to read if you use multiple line DAX Statements
FILTER
Total Sales For Customers with Minimum Order Count v2 =
VAR MinimumOrderCount = 10
VAR CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] >
MinimumOrderCount)
VAR CustomersWithMinimumOrdersResult = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, CustomersWithMinimumOrders
)
RETURN CustomersWithMinimumOrdersResult
FILTER – Use simple formulas too
Number of Orders = COUNT('Sales Orders'[orderid])
Number of US Orders = CALCULATE
(
COUNT
(
'Sales OrderDetails'[orderid]
)
, FILTER
(
'Sales Customers'
, 'Sales Customers'[country] = "USA"
)
)
FILTER – Create Table
Minimum Order Customers =
VAR MinimumOrderCount = 10
var CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount)
RETURN CustomersWithMinimumOrders
VARIABLES & RETURN
Total Sales For Customers with Minimum Order Count =
VAR MinimumOrderCount = 5
VAR CustomersWithMinimumOrders = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, FILTER('Sales Customers', [Number of Orders] >
MinimumOrderCount)
)
RETURN CustomersWithMinimumOrders
Variables
VAR myVar = 1
Data
Type
Variable
Name
Variable
Value
RETURN myVar + 25
Expressions must use RETURN to return a value
Debugging using variables
• RETURN does not need to return the last variable
• In a multi-step formula, you can return an earlier value to
troubleshoot it
• Simplifies the reading of code, rather than endlessly nesting
values over and over again.
Time Intelligence: TOTALYTD
YTD Total Sales = TOTALYTD
(
SUM('Sales OrderDetails'[Order Line Total])
, Dates[Date].[Date]
)
Time Intelligence: PREVIOUSMONTH
Total Sales Previous Month = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, PREVIOUSMONTH(Dates[Date])
)
X vs nonX functions(SUM vs SUMX)
• SUM is an aggregator function. It works like a measure,
calculating based on the current filter context.
• SUMX is an iterator function. It works row by row.
SUMX has awareness of rows in a table, hence can
reference the intersection of each row with any columns
in the table.
SUM vs SUMX Example
Total Sales SUMX = SUMX(
'Sales OrderDetails'
, 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice
)
Total Sales = SUM('Sales OrderDetails'[Order Line Total])
Best Practice: Organize your code
Keep measures together
Organize them by type
• Simple aggregation
• Time variance
• Ratios and differences
• Business-specific calculations
Best Practice: Naming Columns & Measures
• Feel free to use spaces
• Avoid acronyms
• Make names terse, but descriptive
• Makes Q & A easier to use
• In formulas, reference table names for calculated columns and
do not reference table names for measures, so you’ll know the
difference
Best Practice: Formatting
• DAX Expressions can have lots of parentheses and square brackets
• Please use white space to control this
• Here’s an example of a properly formatted calculated column
• DaxFormatter.com
Days To Ship = DATEDIFF
(
'Sales Orders'[orderdate]
, 'Sales Orders'[shippeddate]
, DAY
)
Basic Troubleshooting
A lot of things can go wrong, but the problem is usually one of
two things:
1. A relationship is misconfigured or the data is wrong in the model.
2. Wrong data type
Data types
• Numeric
• String
• Bool
• DateTime
• If a function is expecting a numeric, but gets a string, it won’t
work. Clean up the model and watch it start working.
• Uses less space and memory with your model
• Improves performance
Relationships
Manipulating the relationships
Total Sales By Ship Year = CALCULATE
(
SUM('Sales OrderDetails'[Order Line Total])
, USERELATIONSHIP('Sales Orders'[shippeddate],
Dates[Date])
)
Only one active relationship at a time
DAX Studio
• Parses
• Formats
• Shows execution plan
• Connects to SSAS Tabular or
Power BI Desktop
Other Resources
Contact Me!
• http://www.craftingbytes.com
• http://blog.ikeellis.com
• http://www.ikeellis.com
• YouTube
• http://www.youtube.com/user/IkeEllisData
• San Diego Tech Immersion Group
• http://www.sdtig.com
• Twitter: @ike_ellis
• 619.922.9801
• ike@craftingbytes.com
Free online webinar
events
Free 1-day local
training events
Local user groups
around the world
Online special
interest user groups
Business analytics
training
Get involved
Explore
everything
PASS has
to offer
Free Online Resources
Newsletters
PASS.org
Download the GuideBook App
and search: PASS Summit 2018
Follow the QR code link displayed on session
signage throughout the conference venue and
in the program guide
Session
evaluations
Your feedback is
important and valuable.
Go to passSummit.com
3 Ways to Access:
Submit by 5pm Friday, November 16th to win prizes.

Mais conteúdo relacionado

Mais procurados

Understanding Power BI Data Model
Understanding Power BI Data ModelUnderstanding Power BI Data Model
Understanding Power BI Data ModelHARIHARAN R
 
Power BI Advance Modeling
Power BI Advance ModelingPower BI Advance Modeling
Power BI Advance ModelingCCG
 
Power BI Data Modeling.pdf
Power BI Data Modeling.pdfPower BI Data Modeling.pdf
Power BI Data Modeling.pdfVishnuGone
 
Modernize & Automate Analytics Data Pipelines
Modernize & Automate Analytics Data PipelinesModernize & Automate Analytics Data Pipelines
Modernize & Automate Analytics Data PipelinesCarole Gunst
 
Advanced SQL For Data Scientists
Advanced SQL For Data ScientistsAdvanced SQL For Data Scientists
Advanced SQL For Data ScientistsDatabricks
 
How to use histograms to get better performance
How to use histograms to get better performanceHow to use histograms to get better performance
How to use histograms to get better performanceMariaDB plc
 
Should I move my database to the cloud?
Should I move my database to the cloud?Should I move my database to the cloud?
Should I move my database to the cloud?James Serra
 
Cepta The Future of Data with Power BI
Cepta The Future of Data with Power BICepta The Future of Data with Power BI
Cepta The Future of Data with Power BIKellyn Pot'Vin-Gorman
 
La démo DAX, le langage de Power BI [webinaire]
La démo DAX, le langage de Power BI [webinaire]La démo DAX, le langage de Power BI [webinaire]
La démo DAX, le langage de Power BI [webinaire]Technologia Formation
 
Introduction of sql server indexing
Introduction of sql server indexingIntroduction of sql server indexing
Introduction of sql server indexingMahabubur Rahaman
 
Data warehouse : Order Management
Data warehouse : Order ManagementData warehouse : Order Management
Data warehouse : Order ManagementKritiya Sangnitidaj
 
Informatica Training | Informatica PowerCenter | Informatica Tutorial | Edureka
Informatica Training | Informatica PowerCenter | Informatica Tutorial | EdurekaInformatica Training | Informatica PowerCenter | Informatica Tutorial | Edureka
Informatica Training | Informatica PowerCenter | Informatica Tutorial | EdurekaEdureka!
 
Changing the game with cloud dw
Changing the game with cloud dwChanging the game with cloud dw
Changing the game with cloud dwelephantscale
 
Key Considerations While Rolling Out Denodo Platform
Key Considerations While Rolling Out Denodo PlatformKey Considerations While Rolling Out Denodo Platform
Key Considerations While Rolling Out Denodo PlatformDenodo
 
Power pivot intro
Power pivot introPower pivot intro
Power pivot introasantaballa
 

Mais procurados (20)

Understanding Power BI Data Model
Understanding Power BI Data ModelUnderstanding Power BI Data Model
Understanding Power BI Data Model
 
Power BI Advance Modeling
Power BI Advance ModelingPower BI Advance Modeling
Power BI Advance Modeling
 
Power BI Data Modeling.pdf
Power BI Data Modeling.pdfPower BI Data Modeling.pdf
Power BI Data Modeling.pdf
 
My tableau
My tableauMy tableau
My tableau
 
Introduction to Amazon Redshift
Introduction to Amazon RedshiftIntroduction to Amazon Redshift
Introduction to Amazon Redshift
 
Modernize & Automate Analytics Data Pipelines
Modernize & Automate Analytics Data PipelinesModernize & Automate Analytics Data Pipelines
Modernize & Automate Analytics Data Pipelines
 
Data Modeling with Power BI
Data Modeling with Power BIData Modeling with Power BI
Data Modeling with Power BI
 
Excel to Power BI
Excel to Power BIExcel to Power BI
Excel to Power BI
 
Advanced SQL For Data Scientists
Advanced SQL For Data ScientistsAdvanced SQL For Data Scientists
Advanced SQL For Data Scientists
 
How to use histograms to get better performance
How to use histograms to get better performanceHow to use histograms to get better performance
How to use histograms to get better performance
 
Should I move my database to the cloud?
Should I move my database to the cloud?Should I move my database to the cloud?
Should I move my database to the cloud?
 
Cepta The Future of Data with Power BI
Cepta The Future of Data with Power BICepta The Future of Data with Power BI
Cepta The Future of Data with Power BI
 
La démo DAX, le langage de Power BI [webinaire]
La démo DAX, le langage de Power BI [webinaire]La démo DAX, le langage de Power BI [webinaire]
La démo DAX, le langage de Power BI [webinaire]
 
Introduction of sql server indexing
Introduction of sql server indexingIntroduction of sql server indexing
Introduction of sql server indexing
 
Data warehouse : Order Management
Data warehouse : Order ManagementData warehouse : Order Management
Data warehouse : Order Management
 
Informatica Training | Informatica PowerCenter | Informatica Tutorial | Edureka
Informatica Training | Informatica PowerCenter | Informatica Tutorial | EdurekaInformatica Training | Informatica PowerCenter | Informatica Tutorial | Edureka
Informatica Training | Informatica PowerCenter | Informatica Tutorial | Edureka
 
Changing the game with cloud dw
Changing the game with cloud dwChanging the game with cloud dw
Changing the game with cloud dw
 
Key Considerations While Rolling Out Denodo Platform
Key Considerations While Rolling Out Denodo PlatformKey Considerations While Rolling Out Denodo Platform
Key Considerations While Rolling Out Denodo Platform
 
Power pivot intro
Power pivot introPower pivot intro
Power pivot intro
 
Google BigQuery
Google BigQueryGoogle BigQuery
Google BigQuery
 

Semelhante a Pass 2018 introduction to dax

Business Intelligence Portfolio
Business Intelligence PortfolioBusiness Intelligence Portfolio
Business Intelligence PortfolioChris Seebacher
 
IT301-Datawarehousing (1) and its sub topics.pptx
IT301-Datawarehousing (1) and its sub topics.pptxIT301-Datawarehousing (1) and its sub topics.pptx
IT301-Datawarehousing (1) and its sub topics.pptxReneeClintGortifacio
 
Slides for PUG 2018 - DAX CALCULATE
Slides for PUG 2018 - DAX CALCULATESlides for PUG 2018 - DAX CALCULATE
Slides for PUG 2018 - DAX CALCULATEIke Ellis
 
Multidimensional Data Analysis with Ruby (sample)
Multidimensional Data Analysis with Ruby (sample)Multidimensional Data Analysis with Ruby (sample)
Multidimensional Data Analysis with Ruby (sample)Raimonds Simanovskis
 
Chris Seebacher Portfolio
Chris Seebacher PortfolioChris Seebacher Portfolio
Chris Seebacher Portfolioguest3ea163
 
Introduction-to-DAX-2017-01-12.pptx
Introduction-to-DAX-2017-01-12.pptxIntroduction-to-DAX-2017-01-12.pptx
Introduction-to-DAX-2017-01-12.pptxKishor kumar M
 
Fact table design for data ware house
Fact table design for data ware houseFact table design for data ware house
Fact table design for data ware houseSayed Ahmed
 
Fact table design for data ware house
Fact table design for data ware houseFact table design for data ware house
Fact table design for data ware houseSayed Ahmed
 
05 Create and Maintain Databases and Tables.pptx
05 Create and Maintain Databases and Tables.pptx05 Create and Maintain Databases and Tables.pptx
05 Create and Maintain Databases and Tables.pptxMohamedNowfeek1
 
Excel useful tips
Excel useful tipsExcel useful tips
Excel useful tipsMohsin Azad
 

Semelhante a Pass 2018 introduction to dax (20)

Business Intelligence Portfolio
Business Intelligence PortfolioBusiness Intelligence Portfolio
Business Intelligence Portfolio
 
IT301-Datawarehousing (1) and its sub topics.pptx
IT301-Datawarehousing (1) and its sub topics.pptxIT301-Datawarehousing (1) and its sub topics.pptx
IT301-Datawarehousing (1) and its sub topics.pptx
 
Getting power bi
Getting power biGetting power bi
Getting power bi
 
Slides for PUG 2018 - DAX CALCULATE
Slides for PUG 2018 - DAX CALCULATESlides for PUG 2018 - DAX CALCULATE
Slides for PUG 2018 - DAX CALCULATE
 
Multidimensional Data Analysis with Ruby (sample)
Multidimensional Data Analysis with Ruby (sample)Multidimensional Data Analysis with Ruby (sample)
Multidimensional Data Analysis with Ruby (sample)
 
003.query
003.query003.query
003.query
 
Chris Seebacher Portfolio
Chris Seebacher PortfolioChris Seebacher Portfolio
Chris Seebacher Portfolio
 
Introduction-to-DAX-2017-01-12.pptx
Introduction-to-DAX-2017-01-12.pptxIntroduction-to-DAX-2017-01-12.pptx
Introduction-to-DAX-2017-01-12.pptx
 
Fact table design for data ware house
Fact table design for data ware houseFact table design for data ware house
Fact table design for data ware house
 
Fact table design for data ware house
Fact table design for data ware houseFact table design for data ware house
Fact table design for data ware house
 
SQL Select Distinct Statement
SQL Select Distinct StatementSQL Select Distinct Statement
SQL Select Distinct Statement
 
Access 04
Access 04Access 04
Access 04
 
Module02
Module02Module02
Module02
 
Sq lite module6
Sq lite module6Sq lite module6
Sq lite module6
 
Excel tips 172
Excel tips 172Excel tips 172
Excel tips 172
 
05 Create and Maintain Databases and Tables.pptx
05 Create and Maintain Databases and Tables.pptx05 Create and Maintain Databases and Tables.pptx
05 Create and Maintain Databases and Tables.pptx
 
Excel useful tips
Excel useful tipsExcel useful tips
Excel useful tips
 
Excel tips
Excel tipsExcel tips
Excel tips
 
Excel tips
Excel tipsExcel tips
Excel tips
 
Excel Useful Tips
Excel Useful TipsExcel Useful Tips
Excel Useful Tips
 

Mais de Ike Ellis

Storytelling with Data with Power BI
Storytelling with Data with Power BIStorytelling with Data with Power BI
Storytelling with Data with Power BIIke Ellis
 
Storytelling with Data with Power BI.pptx
Storytelling with Data with Power BI.pptxStorytelling with Data with Power BI.pptx
Storytelling with Data with Power BI.pptxIke Ellis
 
Build a modern data platform.pptx
Build a modern data platform.pptxBuild a modern data platform.pptx
Build a modern data platform.pptxIke Ellis
 
Data Modeling on Azure for Analytics
Data Modeling on Azure for AnalyticsData Modeling on Azure for Analytics
Data Modeling on Azure for AnalyticsIke Ellis
 
Migrate a successful transactional database to azure
Migrate a successful transactional database to azureMigrate a successful transactional database to azure
Migrate a successful transactional database to azureIke Ellis
 
Data modeling trends for analytics
Data modeling trends for analyticsData modeling trends for analytics
Data modeling trends for analyticsIke Ellis
 
Data modeling trends for Analytics
Data modeling trends for AnalyticsData modeling trends for Analytics
Data modeling trends for AnalyticsIke Ellis
 
Relational data modeling trends for transactional applications
Relational data modeling trends for transactional applicationsRelational data modeling trends for transactional applications
Relational data modeling trends for transactional applicationsIke Ellis
 
Power bi premium
Power bi premiumPower bi premium
Power bi premiumIke Ellis
 
Move a successful onpremise oltp application to the cloud
Move a successful onpremise oltp application to the cloudMove a successful onpremise oltp application to the cloud
Move a successful onpremise oltp application to the cloudIke Ellis
 
Azure Databricks is Easier Than You Think
Azure Databricks is Easier Than You ThinkAzure Databricks is Easier Than You Think
Azure Databricks is Easier Than You ThinkIke Ellis
 
Pass the Power BI Exam
Pass the Power BI ExamPass the Power BI Exam
Pass the Power BI ExamIke Ellis
 
60 reporting tips in 60 minutes - SQLBits 2018
60 reporting tips in 60 minutes - SQLBits 201860 reporting tips in 60 minutes - SQLBits 2018
60 reporting tips in 60 minutes - SQLBits 2018Ike Ellis
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL DevelopersIke Ellis
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL DevelopersIke Ellis
 
Dive Into Azure Data Lake - PASS 2017
Dive Into Azure Data Lake - PASS 2017Dive Into Azure Data Lake - PASS 2017
Dive Into Azure Data Lake - PASS 2017Ike Ellis
 
A lap around microsofts business intelligence platform
A lap around microsofts business intelligence platformA lap around microsofts business intelligence platform
A lap around microsofts business intelligence platformIke Ellis
 
Survey of the Microsoft Azure Data Landscape
Survey of the Microsoft Azure Data LandscapeSurvey of the Microsoft Azure Data Landscape
Survey of the Microsoft Azure Data LandscapeIke Ellis
 
11 Goals of High Functioning SQL Developers
11 Goals of High Functioning SQL Developers11 Goals of High Functioning SQL Developers
11 Goals of High Functioning SQL DevelopersIke Ellis
 
SQL PASS BAC - 60 reporting tips in 60 minutes
SQL PASS BAC - 60 reporting tips in 60 minutesSQL PASS BAC - 60 reporting tips in 60 minutes
SQL PASS BAC - 60 reporting tips in 60 minutesIke Ellis
 

Mais de Ike Ellis (20)

Storytelling with Data with Power BI
Storytelling with Data with Power BIStorytelling with Data with Power BI
Storytelling with Data with Power BI
 
Storytelling with Data with Power BI.pptx
Storytelling with Data with Power BI.pptxStorytelling with Data with Power BI.pptx
Storytelling with Data with Power BI.pptx
 
Build a modern data platform.pptx
Build a modern data platform.pptxBuild a modern data platform.pptx
Build a modern data platform.pptx
 
Data Modeling on Azure for Analytics
Data Modeling on Azure for AnalyticsData Modeling on Azure for Analytics
Data Modeling on Azure for Analytics
 
Migrate a successful transactional database to azure
Migrate a successful transactional database to azureMigrate a successful transactional database to azure
Migrate a successful transactional database to azure
 
Data modeling trends for analytics
Data modeling trends for analyticsData modeling trends for analytics
Data modeling trends for analytics
 
Data modeling trends for Analytics
Data modeling trends for AnalyticsData modeling trends for Analytics
Data modeling trends for Analytics
 
Relational data modeling trends for transactional applications
Relational data modeling trends for transactional applicationsRelational data modeling trends for transactional applications
Relational data modeling trends for transactional applications
 
Power bi premium
Power bi premiumPower bi premium
Power bi premium
 
Move a successful onpremise oltp application to the cloud
Move a successful onpremise oltp application to the cloudMove a successful onpremise oltp application to the cloud
Move a successful onpremise oltp application to the cloud
 
Azure Databricks is Easier Than You Think
Azure Databricks is Easier Than You ThinkAzure Databricks is Easier Than You Think
Azure Databricks is Easier Than You Think
 
Pass the Power BI Exam
Pass the Power BI ExamPass the Power BI Exam
Pass the Power BI Exam
 
60 reporting tips in 60 minutes - SQLBits 2018
60 reporting tips in 60 minutes - SQLBits 201860 reporting tips in 60 minutes - SQLBits 2018
60 reporting tips in 60 minutes - SQLBits 2018
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
Dive Into Azure Data Lake - PASS 2017
Dive Into Azure Data Lake - PASS 2017Dive Into Azure Data Lake - PASS 2017
Dive Into Azure Data Lake - PASS 2017
 
A lap around microsofts business intelligence platform
A lap around microsofts business intelligence platformA lap around microsofts business intelligence platform
A lap around microsofts business intelligence platform
 
Survey of the Microsoft Azure Data Landscape
Survey of the Microsoft Azure Data LandscapeSurvey of the Microsoft Azure Data Landscape
Survey of the Microsoft Azure Data Landscape
 
11 Goals of High Functioning SQL Developers
11 Goals of High Functioning SQL Developers11 Goals of High Functioning SQL Developers
11 Goals of High Functioning SQL Developers
 
SQL PASS BAC - 60 reporting tips in 60 minutes
SQL PASS BAC - 60 reporting tips in 60 minutesSQL PASS BAC - 60 reporting tips in 60 minutes
SQL PASS BAC - 60 reporting tips in 60 minutes
 

Último

AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 

Último (20)

AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 

Pass 2018 introduction to dax

  • 1. Ike Ellis, MVP, Partner – Crafting Bytes Introdution to DAX
  • 2. Do you know DAX?
  • 3. What do you need to know in order to say yes, I know DAX? 1. You need to know these functions: • SUM, AVERAGE, MIN, MAX • COUNT, COUNTROWS • CALCULATE • FILTER • IF/VARIABLES 2. You need to know about Contexts • Row Context • Filter Context 3. Some other things: Formatting White space Time intelligence Best Practices X vs nonX functions(SUM vs SUMX) DAX Studio Basic Troubleshooting
  • 4. So how will you learn it? Go in order: • This slide deck • This Power BI Project Practice, practice, practice
  • 5. And how will you use it? Works in Excel Works in Power BI Works in SQL Server Analysis Services (SSAS) Tabular
  • 6. This presentation • Simplifies the complexity • Might not tell you the whole truth for the sake of simplicity • Is not seeking to be comprehensive, but instead, seeks to allow you to answer the question, yes, I know DAX in that job interview
  • 7. Your first DAX expression Check Power BI Desktop tab “Your First DAX Expression” It’s a calculated column called Order Line Total Meant to add a column to every record in a table. Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
  • 8. Your Second DAX Expression Check Power BI Desktop tab “Your Second DAX Expression” This is a measure Meant to perform an aggregation that we can slice & dice Total Sales = SUM('Sales OrderDetails'[Order Line Total])
  • 9. How can we verify this? select sum(Sales.OrderDetails.unitprice * Sales.OrderDetails.qty) from sales.OrderDetails
  • 10. DAX Expression Breakdown Name the measure. You’ll use that in the visualizatio n Built in DAX formula Table name Column nameEquals sign separates expression name from expression formula Total Sales = SUM('Sales OrderDetails'[Ordera Line Total])
  • 11. All kinds of easy to use DAX formulas that you can learn quickly SUM AVERAGE MIN MAX COUNT COUNTROWS DATEDIFF DATEADD
  • 12. Look at tab “Easy DAX built-in formulas” Look under the Orders table for the calculated column “Days to Ship” Look under Orders table for measure “Average Days to Ship Days To Ship = DATEDIFF('Sales Orders'[orderdate], 'Sales Orders'[shippeddate],DAY) Play again: AVERAGE and DATEDIFF Average Days to Ship = AVERAGE('Sales Orders'[Days To Ship])
  • 13. Your Third DAX expression: Calculated Table Look at the Dates table. It was built with a DAX expression Created a Dates table with a date per day between the specified range Also created a Dates hierarchy Dates = CALENDAR("1/1/2000", "12/31/2016")
  • 14. Now on to Contexts! Two different contexts: • Row Context • Filter Context
  • 15. Row Context We already know how this works! We’ve been using it for all of our calculated columns. Let’s revisit our first DAX Expression Notice we expect a value per row in a table This runs at import and gets stored Might increase file size Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
  • 16. Filter Context Easy to show with measures Look at Filter Context 1, 2, 3 in the Power BI Desktop file (PBIX).
  • 17. Filter Context 1 We see it filtered by year and optionally by product category The measure is only defined once, and the DAX engine takes care of doing the calculations on the fly The calculations are not stored, but created and retrieved at query time
  • 18. Filter Context 2 Total Sales by year and with a page filter.
  • 19. Filter Context 3 Visuals can impact each other and change context
  • 20. Now that we understand context, we can answer this: Measures vs Calculated Columns Measures Calculated Columns Different functions Uses Row Context Doesn’t take up space Mostly text Less space Executes at the point data is read into the model and saved (value is static) Filter Context Executed at the time it is used
  • 21. CALCULATE: Breaking out of the filter context Beverages Total Sales = CALCULATE ( SUM('Sales OrderDetails'[Order Line Total]) , 'Production Categories'[categoryname] = "Beverages" ) AGGREGATION FILTER Look at the tab CALCULATE
  • 22. Let’s look at the syntax from books online CALCULATE(<expression>,<filter1>,<filter2> …)
  • 23. CALCULATE: Over Multiple Tables Total Sales - Beverages in USA = CALCULATE( sum('Sales OrderDetails'[Order Line Total]) , 'Production Categories'[categoryname]= "Beverages" , 'Sales Customers'[country] = "USA" )
  • 24. Two Types of Filters for Calculate Simple Filters • We’ve been doing simple filters the whole time. We already know this. Complex Filters
  • 26. VALUES Returns a virtual table • A table that’s created in memory, but has a relationship with existing tables Returns a single column table that respects the current filter context Country Count = COUNTROWS( VALUES('Sales Orders'[shipcountry])) Country Count wo VALUES = COUNTROWS('Sales Orders’)
  • 27. ALL Removes all current filters from the filter context Could be renamed “remove filter” Country Count Total = COUNTROWS(All('Sales Orders'[shipcountry]))
  • 28. FILTER Very powerful when combined with DAX Allows you to filter your calculation anyway you want Allows you to dream up very complicated code Easier to read if you use multiple line DAX Statements
  • 29. FILTER Total Sales For Customers with Minimum Order Count v2 = VAR MinimumOrderCount = 10 VAR CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) VAR CustomersWithMinimumOrdersResult = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , CustomersWithMinimumOrders ) RETURN CustomersWithMinimumOrdersResult
  • 30. FILTER – Use simple formulas too Number of Orders = COUNT('Sales Orders'[orderid]) Number of US Orders = CALCULATE ( COUNT ( 'Sales OrderDetails'[orderid] ) , FILTER ( 'Sales Customers' , 'Sales Customers'[country] = "USA" ) )
  • 31. FILTER – Create Table Minimum Order Customers = VAR MinimumOrderCount = 10 var CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) RETURN CustomersWithMinimumOrders
  • 32. VARIABLES & RETURN Total Sales For Customers with Minimum Order Count = VAR MinimumOrderCount = 5 VAR CustomersWithMinimumOrders = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) ) RETURN CustomersWithMinimumOrders
  • 33. Variables VAR myVar = 1 Data Type Variable Name Variable Value RETURN myVar + 25 Expressions must use RETURN to return a value
  • 34. Debugging using variables • RETURN does not need to return the last variable • In a multi-step formula, you can return an earlier value to troubleshoot it • Simplifies the reading of code, rather than endlessly nesting values over and over again.
  • 35. Time Intelligence: TOTALYTD YTD Total Sales = TOTALYTD ( SUM('Sales OrderDetails'[Order Line Total]) , Dates[Date].[Date] )
  • 36. Time Intelligence: PREVIOUSMONTH Total Sales Previous Month = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , PREVIOUSMONTH(Dates[Date]) )
  • 37. X vs nonX functions(SUM vs SUMX) • SUM is an aggregator function. It works like a measure, calculating based on the current filter context. • SUMX is an iterator function. It works row by row. SUMX has awareness of rows in a table, hence can reference the intersection of each row with any columns in the table.
  • 38. SUM vs SUMX Example Total Sales SUMX = SUMX( 'Sales OrderDetails' , 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice ) Total Sales = SUM('Sales OrderDetails'[Order Line Total])
  • 39. Best Practice: Organize your code Keep measures together Organize them by type • Simple aggregation • Time variance • Ratios and differences • Business-specific calculations
  • 40. Best Practice: Naming Columns & Measures • Feel free to use spaces • Avoid acronyms • Make names terse, but descriptive • Makes Q & A easier to use • In formulas, reference table names for calculated columns and do not reference table names for measures, so you’ll know the difference
  • 41. Best Practice: Formatting • DAX Expressions can have lots of parentheses and square brackets • Please use white space to control this • Here’s an example of a properly formatted calculated column • DaxFormatter.com Days To Ship = DATEDIFF ( 'Sales Orders'[orderdate] , 'Sales Orders'[shippeddate] , DAY )
  • 42. Basic Troubleshooting A lot of things can go wrong, but the problem is usually one of two things: 1. A relationship is misconfigured or the data is wrong in the model. 2. Wrong data type
  • 43. Data types • Numeric • String • Bool • DateTime • If a function is expecting a numeric, but gets a string, it won’t work. Clean up the model and watch it start working. • Uses less space and memory with your model • Improves performance
  • 45. Manipulating the relationships Total Sales By Ship Year = CALCULATE ( SUM('Sales OrderDetails'[Order Line Total]) , USERELATIONSHIP('Sales Orders'[shippeddate], Dates[Date]) ) Only one active relationship at a time
  • 46. DAX Studio • Parses • Formats • Shows execution plan • Connects to SSAS Tabular or Power BI Desktop
  • 48. Contact Me! • http://www.craftingbytes.com • http://blog.ikeellis.com • http://www.ikeellis.com • YouTube • http://www.youtube.com/user/IkeEllisData • San Diego Tech Immersion Group • http://www.sdtig.com • Twitter: @ike_ellis • 619.922.9801 • ike@craftingbytes.com
  • 49. Free online webinar events Free 1-day local training events Local user groups around the world Online special interest user groups Business analytics training Get involved Explore everything PASS has to offer Free Online Resources Newsletters PASS.org
  • 50. Download the GuideBook App and search: PASS Summit 2018 Follow the QR code link displayed on session signage throughout the conference venue and in the program guide Session evaluations Your feedback is important and valuable. Go to passSummit.com 3 Ways to Access: Submit by 5pm Friday, November 16th to win prizes.