DATEDIFF 복귀 만들기 | Power Query
5591 단어 PowerBIExcelPowerQuery
2020/2/11 갱신 : 에러 발행이나 인수의 드롭 다운등에 대응한 버젼을 추가했습니다.
공식 함수에 없지만 Power Query 내에서 처리하는 경우 경과 연월이 필요할 수 있습니다.
개인적으로는 월수가 나오고 싶기 때문에, 만들고 있었습니다.
코드
인수의 interval에는 y, m, d의 3 종류를 넣거나 생략해 주세요.
인터벌을 넣지 않는 경우는, 연・월・일의 3종류 각각의 베이스로의 결과를 돌려주는 사양으로 해 보았습니다.
필요 없을까.
※클릭하면 열립니다.
코드 1
(date1 as date,date2 as date,optional interval as text)=>
//check the argument―"interval"
if List.Contains({"y","m","d",null},interval) then
let
Difference =[Year =Date.Year(date2)-Date.Year(date1),
Month =Date.Month(date2)-Date.Month(date1),
day =Date.Day(date2)-Date.Day(date1)],
MonthAdjustment= if Difference[day]<0 then -1 else 0,
Answers =[
d = Duration.Days(date2-date1),
m = Difference[Year]*12+Difference[Month]+MonthAdjustment,
y = Difference[Year]
+(if (Difference[Month]+MonthAdjustment) <0 then -1 else 0)
],
Answer = if interval =null then Answers
else Record.Field(Answers,interval)
in
Answer
else "intervalはy,m,dのいずれかを指定するか、省略してください。"
메모
추기분
공부하고 나서 손을 넣었습니다. 코드가 길지만 반 정도는 설례 등에 의한 것입니다.
덧붙여 Excel의 워크 시트와 같이, 예상외의 인수가 들어갔을 경우에는 에러 처리하도록 수정했습니다.
코드 2(강화판)
fx_DateDiff_PQ
let
BodyOfFunction=
(date1 as date,date2 as date, optional interval as text)=>
let
Difference =[Year =Date.Year(date2)-Date.Year(date1),
Month =Date.Month(date2)-Date.Month(date1),
day =Date.Day(date2)-Date.Day(date1)],
MonthAdjustment= if Difference[day]<0 then -1 else 0,
Answers =[
d = Duration.Days(date2-date1),
m = Difference[Year]*12+Difference[Month]+MonthAdjustment,
y = Difference[Year]
+(if (Difference[Month]+MonthAdjustment) <0 then -1 else 0)
],
Answer = if (date1<=date2) and List.Contains({"y","m","d",null},interval) then
if interval =null then Answers
//2020/9/7修正
else Record.Field(Answers,interval)
else ...
in
Answer,
//3番目の引数に係るドロップダウンリストを定義
IntervalType =type text
meta [Documentation.AllowedValues = {"y","m","d"}],
//関数自体の説明書き,設例
NewFunctionType =type function(date1 as date,date2 as date, optional interval as IntervalType) as any
meta[Documentation.Name ="fx_DateDiff_PQ",
Documentation.LongDescription=
"<code>date1</code>から<code>date2</code>の期間に係るデータを取り出します。"
& "<code>interval</code>を省略した場合は、年月日の3種類すべての結果をレコードで返します。",
Documentation.Examples=
{
[
Description="2019/12/29から2020/2/29の月数を求めます。日の部分が同じため丁度2か月扱いとなります。",
Code ="fx_DateDiff_PQ(#date(2019,12,29),#date(2020,2,29),""m"")",
Result ="2"
],
[
Description="2019/12/29から2020/2/29の期間情報を求めます。<code>interval</code>を省略します。",
Code ="fx_DateDiff_PQ(#date(2019,12,29),#date(2020,2,29))",
Result ="[d=62,m=2,y=0]"
]
}
],
ReplaceType =Value.ReplaceType(BodyOfFunction,NewFunctionType)
in
ReplaceType
완성의 모습
강화판의 함수는, 상세 에디터에 붙이면 이런 느낌이 됩니다.
참고
드롭다운은 UI 상의 이야기만으로, 거기에 규정하고 있지 않은 값도 받아들이게 되어 버립니다.
그 때문에, 드롭 다운 처리와는 별도로, 에러를 내도록(듯이) 하고 있습니다.
에러 메시지는, 또 이번이라고 하는 것으로.
참고
Writing documentation for custom M-functions, Part1 | THE SELF-SERVICE-BI BLOG
Chris Webb's BI Blog: Specifying Allowed Values, Sample Values and Descriptions For Function Parameters In Power Query–Part 1 Chris Webb's BI Blog
Reference
이 문제에 관하여(DATEDIFF 복귀 만들기 | Power Query), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanuki_phoenix/items/a0f2151b6f882fd0907a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)