Related
I am trying to do the same as someone has already asked on a Microsoft forum
I am trying to show Payment info in Power BI but mainly what months/Years Payments have been missed.
I have 3 Tables, Date Table, Payment Table and Client Table.
The Payment Table has the fields,[Client ID],[Payment Id],[Payment Date], Client Table has fields [Client Id] and [Client Name] etc, Date Table has is generated using the min and max [Payment Date] from the Payment Table.
Is this possible in Power Query or using DAX in Power Bi and if so how?
Thanks
You can try something like this
code for new table, missing
let Source = Date,
#"Added Custom9" = Table.AddColumn(Source, "Month", each Date.Month([Date])),
#"Added Custom10" = Table.AddColumn(#"Added Custom9", "Year", each Date.Year([Date])),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom10",{"Date"}),
#"Removed Duplicates" = Table.Distinct(#"Removed Columns1", {"Month", "Year"}),
#"Added Custom" = Table.AddColumn( #"Removed Duplicates", "Client ID", each Clients[Client ID]),
NewDates = Table.ExpandListColumn(#"Added Custom", "Client ID"),
#"Added Custom12" = Table.AddColumn(Payments, "Month", each Date.Month([Payment Date])),
NewPayments = Table.AddColumn(#"Added Custom12", "Year", each Date.Year([Payment Date])),
#"Merged Queries" = Table.NestedJoin(NewDates, {"Month","Year","Client ID"}, NewPayments, {"Month","Year","Client ID"}, "Payments", JoinKind.LeftOuter),
#"Added Custom1" = Table.AddColumn(#"Merged Queries", "Paid?", each Table.RowCount([Payments])),
#"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([#"Paid?"] = 0)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Payments", "Paid?"}),
#"Merged Queries1" = Table.NestedJoin(#"Removed Columns", {"Client ID"}, Clients, {"Client ID"}, "Clients", JoinKind.LeftOuter),
#"Expanded Clients" = Table.ExpandTableColumn(#"Merged Queries1", "Clients", {"Client Name"}, {"Client Name"}),
#"Grouped Rows" = Table.Group(#"Expanded Clients", {"Month","Year"}, {
{"Missing Payments From", each Text.Combine(List.Transform([Client ID], Text.From), ","), type text},
{"Missing Payments From2", each Text.Combine(List.Transform([Client Name], Text.From), ","), type text}
})
in #"Grouped Rows"
remove the group step if you'd rather see the output in table format
Version 2 generates this:
//version2
let Source = Date,
#"Added Custom9" = Table.AddColumn(Source, "Month", each Date.Month([Date])),
#"Added Custom10" = Table.AddColumn(#"Added Custom9", "Year", each Date.Year([Date])),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom10",{"Date"}),
#"Removed Duplicates" = Table.Distinct(#"Removed Columns1", {"Month", "Year"}),
#"Added Custom" = Table.AddColumn( #"Removed Duplicates", "Client ID", each Clients[Client ID]),
NewDates = Table.ExpandListColumn(#"Added Custom", "Client ID"),
#"Added Custom12" = Table.AddColumn(Payments, "Month", each Date.Month([Payment Date])),
NewPayments = Table.AddColumn(#"Added Custom12", "Year", each Date.Year([Payment Date])),
#"Merged Queries" = Table.NestedJoin(NewDates, {"Month","Year","Client ID"}, NewPayments, {"Month","Year","Client ID"}, "Payments", JoinKind.LeftOuter),
#"Added Custom1" = Table.AddColumn(#"Merged Queries", "Paid?", each Table.RowCount([Payments])),
#"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([#"Paid?"] = 0)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Payments", "Paid?"}),
#"Merged Queries1" = Table.NestedJoin(#"Removed Columns", {"Client ID"}, Clients, {"Client ID"}, "Clients", JoinKind.LeftOuter),
#"Expanded Clients" = Table.ExpandTableColumn(#"Merged Queries1", "Clients", {"Client Name"}, {"Client Name"}),
#"Added Custom2" = Table.AddColumn(#"Expanded Clients", "MonthYear", each Text.From([Month])&"/"&Text.From([Year])),
#"Grouped Rows" = Table.Group(#"Added Custom2", {"Client ID","Client Name"}, {
{"Missing Payments", each Text.Combine(List.Transform([MonthYear], Text.From), ","), type text}
})
in #"Grouped Rows"
I would like to know how to create the last column, Audit. To determine whether it is Included or Not Included the sum of any rows in "Average meeting per Day" within the same Employee/Day should match the "Actual Meeting" the employee attended.
I've taken this as an Example dataset -
Further, use Group By and Conditional column to have the Audit added.
Group by -
Conditional Column -
Result -
Code -
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8s3PS0msVNJRMgRiAz1TMGkEJBOVYnVwSBtjShuBJQzhZBJYOqQ0tRhZuwlcHqg9=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Day = _t, Emp_ID = _t, #"Actual Meeting" = _t, #"Average Meeting/Day" = _t, Emp_Name = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Day", type text}, {"Emp_ID", Int64.Type}, {"Actual Meeting", type number}, {"Average Meeting/Day", type number}, {"Emp_Name", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Day", "Emp_ID"}, {{"Sum of avg", each List.Sum([#"Average Meeting/Day"]), type nullable number}, {"Actual Meeting", each List.Min([Actual Meeting]), type nullable number}}),
#"Added Conditional Column" = Table.AddColumn(#"Grouped Rows", "Audit", each if [Actual Meeting] = [Sum of avg] then "Included" else "Not Included")
in
#"Added Conditional Column"
Not sure this is going to help, but here goes. Note: not set up to work with duplicate values among the potential items to analyze. No idea if it will work with so many decimals, so that the sum of the decimals might be 0.0000001 off from total and thus not be recognized. Works for me with whole numbers
let
Process=(x as table) as table =>
// Bill Szysz 2017, all combinations of items in list, blows up with too many items to process due to large number of combinations
let ComboList=x[AMD],
find=x[AM]{0},
Source=Table.FromList(List.Transform(ComboList, each Text.From(_))),
AddIndex = Table.AddIndexColumn(Source, "Index", 0, 1),
ReverseIndeks = Table.AddIndexColumn(AddIndex, "RevIdx", Table.RowCount(AddIndex), -1),
Lists = Table.AddColumn(ReverseIndeks, "lists", each
List.Repeat(
List.Combine({
List.Repeat({[Column1]}, Number.Power(2,[RevIdx]-1)),
List.Repeat( {null}, Number.Power(2,[RevIdx]-1))
})
, Number.Power(2, [Index]))
),
ResultTable = Table.FromColumns(Lists[lists]),
#"Replaced Value" = Table.ReplaceValue(ResultTable,null,"0",Replacer.ReplaceValue,Table.ColumnNames(ResultTable )),
#"Added Index" = Table.AddIndexColumn(#"Replaced Value", "Index", 0, 1, Int64.Type),
totals = Table.AddColumn(#"Added Index", "Custom", each List.Sum(List.Transform(Record.ToList( Table.SelectColumns(#"Added Index",Table.ColumnNames(ResultTable )){[Index]}) , each Number.From(_)))),
#"Filtered Rows" = Table.SelectRows(totals, each ([Custom] = find)),
#"Kept First Rows" = Table.FirstN(#"Filtered Rows",1),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Kept First Rows", {"Custom", "Index"}, "Attribute", "Value"),
#"Filtered Rows1" = Table.SelectRows(#"Unpivoted Other Columns", each ([Value] <> "0")),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows1",{"Value"}),
FoundList = Table.TransformColumnTypes(#"Removed Other Columns",{{"Value", type number}}),
#"Merged Queries" = Table.NestedJoin(x, {"AMD"}, FoundList, {"Value"}, "output1", JoinKind.LeftOuter),
#"Expanded output1" = Table.ExpandTableColumn(#"Merged Queries", "output1", {"Value"}, {"Value"}),
#"Calculated Absolute Value" = Table.TransformColumns(#"Expanded output1",{{"Value", each if _=null then "Not Included" else "Included", type text}})
in #"Calculated Absolute Value",
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Day", type text}, {"Employee_ID", Int64.Type}, {"AM", Int64.Type}, {"AMD", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Day", "Employee_ID"}, {{"data", each _, type table [Day=nullable text, Employee_ID=nullable number, AM=nullable number, AMD=nullable number]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Process([data])),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Custom"}),
#"Expanded Custom" = Table.ExpandTableColumn(#"Removed Other Columns", "Custom", {"Day", "Employee_ID", "AM", "AMD", "Value"}, {"Day", "Employee_ID", "AM", "AMD", "Value"})
in
#"Expanded Custom"
Hi I have a below requirement.
I have a table named forcast table with forecast version and values.
I need to initially calculate the sum of values for each forecast. and subtract the forecast from the previous row(for 2022.7: I need to take 2022.8 and subtract 2022.7, for 2022.8: I need to take 2022.9 and subtract 2022.8 and so on)
Atlast, I have to build a graph with the differences.
Please find the clear requirement in below link.
https://github.com/samantha280/powerbi/blob/main/Book2.xlsx
powerquery / M on your forecast table
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Forecast", type number}, {"Vals", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Forecast"}, {{"Vals", each List.Sum([Vals]), type nullable number}}),
#"Added Index" = Table.AddIndexColumn(#"Grouped Rows", "Index", 0, 1, Int64.Type),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each try [Vals]-#"Added Index"{[Index]-1}[Vals] otherwise null),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] <> null)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Vals", "Index"})
in #"Removed Columns"
Hi I'm trying to create a new table based on an existing table in power bi, how can I do this?
existing table
New table
New table group column can be exported from table3
Power Query solution
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"i45WSlTSUUpMBhLJeToK+aW2KYlKsTrRSklAkZRMhHByKVg4GYvqWAA=",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [user = _t, status = _t, dn = _t]
),
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"user", type text}, {"status", type text}, {"dn", type text}}
),
#"Replaced Value" = Table.ReplaceValue(
#"Changed Type",
"cn, ou=",
"",
Replacer.ReplaceText,
{"dn"}
),
#"Removed Columns" = Table.RemoveColumns(#"Replaced Value", {"user"}),
#"Removed Other Columns" = Table.SelectColumns(#"Removed Columns", {"dn"}),
#"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
#"Added Index" = Table.AddIndexColumn(#"Removed Duplicates", "Index", 1, 1, Int64.Type),
#"Merged Queries" = Table.NestedJoin(
#"Removed Columns",
{"dn"},
#"Added Index",
{"dn"},
"Added Index",
JoinKind.LeftOuter
),
#"Expanded Added Index" = Table.ExpandTableColumn(
#"Merged Queries",
"Added Index",
{"Index"},
{"Index"}
),
#"Pivoted Column" = Table.Pivot(
#"Expanded Added Index",
List.Distinct(#"Expanded Added Index"[status]),
"status",
"Index",
List.Count
),
#"Added Custom" = Table.AddColumn(#"Pivoted Column", "Total", each [ac] + [di])
in
#"Added Custom"
Hi I am trying to create a Cummulative sum for "t_count" field in Power BI but everytime I try to run the this formula: List.Sum(List.Range(#"Added Index"[t_count],0,[Hire_Count])) I am getting error that t_count field was not found in the table. Can anyone help me in creating cummulative sum without getting this error? I am sharing full code from advance editor.
let
Source = Excel.Workbook(File.Contents("C:\Users\rabi.jaiswal\Desktop\hr_analytics\EMPLOYEE_ATTRITION_DATA.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Emp_Id", Int64.Type}, {"Emp_Name", type text}, {"email", type text}, {"Join_Date", type date}, {"Joined_As", type text}, {"Department", type text}, {"Manger_Name", type text}, {"Current_Designation", type text}, {"Current_Designation_Start_Date", type date}, {"Work Hours", Int64.Type}, {"Standard_Work_Hours", Int64.Type}, {"Term_Date", type date}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Emp_Id", "Emp_Name", "email", "Joined_As", "Department", "Manger_Name", "Current_Designation", "Current_Designation_Start_Date", "Work Hours", "Standard_Work_Hours"}),
#"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Join_Date", Order.Ascending}}),
#"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 1, 1, Int64.Type),
#"Renamed Columns" = Table.RenameColumns(#"Added Index",{{"Index", "Hire_Count"}}),
#"Added Conditional Column" = Table.AddColumn(#"Renamed Columns", "t_count", each if [Term_Date] = null then 0 else 1),
#"Added Custom" = Table.AddColumn(#"Added Conditional Column", "Term_total", each List.Sum(List.Range(#"Added Index"[t_count],0,[Hire_Count])))
in
#"Added Custom"
your index starts with one, so try
#"Added Custom" = Table.AddColumn(#"Added Conditional Column", "Term_total", each List.Sum(List.FirstN(#"Added Conditional Column"[t_count],[Index]))),
if your index started from zero, it would be
#"Added Custom" = Table.AddColumn(#"Added Conditional Column", "Term_total", each List.Sum(List.FirstN(#"Added Conditional Column"[t_count],[Index]+1))),