07.06.2010, 16:59 | #1 |
Участник
|
MS Dynamics Ax 2009: SSAS & SSRS KPI's errors
Microsoft Dynamics Ax 2009 RTM SP1 (Rollup 4)
Kernel 5.0.1500.2116 Application 5.0.1500.1313 Solution 5.0.1500.1313.0 MS Server 2003 32x MS SQL Server 2005 (KB955706) MS Sharepoint Services 3.0 SP1 Коллеги! Для тех, кто настраивает ролевые центры и занимается OLAP-администрированием может быть полезно.. Возьмем стандартный ролевой центр CEO. На главной странице видим такую картину: Для того, чтобы поправить данные ошибки, был задействован ресурс http://www.microsoft.com/downloads/d...1-4a893dbc38a2 1. Находим по ссылке "Управление Ключевыми индикаторами производительности" название первого KPI "Total Revenue" 2. Октрываем в BIDS General Ledger Cube, находим закладку KPIs, находим Total Revenue 3. В Value Expression видим логику выполнения данного индикатора Код: (([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[33]) + ([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[48]) + IIF( ([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[51]) > 0, 0, ([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[51]) ) + ([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[34]) ) * -1 5. Далее [Ledger account descriptions].[Ledger account categories], жмем Properties, ищем "Source" 6. Видим TableID = LEDGERACCOUNTCATEGORY, ColumnID = ACCOUNTCATEGORY Теперь, внимание! Выражение "[Ledger account descriptions].[Ledger account categories].&[33]" фактически означает запрос "select * from ledgeraccountcatgory where accountcatgory = 33", который при выполнении в MS SQL, конечно, возвращает ошибку! Ведь поле ACCOUNTCATEGORY текстовое и содержит название ака краткое описание категории счета, а нам нужно поле Код ссылки, которое называется ACCOUNTCATEGORYREF. 7. Меняем ColumnID на вышеозначенное поле, деплоим проект, процессим куб. После перезагрузки Ролевого центра, картина становится куда приятнее P.S. Total Receivables и Total Payables, заметим, также починились |
|
|
За это сообщение автора поблагодарили: Poleax (5). |
08.06.2010, 11:24 | #2 |
Модератор
|
Цитата:
Сообщение от dmitro
Теперь, внимание!
Выражение "[Ledger account descriptions].[Ledger account categories].&[33]" фактически означает запрос "select * from ledgeraccountcatgory where accountcatgory = 33", который при выполнении в MS SQL, конечно, возвращает ошибку! Ведь поле ACCOUNTCATEGORY текстовое и содержит название ака краткое описание категории счета, а нам нужно поле Код ссылки, которое называется ACCOUNTCATEGORYREF. X++: "select * from LEDGERACCOUNTCATEGORY where ACCOUNTCATEGORY = 33", Код: CREATE TABLE [dbo].[LEDGERACCOUNTCATEGORY]( [ACCOUNTCATEGORY] [nvarchar](20) NOT NULL, [DESCRIPTION] [nvarchar](60) NOT NULL, [ACCOUNTTYPE] [int] NOT NULL, [CLOSED] [int] NOT NULL, [ACCOUNTCATEGORYREF] [int] NOT NULL, [DATAAREAID] [nvarchar](4) NOT NULL, [RECVERSION] [int] NOT NULL, [RECID] [bigint] NOT NULL, CONSTRAINT [I_1395ACCTCATEGORYREFIDX] PRIMARY KEY CLUSTERED ( [DATAAREAID] ASC, [ACCOUNTCATEGORYREF] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
08.06.2010, 11:44 | #3 |
Модератор
|
Цитата:
Сообщение от dmitro
4. Идем в закладку Cube Structure и ищем [Ledger account descriptions], в Hieracrhies; разворачиваем и нажимаем ссылку "Edit ..."
5. Далее [Ledger account descriptions].[Ledger account categories], жмем Properties, ищем "Source" 6. Видим TableID = LEDGERACCOUNTCATEGORY, ColumnID = ACCOUNTCATEGORY Теперь, внимание! Выражение "[Ledger account descriptions].[Ledger account categories].&[33]" фактически означает запрос "select * from ledgeraccountcatgory where accountcatgory = 33", который при выполнении в MS SQL, конечно, возвращает ошибку! Ведь поле ACCOUNTCATEGORY текстовое и содержит название ака краткое описание категории счета, а нам нужно поле Код ссылки, которое называется ACCOUNTCATEGORYREF. 7. Меняем ColumnID на вышеозначенное поле, деплоим проект, процессим куб. 1) В кубе General Ledger Cube ищем в Dimensions Ledger account descriptions переходи на Edit Ledger chart of account 2) В измерении Ledger account descriptions В Source поле ACCOUNTCATEGORYREF выставляем для KeyColumns и для NameColumns?
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
08.06.2010, 12:35 | #4 |
Участник
|
poleax, выставляем для NameColumns, остальное не трогаем
|
|
08.06.2010, 13:03 | #5 |
Участник
|
У меня при просмотре dimension [Ledger account descriptions] и его attribute [Ledger account categories] видно, что свойство "KeyColumns" = LEDGERACCOUNTCATEGORY.ACCOUNTCATEGORYREF (Integer), т.е. именно то поле, которое нужно. А вот LEDGERACCOUNTCATEGORY.ACCOUNTCATEGORY (WChar) прописано в свойстве "NameColumn" - это и понятно, зачем пользователю видеть код, если ему нужно понятнее название?
Т.е. в моем кубе "из коробоки" всё работает верно, и ошибок как на первом экране или в описании нет. DAX 5.0.1500.2116 EE. P.S. Некоторые отчеты SSRS работают некорректно из-за того, что в них жестко прописаны фильтры по полям-перечислениям. При этом значение фильтра из-за локализации неверное и отчет не выводит данные - исправить можно как через Visual Studio так и через веб-сервер отчетов. Пример - Ledger.ActualvsBudget.FullPage, в котором прописан тип бюджета "Main" (соответствует английскому значению метки).
__________________
Ivanhoe as is.. |
|
08.06.2010, 13:17 | #6 |
Модератор
|
1) Зачем NameColumns портить? Связка данный все равно по KeyColumns
согласен с Ivanhoe Цитата:
"NameColumn" - это и понятно, зачем пользователю видеть код, если ему нужно понятнее название?
Не совсем понятно Цитата:
5. Далее [Ledger account descriptions].[Ledger account categories], жмем Properties, ищем "Source"
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. Последний раз редактировалось Poleax; 08.06.2010 в 13:34. |
|
08.06.2010, 14:20 | #7 |
Участник
|
Цитата:
Сообщение от Ivanhoe
У меня при просмотре dimension [Ledger account descriptions] и его attribute [Ledger account categories] видно, что свойство "KeyColumns" = LEDGERACCOUNTCATEGORY.ACCOUNTCATEGORYREF (Integer), т.е. именно то поле, которое нужно. А вот LEDGERACCOUNTCATEGORY.ACCOUNTCATEGORY (WChar) прописано в свойстве "NameColumn" - это и понятно, зачем пользователю видеть код, если ему нужно понятнее название?
Т.е. в моем кубе "из коробоки" всё работает верно, и ошибок как на первом экране или в описании нет. DAX 5.0.1500.2116 EE. P.S. Некоторые отчеты SSRS работают некорректно из-за того, что в них жестко прописаны фильтры по полям-перечислениям. При этом значение фильтра из-за локализации неверное и отчет не выводит данные - исправить можно как через Visual Studio так и через веб-сервер отчетов. Пример - Ledger.ActualvsBudget.FullPage, в котором прописан тип бюджета "Main" (соответствует английскому значению метки). В KPIs кубов в Value Expression есть описалово того, как собственно этот KPI собирается. Так вот в нашем случае там содержится [Ledger account descriptions].[Ledger account categories].&[33], где фильтр накладывается не на KeyColumn, а на NameColumn! А он задан по дефолту не правильно.. Цитата:
А вот LEDGERACCOUNTCATEGORY.ACCOUNTCATEGORY (WChar) прописано в свойстве "NameColumn" - это и понятно, зачем пользователю видеть код, если ему нужно понятнее название?
Здесь видно, что такое KeyColumn Poleax, ты пробовал и не получилось? Не забудь, что надо сделать deploy и process проекта BIDS |
|
08.06.2010, 14:40 | #8 |
Участник
|
Правильно ли я понимаю, что:
1. Вы утверждаете, что нужно поменять name column в аттрибуте так, чтобы он возвращал код (например, 33) вместо названия? Т.е. пользователь в ОЛАП-отчете увидит именно 33, а не понятный ему SALES. 2. Вы утверждаете, что MDX выражение работает именно с name-column аттрибута, а не с ключом? Т.е. многие другие KPI в этом и других кубах написаны неверно, ведь там повсеместно используется конструкция вида [Employee].[Status].&[1], т.е. фильтр на значение ключа аттрибута, а не его наименования?
__________________
Ivanhoe as is.. |
|
08.06.2010, 14:53 | #9 |
Модератор
|
Цитата:
История "капремонта куба" : У меня по Кубу General Ledger Cube одна и таже песня The Key Perfomance Indicator (KPI) does not exist on the server dmitro если будет время, можешь глянуть тему The Key Perfomance Indicator (KPI) does not exist on the server ? и Process Cube (DAX 2009): Цитата:
Почему когда я создаю проект через Администрирование --> Настройка --> Бизнес-анализ --> OLAP --> Создать проект бизнес-аналитики
В папке проекта только один файл AnalysisServicesProjects.database
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
08.06.2010, 15:29 | #10 |
Участник
|
Ivanhoe,
Цитата:
1. Вы утверждаете, что нужно поменять name column в аттрибуте так, чтобы он возвращал код (например, 33) вместо названия? Т.е. пользователь в ОЛАП-отчете увидит именно 33, а не понятный ему SALES.
(([Mesures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[33]) + ([Measures].[Master Amount - Ledger],[Ledger account descriptions].[Ledger account categories].&[48]) что означает дословно 'выбрать сумму AmountMST из LedgerTrans ака измерение [Mesures].[Master Amount - Ledger], у которых счету из LedgerTable соответствует категория из LedgerAccountCategory c фильтром на NameColumn = 33 ака [Ledger account descriptions].[Ledger account categories].&[33]' и т.д. Если как в стандарте, то правильно было бы [Ledger account descriptions].[Ledger account categories].&[SALES] Цитата:
2. Вы утверждаете, что MDX выражение работает именно с name-column аттрибута, а не с ключом? Т.е. многие другие KPI в этом и других кубах написаны неверно, ведь там повсеместно используется конструкция вида [SIZE=2][Employee].[Status].&[1], т.е. фильтр на значение ключа аттрибута, а не его наименования?
|
|
08.06.2010, 15:46 | #11 |
Участник
|
Цитата:
Сообщение от Poleax
Твое решение испытать не получается. Пробывал и Deploy Changes Only и Deploy All. Процессинг проходит отлично.
История "капремонта куба" : У меня по Кубу General Ledger Cube одна и таже песня The Key Perfomance Indicator (KPI) does not exist on the server dmitro если будет время, можешь глянуть тему The Key Perfomance Indicator (KPI) does not exist on the server ? и Process Cube (DAX 2009): |
|
08.06.2010, 17:08 | #12 |
Участник
|
Цитата:
Цитата:
Сообщение от dmitro
В отчете пользователь видит сумму:
... Именно так. В других точно также: Status = 1 означает то же самое, что NameColumn = 1. Под выражением 'NameColumn' в OLAP подразумевается скорее всего что-то типа "именованного столбца", а не аксаптовского "наименования". А KeyColumn содержит уникальный ключ таблицы. Мне кажется, что в KPIWalkthroug на странице 18 ошибка и смотреть надо было keyColumn.
__________________
Ivanhoe as is.. |
|
08.06.2010, 17:13 | #13 |
Участник
|
Цитата:
Ок, не поленился, провел эксперимент: не менял nameColumn, поменял сам текст KPI - см. картинку 1 и результат - картинка 2. Если вернуть как было [35], то в отчете выдается нормальная цифирка из ГК.
Попробуйте так ["COGS"] |
|
08.06.2010, 17:16 | #14 |
Участник
|
Определение NameColumn:
Цитата:
Определяет столбец, предоставляющий имя отображаемого пользователям атрибута, а не значение в ключевом столбце для этого атрибута. Этот столбец используется для отображения понятного пользователям столбца, когда значение ключевого столбца для элемента атрибута зашифровано или является непонятным для пользователей, или когда ключевой столбец основан на составном ключе.
Другое дело, что при вычислении MDX выражения система под .&[35] может понимать именно значение видное пользователю, а не уникальный код (что логичнее и подтверждается моим эксприментом). Сейчас ищу этому подтверждение / опровержение.
__________________
Ivanhoe as is.. |
|
08.06.2010, 17:44 | #15 |
Участник
|
Цитата:
Для чистоты эксперимента - проставьте в плане счетов категории у счетов, по которым не нулевое сальдо в текущем периоде. ЗЫ. MS SQL AS 2008.
__________________
Ivanhoe as is.. |
|
08.06.2010, 17:57 | #16 |
Участник
|
Нашел специалиста по MDX, который авторитетно заявил, что "[Ledger account descriptions].[Ledger account categories].&[33]" означает фильтр именно по уникальному коду "33".
Если бы и уникальный код, и наименование были одного типа, то Система сначала бы сделала поиск по коду и только потом - по наименованию, при этом наименование бы сработало только при условии уникальности.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: dmitro (1). |
08.06.2010, 18:10 | #17 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Нашел специалиста по MDX, который авторитетно заявил, что "[Ledger account descriptions].[Ledger account categories].&[33]" означает фильтр именно по уникальному коду "33".
Если бы и уникальный код, и наименование были одного типа, то Система сначала бы сделала поиск по коду и только потом - по наименованию, при этом наименование бы сработало только при условии уникальности. |
|
08.06.2010, 18:21 | #18 |
Участник
|
А до этого куб процессился? При процессировании были ошибки?
__________________
Ivanhoe as is.. |
|
08.06.2010, 18:36 | #19 |
Участник
|
В том то и дело, ошибок не было, сплошной "Process succeeded.".. А на портале фиг, одни ошибки KPIVALUE
|
|
09.06.2010, 09:59 | #20 |
Модератор
|
Цитата:
Цитата:
Зачем NameColumns портить? Связка данный все равно по KeyColumns
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
Теги |
kpivalue, ssas, ssrs, totalpayables, totalreceivables |
|
|