AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 20.05.2013, 18:02   #1  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Подсчет записей в ax2012 с учетом DataArea и Partition. Как лучше?
Работаю с демоданными. В том числе выполнил анализ числа записей с учетом раздела и компании.

Получился вот SQL-скрипт, который привел ниже.

Уверен, что скрипт можно улучшить
Например, хочется, чтобы он выполнялся в один проход (хотя и не уверен, что это будет быстрее и эффективнее)
Также хочется, чтобы можно было задать фильтр по именам таблиц (пока не придумал, как его включить по человечески)

Как можно улучшить этот скрипт?

Code:
--
-- Подсчитывает число записей в базе данных Dynamics AX 2012 в разрезе Partition, DataArea
-- версия 1.0, mazzy
-- 

-- Фильтр на названия таблиц (в текущей версии не используется)
DECLARE @filter NVARCHAR(255)
-- Варианты фильтров:
-- SET @filter = '' -- по умолчанию считать число записей во всех таблицах.
-- SET @filter = 'and o.name like ''a%'''
-- SET @filter = 'and o.name like ''%retail%'''
-- SET @filter = 'and o.name like ''%trans%'''

-- добавляем пробел, чтобы можно было подключать и другие условия
IF( LEN(@filter) > 0 and RIGHT(@filter,1) <> ' ')
	set @filter += ' '

-- временная таблица, для хранения результатов
DECLARE @tblTemp TABLE(NAME nvarchar(255), Row_Count int, PARTITION nvarchar(255), DATAAREA nvarchar(255))

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), PARTITIONS.NAME, DATAAREAID
			FROM ? JOIN PARTITIONS on (PARTITIONS.RECID = ?.PARTITION)
			group by PARTITIONS.NAME, DATAAREAID',
	@whereand = 'and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), PARTITIONS.NAME, NULL
			FROM ? JOIN PARTITIONS on (PARTITIONS.RECID = ?.PARTITION)
			group by PARTITIONS.NAME',
	@whereand = 'and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), NULL, DATAAREAID
			FROM ?
			group by DATAAREAID',
	@whereand = 'and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), NULL, NULL
			FROM ?',
	@whereand = 'and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

SELECT * FROM @tblTemp
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
[ANN] Tabax 0.1 -- панель задач для Axapta belugin DAX: База знаний и проекты 302 21.10.2016 12:49
Axilicious:AX2012 R2 : DB Sync – Failed to create a session Blog bot DAX Blogs 0 27.02.2013 21:11
axaptacorner: Data partition in Ax 2012 R2 Blog bot DAX Blogs 0 21.01.2013 21:11
Выборка произвольных записей одним запросом db DAX: Программирование 1 23.09.2010 14:15
Домены и select * from DataArea Yprit DAX: Программирование 1 11.04.2008 16:05

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.