|
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:22 | #5 |
злыдень
|
??? а что такое "перспектива"
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
26.04.2007, 11:14 | #6 |
злыдень
|
А я дурак, не стал в свое время париться, пытаться нарисовать и продавать набор внешних отчетов на reporting services для аксапта. Подумал в майкрософт все сами сделают по уму и мега круто ))
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
26.04.2007, 12:49 | #7 |
Участник
|
Ну и зря.
__________________
С уважением Шатохин Святослав. |
|
03.05.2007, 09:46 | #8 |
Участник
|
Прошу прощение за некоторое отклонение от темы, но возникала ли у кого-нибудь следующая ошибка при обработке отчета:
Не удалось выполнить запрос для набора данных "dataSet". Выполнение семантического запроса завершилось с ошибкой. Invalid object name 'DBO.<имя таблицы дайнамикс>WITHUSERIDS'. |
|
26.04.2007, 11:31 | #9 |
Модератор
|
В 4ке. DataDictionary - Perspectives
|
|
26.04.2007, 12:49 | #10 |
Участник
|
Во дела. А я перепутал с OLAP2005ми Perspectives, которые витрины данных. Кстати, интересная штука.
__________________
С уважением Шатохин Святослав. |
|
07.05.2007, 16:37 | #11 |
Участник
|
Попробуйте из КвериАнализера обратится к этой таблице, так как обращается RS
__________________
С уважением Шатохин Святослав. |
|
08.05.2007, 08:17 | #12 |
Участник
|
|
|
Теги |
интеграция, полезное, ax4.0, reporting services |
|
|