Ошибка некорректный запрос к датасету

Проблема

Ошибка при запросе датасета RPT_APP_START

Решение

Данная ошибка говорит о том, что:

  1. Не импортировались технические отчеты.
    1. Проверьте, есть ли у Reporter’a подключение к базе данных.
    2. Проверьте гранты на схемы, скорее всего они отсутствуют.
    3. Добавьте гранты.
    4. Заново импортируйте отчеты.
  2. Не был запрошен указанный датасет, т.к. отсутствует подключение к БД у службы iNet: Reporter.
  3. Подключение в датасете RPT_APP_START указано некорректное подключение к БД.
    1. Необходимо зайти в rNav.exe и проверить корректность подключения у данного датасета.

Похожие статьи

Аналитика в Yandex DataLens в пределах CSV

  • Загрузка CSV через Yandex Cloud
    • Yandex Object Storage
    • Yandex Query
    • Yandex Datalens
    • Варианты применения
      • Простая загрузка через Python
      • Файловые менеджеры для Windows и Mac
      • Еще больше подключений к Object Storage
  • Две таблицы из Google Sheets (Гугл Таблиц) через CSV
    • Создание дашборда
    • Обновление CSV
    • Публичный доступ
  • Загрузка CSV через Yandex Cloud
  • Публичный доступ к дашборду из Google Sheets
  • Автоматизация

Загрузка CSV через Yandex Cloud

На самом деле, это более перспективный способ загрузки таблиц. Неважен источник, если можете получить таблицу или csv, то обновлять его можно уже автоматически. Google Sheets, Яндекс Таблицы, локальные базы данных, базы данных без белого IP, CRM и ETL системы. При этом схема более понятная, чем выгрузка в базы данных Яндекса. На этапе формирования можно склеивать таблицы, вычислять поля, обновлять не всю таблицу, а «дописывать» только новые строки. Плюсом является большой объем бесплатного хранения в Yandex Cloud (100 ГБ), Yandex Query и Yandex Datalens бесплатные. В общем, со средним объемом данных, все будет бесплатно.

Yandex Object Storage

Начинаем с самого начала. Открываем Datalens.

image

Нажимаем на Все сервисы.

image

Находим и выбираем Object Storage.

image

Нам предлагают создать наше первое облако. Нажимаем Создать.

image

Откроется консоль управления. В левом верхнем углу нажимаем Создать ресурс, в выпавшем списке выбираем Бакет.

Бакет — это Логическая сущность, которая помогает организовать хранение объектов. Если проще — это папка.

image

Откроется страница создания бакета.

image

Сразу откроется окно создания платежного аккаунта. Заполняем поля.

image

Вводим данные карты, спишут 11 рублей, подтверждаем кодом от банка.

image

Все заполнили, получаем грант на 4 тысячи, нажимаем Создать.

image

Возвращаемся к созданию бакета. вводим имя бакета. Максимальный размер ставим Без ограничения.

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

Доступ на чтение объектов ставим Публичный. Нажимаем Создать бакет.

image

Баскет готов. Нажимаем на наш бакет.

image

Перетаскиваем в бакет наш csv, архивированный zip.

Yandex Query

image

Открываем Все сервисы.

image

Находим и нажимаем Yandex Query.

image

В левом верхнем углу находим меню, нажимаем Ещё, в выпавшем меню выбираем Соединения.

image

Нажимаем + Создать.

image

Настройка соединения. Вписываем любое имя в Имя. Тип выбираем Object Storage. Видимость Публичная. Аутентификация бакета Приватный. Облако и каталог выбираем наше. Бакет выбираем наш. Сервисный аккаунт будет пустой — нажимаем Create new.

image

Откроется новая вкладка с аккаунтами. Нажимаем в правом верхнем углу Создать сервисный аккаунт.

image

В поле Имя вводим любое имя. В Роли в каталоге выбираем editor. Там много ролей, проще в поисковой строке набрать. Нажимаем Создать.

image

Появится новый сервисный аккаунт и сверху меню, выбрать Создать статический ключ доступа. В окне выбрать Создать. Появится Новый ключ. Скопируйте его на жесткий диск, он потом понадобится.

image

Возвращаемся на вкладку Yandex Query. Теперь в селекторе Сервисный аккаунт появился выбор свежесозданного аккаунта, выбираем его и нажимаем Проверить. Должно появиться зеленое сообщение Соединение успешно. Нажать Создать.

image

В левом верхнем углу находим меню, нажимаем Ещё, в выпавшем меню выбираем Привязки.

image

Нажимаем + Создать.

image

В Параметры соединения выбираем Object Storage. В Соединение выбираем наше созданное соединение.

В Параметры привязки к данным в поле Имя вписываем любое имя, лучше такое-же, как и соединение. Область видимости выбираем Публичная. В Путь ставим слэш /, так как файлы у нас будут лежать в корне бакета. Если будут папка, то соответственно путь от корня бакета. Но проще иметь один бакет чисто под таблицу.

image

В Сжатие выбираем gsip, так как у нас csv сжат gzip. В Формат выбираем csv_with_names, то есть таблица с заголовками. Разделитель выбираем ;, так как csv записан в таком формате.

image

Дальше идут колонки, которые нам нужны. Вписываем в Имя название колонки, в Тип выбираем тип данных колонки. Чекбокс Обязательно, значит, что в колонке обязательно должны быть данные, если будет хоть одна пустая ячейка, будет ошибка. Подробнее про типы данных в документации Yandex Cloud.

Будьте внимательны, если в csv формат данных вида 31.11.2022 будет ошибка, дата должна быть вида 2022-11-31. Конвертируйте дату перед отправкой в Object Storage.

Колонки партиционированния не заполняем. Нажимаем Предпросмотр.

image

В нижней части появится наша таблица. Нажимаем Создать.

image

В Привязках нажать эту кнопку.

image

В выпавшем меню выбрать SELECT.

image

В правом окне появится SQL запрос, скопируем его без нижней строчки LIMIT 10;, он нам понадобится при создании датасета.

Yandex DataLens

Открываем Datalens.

image

Создать подключение

image

Выбираем Yandex Query

image

В Облако и каталог выбираем наше облако. В поле Сервисный аккаунт выбираем наш аккаунт. Уровень доступа SQL запросов ставим в Разрешить подзапросы датасетах и запросы из чартов. Нажимаем Создать подключение. Вводим название подключения.

image

В правом верхнем углу нажимаем Создать датасет.

image

Должно автоматически открыться окно Источник с SQL подзапросом.

image

Вставляем наш SQL запрос и нажимаем Применить.

image

Ну вот и все. Мы настроили трансляцию с Object Storage в Datalens.

Варианты применения

Простая загрузка через Python

Задаем идентификаторы, которые получили при регистрации сервисного аккаунта. Задаем имя бакета, в который будем загружать и имя файла, который надо загрузить. Возвращает список файлов, которые уже естьв бакете. На скрипт можно повесить cron или Менеджер задач для периодического выполнения.

import boto3
import gzip
import shutil
import os.path

key_id = 'идентификатор ключа' # Получили при регистрации сервисного аккаунта
access_key = 'секретный ключ' # Получили при регистрации сервисного аккаунта
bucket_name = 'имя бакета'
file_name = 'load.csv' # файл который нужно загрузить


session = boto3.session.Session(
    aws_access_key_id = key_id,
    aws_secret_access_key = access_key,
)
s3 = session.client(
    service_name='s3',
    endpoint_url='https://storage.yandexcloud.net'
)

def func_upload(filename, bucket):
    with open(filename, 'rb') as f_in:
        with gzip.open(filename+'.gz', 'wb') as f_out:
            shutil.copyfileobj(f_in, f_out)

    s3.upload_file(filename+'.gz', bucket, filename+'.gz')
    # Получить список объектов в бакете
    for key in s3.list_objects(Bucket=bucket)['Contents']:
        print(key['Key'])
 
def func_upload(file_name, bucket_name)

Файловые менеджеры для Windows и Mac

browser

CyberDuck

winscp-скачать-1024x654

WinSCP

Еще больше подключений к Object Storage

Все подключения описаны на странице документации Object Storage.
Наверняка их еще больше, так как используется популярный протокол Amazon S3.

Две таблицы из Google Sheets (Гугл Таблиц) через CSV.

В подключении Datalens Google Sheets можно подключить только один лист из Таблиц. Но что делать, если надо две или более таблиц, которые связаны друг с другом по отдельным колонкам. Очевидно, что заполнять одну большую таблицу. Но бывает, что таблицы заполняются автоматически, например CRM, или их ведет другой отдел, или сотрудники, которым «вот так удобно». Или нужен публичный доступ к дашборду. Datalens отключили материализацию и для подключения Google Sheets публичный доступ недоступен. В общем, будем справляться сами, разработчикам не до нашей песочницы с 500 000 строками таблиц в Google Sheets, мы, если по футбольному, Первая лига. Поймите их правильно, такие объемы для баз данных это ерунда, они работают в основном на подключение к большим базам данных. Но мы как-нибудь потом попробуем с нашими Google Sheets влезть в высшую лигу.

Что делать, работаем через подключение File то есть CSV. Трудозатратнее, обновление вручную, но больше возможностей.

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

Создание дашборда

Давайте рассмотрим простой пример работы с Google Sheets через CSV. Есть Таблица с двумя листами.

Первый лист таблицы с основными показателями.

image

Вторая лист таблицы, в которой нас интересует колонка Стоимость

image

Как видно, две таблицы объединяют колонки Наименование и Название. Названия разные, но данные в них одинаковые. Главное найти колонки с идентичными данными в двух таблицах и желательно, чтобы во второй таблице эти значения были уникальными. Например, если во второй таблице Карандаш в одной строке будет стоить 20, а в другой строке Карандаш будет стоить 15, будут неверно объединены таблицы, так как программа не смотрит на другие данные. В таких случаях надо сделать уникальные названия, например второй Карандаш переименовать в Карандаш эконом. Но это делать надо до начала экспорта в Datalens.

Продолжаем. Экспортируем каждый лист в формате CSV на свой жесткий диск.

image

Файл -> Скачать -> Формат CSV (.csv). В диалоговом окне сохраняем на жесткий диск.

Переходим на Datalens.

image

Выбираем Создать подключение

image

Выбираем File

image

Нажимаем + Загрузить файлы. В диалоговом окне выбираем файлы, которые мы скачали с Таблиц, можно все сразу выделить и загрузить.

image

Итак, наши файлы загрузились, выбирая их в левом столбце, в правом можно посмотреть их содержимое (на предпросмотре все строки не загружаются, только часть!). Типы значений в столбцах определились правильно, то есть колонка Дата как дата (пиктограмма календарика), Заказ и Количество как числа (пиктограмма решетки), Наименование как строковое значение (пиктограмма А). Если тип определен неправильно, можно нажать пиктограмму и изменить его. Но в первую очередь это значит, что где-то в данных есть значение другого типа. Например, в столбце Количество, в одной строке вместо 0 внесено буквами ноль. Тогда интерпретатор весь столбец обозначит как строковый. Такие вещи надо править непосредственно в Google Sheets.

Нажимаем на Создать подключение в правом верхнем углу.

image

Вводим название нашего подключения. Важно помнить, что одинаковых имен быть не должно. То есть, нельзя назвать Подключение, Датасет, Чарт и Дашборд одним именем, будет всплывать ошибка. Добавляйте префиксы к названию: MyBIproject_connection, MyBIproject-DataSet, mybiproject_chart_gain, etc. Можно выбрать папку, куда все добро сохранять, нажав на значок >

image

Нажимаем Создать датасет в правом верхнем углу.

image

Перетаскиваем наши листы из левой колонки Таблицы в правое пустое поле.

image

Получаем сообщение об ошибке Датасет не прошел валидацию. Это произошло потому, что Datalens не нашел колонок с ОДИНАКОВЫМ названием. Как мы помним, у нас идентичные колонки называются Наименование и Название. Давайте исправим это. Нажимаем на сдвоенный красный кружок в правом поле.

image

Открывается диалог связей между нашими листами. Нажимаем на Добавить связь.

image

Появятся селекторы с выпадающим списком полей в наших листах. Выбираем соответственно Наименование и Название.

image

Нажимаем на Применить.

image

Чудо свершилось! Мы подружили два наших листа. Внизу страницы, в Предпросмотре, мы видим новую объединенную таблицу. Нажимаем в левом верхнем углу селектор Поля.

image

В этой вкладке нужно выбрать агрегацию для числовых типов, то есть как будет представляться наше число. Например, у нас есть колонка Заказы в которой у нас числа. Но, по сути, заказ — это одна единица, и когда мы хотим получить количество всех заказов, мы их считаем по одному, а не сумму номеров заказов. К тому же номера заказов у нас повторяются (смотрите исходные таблицы). Поэтому надо подсказать Datalens, что это поле у нас уникальное, поэтому выбираем в поле Агрегация напротив имени Заказ выбираем Количество уникальных. Для имен Количество и Стоимость выбираем агрегацию Сумма. Нажимаем в правом верхнем углу Сохранить. Вводим название нашего датасета.

В принципе, мы уже сделали все, что нужно. Дальше строим на основе этого Датасета строим чарты и дашборды. Но давайте проявим немного терпения и дойдем до конца, ведь нам надо еще обновлять данные и опубликовать созданный дашборд. Прошу прошения у тех, кто это уже все знает, за подробности, но кто-то первый раз будет это делать. Нажимаем в правом верхнем углу Создать чарт.

image

Делаем самый простой чарт. Перетаскиваем из левого поля измерение Дата в поле -> Х. Перетаскиваем из левого поля измерение Наименование в поле Цвета.

image

Пока столбцы у нас пустые, надо посчитать выручку по дням. Для этого создадим новый показатель Выручка. В левом поле возле поиска нажимаем значок + и выбираем Поле.

image

Слева у нас все поля, нажимаем на Количество, поле автоматически вставится в формулу

image

Слева у нас все поля, нажимаем на Количество, поле автоматически вставится в формулу. Вводим с клавиатуры символ * и нажимаем на поле Стоимость. Мы получили простую формулу где перемножаем количество товара на стоимость единицы товара. В правом верхнем поле Наименование поля вводим название Выручка. Нажимаем кнопку Создать.

image

Перетаскиваем из левого поля наш новый показатель Выручка в поле Y. Теперь у нас появились столбцы, с выручкой по дням и разбивкой по Наименованию. Нажимаем в правом верхнем углу Сохранить.

image

Вводим название чарта. В самом левом столбце с пиктограммами находим Дашборд и нажимаем на него.

image

В правом верхнем углу выбираем Создать дашборд. Вводим название дашборда.

image

В правом верхнем углу выбираем выпадающий селектор Добавить в нем выбираем Чарт.

image

Нажимаем Чарт Выбрать и в всплывшем окне выбираем чарт, который мы только что создали. В левом нижнем углу нажимаем Добавить.

image

Нажимаем в правом верхнем углу Сохранить.

image

Все мы создали свой дашборд. Теперь изучим его. У нас есть выручка по дням по наименованиям. Но если посмотреть на нашу первую таблицу в Google Sheets, мы увидим, что
02.11.2022 был заказ на 100 линеек, но в дашборде линеек нет. Это произошло потому, что у нас во второй таблице в Google Sheets нет Наименования Линейка, поэтому, при слиянии двух таблиц, у линейки стоимости нет, соответственно, при вычислении выручка будет 0. Давайте исправим это и проведем обновление нашего дашборда.

Обновление CSV

image

Заходим на Google Sheets в наш документ на второй лист. Добавляем строку со стоимостью для Линейка.

image

Переходим на первый лист. Добавляем строку 03.11.2022 128 Карандаш 300. Экспортируем каждый лист в формате CSV на свой жесткий диск.

image

Файл -> Скачать -> Формат CSV (.csv). В диалоговом окне сохраняем на жесткий диск. На жестком диске уже есть эти листы, поэтому выбираем их и заменяем.

image

Возвращаемся на Datalens. В самом левом столбце с пиктограммами находим Подключения и нажимаем на него. В всплывшем окне выбираем наше подключение.

image

В левом столбце выбираем первый лист и нажимаем на ... возле него. В менюшке выбираем Заменить. В диалоговом окне выбираем csv файл первого листа, который мы только что пересохранили с Google Sheets.

image

Файл обновился, и мы видим, что в левом столбце появились группы Новые файлы и Загруженные ранее. Выбираем второй файл и повторяем операцию обновления.

image

Все файлы обновлены, в предпросмотре справа мы видим, что строк 03.11.2022 появилась. В самом левом столбце с пиктограммами находим Дашборды и нажимаем на него (если закрыли вкладку с созданным дашбордом). Выбираем наш дашборд. Если вкладку не закрывали, просто обновите окно браузера (F5).

image

Мы видим, что все, что мы внесли в документе в Google Sheets, теперь у нас в дашборде. Появилась линейка, которая раньше не считалась, и заказы от 03.11.2022. По сути, создав дашборд на csv один раз, потом проводим только обновление файлов в подключении.

Публичный доступ

В самом начале в Datalens была такая фича — материализация. Это когда загруженные данные записывались на внутренние сервера Datalens, то есть делался слепок с данных, и появлялась возможность большого количества обращений к дашборду, то есть не происходили постоянно новые запросы SQL, которые нагружали бы бесплатный Datalens. Это как если товар в магазине продавался бы не с полок, а со склада. То есть продавец за каждым товаром бегал бы на склад. Пока пользователей было немного, серверы наверное вытягивали. Сейчас популярность и нагрузка растет, разработчики задумались над этим и пока экспериментируют.

Для дашбордов, созданных на основе CSV файлов доступен публичный доступ. Допустим, мы собрали информацию/статистику, сделали визуализацию ее на дашборде и хотим поделиться со всеми. Или мы создали дашборд для презентации нашего продукта/бизнеса, мы можем оправить ее любому человеку, и он без установки каких-либо программ может ее просмотреть. И для визуальной презентации нужен только браузер с подключенным интернетом. Удобно же.
Для этого достаточно включить Публичный доступ. Открываем наш дашборд.

image

В левом верхнем углу после символа звездочки нажимаем на ... . В выпавшем меню выбираем Публичный доступ.

image

В открывшемся окне, слева от надписи Доступен по ссылке, переключаем селектор. Во всплывшем окне нажимаем Продолжить.

image

Дашборд и все связанные объекты стали публичными. Справа от селектора появилась Публичная ссылка. Копируем ее, нажимаем Применить.

image

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

Публичный доступ к дашборду из Google Sheets

Публичный доступ к дашборду из Google Sheets в настоящее время можно реализовать только через CSV. Реализуем все по инструкции.

Давайте будем честны. В Google Sheets таблице будет максимум миллион строк (при 5 колонках), объем — не более 100 Мб. Ежедневное добавление строк в Google Sheets не такое существенное, чтобы нельзя было раз в сутки обновить вручную. Если бы было по другому, давно бы перешли на нормальную базу данных. По аналогии с магазином, это все равно, что каждый день возить только длинномером товары в маленький сельский магазин.

Автоматизация

Что в этом процессе можно автоматизировать?

  • получение csv файлов из Google Sheets без открытия самих таблиц;
  • объединение двух и более таблиц в csv по ключевым колонкам;
  • склеивание в один файл csv нескольких одинаковых таблиц (когда кончается лимит на строки в одном документе, заводят следующий и таблица продолжается).

Всем привет!
Взял за основу намеки на решение в одном из ответов к вопросу об этой же задаче, так как мое решение было очень похожим по сути.
Помогите понять, на каком датасете программа отработает не правильно, что бы я мог сам найти ошибку? Я сам напридумывал датасетов, но везде, вроде как, работает корректно.
А вообще, если команда JavaRush это прочтет, то у меня есть пожелание — если программа не проходит валидацию, показывайте хотя бы на каком датасете она не проходит. На ошибке легче учиться, если ты видишь в чем ты ошибаешься :)

package com.javarush.task.task19.task1916;

import javax.sound.sampled.Line;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/*
Отслеживаем изменения
*/

public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();

public static void main(String[] args) throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

BufferedReader fileBufferedReader1 = new BufferedReader(new FileReader(reader.readLine()));
BufferedReader fileBufferedReader2 = new BufferedReader(new FileReader(reader.readLine()));
reader.close();

ArrayList<LineItem> lines = new ArrayList<LineItem>();

ArrayList<String> file1Lines = new ArrayList<>();
ArrayList<String> file2Lines = new ArrayList<>();
//HashSet<String> mergedFiles = new HashSet<>();

while (true){
String line = fileBufferedReader1.readLine();
if (line == null){
break;
}

file1Lines.add(line);
//mergedFiles.add(line);
}

while (true){
String line = fileBufferedReader2.readLine();
if (line == null){
break;
}

file2Lines.add(line);
//mergedFiles.add(line);
}

fileBufferedReader1.close();
fileBufferedReader2.close();

for (int i = 0; i < file1Lines.size() && i < file2Lines.size(); i++){
try{
if (file1Lines.get(i).equals(file2Lines.get(i))){
lines.add(new LineItem(Type.SAME, file2Lines.get(i)));
file1Lines.remove(i);
file2Lines.remove(i);
i—;
}
else if (file1Lines.get(i + 1).equals(file2Lines.get(i))){
lines.add(new LineItem(Type.REMOVED, file1Lines.get(i)));
file1Lines.remove(i);
i—;
}
else if (file1Lines.get(i).equals(file2Lines.get(i + 1))){
lines.add(new LineItem(Type.ADDED, file2Lines.get(i)));
file2Lines.remove(i);
i—;
}
}catch (Exception e){}
}

while (!file1Lines.isEmpty()){
lines.add(new LineItem(Type.REMOVED, file1Lines.get(0)));
file1Lines.remove(0);
}

while (!file2Lines.isEmpty()){
lines.add(new LineItem(Type.ADDED, file2Lines.get(0)));
file2Lines.remove(0);
}

// for (LineItem line: lines){
// System.out.println(line.type + » » + line.line);
// }
}

public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}

public static class LineItem {
public Type type;
public String line;

public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}

только что развернули мой проект на моем сервере отчетов.

У меня есть несколько наборов данных, которые ссылаются на представления, существующие в БД на этом сервере.

когда я пытаюсь войти в любую часть отчета, я получаю это сообщение:

An error has occurred during report processing. (rsProcessingAborted)
Query execution failed for dataset 'dataset1'. (rsErrorExecutingCommand)
For more information about this error navigate to the report server on the local server machine, or enable remote errors 

кто может помочь?

16 ответов


Я включил удаленные ошибки, чтобы определить проблему.

Я определил, что столбец в определенном наборе данных (одно из моих представлений) выдает ошибку.

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

SQL Delta сгенерировал скрипт, который мне нужно было запустить чтобы обновить представление в моей live db.

Я запустил этот скрипт, повторно запустил отчет, все сработало.


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

в Построителе отчетов 3.0, когда я использовал Run кнопка для запуска отчета, появилось предупреждение об ошибке, говоря

An error has occurred during report processing. (rsProcessingAborted)
[OK] [Details...]

нажатие кнопки «подробности» дало мне текстовое поле, в котором я видел этот текст:

For more information about this error navigate to the report server
on the local server machine, or enable remote errors
----------------------------
Query execution failed for dataset 'DataSet1'. (rsErrorExecutingCommand)

Я был смущен и расстроен, потому что в моем отчете не было набора данных с именем’DataSet1‘. Я даже открыл .rdl файл в тексте редактор, чтобы быть уверенным. Через некоторое время я заметил, что в текстовом поле под тем, что я мог прочитать, было больше текста. Полное сообщение об ошибке:

For more information about this error navigate to the report server
on the local server machine, or enable remote errors
----------------------------
Query execution failed for dataset 'DataSet1'. (rsErrorExecutingCommand)

----------------------------
The execution failed for the shared data set 'CustomerDetailsDataSet'.  
(rsDataSetExecutionError)
----------------------------
An error has occurred during report processing. (rsProcessingAborted)

Я сделал имеют общий набор данных с именем ‘CustomerDetailsDataSet‘. Я открыл запрос (который был полным SQL-запросом, введенным в текстовом режиме) в SQL Server Management Studio и запустил его там. Я получил сообщения об ошибках, которые явно указывали на определенную таблицу, где столбец, который я использовал, был переименован и изменен.

от в этот момент было просто изменить мой запрос, чтобы он работал с новым столбцом, а затем вставить эту модификацию в общий набор данных»CustomerDetailsDataSet‘, а затем подтолкните отчет в Построителе отчетов, чтобы распознать изменение общего набора данных.

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


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


Я только что занимался этим же вопросом. Убедитесь, что в запросе указано полное имя источника без использования ярлыков. Visual Studio может распознавать ярлыки, но приложение служб reporting services может не распознавать таблицы, из которых должны поступать данные. Надеюсь, это поможет.


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


У меня была аналогичная проблема с сообщением об ошибке

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

решение:
1) ошибка может быть с набором данных в некоторых случаях вы всегда можете проверить, заполняет ли набор данных точные данные, которые вы ожидаете, перейдя в свойства набора данных и выбрав «конструктор запросов» и попробуйте «выполнить», если вы можете успешно вытащить поля, которые вы ожидаете, то вы можете быть уверены, что нет никаких проблем с набором данных, который приведет нас к следующему решению.

2) несмотря на то, что в сообщении об ошибке говорится «выполнение запроса не удалось для набора данных», другие вероятные шансы связаны с подключением источника данных, убедитесь, что вы подключились к правильному источнику данных, который имеет необходимые таблицы, и у вас есть разрешения на доступ к этому источнику данных.


в моей ситуации, я создал новый отчет SSRS и новую хранимую процедуру для набора данных. Я забыл добавить хранимую процедуру в роль базы данных, которая имела разрешение на ее выполнение. Как только я добавил разрешения на роль базы данных SQL с EXECUTE, все было в порядке!

сообщение об ошибке, обнаруженное пользователем, было » во время отрисовки клиента произошла ошибка. Произошла ошибка при обработке отчета (rsProcessingAborted). Не удалось выполнить запрос для набора данных «Имя dataset1′. (rsErrorExecutingCommand) для получения дополнительной информации…»


решение для меня пришло из GShenanigan:

вам необходимо проверить ваш лог-файлы на сервера SSRS более подробно. Они будут где-то вроде: C:Program файлы (x86)Microsoft SQL ServerMSRS10_50.DEVReporting ServicesLogFiles»

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


У меня также была очень похожая проблема с очень похожим сообщением об ошибке. Моя проблема заключалась в том, что база данных не может быть подключен. В нашем случае у нас есть зеркальные базы данных, и строка подключения не указала партнера по отработке отказа. Поэтому, когда база данных не могла подключиться, она никогда не шла к зеркалу и бросала эту ошибку. Как только я указал партнера по отказоустойчивости в строке подключения для моего источника данных, он решил проблему.


BIGHAP: ПРОСТАЯ РАБОТА ВОКРУГ ЭТОЙ ПРОБЛЕМЫ.

Я столкнулся с той же проблемой при работе со списками SharePoint, что и источник данных, и прочитал блоги выше, которые были очень полезны. Я внес изменения в имена источников данных и объектов данных и поля запросов в Visual Studio, и запрос работал в visual Studio. Я смог развернуть отчет в SharePoint, но когда я попытался открыть его, я получил ту же ошибку.

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

Я перераспределил источник данных, набор данных и отчет в sharePoint, и это сработало.
Как указано в одном из блогов, хотя visual studio разрешила изменения, внесенные мной в dataset и datasource, если вы не настроили visual studio для автоматического повторного развертывания datasource и dataset при развертывании отчета(что может быть опасно, поскольку это может повлиять другие отчеты, которые совместно используют эти объекты) эта ошибка может возникнуть.

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


Я также столкнулся с той же проблемой — я проверил ниже вещи, чтобы исправить эту проблему,

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

  • если есть несколько суб-отчетов по основному отчету, убедитесь, что каждый
    отчет индивидуально работает отлично.

  • также проверьте панель безопасности — пользователь должен иметь доступ к базам данных/
    таблицы / представления / функции для этого доклада.

иногда нам также нужно проверить dataset1 — хранимая процедура. Как будто вы пытаетесь показать отчет с user1 и если у этого пользователя нет access(rights) предоставленной (dataset1 database) база данных, то он будет бросать ту же ошибку, что и выше, поэтому должен проверить пользователь имеет доступ dbreader in SQL-сервер.

кроме того, если эта процедура хранения содержит некоторую другую базу данных (база данных 2) как

Select * from XYZ inner join Database2..Table1 on ... where...

тогда пользователь также должен иметь доступ к этой базе данных.

Примечание: вы можете проверить файлы журнала на этот путь для получения более подробной информации,

C:Program FilesMicrosoft SQL ServerMSRS11.SQLEXPRESSReporting Services

очень благодарен, что я нашел этот отличный пост. Что касается моего случая, у пользователя, выполняющего хранимую процедуру, не было EXECUTE разрешения. Решение предоставить EXECUTE разрешения для пользователя в хранимой процедуре, добавив следующий код в конец хранимой процедуры.

GRANT EXECUTE ON dbo.StoredProcNameHere TO UsernameRunningreports
GO

Я получил ту же ошибку, но это сработало и решило мою проблему

если отчет подключен к серверу Analysis server, предоставьте необходимые разрешения пользователю (который обращается к серверу reporting server для просмотра отчетов) в вашей модели сервера analysis server.
Сделать это Добавить пользователя в роли модели или Куба и разверните модель на сервере analysis server.


использование SSRS, построителя отчетов 3.0, MSSQL 2008 и запрос к базе данных Oracle 11G,
Я обнаружил, что хранимая процедура oracle работает хорошо, дает последовательные результаты без ошибок. Когда я попытался принести данные в SSRS, я получил ошибку, как указано в запросе OP. Я обнаружил, что данные загружаются и отображаются только в том случае, если я удалил параметры (не очень хорошая идея).
При дальнейшем рассмотрении я обнаружил, что в разделе свойства набора данных>параметры я установил дату начала в parameterName P_Start и значение параметра @P_Start.

добавление значения параметра как [@P_Start] очистило проблему, и данные загружаются хорошо, с параметрами на месте.


эта проблема была вызвана потерянным именем входа SQL. Я запустил свой любимый скрипт sp_fixusers, и ошибка была решена. Приведенное выше предложение взглянуть на журналы было хорошим…и это привело меня к ответу.


Это может быть проблема с разрешением для процедуры просмотра или хранения


  • Remove From My Forums
  • Вопрос

  • Здравствуйте, вот сама ошибка:

    Ошибка         
    1         
    «UU.UUDataSet1TableAdapters.Dannie_rab_planaTableAdapter.Private WithEvents _adapter As System.Data.SqlClient.SqlDataAdapter» в этом контексте недоступен, так как является «Private».         
    C:Documents and SettingsbossРабочий стол14 янвUUUUDan_rab_pl.Designer.vb   
    233      9         
    UU

     я так понял, при изменении датасета изменяется и генерированные средой дизайнеры, причём сгенерированный код является private,  и его невозможно использовать удалённо, поэтому и ошибка.

    может быть, есть свойство у датасета, чтобы он генерировал код public?

    пока я вопрос решаю ручным изменением private на public, что неудобно.

Ответы

  • Форма — это тоже класс.

    Попробуйте установить Modifier для Dannie_rab_planaTableAdapter в Public, должно помочь.

    Но, все же, правильнее, с точки зрения архитектуры, использовать отдельный слой доступа к данным со своим интерфейсом.

    • Помечено в качестве ответа

      26 января 2011 г. 14:25

Понравилась статья? Поделить с друзьями:
  • Ошибка нельзя преобразовать тип real к integer
  • Ошибка некорректный бик получателя
  • Ошибка нельзя изменить часть массива excel что делать
  • Ошибка некорректный url
  • Ошибка нексус мод менеджер скайрим unrecognized