- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Define a temporary function or multiple variables in a single column
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
In this article, we will talk about how to get the expected outputs via DAX or M(in Power Query) with different methods. It will be a simple sample to know how to define variables in both languages.
Sample Data:
Scenario:
Suppose I would like to calculate how many different programs each employee has gone through.
- If the employee only has one program, then we need to point out the specific program.
- If the employee has taken part in more than one program, then calculate the number of different programs.
The tricky thing is that the target program name is included in the Program ID column. And how could we apply different conditions in a single column?
Method using DAX:
- Firstly, add a new column named Program Type to get the first string by using LEFT()
- Get the distinct count of Program Type of each Employee ID. Then if the distinct count =1, it means the Program Type is unique , so we could use MAX() or MIN() to find specific type name of each Employee ID. Otherwise if distinct count >1, then just return it.
- In addition, since the two conditions returns different types——one is number, the other is string, in such a case, the syntax will return errors like “Expressions that yield variant data-type cannot be used to define calculated columns”. So please use CONVERT() to change number type to string.
Program Type = LEFT([Program ID],1)
Result =
VAR _count =
CALCULATE (
DISTINCTCOUNT ( 'Table'[Program Type] ),
ALLEXCEPT ( 'Table', 'Table'[Employee ID] )
)
RETURN
IF (
_count = 1,
CALCULATE (
MAX ( 'Table'[Program Type] ),
ALLEXCEPT ( 'Table', 'Table'[Program Type] )
),
CONVERT ( _count, STRING )
)
Output:
Methods using M in Power Query:
Method1: normal
- Get the actual Program type
- Use Group feature to transform data
- Add a custom column: count of distinct Type
- Add another column: It’s based on the previous column
- Then expand necessary columns and remove other columns.
Whole M syntax:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"TYu5DcAwDMR2udqNHj8pk4xhaP81ckhhiY1wBLU3BA1CeG5RQ7QNTfd4H78zDiW183Sn6xxGajc4nFQ3053fle6d60LEBw==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [ID = _t, #"Employee ID" = _t, #"Program ID" = _t]
),
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"ID", Int64.Type}, {"Employee ID", Int64.Type}, {"Program ID", type text}}
),
#"Added Custom" = Table.AddColumn(
#"Changed Type",
"Program Type",
each Text.Start([Program ID], 1)
),
#"Grouped Rows" = Table.Group(
#"Added Custom",
{"Employee ID"},
{
{
"Count",
each _,
type table [
ID = nullable number,
Employee ID = nullable number,
Program ID = nullable text,
Program Type = text
]
}
}
),
#"Added Custom1" = Table.AddColumn(
#"Grouped Rows",
"Custom",
each List.Count(List.Distinct(Table.ToList(Table.SelectColumns([Count], "Program Type"))))
),
#"Added Custom2" = Table.AddColumn(
#"Added Custom1",
"Result",
each if [Custom] > 1 then [Custom] else Record.Field([Count]{0}, "Program Type")
),
#"Expanded Count" = Table.ExpandTableColumn(
#"Added Custom2",
"Count",
{"ID", "Program ID"},
{"ID", "Program ID"}
),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Count", {"Custom"})
in
#"Removed Columns"
Output:
Method2: use variables
- Get the actual Program type
- Use Group feature to transform data
- Then how do we apply different conditions in a single column? Here we need some variables:
- Expression1: define _count =Count distinct rows
- Expression2: define f=The first Program typed
- Condition: if _count >1 then return it else return f
- Then expand columns.
Whole M syntax:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"TYu5DcAwDMR2udqNHj8pk4xhaP81ckhhiY1wBLU3BA1CeG5RQ7QNTfd4H78zDiW183Sn6xxGajc4nFQ3053fle6d60LEBw==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [ID = _t, #"Employee ID" = _t, #"Program ID" = _t]
),
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"ID", Int64.Type}, {"Employee ID", Int64.Type}, {"Program ID", type text}}
),
#"Added Custom1" = Table.AddColumn(
#"Changed Type",
"Program Type",
each Text.Select([Program ID], {"A" .. "Z"})
),
#"Grouped Rows" = Table.Group(
#"Added Custom1",
{"Employee ID"},
{
{
"Count",
each _,
type table [
ID = nullable number,
Employee ID = nullable number,
Program ID = nullable text,
Program Type = text
]
}
}
),
#"Added Custom" = Table.AddColumn(
#"Grouped Rows",
"Result",
each [
_count = List.Count(List.Distinct(Table.ToList(Table.SelectColumns([Count], "Program Type")))),
f = Table.FirstValue(Table.SelectColumns([Count], "Program Type")),
r = if _count > 1 then _count else f
][r]
),
#"Expanded Count" = Table.ExpandTableColumn(
#"Added Custom",
"Count",
{"ID", "Program ID"},
{"ID", "Program ID"}
)
in
#"Expanded Count"
Output:
Method3: use a temporary function
- Firstly, use Group feature to transform data
- Almost the same as the above method. But here we will define a temporary function to create a new table.
Whole M syntax:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"TYu5DcAwDMR2udqNHj8pk4xhaP81ckhhiY1wBLU3BA1CeG5RQ7QNTfd4H78zDiW183Sn6xxGajc4nFQ3053fle6d60LEBw==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [ID = _t, #"Employee ID" = _t, #"Program ID" = _t]
),
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"ID", Int64.Type}, {"Employee ID", Int64.Type}, {"Program ID", type text}}
),
#"Grouped Rows" = Table.Group(
#"Changed Type",
{"Employee ID"},
{{"Count", each _, type table [Group ID = nullable number, Order ID = nullable text]}}
),
//Function Start
fxProcess = (Tbl) =>
let
#"Added Custom" = Table.AddColumn(Tbl, "Custom", each Text.Start([Program ID], 1)),
#"Added Custom1" = Table.AddColumn(
#"Added Custom",
"Result",
each [
_count = List.Count(
List.Distinct(Table.ToList(Table.SelectColumns(#"Added Custom", "Custom")))
),
f = Table.FirstValue(Table.SelectColumns(#"Added Custom", "Custom")),
r = if _count > 1 then _count else f
][r]
)
in
#"Added Custom1",
//Function End
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each fxProcess([Count])),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom", {"Employee ID", "Count"}),
#"Expanded Custom" = Table.ExpandTableColumn(
#"Removed Columns",
"Custom",
{"Employee ID", "ID", "Program ID", "Result"},
{"Employee ID", "ID", "Program ID", "Result"}
)
in
#"Expanded Custom"
Output:
Hope this article will help people with similar questions.
Author: Eyelyn Qin
Reviewer: Kerry Wang & Ula Huang
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
- How to Calculate Cumulative Sum in Power BI
- 🏆 Power BI DataViz World Championships | Week 3 F...
- Dynamic Subscriptions
- 🏆 Power BI DataViz World Championships | Week 3 W...
- 🏆 Power BI DataViz World Championships | Week 4 |...
- PBIP fx hack: dynamic expressions for properties -...
- How to add Gradient Text in Power BI dashboard
- 🏆 Power BI DataViz World Championships | Week 2 F...
- 🏆 Power BI DataViz World Championships | Week 2 W...
- How to Append Queries in Power BI
-
Dera__Igboejesi
on: 🏆 Power BI DataViz World Championships | Week 3 F...
- vasavks12 on: Dynamic Subscriptions
-
LucasKoch2900
on: 🏆 Power BI DataViz World Championships | Week 3 W...
-
slindsay on: 🏆 Power BI DataViz World Championships | Week 4 |...
-
mike_honey
on: PBIP fx hack: dynamic expressions for properties -...
- TBH on: How to add Gradient Text in Power BI dashboard
-
Jasmine_319
on: 🏆 Power BI DataViz World Championships | Week 2 F...
-
thefarside
on: 🏆 Power BI DataViz World Championships | Week 2 W...
-
thefarside
on: Basic Power BI accessibility is easier than you th...
-
edchuy
on: 🏆 Power BI DataViz World Championships | Week 3 C...
-
How to
654 -
Tips & Tricks
622 -
Events
127 -
Support insights
121 -
Opinion
80 -
DAX
66 -
Power BI
65 -
Power Query
62 -
Power BI Dev Camp
45 -
Power BI Desktop
40 -
Roundup
37 -
Power BI Embedded
20 -
Time Intelligence
19 -
Tips&Tricks
18 -
Featured User Group Leader
15 -
PowerBI REST API
12 -
Dataflow
9 -
Power BI Service
8 -
Power Query Tips & Tricks
8 -
finance
8 -
Data Protection
7 -
Direct Query
7 -
Power BI REST API
6 -
Auto ML
6 -
financial reporting
6 -
Data Analysis
6 -
Power Automate
6 -
Data Visualization
6 -
Python
6 -
powerbi
5 -
service
5 -
Power BI PowerShell
5 -
Machine Learning
5 -
Income Statement
5 -
Dax studio
5 -
Paginated Reports
4 -
External tool
4 -
Power BI Goals
4 -
PowerShell
4 -
Desktop
4 -
Bookmarks
4 -
Line chart
4 -
Group By
4 -
community
4 -
RLS
4 -
M language
4 -
R script
3 -
Aggregation
3 -
calendar
3 -
Gateways
3 -
R
3 -
M Query
3 -
Webinar
3 -
CALCULATE
3 -
R visual
3 -
Reports
3 -
PowerApps
3 -
Data Science
3 -
Azure
3 -
Data model
3 -
Conditional Formatting
3 -
Visualisation
3 -
Administration
3 -
M code
3 -
Visuals
3 -
SQL Server 2017 Express Edition
3 -
Row and column conversion
2 -
Python script
2 -
Nulls
2 -
DVW Analytics
2 -
parameter
2 -
Industrial App Store
2 -
Week
2 -
Date duration
2 -
Formatting
2 -
Weekday Calendar
2 -
Support insights.
2 -
construct list
2 -
slicers
2 -
SAP
2 -
Power Platform
2 -
Workday
2 -
external tools
2 -
index
2 -
RANKX
2 -
PBI Desktop
2 -
Date Dimension
2 -
Integer
2 -
Visualization
2 -
Power BI Challenge
2 -
Query Parameter
2 -
Date
2 -
SharePoint
2 -
Power BI Installation and Updates
2 -
How Things Work
2 -
Tabular Editor
2 -
rank
2 -
ladataweb
2 -
Troubleshooting
2 -
Date DIFF
2 -
Transform data
2 -
Tips and Tricks
2 -
Incremental Refresh
2 -
Number Ranges
2 -
Query Plans
2 -
Power BI & Power Apps
2 -
Random numbers
2 -
Day of the Week
2 -
Custom Visual
2 -
VLOOKUP
2 -
pivot
2 -
calculated column
2 -
M
2 -
hierarchies
2 -
Power BI Anniversary
2 -
Language M
2 -
inexact
2 -
Date Comparison
2 -
Power BI Premium Per user
2 -
Forecasting
2 -
REST API
2 -
Editor
2 -
Split
2 -
Life Sciences
2 -
measure
2 -
Microsoft-flow
2 -
Paginated Report Builder
2 -
Working with Non Standatd Periods
2 -
powerbi.tips
2 -
Custom function
2 -
Reverse
2 -
PUG
2 -
Custom Measures
2 -
Filtering
2 -
Table
1 -
Natural Query Language
1 -
Infographic
1 -
automation
1 -
Prediction
1 -
newworkspacepowerbi
1 -
Performance KPIs
1 -
HR Analytics
1 -
keepfilters
1 -
Connect Data
1 -
Financial Year
1 -
Schneider
1 -
dynamically delete records
1 -
Copy Measures
1 -
Friday
1 -
Q&A
1 -
Event
1 -
Custom Visuals
1 -
Free vs Pro
1 -
Format
1 -
Active Employee
1 -
Custom Date Range on Date Slicer
1 -
refresh error
1 -
PAS
1 -
certain duration
1 -
DA-100
1 -
bulk renaming of columns
1 -
Single Date Picker
1 -
Monday
1 -
PCS
1 -
Saturday
1 -
update
1 -
Slicer
1 -
Visual
1 -
forecast
1 -
Regression
1 -
CICD
1 -
Current Employees
1 -
date hierarchy
1 -
relationship
1 -
SIEMENS
1 -
Multiple Currency
1 -
Power BI Premium
1 -
On-premises data gateway
1 -
Binary
1 -
Power BI Connector for SAP
1 -
Sunday
1 -
Training
1 -
Announcement
1 -
Features
1 -
domain
1 -
pbiviz
1 -
sport statistics
1 -
Intelligent Plant
1 -
Circular dependency
1 -
GE
1 -
Exchange rate
1 -
Dendrogram
1 -
range of values
1 -
activity log
1 -
Decimal
1 -
Charticulator Challenge
1 -
Field parameters
1 -
deployment
1 -
ssrs traffic light indicators
1 -
SQL
1 -
trick
1 -
Scripts
1 -
Color Map
1 -
Industrial
1 -
Weekday
1 -
Working Date
1 -
Space Issue
1 -
Emerson
1 -
Date Table
1 -
Cluster Analysis
1 -
Stacked Area Chart
1 -
union tables
1 -
Number
1 -
Start of Week
1 -
Tips& Tricks
1 -
Workspace
1 -
Theme Colours
1 -
Text
1 -
Flow
1 -
Publish to Web
1 -
Extract
1 -
Topper Color On Map
1 -
Historians
1 -
context transition
1 -
Custom textbox
1 -
OPC
1 -
Zabbix
1 -
Label: DAX
1 -
Business Analysis
1 -
Supporting Insight
1 -
rank value
1 -
Synapse
1 -
End of Week
1 -
Tips&Trick
1 -
Showcase
1 -
custom connector
1 -
Waterfall Chart
1 -
Power BI On-Premise Data Gateway
1 -
patch
1 -
Top Category Color
1 -
A&E data
1 -
Previous Order
1 -
Substring
1 -
Wonderware
1 -
Power M
1 -
Format DAX
1 -
Custom functions
1 -
accumulative
1 -
DAX&Power Query
1 -
Premium Per User
1 -
GENERATESERIES
1 -
Report Server
1 -
Audit Logs
1 -
analytics pane
1 -
step by step
1 -
Top Brand Color on Map
1 -
Tutorial
1 -
Previous Date
1 -
XMLA End point
1 -
color reference
1 -
Date Time
1 -
Marker
1 -
Lineage
1 -
CSV file
1 -
conditional accumulative
1 -
Matrix Subtotal
1 -
Check
1 -
null value
1 -
Excel
1 -
Cumulative Totals
1 -
Report Theme
1 -
Bookmarking
1 -
oracle
1 -
mahak
1 -
pandas
1 -
Networkdays
1 -
Button
1 -
Dataset list
1 -
Keyboard Shortcuts
1 -
Fill Function
1 -
LOOKUPVALUE()
1 -
Tips &Tricks
1 -
Plotly package
1 -
Healthcare
1 -
Sameperiodlastyear
1 -
Office Theme
1 -
matrix
1 -
bar chart
1 -
Measures
1 -
powerbi argentina
1 -
Canvas Apps
1 -
total
1 -
Filter context
1 -
Difference between two dates
1 -
get data
1 -
OSI
1 -
Query format convert
1 -
ETL
1 -
Json files
1 -
Merge Rows
1 -
CONCATENATEX()
1 -
take over Datasets;
1 -
Networkdays.Intl
1 -
refresh M language Python script Support Insights
1 -
Governance
1 -
Fun
1 -
Power BI gateway
1 -
gateway
1 -
Elementary
1 -
Custom filters
1 -
Vertipaq Analyzer
1 -
powerbi cordoba
1 -
Model Driven Apps
1 -
REMOVEFILTERS
1 -
XMLA endpoint
1 -
translations
1 -
OSI pi
1 -
Parquet
1 -
Change rows to columns
1 -
remove spaces
1 -
Get row and column totals
1 -
Retail
1 -
Power BI Report Server
1 -
School
1 -
Cost-Benefit Analysis
1 -
DIisconnected Tables
1 -
Sandbox
1 -
Honeywell
1 -
Combine queries
1 -
X axis at different granularity
1 -
ADLS
1 -
Primary Key
1 -
Microsoft 365 usage analytics data
1 -
Randomly filter
1 -
Week of the Day
1 -
Azure AAD
1 -
query
1 -
Dynamic Visuals
1 -
KPI
1 -
Intro
1 -
Icons
1 -
ISV
1 -
Ties
1 -
unpivot
1 -
Practice Model
1 -
Continuous streak
1 -
ProcessVue
1 -
Create function
1 -
Table.Schema
1 -
Acknowledging
1 -
Postman
1 -
Text.ContainsAny
1 -
Power BI Show
1 -
Get latest sign-in data for each user
1 -
API
1 -
Kingsley
1 -
Merge
1 -
variable
1 -
Issues
1 -
function
1 -
stacked column chart
1 -
ho
1 -
ABB
1 -
KNN algorithm
1 -
List.Zip
1 -
optimization
1 -
Artificial Intelligence
1 -
Map Visual
1 -
Text.ContainsAll
1 -
Tuesday
1 -
help
1 -
group
1 -
Scorecard
1 -
Json
1 -
Tops
1 -
financial reporting hierarchies RLS
1 -
Featured Data Stories
1 -
MQTT
1 -
Custom Periods
1 -
Partial group
1 -
Reduce Size
1 -
FBL3N
1 -
Wednesday
1 -
Power Pivot
1 -
Quick Tips
1 -
data
1 -
PBIRS
1 -
Usage Metrics in Power BI
1 -
Multivalued column
1 -
Pipeline
1 -
Path
1 -
Yokogawa
1 -
Dynamic calculation
1 -
Data Wrangling
1 -
native folded query
1 -
transform table
1 -
UX
1 -
Cell content
1 -
General Ledger
1 -
Thursday
1