Split lab into separate sections.

This commit is contained in:
Alex Powers 2022-02-08 21:59:58 -06:00
Родитель 79448cf0e3
Коммит edf80be0fe
10 изменённых файлов: 364 добавлений и 310 удалений

Просмотреть файл

@ -0,0 +1,20 @@
## Data Modeling
1. Add a **Table** visualization using the following columns:
| Table | Column |
|:----- | :------ |
| Customer | EmailAddress|
| Internet Sales | Sales Amount |
1. Navigate to the **View** tab and select **Performance analyzer**.
![Performance analyzer.](./Media/PerformanceAnalyzer.png)
1. Within the **Performance analyzer** pane, select **Start recording**.
![Start recording button.](./Media/StartRecording.png)
1. Press the Clear option, Refresh visuals and Copy query
1. Navigate to the Model view, select the Dimension tables, navigate to Advanced and Storage mode to change to Dual

Просмотреть файл

@ -0,0 +1,306 @@
## Data Preparation
**TO DO** - Learning about the Power Query Online environment and dataflows.
To learn more, see [Premium features of dataflow](https://docs.microsoft.com/power-bi/transform-model/dataflows/dataflows-premium-features)
### Import a dataflow model into a workspace
1. Download the sample **model.json** file.
1. Navigate to a group workspace and select the **Settings** option in the top right. Within the **Settings** navigation pane select the **Premium** tab to ensure that a **Premium** license mode has been enabled from any of the following options below.
**License mode:**
- Premium per user
- Premium per capacity
- Embedded
![License mode](./Media/LicenseMode.png)
1. Within the top left of the current workspace select **New** and then **Dataflow**.
![New Dataflow](./Media/NewDataflow.png)
1. From the **Start creating your dataflow** screen select the **Import model** option.
![Import Model](./Media/ImportModel.png)
1. Once the import has completed, select **Edit credentials**.
1. Alternatively you can click the ellipses (...) next to the dataflow and go to **Settings** within the workspace.
![Edit credentials](./Media/EditCredentials.png)
1. Expand the **Data source credentials** section and select **Edit credentials**. Within the **Configure** dialog box set the following values below and select **Sign in** when complete:
1. Authentication method | **Anonymous**
1. Privacy level setting for this data source | **Public**
1. To learn more, see [Power Query privacy level settings](https://docs.microsoft.com/power-bi/admin/desktop-privacy-levels#configure-a-privacy-level)
1. ☑️ **Skip test connection**
![Edit credentials](./Media/ConfigureCredentials.png)
### Edit a dataflow using Power Query Online
1. From the workspace, select the ellipses (...) adjacent to the dataflow name and then the **Edit** option.
![Edit dataflow](./Media/EditDataflow.png)
1. Within the top right select the **Edit tables** option to navigate into the Power Query Online interface.
![Edit tables](./Media/EditTables.png)
1. Within the Power Query Online editor's **Home** tab, select the **Options** - **Global options** property.
![Global options](./Media/GlobalOptions.png)
1. Within the **Global options** window ensure the following settings are enabled.
**Steps**
1. Enable step cost indicators
1. Show script in step callout
**Column profile**
1. Enable column profile
1. Show column value distribution in data preview
1. Show column value distribution in data preview
1. Show column profile in details pane
**Parameters**
1. Always allow parameterization in data source and transformation dialogs
1.
### Generate a list of values
**Task:** New files are being dropped to a publicly accessible **Web page** which you have been tasked with collecting. All of the files maintain a consistent column - naming, data type - and the file names follow a format of **FactInternetSales_#.csv** to make combining the files easier.
1. From the **Home** tab select the drop-down for **Get data** and then **Blank query**.
![New Blank Query](./Media/NewBlankQuery.png)
1. Within the **Advanced editor** window update the current query to the text below - creating a custom function that [combines text](https://docs.microsoft.com/powerquery-m/text-combine) and converts to [text from](https://docs.microsoft.com/powerquery-m/text-from) a value. Select **Ok** when complete.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
)
in
fxFileName
```
2. Open the **Advanced Editor** once again, add a comma to end of the **fXFileName** step and add a new step with the identifier name **Source** which equals a **Record** data type, containing the key values of **fileCount**, **fileName** and **data** and their corresponding values as displayed below and update the return value to **Source** after the text **in**.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
]
in
Source
```
4. Enable the **Query script** view, to view the full script in the center of the window.
1. To validate the results are updating, change the **fileCount** value to **2** and review the data preview's **fileName** and **data** values.
1. Return the **fileCount** value to **1** before proceeding.
![Query script](./Media/QueryScript.png)
5. Within the expanded **Query script** view, add a comma to the end of the **Source** step and add a new step with the identifier name **fileList** and value **List.Generate**, and update the return value to **fileList** after the text **in**.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
],
fileList = List.Generate
in
fileList
```
6. Update the script
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
],
fileList =
List.Generate(
() => Source,
each not Table.IsEmpty([data]),
each
[
fileCount = [fileCount] + 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
]
)
in
fileList
```
5. FactInternetSales - SURROGATE KEYS on Order Date and Ship Date columns.
### Power Query M function reference
To view a complete list of function documentation, from the **Home** tab select **Get data** and **Blank query**. Update the **Source** step value to **#shared** and select **Next** to proceed.
```fsharp
let
Source = #shared
in
Source
```
A record set is returned including the [Power Query M function reference](https://docs.microsoft.com/powerquery-m/power-query-m-function-reference) documentation.
### Enhanced compute engine
1. Within the **Enhanced compute engine settings**, select the **On** option and then select the **Apply** button.
![Enhanced compute engine settings.](./Media/EnhancedComputeEngineSettings.png)
1. After you've received the **Success!** notification, return to the workspace and select the **Refresh now** option of the datalfow for the optimization to take effect.
![Refresh now.](./Media/RefreshNow.png)
[Learn more about DirectQuery with dataflows](https://docs.microsoft.com/power-bi/transform-model/dataflows/dataflows-premium-features#use-directquery-with-dataflows-in-power-bi)
### Query folding
1. Within **Power BI Desktop**'s **Home** ribbon select the **Get data** button. Within the **Get dialog** window select the **Power Platform** section and then **Dataflows** connector. Select **Connect** to continue to the **Dataflows** navigator window.
![Power Platform dataflows.](./Media/ppDataflows.png)
1. Within the **Navigator** window, navigate to the group Workspace where your dataflow is located and select all of the tables located within the dataflow. Select **Transform Data** when complete to enter the **Power Query Editor** window.
![Get dataflow tables.](./Media/getDataDataflow.png)
1. Navigate to the **DimCustomer** table, holding the **shift** key select the **FirstName**, **MiddleName** and **LastName** columns, right click one of the selected columns and choose the **Merge Columns** option.
![Merge Columns option.](./Media/MergeColumns.png)
1. Within the **Merge columns** window change the **Separator** option to **Space**, set the **New column name (optional)** option to **Full Name** and select **OK** when complete.
![Merge columns dialog window.](./Media/MergeColumnsBox.png)
1. In the **Query settings** pane on the right, navigate to the **Merge Columns** step, right click and select the **View Native Query** option.
![View Native Query.](./Media/ViewNativeQuery.png)
1. Navigate to the **Add Column** tab and select the **Conditional Column** option. Within the **Add Conditional Column** dialog complete the following and select **OK** when complete:
1. New column name: **Gender**
1. Match the following conditions to the table below.
1. Use the **Add Clause** to add new conditions.
| | Column Name | Operator | Value | Output |
| :------- | :-------| :-------| :-------| :-------|
| If | Title | equals | Mr. | Male |
| If | Title | equals | Sr. | Male |
| If | Title | equals | Ms. | Female |
| If | Title | equals | Sra. | Female |
| else | Unknown | | |
![View Native Query.](./Media/AddConditionalColumn.png)
1. In the **Query settings** pane on the right, navigate to the **Add Conditional Column** step, right click and select the **View Native Query** option.
![View Native Query for Conditional Column.](./Media/ConditionalQuery.png)
1. From the **Formula bar** select the **Add Step** button and paste in the following formula below.
1. If the **Formula Bar** is not enabled navigate to the **View** tab and select the **Formula Bar** checkbox.
![Add Step.](./Media/AddStep.png)
```fsharp
= Table.AddColumn(
#"Merged Columns",
"Gender",
each
if
List.Contains(
{
"Mr.",
"Sr."
},
[Gender]
)
then
"Male"
else if
List.Contains(
{
"Ms.",
"Sra."
},
[Gender]
)
then
"Female"
else
"Not Provided",
type text
)
```
1. In the **Query settings** pane on the right, navigate to the **Custom1** step, right click and select the **View Native Query** option to review.
1. Right click the **Applied Steps** step named **Custom1** and select **Properties...** to open the **Step Properties** dialog box. Once the **Step Properties** is visible update the **Name** property to **Custom: Gender** and the **Description** field to the below text. Once complete select **OK** to complete.
```bash
If value is Mr. or Sr. replace with Male.
If value is Ms. or Sra. replace with Female.
Otherwise replace with Not Provided.
```
![Step Properties.](./Media/StepProperties.png)
1. Review the new **Custom: Gender** step's properties by hovering above the step name to view the documentation.
![Step documentation.](./Media/StepDocumentation.png)
1. Right click the original **Added Conditional Column** step and select the **Delete** option to remove.
1. Selecting the adjacent **X** to the left of the step name is also an option.
![Delete.](./Media/DeleteStep.png)
## Next steps:
We hope this tour has shown how the data preparation capabilities in Power BI can provide...
- Continue to the [Data Modeling](.DataModeling.md) tutorial
- Or return to the [Day After Dashboard in a Day](./README.md) homepage

Просмотреть файл

@ -0,0 +1 @@
## Data Visualization

Двоичные данные
Day After Dashboard in a Day/Media/ConfigureCredentials.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 84 KiB

Двоичные данные
Day After Dashboard in a Day/Media/EditCredentials.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Двоичные данные
Day After Dashboard in a Day/Media/EditDataflow.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
Day After Dashboard in a Day/Media/EditTables.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
Day After Dashboard in a Day/Media/GlobalOptions.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 61 KiB

Просмотреть файл

@ -1,5 +1,5 @@
# Prerequisites
The following prerequisites and setup must be done for successful completion of the lab:
1. You must be connected to the internet.
1. You must be signed up for a Power BI account.
@ -7,7 +7,7 @@ The following prerequisites and setup must be done for successful completion of
1. You must have a Power BI Premium backed workspace, thru one of the following methods.
1. Dedicated capacity licensing (P,EM or A)
1. User based capacity license (Premium Per User).
1. You must [verify minimum system requirements](https://docs.microsoft.com/power-bi/fundamentals/desktop-get-the-desktop#minimum-requirements) are met Power BI Desktop.
1. You must [verify minimum system requirements](https://docs.microsoft.com/power-bi/fundamentals/desktop-get-the-desktop#minimum-requirements) are met for Power BI Desktop.
1. You must download and install Power BI Desktop from one of the options listed below:
1. [Microsoft Store](https://aka.ms/pbidesktop)
@ -18,6 +18,11 @@ The following prerequisites and setup must be done for successful completion of
# How to setup your own M365 Tenant
For future learning: Setup a Personal Tenant
#### Sample data
The AdventureWorks sample database is published by Microsoft to show how to design a SQL Server databases and Analysis Services models.
To learn more, see [AdventureWorks sample databases](https://docs.microsoft.com/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms).
# Document Structure
This document and has two main sections:

Просмотреть файл

@ -1,325 +1,47 @@
![Power BI](https://raw.githubusercontent.com/microsoft/pbiworkshops/main/_Asset%20Library/powerbi.svg)
</br>
</br>
# Day After Dashboard in a Day
## Introduction
In the Day After Dashboard in a Day you will learn about various concepts and features of Power BI. This course assumes that you have a working knowledge of report authoring using Power BI Desktop and content sharing via the Power BI service.
By the end of this lab, you will have learned:
#### Prerequisites
The content in this lab requires access to a **Power BI Premium** workspace within the Power BI service.
- Premium Per User
- or a Premium capacity subscription
For additional system requirements, see [prerequisites for the lab](./Prerequisites.md)
## Data Preparation
In this lab you'll learn about how to shape data using the Power Query.
1. How to prepare and load data into a dataflow using Power Query Online.
1. How to write custom functions using the Power Query M formula language.
1. How to ensure Query folding is occurring.
To start the tutorial, visit [Data Preparation](./DataPreparation.md)
## Data Modeling
In this tutorial you'll learn about...
1. How to configure different [Storage Modes](https://docs.microsoft.com/power-bi/transform-model/desktop-storage-mode) and create [Aggregations](https://docs.microsoft.com/power-bi/transform-model/aggregations-advanced) using Power BI Desktop.
Storage modes:
1. [DirectQuery](https://docs.microsoft.com/power-bi/connect-data/desktop-directquery-about)
1. [Mixed](https://docs.microsoft.com/power-bi/transform-model/desktop-composite-models)
1. How to analyze the performance and optimize a Power BI dataset.
1. How to design effective reports
[Learn more about the prerequisites for the lab](./Prerequisites.md).
#### Sample data
The AdventureWorks sample database is published by Microsoft to show how to design a SQL Server databases and Analysis Services models.
To learn more, see [AdventureWorks sample databases](https://docs.microsoft.com/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms).
#### Important note
The content for this lab must be in a **Power BI Premium** (Premium Per User or a Premium capacity subscription) workspace.
## Data Preparation
To learn more, see [Premium features of dataflow](https://docs.microsoft.com/power-bi/transform-model/dataflows/dataflows-premium-features)
### Import a dataflow model into a workspace
| Instruction | |
| :---- | ---: |
| 1. Download the sample model.json file. | |
| 2. Navigate to a group workspace and select the **Settings** option in the top right. Within the navigation pane select the **Premium** tab to ensure that a **Premium** license mode has been enabled from any of the following options below.|<details><summary>VIEW SCREENSHOT</summary>![License mode](./Media/LicenseMode.png)</details>|
| **License mode:**
- Premium per user
- Premium per capacity
- Embedded
| | |
|:--- | ---: |
| 3. Within the workspace select **New** and then **Dataflow**.| <details><summary>VIEW SCREENSHOT</summary> ![New Dataflow](./Media/NewDataflow.png) </details>|
| 4. From the Start creating your dataflow screen, select the **Import model** option. **New** and then **Dataflow**. | <details><summary>VIEW SCREENSHOT</summary> ![Import Model](./Media/ImportModel.png) </details>|
### Generate a list of values
**Task:** New files are being dropped to a publicly accessible **Web page** which you have been tasked with collecting. All of the files maintain a consistent column - naming, data type - and the file names follow a format of **FactInternetSales_#.csv** to make combining the files easier.
1. From the **Home** tab select the drop-down for **Get data** and then **Blank query**.
![New Blank Query](./Media/NewBlankQuery.png)
1. Within the **Advanced editor** window update the current query to the text below - creating a custom function that [combines text](https://docs.microsoft.com/powerquery-m/text-combine) and converts to [text from](https://docs.microsoft.com/powerquery-m/text-from) a value. Select **Ok** when complete.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
)
in
fxFileName
```
2. Open the **Advanced Editor** once again, add a comma to end of the **fXFileName** step and add a new step with the identifier name **Source** which equals a **Record** data type, containing the key values of **fileCount**, **fileName** and **data** and their corresponding values as displayed below and update the return value to **Source** after the text **in**.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
]
in
Source
```
4. Enable the **Query script** view, to view the full script in the center of the window.
1. To validate the results are updating, change the **fileCount** value to **2** and review the data preview's **fileName** and **data** values.
1. Return the **fileCount** value to **1** before proceeding.
![Query script](./Media/QueryScript.png)
5. Within the expanded **Query script** view, add a comma to the end of the **Source** step and add a new step with the identifier name **fileList** and value **List.Generate**, and update the return value to **fileList** after the text **in**.
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
],
fileList = List.Generate
in
fileList
```
6. Update the script
```fsharp
let
// A function that accept a file number value and concatenates text
fxFileName = (#"File number" as number) as text =>
Text.Combine(
{
"FactInternetSales_",
Text.From(#"File number"),
".csv"
}
),
Source = [
fileCount = 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
],
fileList =
List.Generate(
() => Source,
each not Table.IsEmpty([data]),
each
[
fileCount = [fileCount] + 1,
fileName = fxFileName(fileCount),
data = fxGetFile(fileName)
]
)
in
fileList
```
5. FactInternetSales - SURROGATE KEYS on Order Date and Ship Date columns.
### Power Query M function reference
To view a complete list of function documentation, from the **Home** tab select **Get data** and **Blank query**. You can update the **Source** step value to **#shared** and select **Next** to proceed.
```bash
let
Source = #shared
in
Source
```
A record set is returned including the [Power Query M function reference](https://docs.microsoft.com/powerquery-m/power-query-m-function-reference) documentation.
### Data profile
### Dataflow manifest
### Import dataflow model and enable DirectQuery with dataflows
1. Download the model.json file to a local file.
1. Select the **Import model** option.
![Import Model](./Media/ImportModel.png)
1. Select the SAMPLE.json from your local drive and then
1. Within the **Enhanced compute engine settings**, select the **On** option and then select the **Apply** button.
![Enhanced compute engine settings.](./Media/EnhancedComputeEngineSettings.png)
1. After you've received the **Success!** notification, return to the workspace and select the **Refresh now** option of the datalfow for the optimization to take effect.
![Refresh now.](./Media/RefreshNow.png)
[Learn more about DirectQuery with dataflows](https://docs.microsoft.com/power-bi/transform-model/dataflows/dataflows-premium-features#use-directquery-with-dataflows-in-power-bi)
### Query folding
1. Within **Power BI Desktop**'s **Home** ribbon select the **Get data** button. Within the **Get dialog** window select the **Power Platform** section and then **Dataflows** connector. Select **Connect** to continue to the **Dataflows** navigator window.
![Power Platform dataflows.](./Media/ppDataflows.png)
1. Within the **Navigator** window, navigate to the group Workspace where your dataflow is located and select all of the tables located within the dataflow. Select **Transform Data** when complete to enter the **Power Query Editor** window.
![Get dataflow tables.](./Media/getDataDataflow.png)
1. Navigate to the **DimCustomer** table, holding the **shift** key select the **FirstName**, **MiddleName** and **LastName** columns, right click one of the selected columns and choose the **Merge Columns** option.
![Merge Columns option.](./Media/MergeColumns.png)
1. Within the **Merge columns** window change the **Separator** option to **Space**, set the **New column name (optional)** option to **Full Name** and select **OK** when complete.
![Merge columns dialogue window.](./Media/MergeColumnsBox.png)
1. In the **Query settings** pane on the right, navigate to the **Merge Columns** step, right click and select the **View Native Query** option.
![View Native Query.](./Media/ViewNativeQuery.png)
1. Navigate to the **Add Column** tab and select the **Conditional Column** option. Within the **Add Conditional Column** dialog complete the following and select **OK** when complete:
1. New column name: **Gender**
1. Match the following conditions to the table below.
1. Use the **Add Clause** to add new conditions.
| | Column Name | Operator | Value | Output |
| :------- | :-------| :-------| :-------| :-------|
| If | Title | equals | Mr. | Male |
| If | Title | equals | Sr. | Male |
| If | Title | equals | Ms. | Female |
| If | Title | equals | Sra. | Female |
| else | Unknown | | |
![View Native Query.](./Media/AddConditionalColumn.png)
1. In the **Query settings** pane on the right, navigate to the **Add Conditional Column** step, right click and select the **View Native Query** option.
![View Native Query for Conditional Column.](./Media/ConditionalQuery.png)
1. From the **Formula bar** select the **Add Step** button and paste in the following formula below.
1. If the **Formula Bar** is not enabled navigate to the **View** tab and select the **Formula Bar** checkbox.
![Add Step.](./Media/AddStep.png)
```bash
= Table.AddColumn(
#"Merged Columns",
"Gender",
each
if
List.Contains(
{
"Mr.",
"Sr."
},
[Gender]
)
then
"Male"
else if
List.Contains(
{
"Ms.",
"Sra."
},
[Gender]
)
then
"Female"
else
"Not Provided",
type text
)
```
1. In the **Query settings** pane on the right, navigate to the **Custom1** step, right click and select the **View Native Query** option to review.
1. Right click the **Applied Steps** step named **Custom1** and select **Properties...** to open the **Step Properties** dialog box. Once the **Step Properties** is visible update the **Name** property to **Custom: Gender** and the **Description** field to the below text. Once complete select **OK** to complete.
```bash
If value is Mr. or Sr. replace with Male.
If value is Ms. or Sra. replace with Female.
Otherwise replace with Not Provided.
```
![Step Properties.](./Media/StepProperties.png)
1. Review the new **Custom: Gender** step's properties by hovering above the step name to view the documentation.
![Step documentation.](./Media/StepDocumentation.png)
1. Right click the original **Added Conditional Column** step and select the **Delete** option to remove.
1. Selecting the adjacent **X** to the left of the step name is also an option.
![Delete.](./Media/DeleteStep.png)
## Data Modeling
1. Add a **Table** visualization using the following columns:
| Table | Column |
|:----- | :------ |
| Customer | EmailAddress|
| Internet Sales | Sales Amount |
1. Navigate to the **View** tab and select **Performance analyzer**.
![Performance analyzer.](./Media/PerformanceAnalyzer.png)
1. Within the **Performance analyzer** pane, select **Start recording**.
![Start recording button.](./Media/StartRecording.png)
1. Press the Clear option, Refresh visuals and Copy query
1. Navigate to the Model view, select the Dimension tables, navigate to Advanced and Storage mode to change to Dual
To start the lab, visit [Data Modeling](./DataModeling.md)
## Data Visualization
In this tutorial you'll learn about...
- Something
- Something
To start the tutorial, visit [Data Visualization](./DataVisualization.md)