|  25.04.2007, 13:49 | #1 | 
| Banned | Интеграция с Reporting Services в 4.0, ужасы SysSRSTablePermissions 
			
			Хотел бы поделиться изысканиями с коллегами. После часов настройки MS SQL 2005 Reporting Services я сумел сделать в Report Builder простенький отчет матричного вида, показывающий, сколько времени отработали рабочие в разбивке по станкам. Для отчета была сформирована модель SMDL с таблицей ProdRouteTrans из перспективы Production. Запустив полученный отчет, я был неприятно раздосадован тем, что в нем стояли одни нули, хотя проводки в БД были на месте. Возникло подозрение, что модель SMDL использует не таблицы, а ссылается на какие-то специальные view. Кроме того, я сделал наблюдение, что модели экспортируются из DAX все за раз без учета компаний. Сам SMDL - это здоровенный файл XML, для которого я не нашел графического редактора. Тем не менее, фильтр по компании в SMDL определенно отсутствовал. Запустив SQL Server Profiler, я выделил собственно запрос, который идет к базе данных (извините за немецкие имена, модель SMDL была экспортирована с языком de-at): X++: SET DATEFIRST 1
SELECT
    CAST(1 AS BIT) [c0_is_agg],
    CAST(1 AS BIT) [c1_is_agg],
    CAST(2 AS INT) [agg_row_count],
    [PRODROUTETRANSWITHUSERIDS].[SummeGutmenge_Sum] [SummeGutmenge_Sum],
    [PRODROUTETRANSWITHUSERIDS].[SummeStunden_Sum] [SummeStunden_Sum],
    [PRODROUTETRANSWITHUSERIDS].[Mitarbeiter] [Mitarbeiter],
    [PRODROUTETRANSWITHUSERIDS].[Ressource] [Ressource]
FROM
    (
        SELECT
            SUM([PRODROUTETRANSWITHUSERIDS].[QTYGOOD]) [SummeGutmenge_Sum],
            SUM([PRODROUTETRANSWITHUSERIDS].[HOURS]) [SummeStunden_Sum],
            [PRODROUTETRANSWITHUSERIDS].[EMPLID] [Mitarbeiter],
            [PRODROUTETRANSWITHUSERIDS].[WRKCTRID] [Ressource]
        FROM
            [DBO].[PRODROUTETRANSWITHUSERIDS] [PRODROUTETRANSWITHUSERIDS]
        WHERE
            [PRODROUTETRANSWITHUSERIDS].[WindowsID] = 'MF\evggla'
        GROUP BY
            [PRODROUTETRANSWITHUSERIDS].[EMPLID], [PRODROUTETRANSWITHUSERIDS].[WRKCTRID]
    ) [PRODROUTETRANSWITHUSERIDS]
ORDER BY
    [Mitarbeiter], [Ressource]Определение самого представления, автоматически сформированного Аксаптой в момент экспорта моделей, вызывает ужас: X++: SELECT FINALLIST.WINDOWSID, dbo.PRODROUTETRANS.DATAAREAID, dbo.PRODROUTETRANS.RECVERSION, dbo.PRODROUTETRANS.RECID, CASE WHEN DBO.FIELDVISIBLE(FIELDMASKSTRING, 1) > 0 THEN PRODID ELSE NULL END AS PRODID, CASE WHEN DBO.FIELDVISIBLE(FIELDMASKSTRING, 2) > 0 THEN OPRNUM ELSE NULL END AS OPRNUM, CASE WHEN DBO.FIELDVISIBLE(FIELDMASKSTRING, 3) > 0 THEN JOBID ELSE NULL END AS JOBID, CASE WHEN DBO.FIELDVISIBLE(FIELDMASKSTRING, 4) > 0 THEN JOBTYPE ELSE NULL END AS JOBTYPE, ... FROM (SELECT DISTINCT USERDOMAINLIST.WINDOWSID, VIRTUALDOMAINLIST.COMPANY_ID, dbo.FIELDMASK(261, USERDOMAINLIST.USERINFO_USERID, VIRTUALDOMAINLIST.COMPANY_ID) AS FIELDMASKSTRING, USERDOMAINLIST.USERINFO_USERID FROM (SELECT dbo.VIRTUALDATAAREALIST.VIRTUALDATAAREA AS COMPANY_ID, dbo.COMPANYDOMAINLIST.DOMAINID FROM dbo.VIRTUALDATAAREALIST INNER JOIN dbo.COMPANYDOMAINLIST ON dbo.COMPANYDOMAINLIST.COMPANYID = dbo.VIRTUALDATAAREALIST.ID WHERE (dbo.VIRTUALDATAAREALIST.VIRTUALDATAAREA IN (SELECT DATAAREAID FROM dbo.PRODROUTETRANS)) UNION SELECT COMPANYID AS COMPANY_ID, DOMAINID FROM dbo.COMPANYDOMAINLIST WHERE (COMPANYID IN (SELECT DATAAREAID FROM dbo.PRODROUTETRANS))) AS VIRTUALDOMAINLIST INNER JOIN (SELECT DISTINCT dbo.WINDOWSID(dbo.USERINFO.NETWORKDOMAIN, dbo.USERINFO.NETWORKALIAS) AS WINDOWSID, TPERMS.DOMAINID, dbo.USERGROUPLIST.GROUPID, dbo.USERINFO.ID AS USERINFO_USERID FROM dbo.USERGROUPLIST INNER JOIN dbo.USERINFO ON dbo.USERINFO.ID = dbo.USERGROUPLIST.USERID AND dbo.USERINFO.ENABLE = 1 INNER JOIN (SELECT DOMAINID, GROUPID FROM dbo.SYSSRSTABLEPERMISSIONS AS A WHERE (TABID = 261)) AS TPERMS ON dbo.USERGROUPLIST.GROUPID = TPERMS.GROUPID OR dbo.USERGROUPLIST.GROUPID = 'ADMIN') AS USERDOMAINLIST ON USERDOMAINLIST.DOMAINID = VIRTUALDOMAINLIST.DOMAINID OR VIRTUALDOMAINLIST.DOMAINID = 'ADMIN' AND USERDOMAINLIST.GROUPID = 'ADMIN') AS FINALLIST INNER JOIN dbo.PRODROUTETRANS ON dbo.PRODROUTETRANS.DATAAREAID = FINALLIST.COMPANY_ID Системная для Аксапта таблица SYSSRSTABLEPERMISSIONS содержит представление всех прав доступа к полям и таблицам в Аксапта в разрезе доменов и групп. При этом таблица строится в методе Classes\xAccessRightsList\saveSecurityRights при принудительном задании прав доступа. Поскольку мой пользователь "MF\evggla" принадлежал только группе Admin, для этой группы в таблице записей не было. После того, как я создал новую группу пользователей Test, Аксапта заполнила таблицу: Представление PRODROUTETRANSWITHUSERIDS стало возвращать данные: Отчет выдал результаты... просуммированные по всем компаниям в базе. Выводы: 
 Последний раз редактировалось EVGL; 25.04.2007 в 14:01. | 
|  | |
| За это сообщение автора поблагодарили: belugin (9), Logger (5), gl00mie (4), driller (1). | |
|  25.04.2007, 14:38 | #2 | 
| Участник | 
			
			Я слышал, что в 5-ке RS будет поддерживать RLS
		 
				__________________ С уважением Шатохин Святослав. | 
|  | |
| За это сообщение автора поблагодарили: belugin (5). | |
|  26.04.2007, 10:39 | #3 | 
| Мрачный тип | |
|  | 
|  26.04.2007, 10:55 | #4 | 
| Модератор | 
			
			ActiveDirectory - UserLogin - RLS - ReportServer. Я видел - работает. Изумлению моему не было предела. Обещают в 5ке. И настройки OLAP-кубов больше не будет - определение куба будет в "перспективах", т.е. настройка куба - это модификация. Не знаю, оставят ди эту концепцию в 5ке. С Уважением, Георгий | 
|  | |
| За это сообщение автора поблагодарили: belugin (5). | |
|  26.04.2007, 11:14 | #5 | 
| злыдень | 
			
			А я дурак, не стал в свое время париться, пытаться нарисовать и продавать набор внешних отчетов на reporting services для аксапта. Подумал в майкрософт все сами  сделают по уму и мега  круто ))
		 
				__________________ Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ | 
|  | 
|  26.04.2007, 11:22 | #6 | 
| злыдень | 
			
			??? а что такое "перспектива"
		 
				__________________ Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ | 
|  | 
|  26.04.2007, 11:31 | #7 | 
| Модератор | 
			
			В 4ке. DataDictionary - Perspectives
		 | 
|  | 
|  26.04.2007, 12:49 | #8 | 
| Участник | 
			
			Во дела. А я перепутал с OLAP2005ми Perspectives, которые витрины данных. Кстати, интересная штука.
		 
				__________________ С уважением Шатохин Святослав. | 
|  | 
|  26.04.2007, 12:49 | #9 | 
| Участник | 
			
			Ну и зря.
		 
				__________________ С уважением Шатохин Святослав. | 
|  | 
|  03.05.2007, 09:46 | #10 | 
| Участник | 
			
			Прошу прощение за некоторое отклонение от темы, но возникала ли у кого-нибудь следующая ошибка при обработке отчета: Не удалось выполнить запрос для набора данных "dataSet". Выполнение семантического запроса завершилось с ошибкой. Invalid object name 'DBO.<имя таблицы дайнамикс>WITHUSERIDS'. | 
|  | 
|  07.05.2007, 16:37 | #11 | 
| Участник | 
			
			Попробуйте из КвериАнализера обратится к этой таблице, так как обращается RS
		 
				__________________ С уважением Шатохин Святослав. | 
|  | 
|  08.05.2007, 08:17 | #12 | 
| Участник | |
|  | 
| Теги | 
| интеграция, полезное, ax4.0, reporting services | 
|  | 
| 
 |