Страницы: 1
RSS
PQ; Соотношение даты к определенному диапозону
 
Добрый день!
Поставили задачу, как ее решить посредством формул знаю, но как это прописать в PQ не понимаю.
Поиском пользовался, результат только обычными средствами.
Требуется: Определить к какой декаде относится дата.

Пример приложил и указал как это делается с помощью формул.
Вопрос еще стоит в контрольной точке (только в 1 декаде вопрос, т.к. через if-then можно на 2,3 прописать), хотя возможно нужно создавать дополнительную тему  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Ну, столбец с декадами это фигня.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Тип = Table.TransformColumnTypes(Источник,{{"источник", type date}}),
    ДобСтолб = Table.AddColumn(Тип, "Декада", each Text.From( List.Min({ 3, Number.IntegerDivide(Date.Day([источник]), 10) + 1 })) & " декада" & Date.ToText([источник],"MMMM") )
in
    ДобСтолб

А вот алгоритм получения контрольной точки от меня ускользает, ковырять вашу формулу на 200 знаков желания особо нету. Можете на пальцах объяснить что за алгоритм?
Изменено: PooHkrd - 05.02.2019 16:04:14
Вот горшок пустой, он предмет простой...
 
PooHkrd,
1 декада: 1-10 каждого месяца
2 декада: 11-20 каждого месяца
3 декада 21-30 (31 или 28) каждого месяца
Контрольная точка  - это начало декады минус 6 дней
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
Контрольная точка  - это начало декады минус 6 дней
Если для такого описания то вот так. Но с вашими формулами в Excel результаты не бьются. Хотя, если алгоритм расчетов понятен, то думаю сами допилите:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Тип = Table.TransformColumnTypes(Источник,{{"источник", type date}}),
    ДобСтолб = Table.AddColumn(Тип, "Декада", each Text.From( List.Min({ 3, Number.IntegerDivide(Date.Day([источник]), 10) + 1 }) ) & " декада" & Date.ToText([источник],"MMMM") ),
    ДобСтолб2 = Table.AddColumn(ДобСтолб, "Контрольная точка", each #date(Date.Year([источник]), Date.Month([источник]), 10 * List.Min({ 3, Number.IntegerDivide(Date.Day([источник]), 10) + 1 }) - 9 ) - #duration(6,0,0,0), type date)
in
    ДобСтолб2
Изменено: PooHkrd - 05.02.2019 16:17:35
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Text.From( List.Min({ 3, Number.IntegerDivide(Date.Day([источник]), 10) + 1 }))
Привет, Алексей.
Улыбнуло :) , а почему не по классике?
Код
Text.From( Number.IntegerDivide(Date.Day([источник]) - 1, 10) + 1 )
 
PooHkrd, Спасибо большое!
Цитата
PooHkrd написал:
езультаты не бьются

Буду разбираться, сейчас нашел несоответствие - попробую сам исправить
10.06.20182 декадаИюнь05.06.2018
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Хотел похвастаться, что сам разобрался
Код
Number.IntegerDivide(Date.Day([источник])-1, 10) + 1 }) 
но Андрей VG, уже указал :)
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Андрей VG написал:
а почему не по классике?
Потому что не читал классику.  :D Моя формула еще и во втором столбце сбоит, а классика работает. Спасибо Андрей.
Александр, правильный вариант:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Тип = Table.TransformColumnTypes(Источник,{{"источник", type date}}),
    ДобСтолб = Table.AddColumn(Тип, "Декада", each Text.From( Number.IntegerDivide(Date.Day([источник]) - 1, 10) + 1 ) & " декада" & Date.ToText([источник],"MMMM") ),
    ДобСтолб2 = Table.AddColumn(ДобСтолб, "Контрольная точка", each #date(Date.Year([источник]), Date.Month([источник]), 10 * (Number.IntegerDivide(Date.Day([источник]) - 1, 10) + 1) - 9 ) - #duration(6,0,0,0), type date)
in
    ДобСтолб2
Вот горшок пустой, он предмет простой...
 
PooHkrd, Да, я уже полностью разобрал код и понял.
Когда знаешь, все так элементарно :) спасибо еще раз.  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
Страницы: 1
Наверх