সংক্ষিপ্ত বিবরণ
পাওয়ারবিআইয়ের কাছে এটি জিজ্ঞাসা করা একটি চ্যালেঞ্জিং কাজ, তাই পরিপাটি করার পদ্ধতিটি খুঁজে পাওয়া মুশকিল।
সবচেয়ে বড় সমস্যাটি হ'ল পাওয়ারআইবিআইয়ের ডেটা মডেল চলমান টেলির ধারণাকে সমর্থন করে না - আমরা এক্সেলে এটি করি না কেন। এক্সেলে, একটি কলাম সেই মানগুলির রেফারেন্স দিতে পারে যা একই কলামের 'পূর্ববর্তী সারিতে' দেখা যায় এবং তারপরে আলাদা কলামে তালিকাভুক্ত কিছু 'দৈনিক পরিবর্তন' দ্বারা সামঞ্জস্য হয়।
পাওয়ার বিবিআই কেবলমাত্র সারিগুলির কিছু উপসেটের মধ্যে সমস্ত দৈনিক পরিবর্তনগুলি যোগ করে এটি অনুকরণ করতে পারে। আমরা আমাদের বর্তমান সারিতে তারিখের মানটি নিয়েছি এবং একটি ফিল্টারযুক্ত টেবিল তৈরি করি যেখানে সমস্ত তারিখ বর্তমান সারিটির তারিখের চেয়ে কম থাকে এবং তারপরে সেই উপসেট থেকে সমস্ত দৈনিক পরিবর্তনগুলি সংমিশ্রণ করি। এটি একটি সূক্ষ্ম পার্থক্য বলে মনে হতে পারে, তবে এটি বেশ তাৎপর্যপূর্ণ:
এর অর্থ হ'ল আমাদের চলমান মোট 'ওভাররাইড' করার কোনও উপায় নেই। একমাত্র গণিত যা করা হচ্ছে প্রতিদিনের পরিবর্তনগুলি সহ কলামে ঘটে চলেছে - 'চলমান মোট' ধারণকারী কলামটি কেবল একটি ফলাফল - এটি পরবর্তী কোনও সারির গণনায় কখনও ব্যবহৃত হয় না।
আমাদের অবশ্যই 'রিসেট' ধারণাটি ত্যাগ করতে হবে এবং এর পরিবর্তে একটি কলাম তৈরি করার কল্পনা করতে হবে যাতে একটি 'সমন্বয়' মান রয়েছে। আমাদের সমন্বয় এমন একটি মান হবে যা অন্তর্ভুক্ত করা যেতে পারে যাতে বর্ণিত শর্তগুলি যখন পূরণ করা হয়, মোট দৈনিক ব্যালেন্স এবং সমন্বয়গুলি মোট 1 হয়ে যায়।
যদি আমরা ওপি কর্তৃক প্রদত্ত গণনা করা চালনার দিকে নজর রাখি তবে আমরা দেখতে পাই যে 'কার্যকরী' দিনের ঠিক আগে 'অ-কার্যকরী' দিনে আমাদের চলমান মোটের মান আমাদের প্রয়োজনীয় পরিমাণ দেয় যা বিপরীত হলে শূন্য হয় এবং নিম্নলিখিত প্রতিটি কার্যদিবসে চলমান মোট এক এক করে বাড়িয়ে দিন। এটি আমাদের কাঙ্ক্ষিত আচরণ (একটি সমস্যা যা পরে বর্ণিত হবে)।
ফলাফল

Most Recent Date Prior to Work =
CALCULATE(
Max(Leave[Date]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] = EARLIER(Leave[Date]) -1 && Leave[Type] <> "Working" && Earlier(Leave[Type]) = "Working"
))
এটি সারি এবং ফিল্টার প্রসঙ্গের মধ্যে পার্থক্য এবং এই গণনাটি অনুসরণ করতে EARLIER কীভাবে পরিচালনা করে তা জানতে সহায়তা করে। এই পরিস্থিতিতে আপনি "EARLIER" এর অর্থ 'বর্তমান সারির মানটিকে এই রেফারেন্সটি নির্দেশ করে "হিসাবে ভাবতে পারেন এবং অন্যথায় পুরো টেবিলের জন্য একটি রেফারেন্স" ALLEXCEPT (ছেড়ে দিন, ছেড়ে দিন [আইডি]) ফিরে এসেছে। "এতে উপায়, আমরা বর্তমান সারিটিতে "ওয়ার্কিং" টাইপ এবং পূর্ববর্তী দিনের সারিতে কিছু অন্য ধরণের স্থান রয়েছে আমরা সন্ধান করি।
Most Recent Date Prior to Work Complete =
CALCULATE(
Max(Leave[Most Recent Date Prior to Work]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] <= EARLIER(Leave[Date])
))
এই গণনাটি 'ফিল ডাউন' ধরণের অপারেশনের অনুকরণ করে। এতে বলা হয়েছে, "এই সারিটির তারিখের আগের তারিখের সমস্ত সারিটি দেখার সময়, 'কাজের পূর্বে অতি সাম্প্রতিক তারিখের বৃহত্তম মানটি ফিরিয়ে দিন।"
Daily Balance Adjustment =
CALCULATE(
SUM(Leave[Running Daily Balance]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] = EARLIER(Leave[Most Recent Date Prior to Work Complete])
))
এখন প্রতিটি সারিটির একটি ক্ষেত্র রয়েছে যেখানে আমাদের সামঞ্জস্য হিসাবে প্রতিদিনের ব্যালেন্সটি খুঁজে পেতে কোথায় যেতে হবে তা ব্যাখ্যা করে, আমরা কেবল এটি টেবিল থেকে উপরে দেখতে পারি।
Adjusted Daily Balance = Leave[Running Daily Balance] - Leave[Daily Balance Adjustment]
এবং পরিশেষে আমরা চূড়ান্ত ফলাফলের জন্য আমাদের চলমান মোটের সমন্বয় প্রয়োগ করি।
সমস্যাটি
এই পদ্ধতির ঠিকানাটি ব্যর্থ হয়েছে যে চলমান দৈনিক ভারসাম্য শূন্যের নীচে না থাকলে গণনাটি পুনরায় সেট করা উচিত নয়। আমি এর আগেও ভুল প্রমাণিত হয়েছি, তবে আমি বলব যে এটি কেবলমাত্র ডেক্সেই সম্পন্ন করা যায় না কারণ এটি একটি বিজ্ঞপ্তি নির্ভরতা তৈরি করে। মূলত, আপনি একটি প্রয়োজনীয়তা তৈরি করেছেন: সমষ্টিতে কী অন্তর্ভুক্ত করা উচিত তা নির্ধারণের জন্য সমষ্টিগত মানটি ব্যবহার করুন।
তাই আমি আপনাকে এনে দিতে পারি আশা করি এটা সাহায্য করবে.