Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: SQL запрос фильтр даты на 00 часов.

Добрый день.
Есть таблица с датами, где запись делается каждый час.
Нужно прописать запрос на фильтрацию значений только на 00 часов 00 минут.
Пробовал сделать вот так: where DataDate like '%00:00%' = не работает.

Подскажите пожалуйста как правильно написать запрос?!
Ответ:
Владислав Колосов
kristow,

where hour(d)+minute(d)=0



1) @@version - ?
declare @dt table (id int, dt datetime);
insert into @dt 
values (1, '20160104 00:00:00.555');

select *
from @dt
where hour(dt)+minute(dt)=0 

Msg 195, Level 15, State 10, Line 7
'hour' is not a recognized built-in function name.


2) wrong result
declare @dt table (id int, dt datetime);
insert into @dt 
values (1, '20160104 00:00:00.555');
select *
from @dt
where datepart(HOUR,dt)+datepart(MINUTE,dt)=0 
----
1	2016-01-04 00:00:00.557


3) exclude possible indexes on dt
Вопрос: PowerPivot: расчёт значений вне диапазона фильтра

Добрый день, коллеги.

В PowerPivot есть таблица, сформированная из списка SharePoint:
ИД Имя Дата создания Дата закрытия
1 Заявка 1 04.10.2015 05.10.2015
2 Заявка 2 05.10.2015 06.10.2015
3 Заявка 3 06.10.2015 07.10.2015
4 Заявка 4 07.10.2015 08.10.2015
5 Заявка 5 08.10.2015 09.10.2015

В WorkBook настроен фильтр по "Дате создания", к примеру, он задан с 05.10 по 07.10.
Мы хотим получить количество заявок, "Дата закрытия" которых попадает в установленный диапазон (05.10 <= Дата закрытия >= 07.10).

Но при текущем фильтре Заявка ID=1 отсеется, и мы получим только Заявку 2 и 3.

Вопрос в том, как нам получить ещё и Заявку 1?

Пробовали такие варианты:
Если в PowerPivot применить формулу:
CALCULATE(COUNT([Идентефикатор]);FILTER('Кредиты';'Кредиты'[ДатаЗакрытия]>=MIN('Кредиты'[ДатаСоздания])&&'Кредиты'[ДатаЗакрытия]<=MAX('Кредиты'[ДатаСоздания])))
То, формула возвращает только заявки с "Датой создания" за отфильтрованный период.

Если в этой формуле использовать ALL() (она передаёт всю таблицу без ранее установленных фильтров): CALCULATE(COUNT([Идентефикатор]);FILTER(ALL('Кредиты')…,
То, в этом случае данные берутся без фильтров вообще, т.е. мы получаем весь набор данных.

keywords: PowerPivot, OLAP Tabular mode, SharePoint, PowerPivot Excel, DAX, MDX
Версии: Excel 2013, SQL 2012R2 SP1
Ответ: Добрый день.

Задачу удалось решить через отдельный справочник дат, за что отдельное спасибо 100ts.

Вкратце вся методика решения:
1. В новом WorkBook создаём источник "Из веб-канала данных ODATA"
a. Для удобства работы можно создать отдельный источник данных для основного списка "Кредиты" и для справочников
b. Пример строки подключения для списка "Кредиты":
i. портала/_vti_bin/listdata.svc/Кредиты?$filter=ContentType ne 'Folder'&$top=5000&$orderby=ДатаСоздания desc
c. При создании источников данных выбираем "Создание таблицы", после чего она автоматически добавляются в WorkBook и в PowerPivot как источник данных
d. Плюс этого решения в том, что при необходимости изменить строку подключения, открываем файл источника данных (расположение смотри в WorkBook Данные - Существующие подключения) и изменяем в текстовом редакторе. После чего данные сразу можно обновить как в WorkBook, так и в PowerPivot
2. Справочник "Календарь" был добавлен вручную и также вручную был добавлен в PP как источник данных
3. В PowerPivot добавили связи "ДатаСоздания" - "Datekey" и "ДатаЗакрытия" - "Datekey"
4. Все зависимые от фильтра дат формулы переделали по следующему шаблону:
a. Было
i. CALCULATE(COUNTROWS(['Кредиты']);FILTER(ALL('Кредиты');DATEVALUE('Кредиты'[ДатаЗакрытия])>=DATEVALUE(MIN('Кредиты'[ДатаСоздания]))&&DATEVALUE('Кредиты'[ДатаЗакрытия])<=DATEVALUE(MAX('Кредиты'[ДатаСоздания]))))
b. Стало
i. CALCULATE(COUNTROWS('Кредиты');USERELATIONSHIP('Кредиты'[ДатаСоздания];'Календарь'[Datekey]))
5. Сводную таблицу сделали так:
a. В "∑ значения" вывели меры
b. В "Строки" вывели "∑ значения"
c. В "Колонны" вывели "Datekey"
d. Фильтр дат сделали по "Datekey"

В итоге формулы, зависимые от фильтра дат по "ДатеСоздания" и по "ДатеЗакрытия" считаются верно и не мешают друг другу.


Всем спасибо!!!
Вопрос: Выборка дат нестабильна, выдаёт различное количество результатов

Здравствуйте! Имеется таблица с полем, в котором хранятся даты в полном формате (например, "04.09.2015 10:44:30"). Пытаюсь отобрать записи через Datevalue за определенный период (например, квартал), каждый раз выдает разное количество записей (плюс-минус несколько записей). Такая же история если ставлю в таблице фильтр дат. В чем причина?
Ответ: snipe, но почему в таком случае каждый раз
Сообщение от snipe
условие отбора преобразуется на начало дня
по-разному???

Добавлено через 2 минуты
А по поводу преобразования - пробовала через datevalue -результат тот же
Вопрос: obiee analytics / дата по умолчанию

Всем доброго времени суток!
Помогите установить в фильтр дату по умолчанию (последний день текущего месяца).
Сейчас приходить жестко выбирать из календаря...

К сообщению приложен файл. Размер - 112Kb
Ответ:
bishnike
evgeniy_s,

почитайте про переменные сервера/репозитория.

Или разберитесь как писать правильно логический sql.

Образно, в отличии от возможностей BIP в репозитории вы можете создавать свои собственные переменные различной сложности.
А после использовать их в ансверах или пломптах.

Необходимо создать инициализационный блок в Variable Manager, например с sql кодом "select trunc(last_day(sysdate) from dual"
записать результаты в переменную, а потом из промпта использовать как дефолтное значение (там есть возможность использовать переменную сервера).

Спасибо!
Не сразу, но разобрался.
Вопрос: Как засунуть это условие по дате в фильтр?

Делаю фильтрацию по отчёту. Столкнулся с проблемой даты. Я уже сталкивался, и есть опыт создания такого фильтра:

Visual Basic
1
СТРОКА_ФИЛЬТРА = СТРОКА_ФИЛЬТРА & IIf(СТРОКА_ФИЛЬТРА = "", "Дата <= #" & Format(Me.ДатаПолеПо, "mm\/dd\/yyyy") & "#", " AND Дата <= #" & Format(Me.ДатаПолеПо, "mm\/dd\/yyyy") & "# ")
То есть тут фильтруется по условию:
Visual Basic
1
Дата <= #" & Format(Me.ДатаПолеПо, "mm\/dd\/yyyy") & "#
А мне в фильтр надо теперь засунуть другое условие, условие которое позволит просмотреть данные по текущему кварталу:
Visual Basic
1
Year([Дата]) = Year(Now()) And DatePart("q"; Date()) = DatePart("q"; Now())
такое не срабатывает:
Visual Basic
1
СТРОКА_ФИЛЬТРА = СТРОКА_ФИЛЬТРА & IIf(СТРОКА_ФИЛЬТРА = "", "Year([Дата]) = Year(Now()) And DatePart("q"; Date()) = DatePart("q"; Now())", " AND Year([Дата]) = Year(Now()) And DatePart("q"; Date()) = DatePart("q"; Now())")
Ответ: mobile, ох ё, сейчас попробую переварить

Добавлено через 5 минут
Сообщение от mobile
Visual Basic
1
2
СТРОКА_ФИЛЬТРА = iif(Nz(СТРОКА_ФИЛЬТРА,"")<>"", " and True ", СТРОКА_ФИЛЬТРА & " True ")
СТРОКА_ФИЛЬТРА=СТРОКА_ФИЛЬТРА & " and Year([Дата])=Year(Date()) And DatePart("q", Date()) = DatePart("q", [Дата])"
А для чего вообще нужно " and True " и " True "?
Это же тогда фильтр в случае если строка была пустой будет:
Visual Basic
1
"True and Year([Дата])=Year(Date()) And DatePart("q", Date()) = DatePart("q", [Дата])"
Добавлено через 8 минут
Нашёл проблему, она оказалась в кавычках: "q".
Заменил на: 'q' и заработало.

Итоговый вариант:
Visual Basic
1
        СТРОКА_ФИЛЬТРА = СТРОКА_ФИЛЬТРА & IIf(СТРОКА_ФИЛЬТРА = "", "Year([Дата])=Year(Date()) And DatePart('q', Date()) = DatePart('q', [Дата])", " AND Year([Дата])=Year(Date()) And DatePart('q', Date()) = DatePart('q', [Дата])")
Вопрос: Как "закрасить" результаты фильтра в форме

Добрый день. Есть форма. Сверху поля со списком, внизу табличная. Куча полей. Условия отбора по многим полям. Как сделать так чтобы результаты фильтра показывались другим цветом?
Ответ:
Сообщение от Capricorn
Да. И как отменить потом эту закраску? А то они до сих пор красные.
При сбросе фильтра должны быть убиты. Это когда у тебя поля фильтров пустые.
Visual Basic
1
2
3
4
5
6
7
             With .FormatConditions
                        If .Count > 0 Then .Delete'оттута условия УФ удаляются
                        If Me.FilterOn  then'а оттута назначаются по новой, если фильтр включён
                            With .Add(1, , vArray(i) & strCriteria)
                                .BackColor = RGB(255, 0, 0)
                            End With
                        End if
По крайней мере так задумывалось...

Добавлено через 7 минут
Сообщение от Capricorn
Если можно еще один вопросик. Не по этой теме. Как объединить два условия фильтра. Сверху есть запись где видно. Просто работает или по названиям или по датам. А если выбирать даты у конкретного названия не работает. В чем там ошибка. Я по разному уже пытался все равно никак.
Да можно, что ж нельзя...
Только я не понял вопроса. У тебя же объединены условия в фильтре. Или что?...
Вопрос: new_data > дата партицирования - 2. Фильтр по new_data и отсечь часть партиций для скана?

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

Есть табличка, партицирована по дате Date1. Создали новую дату Date2, которая по сути является датой Date1, но в другом часовом поясе. Если пользователь выбирает фильтр по Date1, можно как-нибудь ораклу подсказать что Date2 связано с Date1, ну к примеру Date2> Date1 - 2? Т.е. чтобы оракл сканил НЕ все партиции. Я выход не знаю, но может есть что-то о чем стоило бы знать? Констрэйнт не поможет, дименшн тоже не то. Не знаю в общем.

Индекс, чтобы хоть как-то это двигалось понятно. Но что-то такое одноблочное чтение и что такое многоблочное чтение когда речь о млн. строк.
Ответ:
andrey_anonymous
Pavel_PV
Есть табличка, партицирована по дате Date1.
...
Если пользователь выбирает фильтр по Date1
...
чтобы оракл сканил НЕ все партиции

Ммм?

оговорочка конечно )

Andrey.L , пояс у нас не константа, сейчас 4 часа, 2.5 года назад уже 3 часа. Но это не важно, я ещё до создания темы проверял и с виртуальными колонками так же ничего не взлетает.
Вопрос: Динамический фильтр вложенного отчета в форме

Форма КассаОтчет+Доб (в форме main открывается с кнопки "Кассовая книга"), в ней встроен отчет.
Нужно:
1) чтобы фильтровало по дате, которая задается в полях формы справа от отчета. Надо чтобы динамически изменялись данные в отчете по изменению одной из дат периода
2) чтобы "Текущий остаток" учитывал при этом данные за период, который окажется за пределами фильтра и выдавал правильную цифру, а не только считал только то что по фильтру отображается
3) как сделать так чтобы отчет сразу перескакивал к концу списка?
4) правильно сделать динамический фильтр только по "приходу" или "расходу" или по "описанию"?
Ответ:
Сообщение от normander
К примеру Me.FilterOn = True что это?
Сообщение от normander
У меня две даты, начало и конец периода.
1)Вкл и выкл
2) Between
Вопрос: Access VBA не срабатывает фильтр

Добрый день!

Делаю свою БД в акцесс 2007, там конечно есть все нужные команды на панели управления, но хотелось бы сделать именно свое управление.

Есть форма "ф_Задания", в ней , в первой вкладке, выведены поля из таблицы "таб_Задания". Во второй вкладке выведена сама таблица "таб_Задания", которая фильтрует записи по дате задания: Основные и подчиненные поля [ДатаЗадания]

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

Dim xXx As Date

Private Sub btnFilter_Click()
xXx = [txtfilterDat] 'поле выбора нужной даты. выбор осуществляется во встроенном календаре
With Me
FilterOn = False
.Filter = (ДатаЗадания = xXx)
.FilterOn = True
.Задания.Requery 'обновляем таблицу
End With
End Sub

судя по всем описаниям должно работать как часики, а у меня почему то [ДатаЗадания] постоянно Null
пробовал:
.Filter = "Forms!ф_Задания!ДатаЗадания = Forms!ф_Задания!txtfilterDat"
.Filter = "Forms!ф_Задания!ДатаЗадания = txtfilterDat"
.Filter = "Forms!ф_Задания!ДатаЗадания = xXx"
результат "ДатаЗадания" то Null, то 0:00:00

Объясните плиз где ошибка.
Есть проблема - не понимаю по англ. ни гу-гу даже со словарем, наверное потому и мучаюсь
Ответ: я не до конца поняла, методом фильтра это возможно?
Вопрос: Как правильно перевести MDX в CM (ф-ция rank по пользовательским фильтрам) a SSAS

SSAS 2012.
Мне нужно в кубе реализовать СМ, который показывал бы рейтинг товара. В чистом MDX это выглядит так:
with set [ordered] as 
	order([Item].[Item Name].[Item Name].members,[Measures].[Грн],bdesc)
member [Measures].[Rank] as 
	RANK([Item].[Item Name].CurrentMember,[ordered])

select 
{[Measures].[Rank] } on 0,
non empty {[ordered]} on 1
from [Morion]
where 
([Store].[Store Name].&[Магазин№1],[Дата].[Календарь].[Месяц].&[3-й кв.]&[2015]&[Август])

Магазин и период пользователи должны выбирать сами фильтрами в Excel (товар в строках в макете таблицы). Я не могу понять как это запихнуть в СМ, чтобы он реагировал на пользовательские фильтры.
Пробовал так:
CREATE MEMBER CURRENTCUBE.[Measures].[Рейтинг грн]
 AS 

RANK([Item].[Item Name].CurrentMember,
        order([Item].[Item Name].[Item Name].members,
                [Measures].[Грн],bdesc))

но запрос выполнятся так долго, что Excel выбивает ошибку, что не дождался ответа (хотя сделал маленький тестовый куб с мерой в 2,1 Мб).

Если делать кортежем
([Item].[Item Name].CurrentMember,[Store].[Store Name].CurrentMember,[Дата].[Календарь].[Месяц].CurrentMember)
, то Excel просто в СМ выводит "#ЗНАЧ"
Ответ: mihami,
Простите, а что такое СМ?


Выводите [Store].[Store Name] и [Дата].[Календарь].[Месяц] на оси, и пусть выводится вся простыня в Excel а пользователи
потом уже фильтруют.