Создание специального инструмента запросов SQL, который не требует от пользователя знания SQL (ASP.NET)

Надеюсь, я смогу получить некоторые советы по этому поводу. Мне было дано требование разработать модуль «пользовательской отчетности», который может в принципе позволить пользователю запрашивать любую таблицу в базе данных, не зная SQL. Идея, выраженная мне, заключается в том, что пользователь должен иметь возможность использовать по-английски способ сказать, какую таблицу они хотят, какие поля они должны отображать, любую фильтрацию, которую они хотят, и теперь им может потребоваться создать запросы, которые отношения внешних ключей в БД.

Моя первоначальная идея состояла в том, чтобы представить «мастера», который позволил бы пользователю: 1) выбрать таблицу из выпадающего списка, 2) получить список доступных столбцов, а не все столбцы разрешены с помощью специального атрибута, применяемого к специальному " Query "и 3) Добавьте различные запросы фильтра, используя номенклатуру на английском языке из выпадающих списков (например,« EQUAL TO »вместо« = »,« IS IN »вместо« IN () »).

Однако, поскольку мне нужно знать, по-видимому, волшебно, что, если пользователь запрашивает данные x, мне нужно объединить таблицы вместе, я не знаю, как правильно его создать или даже если это возможно (руководство, похоже, считает, что это …).

Любые предложения или советы по решению чего-то подобного? Пользователи являются внешними клиентами, которые будут обращаться к веб-сайту, а не к внутреннему, поэтому я не могу просто сказать «Разрешить использование MS Access» или аналогичный, но я не могу просто сделать дамп имени столбца или предоставить для них большое текстовое поле для ввода SQL-запросов. Единственный способ, которым я могу думать об этом, – это иметь определенные представления для данных, но это побеждает видение модуля (не нужно создавать представления / процедуры для каждого отчета, который захочет клиент).

EDIT Обратите внимание, что мы не используем службы Reporting Services; «отчет» – это просто табличный GridView, а не отчет SSRS.

что бы вы ни делали, не позволяйте им запрашивать производственную базу данных. Они вынуждены запускать некоторые страшные таблицы сканирования, которые будут подавлять производительность приложения.

Просто сообщите руководству, что даже OEM-производители баз данных не придумали, чтобы конечные пользователи могли легко получать данные из базы данных. Лучше всего использовать SQL Server Analysis Services . Это действительно лучший способ (на сегодняшний день) для конечных пользователей найти свои собственные данные.

У нас есть аналогичная проблема со многими нашими продуктами: клиенты хотят данных, но они не хотят, чтобы задействованный SQL.

Наше дешевое и простое решение заключалось в том, чтобы сделать кнопку в приложении, которая возвращает гигантский CSV в базе данных. Затем они могут перейти к своей любимой программе (Excel, SASS, …) и использовать данные.

Вероятно, это не то, о чем вы просили, но это удобная и удобная альтернатива для клиентов и программистов.

Я не использовал его раньше, но это тот, который я сделал для будущей экспертизы.

EasyQuery.NET WebForms

Если вы хотите сделать это с помощью вида wizzard, пользователь будет выбирать таблицы, которые ему нужны, поскольку таблицы содержат столбцы. Поэтому вы знаете, какие таблицы вам нужно присоединиться. Единственное, что вам нужно отслеживать, это n: m-отношения – вы можете создать нечто похожее на интерфейс доступа ms. Когда выбранные таблицы – представляют их в er-diagramm и связывают таблицы вместе, так что клиент видит, связаны ли эти таблицы.

Я бы построил QueryInterpreter, который получает информацию (таблицу, столбцы, ссылки, фильтры) и строит SQL-запрос из него. Запишите запрос, поэтому, если ваш клиент жалуется, что он не получает ожидаемых данных, вы можете перепроектировать его запрос и сказать ему, как правильно использовать инструмент. Возможно, постройте Q & A-сайт для наиболее распространенных ошибок.

Вы рассматривали услуги передачи данных WCF ?

Это создало бы модель OData для всех ваших данных, доступную через Интернет, что, я думаю, устранило бы основную проблему построения большого количества запросов. Тогда вы могли бы беспокоиться о создании переднего конца, который вызывал бы соответствующую службу для получения данных, и вы могли бы представить ее таким образом.

На сайте ASP.Net есть видеоролик о том, как создать сайт с использованием AJAX и служб данных WCF. Также есть множество ссылок на сайте служб данных WCF.

На мой взгляд, нужно создать слой представлений в вашей базе данных, который вы представите пользователям для запроса. Хорошо спроектированные представления не позволят пользователям делать много посторонних объединений и предоставят им структуру данных, которую намного легче понять. Я бы использовал представления, чтобы сделать следующее:

  1. Маскируйте любые соединения для поиска или другие таблицы домена, вместо этого создавайте удобные для пользователя коды для данных домена.
  2. Выполняйте выборочную денормализацию данных, чтобы пользователям не нужно было думать о объединениях, когда это возможно.
  3. Обеспечьте согласованные и удобные имена столбцов. Со временем наши структуры данных могут быть искалечены и заканчиваться неочевидными именами столбцов, поэтому убедитесь, что пользователь поймет каждый столбец, на котором вы находитесь.
  4. Скрыть системные столбцы, такие как AddDate, Timestamp и т. Д.

Не создавая исчерпывающий пример, представьте, что у вас есть база данных, содержащая следующие таблицы:

  • Клиент (ID, имя, адрес)
  • Продукт (ID, имя, описание, UnitPrice)
  • ShippingMethod (ID, Name)
  • Заказ (ID, CustomerID, OrderDate, ShippingMethodID, ShippingCost)
  • OrderDetail (ID, OrderID, ProductID, Quantity, UnitPrice)

Я бы создал следующие представления для пользовательских запросов:

  • Заказ (ID, CustomerID, CustomerName, CustomerAddress, OrderDate, ShippingMethodName, ShippingCost)
  • OrderDetail (ID, OrderID, ProductID, ProductName, ProductDescription, Quantity, UnitPrice)

По-моему, пользователям будет намного проще понять и запросить большие плоские виды, чем полностью нормализованные таблицы.

Вы просмотрели модуль создания отчетов в службах отчетности? Я не использовал его сам, но из другого чтения я считаю, что он предназначен для поддержки этого типа сценария.

Наиболее экономичным решением является включение серверов Reporting Servers, которые поставляются с SQL Server 2005 и 2008. Стоимость разработки такого надежного продукта сама по себе не может обойти расходы на настройку продукта, у которого у вас уже есть лицензия на , Пользователи могут просто использовать приложение Report Builder, которое поставляется с SSRS. Поговорите с руководством об издержках, и они будут слушать.

Вы пробовали разоблачить его как службу данных WCF, а затем использовать Power Power Pivot для его потребления. Это позволяет легко создавать сводные таблицы и диаграммы, которые бизнес-пользователи любят, если сценарии.

  • вопрос о присоединении, каковы наилучшие альтернативы?
  • Подключение к базе данных для приложения Multi-Tenant?
  • недействительная попытка вызвать чтение, когда ошибка чтения закрыта
  • Вставить список <контакты> в таблицу
  • SqlDataReader Колонны Ординалы
  • Какой тест будет проверять, насколько хорошо мои тарифы на оборудование для моего продукта ASP.NET, SQL Server, IIS?
  • Настроить gridview на основе двух выпадающих списков
  • Не удается открыть пакет DTS SQL Server 2000, который я импортировал в SQL Server 2008
  • проблема с обновлением таблицы sql
  • Должен ли я пойти с прикреплением MDF-файла к SQL Express или реальным сценарием развертывания на SQL Server?
  • SQL Server: вставить, если текущая дата> endDate
  • Interesting Posts
    Давайте будем гением компьютера.