Opening Stock Value In Powerbi - powerbi

I am working on Cost of goods sold using Powerbi.
https://www.mediafire.com/file/pmb7u1thsag1kq1/Cost+of+goods+sold.pbix/file
Above is my file which i uploaded on mediafire.
i am taking the average price by using average function year wise.
If you see in File.
| GName | Year | Opening Stock | InQty | OutQty | InItemValue | Average Value | Closing Stock | Closing Stock Value | Opening Stock Value | Cost of Goods Sold |
|-------------|------|---------------|-------|--------|-------------|---------------|---------------|---------------------|---------------------|--------------------|
| Bahria Town | 2016 | | 4454 | 3586 | 126610299.8 | 28426.20113 | 868 | 24673942.58 | 0 | 101936357.2 |
| Bahria Town | 2017 | 868 | 6379 | 6547 | 166903971.5 | 23030.76743 | 700 | 16121537.2 | 0 | 150782434.3 |
| Bahria Town | 2018 | 700 | 9129 | 8709 | 271932546.3 | 27666.3492 | 1120 | 30986311.11 | 0 | 240946235.2 |
| Bahria Town | 2019 | 1120 | 9333 | 9393 | 313226466.8 | 29965.22212 | 1060 | 31763135.45 | 0 | 281463331.4 |
| Bahria Town | 2020 | 1060 | 10192 | 10136 | 362950101.2 | 32256.49673 | 1116 | 35998250.35 | 0 | 326951850.8 |
| Bahria Town | 2021 | 987 | 8882 | 8468 | 404199067.4 | 40956.43605 | 1530 | 62663347.16 | 0 | 346819100.5 |
In Above as you can see i just took the Average Value
Average Value = ([Opening Stock Value]+[initemvaluee])/([inqtyy]+[Opening Stock])
and closing stock value
Closing Stock Value = [Average Value] * [Closing Stock]
When i calculate the closing stock value of previous year its give me error.
circular dependency was detected: Measure: 'mak_stockInHandValue'[Average Value], Measure: 'mak_stockInHandValue'[Opening Stock Value], Measure: 'mak_stockInHandValue'[Average Value].
Any Suggestion to see the closing stock value in the field of opening stock value ?????
I am working on this from more than 2 weeks.
Please help me out
Thanks in advance

Related

Power Bi, Dax - calculations, filters, balance

Could you please help me to solve the problem as I am totally new to DAX and English is not my first language so I am struggling to even find the correct question.
Here's the problem.
I have two tables:
start_balance
+------+---------------+
| Type | Start balance |
+------+---------------+
| A | 0 |
| B | 10 |
+------+---------------+
in_out
+------+-------+------+----+-----+
| Year | Month | Type | In | Out |
+------+-------+------+----+-----+
| 2020 | 1 | A | 20 | 20 |
| 2020 | 1 | A | 0 | 10 |
| 2020 | 2 | B | 20 | 0 |
| 2020 | 2 | B | 20 | 10 |
+------+-------+------+----+-----+
I'd like to get the result as follows:
Unfiltered:
+------+-------+------+---------+----+-----+------+
| Year | Month | Type | Balance | In | Out | Left |
+------+-------+------+---------+----+-----+------+
| 2020 | 1 | A | 0 | 20 | 20 | 0 |
| 2020 | 1 | B | 10 | 20 | 10 | 20 |
| 2020 | 2 | A | 0 | 20 | 10 | 10 |
| 2020 | 2 | B | 20 | 20 | 10 | 30 |
+------+-------+------+---------+----+-----+------+
Filtered (for example year/month 2020/2):
+------+-------+------+---------+----+-----+------+
| Year | Month | Type | Balance | In | Out | Left |
+------+-------+------+---------+----+-----+------+
| 2020 | 2 | A | 0 | 20 | 10 | 10 |
| 2020 | 2 | B | 20 | 20 | 10 | 30 |
+------+-------+------+---------+----+-----+------+
So while selecting a slicer for the year/month it should calculate balance before selected year/month and then show selected year/month values.
Edit: corrected start_balance table.
Is the sample data correct?
A -> the starting balance is 10, but in your unfiltered table example, it is 0.
Do you have any relationship between these tables?
Does opening balance always apply to the current year? What if 2021 appears in the in_out table? How do you know when the start balance started?
example without starting balance
If you want to show value breaking given filter you should use statement ALL or REMOVEFILTERS function (in Analysis Services 2019 and in Power BI since October 2019).
calculate(sum([in]) - sum([out]), all('in_out'[Year],'in_out'[Month]))
More helpful information:
https://www.sqlbi.com/articles/managing-all-functions-in-dax-all-allselected-allnoblankrow-allexcept/

DAX Threshold measure for percentages

I've spend hours trying different combinations of SWITCH(True...) and subtractions to correctly calculate this but cannot find a solution.
For example, I have the following thresholds for X amount of hours:
0-400: 10%
401-1000: 17%
1001-1300: 20%
1301-1675: 25%
1675-2500: 30%
2501 and above: 35%.
Please find below a simple example breakdown:
| Hours | 10% | 15% | 20% | 25% | 30% | 35% |
|-------|-----|-----|-----|-----|-----|-----|
| 1400 | 400 | 600 | 300 | 100 | | |
| 2600 | 400 | 600 | 300 | 375 | 825 | 100 |
| 3000 | 400 | 600 | 300 | 375 | 825 | 500 |
| Year | MonthNo | Hours | Amount |
|------|---------|-------|--------|
| 2020 | 8 | 970 | 48500 |
| 2020 | 7 | 1400 | 70000 |
| 2020 | 6 | 2600 | 130000 |
| 2020 | 5 | 3000 | 150000 |
The first 2 are easy to accomplish but I cannot cover all the rules. How can accomplish this in DAX and multiply by the correct percentage?
There is no percentage table, the percentage's would be applied to the amount as a rebate and then added up according to the thresholds. E.g:
+-------------+------+------+------+--------+-------+-----+-----+
| Percentages | | 10% | 15% | 20% | 25% | 30% | 35% |
+-------------+------+------+------+--------+-------+-----+-----+
| Hours | 1400 | 400 | 600 | 300 | 100 | | |
| Amount | 7000 | 2000 | 5100 | 3000 | 1500 | | |
| | | | | rebate | 11600 | | |
+-------------+------+------+------+--------+-------+-----+-----+

How do i add additional rows in M QUERY

I want to add more rows using the Query editor (Power query/ M Query) in only the Start Date and End Date column:
+----------+------------------+--------------+-----------+-------------+------------+
| Employee | Booking Type | Jobs | WorkLoad% | Start Date | End date |
+----------+------------------+--------------+-----------+-------------+------------+
| John | Chargeable | CNS | 20 | 04/02/2020 | 31/03/2020 |
| John | Chargeable | CNS | 20 | 04/03/2020 | 27/04/2020 |
| Bernard | Vacation/Holiday | SN | 100 | 30/04/2020 | 11/05/2020 |
| Bernard | Vacation/Holiday | Annual leave | 100 | 23/01/2020 | 24/02/2020 |
| Bernard | Chargeable | Tech PLC | 50 | 29/02/2020 | 30/03/2020 |
+----------+------------------+--------------+-----------+-------------+------------+
I want to find the MIN(Start Date) and MAX(End Date) and then append the range of start to end dates to this table only in the Start Date and End Date column in the Query Editor (Power Query/ M Query). Preferrable if I can create another table2 duplicating the original table and append these rows.
For example:
+----------+------------------+--------------+-----------+-------------+------------+
| Employee | Booking Type | Jobs | WorkLoad% | Start Date | End date |
+----------+------------------+--------------+-----------+-------------+------------+
| John | Chargeable | CNS | 20 | 04/02/2020 | 31/03/2020 |
| John | Chargeable | CNS | 20 | 04/03/2020 | 27/04/2020 |
| Bernard | Vacation/Holiday | SN | 100 | 30/04/2020 | 11/05/2020 |
| Bernard | Vacation/Holiday | Annual leave | 100 | 23/01/2020 | 24/02/2020 |
| Bernard | Chargeable | Tech PLC | 50 | 29/02/2020 | 30/03/2020 |
| | | | | 23/01/2020 | 23/01/2020 |
| | | | | 24/01/2020 | 24/01/2020 |
| | | | | 25/01/2020 | 25/01/2020 |
| | | | | 26/01/2020 | 26/01/2020 |
| | | | | 27/01/2020 | 27/01/2020 |
| | | | | 28/01/2020 | 28/01/2020 |
| | | | | 29/01/2020 | 29/01/2020 |
| | | | | 30/01/2020 | 30/01/2020 |
| | | | | 31/01/2020 | 31/01/2020 |
| | | | | ... | ... |
| | | | | 11/05/2020 | 11/05/2020 |
+----------+------------------+--------------+-----------+-------------+------------+
The List.Dates function is pretty useful here.
Generate the dates in your range, duplicate that to two columns and then append.
let
StartDate = List.Min(StartTable[Start Date]),
EndDate = List.Max(StartTable[End Date]),
DateList = List.Dates(StartDate, Duration.Days(EndDate - StartDate), #duration(1,0,0,0)),
DateCols = Table.FromColumns({DateList, DateList}, {"Start Date", "End Date"}),
AppendDates = Table.Combine({StartTable, DateCols})
in
AppendDates

Power Bi, compare a text column by month

I need a little help
+---------------------------------+-----------------+---------------+------------+
| Name | Opening Balance | Close Balance | Date |
+---------------------------------+-----------------+---------------+------------+
| LEAL MANZANO ABUNDIO | 394,732.87 | 406,866.31 | 31/08/2018 |
| LOPEZ GRANADOS CLAUDIA CAT | 382,567.83 | 382,567.83 | 31/08/2018 |
| ABARCA RODRIGUEZ ERNESTO | 394,142.32 | 394,142.32 | 31/08/2018 |
| OSOLLO JUAREZ PALOMA | 396,030.58 | 396,030.58 | 31/08/2018 |
| MACHUCA HERNANDEZ GUILLERM | 410,809.87 | 422,943.31 | 31/08/2018 |
| LEAL MANZANO ABUNDIO | 406,866.31 | 409,466.22 | 30/09/2018 |
| LOPEZ GRANADOS CLAUDIA CATALINA | 382,567.83 | 382,567.83 | 30/09/2018 |
| ABARCA RODRIGUEZ ERNESTO | 394,142.32 | 394,142.32 | 30/09/2018 |
| OSOLLO JUAREZ PALOMA | 396,030.58 | 396,030.58 | 30/09/2018 |
| MACHUCA HERNANDEZ GUILLERMO | 422,943.31 | 0 | 30/09/2018 |
| MACIAS SANCHEZ JOSE | 425,457.57 | 425,457.57 | 30/09/2018 |
| PARDINEZ BUCIO EDUARDO | 434,591.25 | 434,591.25 | 30/09/2018 |
| LEAL MANZANO ABUNDIO | 409,466.22 | 0 | 31/10/2018 |
| LOPEZ GRANADOS CLAUDIA CATALINA | 382,567.83 | 382,567.83 | 31/10/2018 |
| ABARCA RODRIGUEZ ERNESTO | 394,142.32 | 394,142.32 | 31/10/2018 |
| OSOLLO JUAREZ PALOMA | 396,030.58 | 396,030.58 | 31/10/2018 |
| MACHUCA HERNANDEZ GUILLERMO | 0 | 0 | 31/10/2018 |
+---------------------------------+-----------------+---------------+------------+
So i have this table with clients Names and dates, i need to compare how it changed month by month, to know how many ins and outs i had.
Thank you.
Samuel, I loaded your table into PowerBI and created the following visuals
This is accomplished by adding a new calculated column "Client Change." This basically adds a column that just puts in a field that identifies a new balance when opening is 0 and closing is > 0. Conversely, it sets the field to 'close balance' when thee opening balance > 0 and the closing = 0. I plunk it into a matrix and use the month grain from the native date hierarchy against the names. Some data fixing on the names is needed for truncated strings in your data set.
ClientChange =
if(AND([ Opening Balance ] = 0, [ Close Balance ] > 0 )
, "NewBalance"
, if(AND ([ Opening Balance ] > 0, [ Close Balance ] = 0)
, "Balance Closed"
, " -- "
)
)
I also added a measure 'client count' that counts all the rows where closing balance isn't 0.
ClientCount = COUNTX(FILTER(testData,[ Close Balance ] <> 0), testData[Name])
Hope it helps. Please note that there is an oddity with 'MACIAS SANCHEZ JOSE' -- he has a record in September but not in August or October. His neither his open nor close balance is 0. It doesn't quite make sense.

DAX measure with month variable based on date field

I am having a hard time getting the following measure to work. I am trying to change the target based on a date filter. My filter is the Workday columns, where Workday is a standard date column. sMonth is a month columns formatted as whole number. I am looking to keep the slicer granular, in order to work by day, adding custom columns with month and year and basing the measure on those would help. This is what I have tried and couldn't get it to work:
Cars Inspected =
VAR
selectedMonth = MONTH(SELECTEDVALUE('All Cars Inspected'[Workday]))
RETURN CALCULATE(SUM(Targets[Target]),
FILTER(Targets,Targets[Location]="Texas"),
FILTER(Targets,Targets[Description]="CarsInspected"),
FILTER(Targets,Targets[sMonth]=selectedMonth))
I would appreciate if someone would suggest a different way of achieving the same result.
LE:
This is a mock-up of what I am trying to achieve:
The total cars get filtered by the Workday. I would like to make the Targets/Ranges dynamic. When the slider gets adjusted everything else is adjusted.
My tables look like this:
+-----------+--------------------+----------+
| Workday | TotalCarsInspected | Location |
+-----------+--------------------+----------+
| 4/4/2017 | 1 | Texas |
| 4/11/2017 | 149 | Texas |
| 4/12/2017 | 129 | Texas |
| 4/13/2017 | 201 | Texas |
| 4/14/2017 | 4 | Texas |
| 4/15/2017 | 6 | Texas |
+-----------+--------------------+----------+
+----------+--------+----------+---------------+--------+-----+--------+
| TargetID | sMonth | Location | Description | Target | Red | Yellow |
+----------+--------+----------+---------------+--------+-----+--------+
| 495 | 1 | Texas | CarsInspected | 3636 | 0.5 | 0.75 |
| 496 | 2 | Texas | CarsInspected | 4148 | 0.5 | 0.75 |
| 497 | 3 | Texas | CarsInspected | 4861 | 0.5 | 0.75 |
| 498 | 4 | Texas | CarsInspected | 4938 | 0.5 | 0.75 |
| 499 | 5 | Texas | CarsInspected | 5094 | 0.5 | 0.75 |
| 500 | 6 | Texas | CarsInspected | 5044 | 0.5 | 0.75 |
| 501 | 7 | Texas | CarsInspected | 5043 | 0.5 | 0.75 |
| 502 | 8 | Texas | CarsInspected | 4229 | 0.5 | 0.75 |
| 503 | 9 | Texas | CarsInspected | 4311 | 0.5 | 0.75 |
| 504 | 10 | Texas | CarsInspected | 4152 | 0.5 | 0.75 |
| 505 | 11 | Texas | CarsInspected | 3592 | 0.5 | 0.75 |
| 506 | 12 | Texas | CarsInspected | 3748 | 0.5 | 0.75 |
+----------+--------+----------+---------------+--------+-----+--------+
Let the Value for your gauge be the sum of TotalCarsInspected and set the Maximum value to the following measure:
Cars Inspected =
VAR selectedMonth = MONTH(MAX('All Cars Inspected'[Workday]))
RETURN LOOKUPVALUE(Targets[Target],
Targets[Location], "Texas",
Targets[Description], "CarsInspected",
Targets[sMonth], selectedMonth)