Страницы: 1 2 След.
RSS
Номер недели в power bi отображается со смещением на неделю по сравнению с обычным календарем
 
В приложении есть картинка в которой видно смещение  
 
в power bi например ноябрь начинается с 45 недели а в календаре с 44
 
45 неделя в 2017 году начинается с 30 октября. т.е 1 ноября в 45-й неделе
используемый Вами календарь "кривоват"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Первая неделя года - та, в которой первый четверг года. Т.е. если 3 января - Вс, то первые три дня года в счет недель не входят (или, если хотите, нулевая неделя)
 
http://www.kalendar-365.ru/2017
тоже думаю что power bi умнее гугла но вот ссылка http://www.kalendar-365.ru/2017 на календарь в котором чуть по другому да и запрос в гугл "календарь с неделями " показывает все календари в которых ноябрь начинается с 44 й недели
 
01.01.17 - Вс. Игнорируем этот день.
=("01.11.17"-"02.01.17"+1)/7 = 43,429. Отсюда - 01.11.17 находится в 44 неделе года. Что тут непонятного?

А вот если считать первый день года в первой неделе, то конечно - 45. Но так не считают.
Из ВИКИ:
Цитата
В США и Канаде принят другой принцип нумерации календарных недель. В основе лежат следующие два правила:
каждое воскресенье начинается новая календарная неделя...
Даже если сдвинуть на один день назад (учитывать 01 января), все равно начало ноября в 44 неделе
 
Доброе время суток
Цитата
vikttur написал:
Первая неделя года - та, в которой первый четверг года. Т.е. если 3 января - Вс, то первые три дня года в счет недель не входят (или, если хотите, нулевая неделя)
Power Query прост как три копейки первая неделя может состоять из одного дня. Если есть такое замечательное правило, то корректируем. В чём проблема-то спора?
Код
let
    dateTable = Table.FromColumns({List.Dates(#date(2017, 1, 1), 365, #duration(1, 0, 0, 0))}, {"Date"}),
    addDayOfYear = Table.AddColumn(dateTable, "DayOfYear", each Date.DayOfYear([Date])),
    addWeekOfYear = Table.AddColumn(addDayOfYear, "WeekOfYear", each Date.WeekOfYear([Date])),
    addDayOfWeek = Table.AddColumn(addWeekOfYear, "DayOfWeek", each Date.DayOfWeek([Date], Day.Monday)),
    correctVal = 1 - Table.Min(addDayOfWeek, (a, b) => if a[DayOfWeek] = 3 and a[DayOfYear] < b[DayOfYear] then -1 else 1)[WeekOfYear],
    corrected = Table.TransformColumns(addDayOfWeek, {"WeekOfYear", each _ + correctVal})
in
    corrected
 
однако...
НОМНЕДЕЛИ(1.1.2017;2) - возвращает 1 (это было воскресенье)
хотя по правилу написаному Виктором и я такое знаю 01.01.2017 - это должна быть 53 неделя 2016 года
соотв. 02.01.2017 НОМНЕДЕЛИ определил как 2-ю неделю и т.д. недели идут по порядку, согласно которого 1.11.2017 оказалось в 45 неделе

предположу, что power bi пользуется тем же алгоритмом что и НОМНЕДЕЛИ, и похоже закосячили программисты Мicrosoft
Изменено: Ігор Гончаренко - 12.12.2017 21:33:50
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
vikttur написал:
43,429. Отсюда - 01.11.17 находится в 44 неделе года
Тогда по логике такого округления, пусть 1 января пятница (не воскресенье - не выкидываем). 2 января - 1 января = 1 / 7 = 0,143 - 1 неделя? чем 0,143 хуже чем 0429? Первое правило логично, пример не очень.
 
Интересно...
А есть правило последней недели года? Тоже с четвергом, наверное. Иначе можно такого понасчитать...
Если эти смещения не учитывать, то суммируя недели двух лет, получим на одну неделю больше
 
Виктор,
я разбирался как-то с номерами недель и вычитал, если Новый год начинается пятницы или позже, то эти дни относятся к последней неделе прошлого года
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Во! Такое же правило четверга. Значит, все верно и задвоения переходной недели не будет.
 
Цитата
Ігор Гончаренко написал:
то эти дни относятся к последней неделе прошлого года
Игорь, спасибо за информацию.
 
OFF:
Цитата
Андрей VG написал:
Power Query прост как три копейки
ну, как бы, не для всех и точно не сразу  :D
Изменено: Jack Famous - 12.12.2017 22:05:38
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ну, если обратиться к первоисточникам, то:

Цитата

Согласно рекомендациям международного стандарта ISO 8601 (пункт 2.2.10[2]),  который признают подавляющее большинство стран Европы и Азии, и Россия в  том числе, первой неделей года считается неделя, содержащая первый четверг года, что эквивалентно следующим выражениям:

  • неделя, содержащая 4 января;
  • неделя, в которой 1 января это понедельник, вторник, среда или четверг;
  • неделя, которая содержит как минимум четыре дня нового года.

В США и Канаде принят другой принцип нумерации календарных недель. В основе лежат следующие два правила:

  • каждое воскресенье начинается новая календарная неделя;
  • 1 января, независимо от дня недели, начинается первая календарная неделя.
По умолчанию во всем софте американского производства недели нумеруются по их системе, а не по ISO.
Кстати, в Excel 2016 имеется также формула НОМНЕДЕЛИ.ISO(). А вот как решить вопрос PowerBI уже указал Андрей VG.
Изменено: PooHkrd - 13.12.2017 08:46:42
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал: неделя, в которой 1 января это понедельник, вторник, среда или четверг;
OFF НА УДАЛЕНИЕ, заклинило -" Уверены?Или - четверг, пятница, суббота, воскресенье?.."
ps В формулах, например, точнее будет указывать не =НОМНЕДЕЛИ(1.1.2017;2), а НОМНЕДЕЛИ(1.1.2017;21).
Изменено: Z - 14.12.2017 13:45:33
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Ну вот такой вот он источник эта Педивикия.
Вот выдержка из стандарта, без авторских добавлений:
Цитата
2.2.10
calendar week number
ordinal  number  which  identifies  a  calendar  week  within  its  calendar  year  according  to  the  rule  that  the  first  
calendar  week  of  a  year  is  that  one  which  includes  the  first  Thursday  of  that  year  and  that  the  last  calendar  
week of a calendar year is the week immediately preceding the first calendar week of the next calendar year
Предлагаю ориентироваться на неё.
Вот горшок пустой, он предмет простой...
 
Z,
спасибо!
с параметром 21 - все на своих местах (запрашивал с 2 - получал согласно 2)
знания, что в некоторых формулах нужно писать с какого дня начинается неделя - уже считал глубокими, но в отношении НОМНЕДЕЛИ они оказалисть поверхностными(( нужно было дочитать параметры до конца и поэкспериментировать с ними
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
я вот как сделал в power bi  - добавить вычисляемый столбец и к столбцу  "неделя"  по стандартам США отнял  "1", но это так чтобы быстро закрыть вопрос.
а может где то   в параметрах есть возможность выбрать  "ISO 8601" или "стандарт США и Канада" и чтобы  power bi сам вычислял первую неделю.????
Изменено: Oleg dashenko - 13.12.2017 15:50:29
 
Цитата
Андрей VG написал:
let    dateTable = Table.FromColumns({List.Dates(#date(2017, 1, 1), 365, #duration(1, 0, 0, 0))}, {"Date"}),    addDayOfYear = Table.AddColumn(dateTable, "DayOfYear", each Date.DayOfYear([Date])),    addWeekOfYear = Table.AddColumn(addDayOfYear, "WeekOfYear", each Date.WeekOfYear([Date])),    addDayOfWeek = Table.AddColumn(addWeekOfYear, "DayOfWeek", each Date.DayOfWeek([Date], Day.Monday)),    correctVal = 1 - Table.Min(addDayOfWeek, (a, b) => if a[DayOfWeek] = 3 and a[DayOfYear] < b[DayOfYear] then -1 else 1)[WeekOfYear],    corrected = Table.TransformColumns(addDayOfWeek, {"WeekOfYear", each _ + correctVal})in    corrected

Андрей, подскажите  как это  можно использовать для моего запроса
Код
:let
    Источник = Excel.Workbook(File.Contents("C:\Users\Oleg\Desktop\ПДО\ФОРМА НЕДЕЛЬНОГО ОТЧЕТА ПДО.xlsx"), null, true),
    #"ПРОТОКОЛ план-наряд-сдача_Sheet" = Источник{[Item="ПРОТОКОЛ план-наряд-сдача",Kind="Sheet"]}[Data],
    #"Повышенные заголовки" = Table.PromoteHeaders(#"ПРОТОКОЛ план-наряд-сдача_Sheet", [PromoteAllScalars=true]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Дата", type date}, {"Цех", type text}, {"Численность основных рабочих, чел.", Int64.Type}, {"Объем тов.прод. в н/ч (Ч х Фр.вр.) ", Int64.Type}, {"план н/ч", type number}, {"фактическое закрытие по нарядам (1С)н/ч", type number}, {"фактическая сдача (1С) н/ч", Int64.Type}, {"Причины невыполненения сдачи по н/ч", type text}}),
    #"Дублированный столбец" = Table.DuplicateColumn(#"Измененный тип", "Дата", "Копия Дата"),
    #"Вычисленная неделя года" = Table.TransformColumns(#"Дублированный столбец",{{"Копия Дата", Date.WeekOfYear, Int64.Type}}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Вычисленная неделя года",{{"Копия Дата", "Неделя"}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Переименованные столбцы", "Пользовательская", each [Неделя]+1),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Добавлен пользовательский объект",{{"Пользовательская", "НЕДЕЛЯ  ISO 8601"}})
in
    #"Переименованные столбцы1"
 
Можете получить поправку в номер недели года такой UDF-функцией
Код
    getWeekOfYearAddValue = (year as number) as number =>
    let
        weekNums = List.Generate(()=> [date=#date(year, 1, 1), week=Date.WeekOfYear(#date(year, 1, 1))], 
            each Date.DayOfWeek([date], Day.Monday) <> 3,
            each [date=Date.AddDays([date], 1), week=Date.WeekOfYear(Date.AddDays([date], 1))],
            each [week])
    in
        1 - List.Last(weekNums)

Успехов.
 
Или какая функция в DAX соответствует функции  НОМЕР НЕДЕЛИ.
 
Цитата
Oleg dashenko написал:
а может где то   в параметрах есть возможность выбрать  "ISO 8601"
Нет, вариант генерации календаря с ISO. Кто ищет, тот найдёт. Кто не найдёт, тот сделает.
Изменено: Андрей VG - 13.12.2017 14:58:49
 
в 2016  есть функция  НОМНЕДЕЛИ.ISO(дата) которая работает так же как и НОМНЕДЕЛИ (дата;21) с индексом 21
 
Цитата
Oleg dashenko написал: в 2016  есть функция  НОМНЕДЕЛИ.ISO
Цитата
PooHkrd написал: Кстати, в Excel 2016 имеется также формула НОМНЕДЕЛИ.ISO().
См. #15 и #24 :)
Изменено: Z - 13.12.2017 16:08:44
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
Z написал:
См. #15 и #24
Да, невнимательно как то получилось :))
Изменено: Oleg dashenko - 13.12.2017 17:01:44
 
Цитата
Андрей VG написал:
Нет, вариант генерации календаря с  ISO . Кто ищет, тот найдёт. Кто не найдёт, тот сделает.
Очень круто. Но скоро появится такая панель уже идет сбор голосов на ее разработку
 
Ребята спасибо! вопрос раскрыт теперь все понятно! И календарики из гугл правы и power bi прав, только каждый на своей территории ))))
 
Цитата
Oleg dashenko написал:
Но скоро появится такая панель уже идет сбор голосов на ее разработку
Свежо предание. На регулярные выражения тоже было голосование... :(
 
Цитата
Андрей VG написал:
Свежо предание. На регулярные выражения тоже было голосование...
Андрей, верим ,  надеемся  и ждем )))) . главное  что в данном вопросе разобрались и в принципе пока что можно прожить и без панельки)))
Страницы: 1 2 След.
Читают тему
Наверх