Элемент управления MS Chart - оптимизировать метод отображения столбцов с нулевым значением Y для типа линейной диаграммы - PullRequest
0 голосов
/ 17 июня 2010

Я использую расширения Microsoft Chart, которые поставляются с VS 2010. Это хорошо соответствует моим потребностям, но я столкнулся с раздражением и ищу более элегантное решение.

При построении линейного графикаЧтобы получить непрерывную линию, мне нужны данные для всех X координат.Мой набор данных относится к числу продаж по сотрудникам по месяцам, где счетчик продаж равен Y, а месяц - X. Проблема возникает в том случае, если данные для значения X не возвращаются (т. Е. Сотрудник снял месяц) ...линия не является непрерывной.

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

Я использую хранимую процедуру в MS SQL для создания своего набора данных, где каждый столбец - это месяц, а каждая строка - для сотрудника.Затем я создаю новую серию в элементе управления Chart для каждого сотрудника.

Чтобы зафиксировать месяцы нулевых продаж, я создал временную таблицу в SQL.

CREATE TABLE @tblMonth (myMonth nvarchar(10), defaultCount int)
INSERT INTO @tblMonth VALUES (‘January’, 0)
…
INSERT INTO @tblMonth VALUES (‘December’, 0)

Затем я выполняюобъединение моей временной таблицы с моей реальной записью данных и использование

ISNULL (realData.Count, tblMonth.defaultCount) 

, чтобы получить мои «фальшивые» данные о нулевых продажах.

Это работает ... но ЧУВСТВУЕТ меня очень глупо ... Я могуне могу помочь, но чувствую, что упустил что-то простое, что лучше бы соответствовало моим целям.Опять же, у меня это работает ... но я всегда ищу лучшие способы ведения дел и расширяю свою базу знаний ... так что, если у кого-то есть предложения о том, как лучше выполнить вышеизложенное, я хотел бы получить некоторые предложения или отзывы.

1 Ответ

0 голосов
/ 02 июля 2010

Если tblMonth.DefaultCount всегда будет равен нулю, то почему бы и нет:

ISNULL (realData.Count, 0)

Вот, как я предполагаю, ваш запрос выглядит так:

SELECT
  sales_month = DATENAME ( month, s.sale_date )
  , sales_month_n = DATEPART( month, s.sale_date)
  , salesperson = e.employee_name
  , numb_of_sales = COUNT ( 1 )

FROM
 sales s
 JOIN employee e
   ON s.employee_id_salesperson = e.employee_id
WHERE s.sale_date >= '1/1/2010' and s.sale_date < '1/1/2011'
GROUP BY 
  DATENAME ( month, s.sale_date ), e.employee_name, DATEPART( month, s.sale_date)

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

CREATE TABLE @tblMonth (myMonth nvarchar(10), n tinyint) 
    INSERT INTO @tblMonth VALUES ('January', 1) 
    ... 
    INSERT INTO @tblMonth VALUES ('December', 12)


SELECT
    all_possibles.sales_month
    , all_possibles.salesperson
    , ISNULL ( actual.numb_of_sales, 0 )
FROM 
    (
        SELECT
          sales_month = myMonth
          , sales_month_n = n
          , salesperson = e.employee_name
        FROM
            employee e
            ,@tblMonth M
    )all_possibles
    LEFT JOIN 
    (
        SELECT
          sales_month_n = DATEPART( month, s.sale_date)
          , salesperson = e.employee_name
          , numb_of_sales = COUNT ( 1 )
        FROM
         sales s
         JOIN employee e
           ON s.employee_id_salesperson = e.employee_id
        WHERE s.sale_date >= '1/1/2010' and s.sale_date < '1/1/2011'
        GROUP BY 
           e.employee_name, DATEPART( month, s.sale_date)
    )actuals
        ON 
        (
            all_possibles.salesperson = actuals.salesperson
            AND all_possibles.sales_month_n = actuals.sales_month_n
        )

Извините за длинный сложный ответ.Надеюсь, вы уверены, что вы на правильном пути.Удачи!

Что касается kludgy - вместо @tblMonth я использую постоянные таблицы в базе данных утилит / ресурсов.он уже заполнен такими вещами, как запись для каждой минуты дня или, в данном случае, запись для каждого месяца в году.Эти типы таблиц забывают, как они называются - может быть, форма таблицы фактов?ОЧЕНЬ полезны при поиске или заполнении пробелов в данных.

...