How to compare between two dates in power bi query - powerbi

I have a column named status compared between the End date of the task and each month in the year to return 1 for true, 0 for false
i have used this:
Status = IF ([EndDate].[Date] <= [Month].[Date] , 1, 0)
Date Formatting for [EndDate] and [Month]: March 2001 (MMMM yyyy)
The problem : if End Date = May 2019 and Month = May 2019 its returned 0 ,but its should returned 1
Actual Result
Expected Result

That is the correct logic/syntax, is the date you are using just visually formatted as MMMM yyyy, is the actual date in the dd/mm/yyyy format? as you may be trying to compare the following
[EndDate].[Date] = 01/05/2001 to [Month].[Date] 25/05/2001
What you can do is just pull out the month and year for example
MONTH([EndDate].[Date]) and YEAR([EndDate].[Date]) and MONTH([Month].[Date]) and YEAR( [Month].[Date])
So it would be IF(YEAR([EndDate].[Date]) = YEAR( [Month].[Date]) && MONTH([EndDate].[Date]) = MONTH([Month].[Date]), 1, 0)

Related

Power BI Compare Sales amount for today with same day last year

I have a measure showing Sales Amount for the same period year:
Sales LY = Calculate (Sum('Sales'[Product Sales]), SAMEPERIODLASTYEAR('Sales'[Payment Date].[Date]))
This measure gives me the Sales amount for same date last year. I am looking for a measure which will give me the Sales amount for same day last year.
So January 1st of 2021 was a Friday. So I need it compared to the first Friday in 2020.
Any assistance or guidance please!
You may try to check the first day of the current row year (and last year). January 1st of 2021 = Friday; January 1st of 2020 Wednesday; Diff between this two is 2. We can use this in our calculation. Example:
LastYearTheSameDay = var _firstDayOfYear = WEEKDAY(CALCULATE(MIN('Sample'[Date]), filter(ALL('Sample'), YEAR('Sample'[Date]) = YEAR(SELECTEDVALUE('Sample'[Date])))),1)
var _firstDayOfLastYear = WEEKDAY(CALCULATE(MIN('Sample'[Date]), filter(ALL('Sample'), YEAR('Sample'[Date]) = YEAR(SELECTEDVALUE('Sample'[Date]))-1)),1)
var _diff = _firstDayOfYear - _firstDayOfLastYear
var _corrDay = DAY(SELECTEDVALUE('Sample'[Date])) + _diff
return
if(HASONEVALUE( 'Sample'[Date]),
calculate( sum('Sample'[VAL]), filter(ALL('Sample'), 'Sample'[Date] = DATE(YEAR(SELECTEDVALUE('Sample'[Date]))-1,Month(SELECTEDVALUE('Sample'[Date])),_corrDay) ))
, BLANK() )

DAX Last Year for Count

I’m trying to calculate last year data incorporated in the following measure.
Previous Month = VAR CurrMonth = MONTH ( TODAY () ) RETURN IF ( CurrMonth = 1, 12, CurrMonth - 1 )
I’ve tried using PREVIOUSYEAR if the current month is 1 (Jan) but it’s grabbing all previous years.

Output value from Pervious Month (December) in January

Hopefully someone can help me.
I use the measure below to output a value from the previous month, however it appears to have broken this month (January).
In March it outputs Februarys value, and in April it outputs Marchs value. However as it is January it doen't appear to be outputting Decembers value.
Can anyone advise how I would adapt this measure to retrieve Decembers value?
Previous Month = var current_month= MONTH(TODAY()) return CALCULATE( AVERAGE('DATA_TABLE'[VALUE]), FILTER(DATA_TABLE,MONTH(DATA_TABLE[DATE])=current_month-1))
Thanks for your support.
Dax's Month commmand returns a number. In your case, you're asking for month 0, as january is month number 1. Since there is no month numbered as 0, it returns no data (blank).
You just need to add a condition for when the month is 0, to instead return data for the previous year's last month.
This is a possible solution:
VAR current_month = MONTH(TODAY())
VAR current_year = YEAR(TODAY())
VAR previous_month = current_month - 1
VAR previous_year = current_year - 1
RETURN
CALCULATE(
AVERAGE('Table'[Values]);
FILTER('Table';
IF(previous_month = 0;
MONTH('Table'[Date]) = 12 && YEAR('Table'[Date]) = previous_year;
MONTH('Table'[DATE]) = current_month - 1)
)
)
This way you accomodate for the 0 month value and filter according to it.
If it is not 0, the measure behaves as before. Otherwise it filters for the last month of the previous year.

Calculate Number of Working Days based on a Month and Year Column - DAX

I have a column like below for which I would want to extract the number of working days (excluding just weekends- Saturday and Sunday, holidays needs not be addressed).
As of now I just want:
Required_Column = Total No of Days in that month - No of weekends in that month
Month_Year
01-2018
02-2018
03-2018
...
...
01-2019
02-2019
I am a newbie in Power query and DAX , i tried looking up various methods using DAX however, could not find any relevant lead.
Expected Output:
Month_Year Required_Column
01-2018 23 (31-8)
02-2018 20 (28-8)
03-2018 22 (31-9)
... ...
... ...
01-2019 23 (31-8)
02-2019 20 (28-8)
Appreciate your help on this.
Although a Calendar table based approach is recommended as in the comment by RADO and Strawberryshrub, it is also possible to do this with DAX calculated column.
In the example below, I'm assuming MonthYear column contains the first day of each month.
WorkingDays =
VAR Year = YEAR( [MonthYear] )
VAR Month = MONTH( [MonthYear] )
VAR DatesInMonth = GENERATESERIES( [MonthYear], DATE( Year, Month + 1, 1 ) - 1, 1 )
RETURN SUMX(
DatesInMonth,
IF( WEEKDAY( [Value] ) IN { 1, 7 }, 0, 1 )
)

Declare Parameters in Teradata query OR If-then-else

I am new to Teradata. Here is the situation:
If Current_date is < 15 of month then ?Startdate parameter = 1st of prev month and ?EndDate param = last date of current month
SELECT ... FROM ViewA
WHERE date BETWEEN ?Startdate AND ?EndDate
ELSE if Current_date >= 15 then Startdate parameter = 1st of Current month and EndDate param = last date of current month
SELECT ... FROM ViewA
WHERE date BETWEEN ?Startdate AND ?EndDate
I was able to calculate dates in each case, but can't figure out:
#1) how to put them in parameters. If I can put them in params then all I have to do is
SELECT ... FROM ViewA
WHERE date BETWEEN ?Startdate AND ?EndDate
OR
#2) Write a IF-THEN-ELSE
If Current_date is < 15 of month
SELECT ... FROM ViewA
WHERE Date BETWEEN
ADD_MONTHS((DATE - EXTRACT(DAY FROM DATE)+1), -1) AND ADD_MONTHS(LAST_DAY(DATE),0)
ELSE
SELECT ... FROM ViewA
WHERE date BETWEEN
ADD_MONTHS((DATE - EXTRACT(DAY FROM DATE)+1), 0) AND ADD_MONTHS(LAST_DAY(DATE),0) )
END IF
Please guide how to achieve #1 or #2. I CANNOT create function or stored procedure in teradata
#2 using calendar as an example.
SELECT calendar_date from Sys_Calendar.CALENDAR
WHERE calendar_date
BETWEEN
case when extract (day from current_date) < 15
then ADD_MONTHS((current_date - EXTRACT(DAY FROM current_date)+1), -1)
else current_date - EXTRACT(DAY FROM current_date)+1
end
AND ADD_MONTHS(LAST_DAY(current_date),0)
order by calendar_date
;
I prefer the current_date, can't be confused with the datatype.
WHERE date
BETWEEN Trunc(current_date - 14 , 'mon') -- first day of the month 14 days before today
AND last_day(current_date) -- last day of current month