• It works in this way:

    DECLARE

    @day char(2) = UPPER(SUBSTRING (datename(DW,getdate()-1),0,3))

    ,@folder nvarchar(2000) = N'C:\Temp\'

    ,@as nvarchar(128) = N'AnalysisServices'

    DECLARE

    @server SYSNAME = @@SERVERNAME

    ,@linkedServer SYSNAME = (SELECT name FROM sys.servers WHERE provider = 'MSOLAP' AND data_source = 'localhost')

    /****** create temp table, only if you need to backup specific AS DBs ******/

    DECLARE

    @db nvarchar (50) = 'tempdb'

    ,@schema nvarchar(10) = '.dbo.'

    ,@temptable nvarchar(max) = N'TestAS'

    DECLARE

    @drop nvarchar(max) = N'DROP TABLE '+ @db + @schema + @temptable

    ,@selectinto nvarchar(max) = N'SELECT [OBJECT_ID] INTO '+ @db + @schema + @temptable + ' FROM OPENQUERY(['+ @linkedServer +'],N''SELECT OBJECT_ID FROM $SYSTEM.DISCOVER_OBJECT_ACTIVITY WHERE OBJECT_PARENT_PATH = ''''' + @server + '.Databases'''''')'

    DECLARE

    @table nvarchar(max) = N'IF EXISTS (SELECT 1 FROM '+ @db +'.[sys].[objects] WHERE name = '''+ @temptable +''')

    BEGIN

    '+ @drop +'

    '+ @selectinto +'

    END

    ELSE

    BEGIN

    '+ @selectinto +'

    END'

    EXEC sp_executesql @table

    /****** check target folder ******/

    DECLARE

    @sqlEXIST nvarchar(2000) = N'EXEC master..xp_fileexist '''+ @folder + @as +'\' + @day + '\'''

    ,@sqlCREATE nvarchar(2000) = N'EXEC master.dbo.xp_create_subdir '''+ @folder + @as +'\'+ @day + '\'''

    DECLARE

    @sql nvarchar(max) = N'IF OBJECT_ID(''tempdb..#temp_db_test'') IS NOT NULL DROP TABLE #temp_db_test;

    IF OBJECT_ID(''tempdb..#temp_db_test'') IS NULL CREATE TABLE #temp_db_test (FileExists int, IsDirectory int, ParentDirExists int);

    INSERT INTO #temp_db_test '+ @sqlEXIST +';

    IF NOT EXISTS(SELECT IsDirectory FROM #temp_db_test WHERE IsDirectory=1) '+ @sqlCREATE +';'

    EXEC sp_executesql @sql

    DECLARE

    @db_name VARCHAR(50)

    ,@xmla nvarchar(max)

    --,@cursor nvarchar(max) = N'DECLARE cur CURSOR FOR SELECT [OBJECT_ID] FROM OPENQUERY(['+ @linkedServer +'],N''SELECT OBJECT_ID FROM $SYSTEM.DISCOVER_OBJECT_ACTIVITY WHERE OBJECT_PARENT_PATH = ''''' + @server + '.Databases'''''')' -- for all AS DBs

    ,@cursor nvarchar(max) = N'DECLARE cur CURSOR FOR SELECT [OBJECT_ID] FROM '+ @db + @schema + @temptable +' WHERE [OBJECT_ID] NOT LIKE ''%TEST%''' --only if you need to backup specific AS DBs

    EXEC sp_executesql @cursor

    OPEN cur

    FETCH NEXT FROM cur INTO @db_name

    WHILE @@FETCH_STATUS = 0

    BEGIN

    SET @xmla = N'''<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">

    <Object>

    <DatabaseID>'+ @db_name +'</DatabaseID>

    </Object>

    <File>'+ @folder + @as +'\'+ @day +'\'+ @db_name +'.abf</File>

    <AllowOverwrite>true</AllowOverwrite>

    </Backup>'''

    DECLARE

    @exec nvarchar(4000) = N'EXEC ('+ @xmla +') AT '+@linkedServer

    EXEC sp_executesql @exec

    FETCH NEXT FROM cur INTO @db_name

    END

    CLOSE cur

    DEALLOCATE cur

    EXEC sp_executesql @drop --optional