تاریخها و زمانها در سؤالها و نمودارهای من اشتباه هستند
شما محاسبات با تاریخها و زمانها انجام میدهید، یا آنها را در نمودارها نمایش میدهید، اما:
- مقادیر به نظر اشتباه میرسند، یا
- مقادیر خلاصه اشتباه هستند.
آیا مشکل به دلیل time zoneها است؟
علت اصلی: تاریخها و زمانها با استفاده از time zoneهای متفاوت ذخیره میشوند، اما برخی یا همه آن time zoneها هنگام انجام محاسبات در نظر گرفته نمیشوند (یعنی، مشکل داده ناسازگار است).
مراحل انجام:
برای رفع این مشکل به پاسخ این سؤالها نیاز دارید:
- time zone صحیح دادهای که فکر میکنید بهاشتباه نمایش داده میشود چیست (یعنی، پاسخ صحیح چیست)؟
- آیا یک تنظیم time zone صریح روی هر timestamp وجود دارد، یا برخی یا همه timestampها بدون time zone ذخیره میشوند؟ بهعنوان مثال،
Dec 1, 2019 00:00:00Z00شامل time zone است (نشان داده شده بعد ازZ)، اماDec 1, 2019ندارد. - سرور پایگاه داده از چه time zone استفاده میکند؟
- متابیس از چه time zone استفاده میکند؟
بعد از اینکه این پاسخها را دارید، به دنبال مواردی مثل این بگردید:
- سؤال یا نمودار شما مقادیر با time zoneهای ناسازگار یا گم شده را مقایسه یا مرتب میکند. بهعنوان مثال، اگر زمانهای departure و arrival یک پرواز در زمان محلی گزارش شدهاند، میتواند به نظر برسد که قبل از اینکه ترک کرده باشد میرسد.
- سؤال شما timestampها با time zoneهای متفاوت را aggregate میکند: بهعنوان مثال، مجموع "روزانه" برای ترافیک وبسایت شما شامل بیش از 24 ساعت داده است چون از تاریخهای محلی از شرق آسیا، اروپا، و آمریکا استفاده میکنید.
بعد از اینکه فکر میکنید یک مشکل را شناسایی کردهاید، drill down کنید تا دقیقاً بفهمید کدام تبدیل time zone باعث مشکل زیربنایی میشود. بهعنوان مثال، فرض کنید به یک time series با مقادیر روزانه نگاه میکنید؛ اگر خطای شما با مجموع هفتگی اتفاق میافتد، میتوانید:
- یک روز خاص انتخاب کنید که میدانید عدد اشتباه است.
- روی نقطه داده در یک نمودار کلیک کنید، یا یک سلول در یک جدول نتیجه، و "See these X." را انتخاب کنید.
- این سؤال را در دو تب دیگر در مرورگر خود باز کنید. فیلترهای تاریخ را تغییر دهید تا یک تب ردیفها در جدول زیربنایی از روز قبلی داشته باشد، و جدول دیگر ردیفها در جدول زیربنایی از روز بعدی داشته باشد.
- بررسی کنید که فیلد تاریخ استفاده شده برای گروهبندی نتیجه در نمایش زیربنایی صحیح است. اگر با آنچه در پایگاه داده ذخیره کردهاید متفاوت است، یا آنچه در ابزار دیگری دارید، پس timestamp بهطور کلی بهاشتباه transform میشود. این اغلب وقتی اتفاق میافتد که از یک تاریخ یا زمان فاقد time zone صریح استفاده میکنید.
- اگر timestampهای زیربنایی صحیح هستند (که باید باشند اگر time zone صریح دارند)، زمانهای فردی احتمالاً در یک time zone متفاوت از آنچه میخواهید به روزها گروهبندی میشوند.
- برای فهمیدن اینکه به کدام time zone transform میشوند، زمانها را روی فیلترهای تاریخ سؤالی که به آن نگاه میکنید با حرکت دادن زمان شروع و تاریخ شروع به عقب بهصورت ساعتی تنظیم کنید تا زمانی که یا عدد صحیح را دریافت کنید یا 12 ساعت به عقب رفته باشید. (اگر هر یک از time zoneهای شما شامل هند، نیوفاندلند، یا حوزه قضایی دیگری با time zone نیمقدم است، ممکن است نیاز داشته باشید این را در افزایشهای نیم ساعته انجام دهید.)
- اگر این کار نمیکند، سعی کنید زمانهای شروع و پایان را به جلو بهصورت ساعتی حرکت دهید تا زمانی که یا عدد صحیح را دریافت کنید یا 12 ساعت به جلو رفته باشید.
- اگر در این مرحله مقدار صحیح را دارید، به این معنی است که time zone شما با تعداد ساعاتی که به صورت دستی فیلتر را به جلو یا عقب تنظیم کردید تبدیل شده است. اگر این مورد است، بررسی کنید که آیا offset که به آن رسیدهاید با time zone data warehouse یا timezone خود متابیس تطبیق دارد.
آیا Report Time Zone بهاشتباه تنظیم شده است؟
علت اصلی: اعداد اشتباه در سؤالها یا نمودارها میتوانند توسط یک mis-match در time zone استفاده شده توسط متابیس و time zone استفاده شده توسط data warehouse ایجاد شوند.
مراحل انجام:
- تنظیم report timezone را از Admin settings > Settings > Localization بررسی کنید.
- اگر از پایگاه دادهای استفاده میکنید که از تنظیم report timezone پشتیبانی نمیکند، مطمئن شوید که time zone متابیس با آن پایگاه داده تطبیق دارد. time zone متابیس time zone Java Virtual Machine است، معمولاً از طریق یک پارامتر
-Duser.timezone<..>یا متغیر محیطیJAVA_TIMEZONEتنظیم میشود؛ دقیقاً نحوهٔ تنظیم آن به نحوهٔ راهاندازی متابیس بستگی دارد. توجه داشته باشید که time zone متابیس روی هیچ پایگاه دادهای که از Report Time Zone استفاده میکند تأثیر نمیگذارد.
آیا کوئریهای SQL تنظیم Reporting Time Zone را رعایت نمیکنند؟
علت اصلی: تنظیمات پایگاه داده. متابیس یک session time zone تنظیم میکند، اما برخی پایگاهدادهها آن را نادیده میگیرند.
مراحل انجام:
با ادمین پایگاه داده خود تماس بگیرید تا تنظیم session time zone را اجازه دهد.
بهعنوان جایگزین، همچنین میتوانید یک reporting time zone را بهطور صریح در کوئری SQL خود تنظیم کنید.
بهعنوان مثال، میتوانید چیزی مثل این با PostgreSQL بنویسید:
SELECT column::TIMESTAMP AT TIME ZONE 'EST' AS column_est
این statement ابتدا ستون را به یک نوع داده timestamp cast میکند، سپس timestamp را به یک نوع داده timestamptz، با time zone 'EST' تبدیل میکند.
آیا تاریخهای بدون time zone صریح به روز دیگری تبدیل میشوند؟
علت اصلی: شما بر اساس یک تاریخ (به جای یک زمان) که فاقد time zone است گروهبندی میکنید.
مراحل انجام:
- به هر فیلد زمانی که سؤال شما استفاده میکند در مرجع مدل داده نگاه کنید و ببینید آیا هر یک از آنها به سادگی یک فیلد "Date" هستند.
- اگر بله، مطمئن شوید که server time zone time zone گزارشدهی را منعکس میکند، چون وقتی یک کوئری روی متابیس اجرا میشود، سرور time zone پیکربندی شده را به آن تاریخ اعمال میکند.
آیا time zoneهای صریح و ضمنی را مخلوط میکنید؟
علت اصلی: شما دو تاریخ را که یکی time zone صریح دارد و دیگری ندارد مقایسه میکنید یا روی آنها محاسبات انجام میدهید.
مراحل انجام:
- این معمولاً با یک سؤال که از چندین فیلد استفاده میکند اتفاق میافتد: بهعنوان مثال، روی یک timestamp فیلتر میکنید و بر اساس دیگری گروهبندی میکنید. time zoneهای هر یک از تاریخها یا زمانهایی که در سؤال خود استفاده میکنید را بررسی کنید.
- باید time zone را بهطور صریح برای هر مقداری که فاقد time zone صریح است تنظیم کنید. این باید یا در یک کوئری SQL یا با transform کردن داده در پایگاه داده خود انجام شود تا اطمینان حاصل شود که هر دو timestamp time zone دارند.