Mayhap stating the obvious: Does /rose/yellow/Daily_rose_20170802_report.csv exist on the target host, and does the remote user have access permission?
Second, the mget command is for multiple files. Try using get instead.
Are you sure the file exists? What happens when you use the ls command to ftp instead?
Also, consider installing and using lftp instead. Not only does it grok multiple protocols including FTP, SFTP and FTPS; it comes with a shell wrapper lftpget for fetching single or multiple files.
To back up what my learned friend RudiC says, the reason is that the underscore is not seen as delimiting the end of the variable. It is an allowable character in the variable name, so you will end up evaluating $x_report which is probably not set, so you will always try to get Daily_rose_.csv If the file had used hyphens instead of underscores then you would have got away with it, but only by luck.
Some shells also have limitations on arguments, e.g. $1 . As a minor war-story, I had to debug a script once which accepted ten arguments and referred to $10 It took me ages to work out was that $10 was actually the value of $1 followed by a zero and this was required by some odd processing in the script. When it needed to use the value of $10 , the author had done a shift and referred to $9 instead confusing everything else as the script looped.
The escape from this madness was to use ${10} and remove the shift, so it is good practice to wrap variable names in {} anyway.